Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3588cb06 authored by Shen Lin's avatar Shen Lin Committed by Fabian Kozynski
Browse files

Fix crash when trying to dismiss dialog

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
parent 5cb3c557
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.controls.ui


import android.annotation.AnyThread
import android.annotation.AnyThread
import android.annotation.MainThread
import android.annotation.MainThread
import android.app.Activity
import android.app.AlertDialog
import android.app.AlertDialog
import android.app.Dialog
import android.app.Dialog
import android.app.PendingIntent
import android.app.PendingIntent
@@ -85,9 +86,17 @@ class ControlActionCoordinatorImpl @Inject constructor(
    }
    }


    override fun closeDialogs() {
    override fun closeDialogs() {
        val isActivityFinishing =
            (activityContext as? Activity)?.let { it.isFinishing || it.isDestroyed }
        if (isActivityFinishing == true) {
            dialog = null
            return
        }
        if (dialog?.isShowing == true) {
            dialog?.dismiss()
            dialog?.dismiss()
            dialog = null
            dialog = null
        }
        }
    }


    override fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) {
    override fun toggle(cvh: ControlViewHolder, templateId: String, isChecked: Boolean) {
        controlsMetricsLogger.touch(cvh, isLocked)
        controlsMetricsLogger.touch(cvh, isLocked)