From dd623d85a9e9655a809ee1f6972e9d61c12b6021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabi=C3=A1n=20Kozynski?= Date: Mon, 24 Apr 2023 15:14:33 -0400 Subject: [PATCH 1/2] Add flags for background launch. With BAL restrictions, these flags are needed to be able to launch the TaskView. Test: manual, using test app Test: atest DetailDialogTest Fixes: 276785257 Change-Id: Iba8138d83e8053ee60343ae64cba47b27b5f5fd9 --- .../systemui/controls/ui/DetailDialog.kt | 5 +++- .../systemui/controls/ui/DetailDialogTest.kt | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt index 5d608c3e3f9e8..3bc5d44671e52 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt @@ -19,6 +19,7 @@ package com.android.systemui.controls.ui import android.app.ActivityOptions import android.app.ActivityTaskManager import android.app.ActivityTaskManager.INVALID_TASK_ID +import android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED import android.app.Dialog import android.app.PendingIntent import android.content.ComponentName @@ -96,7 +97,9 @@ class DetailDialog( activityContext, 0 /* enterResId */, 0 /* exitResId */ - ) + ).setPendingIntentBackgroundActivityStartMode(MODE_BACKGROUND_ACTIVITY_START_ALLOWED) + options.isPendingIntentBackgroundActivityLaunchAllowedByPermission = true + taskView.startActivity( pendingIntent, fillInIntent, diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt index c3506e80966b8..54142590b4533 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/DetailDialogTest.kt @@ -16,6 +16,7 @@ package com.android.systemui.controls.ui +import android.app.ActivityOptions import android.app.PendingIntent import android.testing.AndroidTestingRunner import android.testing.TestableLooper @@ -24,7 +25,10 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastSender import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.mockito.argumentCaptor +import com.android.systemui.util.mockito.capture import com.android.wm.shell.taskview.TaskView +import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -69,6 +73,25 @@ class DetailDialogTest : SysuiTestCase() { verify(taskView).startActivity(eq(pendingIntent), any(), any(), any()) } + @Test + fun testActivityOptionsAllowBal() { + // GIVEN the dialog is created with a PendingIntent + val dialog = createDialog(pendingIntent) + + // WHEN the TaskView is initialized + dialog.stateCallback.onInitialized() + + val optionsCaptor = argumentCaptor() + + // THEN the ActivityOptions have the correct flags + verify(taskView).startActivity(any(), any(), capture(optionsCaptor), any()) + + assertThat(optionsCaptor.value.pendingIntentBackgroundActivityStartMode) + .isEqualTo(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) + assertThat(optionsCaptor.value.isPendingIntentBackgroundActivityLaunchAllowedByPermission) + .isTrue() + } + private fun createDialog(pendingIntent: PendingIntent): DetailDialog { return DetailDialog( mContext, From 9db0ca4e84fafb978120661f211a627aa7941e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabi=C3=A1n=20Kozynski?= Date: Mon, 24 Apr 2023 16:35:17 -0400 Subject: [PATCH 2/2] Don't dismiss DetailDialog if activity is finishing If the task is released when the containing activity is finishing, do not dismiss the dialog. It will be dismissed by itself. See b/248562161. Test: dialog is dismissed Fixes: 210990128 Change-Id: I7c3a44cff6e0dab7f23205a8d454a293800af3b3 --- .../src/com/android/systemui/controls/ui/DetailDialog.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt index 3bc5d44671e52..7cbd1f53612b6 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/DetailDialog.kt @@ -16,6 +16,7 @@ package com.android.systemui.controls.ui +import android.app.Activity import android.app.ActivityOptions import android.app.ActivityTaskManager import android.app.ActivityTaskManager.INVALID_TASK_ID @@ -217,6 +218,12 @@ class DetailDialog( if (!isShowing()) return taskView.release() + val isActivityFinishing = + (activityContext as? Activity)?.let { it.isFinishing || it.isDestroyed } + if (isActivityFinishing == true) { + // Don't dismiss the dialog if the activity is finishing, it will get removed + return + } super.dismiss() } }