Persist warning alert dialog across rotations.
Before, this dialog would disappear if it was up while the screen was
rotated. Now it persists.
Bug: 33000434
Test: manual - built in google3 and tried on my device.
Change-Id: I9b790f6c7042fbc0317b3b25de51c5fcf1889106
diff --git a/src/com/android/ex/chips/RecipientEditTextView.java b/src/com/android/ex/chips/RecipientEditTextView.java
index 5322908..22d01cc 100644
--- a/src/com/android/ex/chips/RecipientEditTextView.java
+++ b/src/com/android/ex/chips/RecipientEditTextView.java
@@ -25,6 +25,7 @@
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
@@ -44,6 +45,7 @@
import android.graphics.drawable.StateListDrawable;
import android.os.AsyncTask;
import android.os.Build;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -130,6 +132,8 @@
/*package*/ static final int CHIP_LIMIT = 2;
private static final int MAX_CHIPS_PARSED = 50;
+ public static final String STATE_TEXT_VIEW = "savedTextView";
+ public static final String STATE_CURRENT_WARNING_TEXT = "savedCurrentWarningText";
private int mUnselectedChipTextColor;
private int mUnselectedChipBackgroundColor;
@@ -248,8 +252,10 @@
// domain. We will show a warning for these addresses in the recipient chips.
private Set<String> mUntrustedAddresses = new HashSet<>();
- private String mWarningText = "";
+ private String mWarningTextTemplate = "";
private String mWarningTitle = "";
+ // Text of the warning dialog currently being displayed. Empty if no dialog currently displayed.
+ private String mCurrentWarningText = "";
/**
* Sets this recipient edit text view to display warning icons in chips for the given addresses.
@@ -257,19 +263,19 @@
* @param untrustedAddresses The addresses to display warning icons for.
* @param warningIcon The icon to show for each address.
* @param warningIconHeight Height of the warning icon in
- * @param warningText Text to display when warning icon is clicked.
+ * @param warningTextTemplate Text to display when warning icon is clicked.
* @param warningTitle Title to display for text when warning icon is clicked.
*/
public void setUntrustedAddressWarning(
Set<String> untrustedAddresses,
Bitmap warningIcon,
int warningIconHeight,
- String warningText,
+ String warningTextTemplate,
String warningTitle) {
mUntrustedAddresses = untrustedAddresses;
mWarningIcon = warningIcon;
mWarningIconHeight = warningIconHeight;
- mWarningText = warningText;
+ mWarningTextTemplate = warningTextTemplate;
mWarningTitle = warningTitle;
}
@@ -542,10 +548,17 @@
@Override
public void onRestoreInstanceState(Parcelable state) {
+ Bundle savedInstanceState = (Bundle) state;
if (!TextUtils.isEmpty(getText())) {
super.onRestoreInstanceState(null);
} else {
- super.onRestoreInstanceState(state);
+ super.onRestoreInstanceState(
+ savedInstanceState.getParcelable(STATE_TEXT_VIEW));
+ }
+ String savedWarningText = savedInstanceState.getString(
+ STATE_CURRENT_WARNING_TEXT);
+ if (!savedWarningText.isEmpty()) {
+ showWarningDialog(savedWarningText);
}
}
@@ -553,7 +566,10 @@
public Parcelable onSaveInstanceState() {
// If the user changes orientation while they are editing, just roll back the selection.
clearSelectedChip();
- return super.onSaveInstanceState();
+ Bundle savedInstanceState = new Bundle();
+ savedInstanceState.putParcelable(STATE_TEXT_VIEW, super.onSaveInstanceState());
+ savedInstanceState.putString(STATE_CURRENT_WARNING_TEXT, mCurrentWarningText);
+ return savedInstanceState;
}
/**
@@ -1916,12 +1932,9 @@
outOfDomainWarningBounds.right,
outOfDomainWarningBounds.bottom + getTotalPaddingTop());
if (touchOutOfDomainWarning.contains(event.getX(), event.getY())) {
- new AlertDialog.Builder(RecipientEditTextView.this.getContext())
- .setTitle(mWarningTitle)
- .setMessage(
- String.format(mWarningText,
- currentChip.getEntry().getDestination()))
- .show();
+ String warningText = String.format(mWarningTextTemplate,
+ currentChip.getEntry().getDestination());
+ showWarningDialog(warningText);
touchedWarningIcon = true;
}
}
@@ -1968,6 +1981,20 @@
return handled;
}
+ private void showWarningDialog(String warningText) {
+ mCurrentWarningText = warningText;
+ new AlertDialog.Builder(RecipientEditTextView.this.getContext())
+ .setTitle(mWarningTitle)
+ .setOnDismissListener(new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ mCurrentWarningText = "";
+ }
+ })
+ .setMessage(mCurrentWarningText)
+ .show();
+ }
+
private void showAlternates(final DrawableRecipientChip currentChip,
final ListPopupWindow alternatesPopup) {
new AsyncTask<Void, Void, ListAdapter>() {