diff options
| author | 2019-03-05 10:05:01 -0800 | |
|---|---|---|
| committer | 2019-03-06 11:07:22 -0800 | |
| commit | d0de1cd170b84c1c02f9c8e39bb88b764d4bd90f (patch) | |
| tree | de0a3b0dd2d99726d26dfae0cc6a1c02cd6f3672 | |
| parent | a11fb3bafe213d4e536ad708aa3809951194a0f7 (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.java | 25 |
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); } } |