diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt index 92607c6101af2..d73c85b0803b5 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt @@ -328,6 +328,13 @@ class ControlsUiControllerImpl @Inject constructor ( @VisibleForTesting internal fun startRemovingApp(componentName: ComponentName, appName: CharSequence) { + activityStarter.dismissKeyguardThenExecute({ + showAppRemovalDialog(componentName, appName) + true + }, null, true) + } + + private fun showAppRemovalDialog(componentName: ComponentName, appName: CharSequence) { removeAppDialog?.cancel() removeAppDialog = dialogsFactory.createRemoveAppDialog(context, appName) { shouldRemove -> if (!shouldRemove || !controlsController.get().removeFavorites(componentName)) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt index 1a620d266e420..fcd6568de9f32 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt @@ -70,7 +70,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.clearInvocations +import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doReturn +import org.mockito.Mockito.isNull import org.mockito.Mockito.never import org.mockito.Mockito.spy import org.mockito.Mockito.verify @@ -104,6 +106,9 @@ class ControlsUiControllerImplTest : SysuiTestCase() { private lateinit var parent: FrameLayout private lateinit var underTest: ControlsUiControllerImpl + private var isKeyguardDismissed: Boolean = true + private var isRemoveAppDialogCreated: Boolean = false + @Before fun setup() { MockitoAnnotations.initMocks(this) @@ -140,11 +145,23 @@ class ControlsUiControllerImplTest : SysuiTestCase() { authorizedPanelsRepository, preferredPanelRepository, featureFlags, - ControlsDialogsFactory { fakeDialogController.dialog }, + ControlsDialogsFactory { + isRemoveAppDialogCreated = true + fakeDialogController.dialog + }, dumpManager, ) `when`(userTracker.userId).thenReturn(0) `when`(userTracker.userHandle).thenReturn(UserHandle.of(0)) + doAnswer { + if (isKeyguardDismissed) { + it.getArgument(0).onDismiss() + } else { + it.getArgument(1)?.run() + } + } + .whenever(activityStarter) + .dismissKeyguardThenExecute(any(), isNull(), any()) } @Test @@ -413,6 +430,26 @@ class ControlsUiControllerImplTest : SysuiTestCase() { assertThat(preferredPanelRepository.getSelectedComponent()).isNull() } + @Test + fun testKeyguardRemovingAppsNotShowingDialog() { + isKeyguardDismissed = false + val componentName = ComponentName(context, "cls") + whenever(controlsController.removeFavorites(eq(componentName))).thenReturn(true) + val panel = SelectedItem.PanelItem("App name", componentName) + preferredPanelRepository.setSelectedComponent( + SelectedComponentRepository.SelectedComponent(panel) + ) + underTest.show(parent, {}, context) + underTest.startRemovingApp(componentName, "Test App") + + assertThat(isRemoveAppDialogCreated).isFalse() + verify(controlsController, never()).removeFavorites(eq(componentName)) + assertThat(underTest.getPreferredSelectedItem(emptyList())).isEqualTo(panel) + assertThat(preferredPanelRepository.shouldAddDefaultComponent()).isTrue() + assertThat(preferredPanelRepository.getSelectedComponent()) + .isEqualTo(SelectedComponentRepository.SelectedComponent(panel)) + } + @Test fun testCancelRemovingAppsDoesntRemoveFavorite() { val componentName = ComponentName(context, "cls")