Add keyguard before app removal in Home Controls
Test: manual
Test: atest ControlsUiControllerImplTest
Fixes: 280338980
Change-Id: Icb8244c6f09e275f10423447e05b0cd1a88402bf
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 92607c6..d73c85b 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 @@
@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 1a620d2..fcd6568 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.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 @@
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 @@
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<ActivityStarter.OnDismissAction>(0).onDismiss()
+ } else {
+ it.getArgument<Runnable?>(1)?.run()
+ }
+ }
+ .whenever(activityStarter)
+ .dismissKeyguardThenExecute(any(), isNull(), any())
}
@Test
@@ -414,6 +431,26 @@
}
@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")
whenever(controlsController.removeFavorites(eq(componentName))).thenReturn(true)