summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Siarhei Vishniakou <svv@google.com> 2019-03-05 10:05:01 -0800
committer Siarhei Vishniakou <svv@google.com> 2019-03-06 11:07:22 -0800
commitd0de1cd170b84c1c02f9c8e39bb88b764d4bd90f (patch)
treede0a3b0dd2d99726d26dfae0cc6a1c02cd6f3672
parenta11fb3bafe213d4e536ad708aa3809951194a0f7 (diff)
Add a null check for getWindow()
Protect against crash surfaced by monkey, where it seems that the window of the dialog is no longer present. If not present, don't need to post dismiss runnable. Bug: 124327419 Test: adb shell monkey -p com.google.android.GoogleCamera -s 999 -v 20000 Change-Id: Ic03b8501bb73725e04544fcb2397532be531988e
-rw-r--r--core/java/android/preference/DialogPreference.java25
1 files changed, 20 insertions, 5 deletions
diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java
index 4b5a7b40fe44..a615f2dfc9df 100644
--- a/core/java/android/preference/DialogPreference.java
+++ b/core/java/android/preference/DialogPreference.java
@@ -342,16 +342,31 @@ public abstract class DialogPreference extends Preference implements
dialog.show();
}
+ /**
+ * Get the DecorView.
+ * @return the DecorView for the current dialog window, if it exists.
+ * If the window does not exist, null is returned.
+ */
+ private View getDecorView() {
+ if (mDialog != null && mDialog.getWindow() != null) {
+ return mDialog.getWindow().getDecorView();
+ }
+ return null;
+ }
+
void postDismiss() {
removeDismissCallbacks();
- View decorView = mDialog.getWindow().getDecorView();
- decorView.post(mDismissRunnable);
+ View decorView = getDecorView();
+ if (decorView != null) {
+ // If decorView is null, dialog was already dismissed
+ decorView.post(mDismissRunnable);
+ }
}
private void removeDismissCallbacks() {
- if (mDialog != null && mDialog.getWindow() != null
- && mDialog.getWindow().getDecorView() != null) {
- mDialog.getWindow().getDecorView().removeCallbacks(mDismissRunnable);
+ View decorView = getDecorView();
+ if (decorView != null) {
+ decorView.removeCallbacks(mDismissRunnable);
}
}