From 3588cb06ba73bd42f47bc3ea69b58bcfffa7a92f Mon Sep 17 00:00:00 2001 From: Shen Lin Date: Sat, 24 Sep 2022 01:13:30 +0800 Subject: Fix crash when trying to dismiss dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calling Dialog.dismiss() requires a safe condition, including that dialog is shown,and activity is neither finishing nor destroying, so we should add a precondition check here to avoid crash. Bug: 248562161 Test: manual and atest Change-Id: I87de2cd05680815d4bb4e80ac1e0d6e2e4a685f7 --- .../systemui/controls/ui/ControlActionCoordinatorImpl.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt index 8472ca0731d7..041ed1d557d7 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinatorImpl.kt @@ -18,6 +18,7 @@ package com.android.systemui.controls.ui import android.annotation.AnyThread import android.annotation.MainThread +import android.app.Activity import android.app.AlertDialog import android.app.Dialog import android.app.PendingIntent @@ -85,8 +86,16 @@ class ControlActionCoordinatorImpl @Inject constructor( } override fun closeDialogs() { - dialog?.dismiss() - dialog = null + val isActivityFinishing = + (activityContext as? Activity)?.let { it.isFinishing || it.isDestroyed } + if (isActivityFinishing == true) { + dialog = null + return + } + if (dialog?.isShowing == true) { + dialog?.dismiss() + dialog = null + } } override fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) { -- cgit v1.2.3-59-g8ed1b