Loading quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +0 −8 Original line number Diff line number Diff line Loading @@ -51,7 +51,6 @@ import android.annotation.IdRes; import android.annotation.LayoutRes; import android.content.pm.ActivityInfo.Config; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; Loading Loading @@ -725,13 +724,6 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mPropertyHolders.add(new StatePropertyHolder( mBackButtonAlpha.get(ALPHA_INDEX_SUW), flags -> (flags & FLAG_IME_VISIBLE) == 0)); // TODO(b/210906568) Dark intensity is currently not propagated during setup, so set // it based on dark theme for now. int mode = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; boolean isDarkTheme = mode == Configuration.UI_MODE_NIGHT_YES; mTaskbarNavButtonDarkIntensity.updateValue(isDarkTheme ? 0 : 1); } else if (isInKidsMode) { int iconSize = res.getDimensionPixelSize( R.dimen.taskbar_icon_size_kids); Loading quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +7 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,13 @@ public class TaskbarControllers { // Roundness property for round corner above taskbar . private final AnimatedFloat mCornerRoundness = new AnimatedFloat(this::updateCornerRoundness); /** * Want to add a new controller? Don't forget to: * * Call init * * Call onDestroy * * Add to mControllersToLog * * Add tests by adding this controller to TaskbarBaseTestCase.kt and extending that class */ public TaskbarControllers(TaskbarActivityContext taskbarActivityContext, TaskbarDragController taskbarDragController, TaskbarNavButtonController navButtonController, Loading quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.taskbar import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController import com.android.launcher3.taskbar.overlay.TaskbarOverlayController import com.android.systemui.shared.rotation.RotationButtonController import org.junit.Before import org.mockito.Mock import org.mockito.MockitoAnnotations /** * Helper class to extend to get access to all controllers. * Gotta be careful of your relationship with this class though, it can be quite... controlling. */ abstract class TaskbarBaseTestCase { @Mock lateinit var taskbarActivityContext: TaskbarActivityContext @Mock lateinit var taskbarDragController: TaskbarDragController @Mock lateinit var navButtonController: TaskbarNavButtonController @Mock lateinit var navbarButtonsViewController: NavbarButtonsViewController @Mock lateinit var rotationButtonController: RotationButtonController @Mock lateinit var taskbarDragLayerController: TaskbarDragLayerController @Mock lateinit var taskbarScrimViewController: TaskbarScrimViewController @Mock lateinit var taskbarViewController: TaskbarViewController @Mock lateinit var taskbarUnfoldAnimationController: TaskbarUnfoldAnimationController @Mock lateinit var taskbarKeyguardController: TaskbarKeyguardController @Mock lateinit var stashedHandleViewController: StashedHandleViewController @Mock lateinit var taskbarStashController: TaskbarStashController @Mock lateinit var taskbarEduController: TaskbarEduController @Mock lateinit var taskbarAutohideSuspendController: TaskbarAutohideSuspendController @Mock lateinit var taskbarPopupController: TaskbarPopupController @Mock lateinit var taskbarForceVisibleImmersiveController: TaskbarForceVisibleImmersiveController @Mock lateinit var taskbarAllAppsController: TaskbarAllAppsController @Mock lateinit var taskbarInsetsController: TaskbarInsetsController @Mock lateinit var voiceInteractionWindowController: VoiceInteractionWindowController @Mock lateinit var taskbarRecentAppsController: TaskbarRecentAppsController @Mock lateinit var taskbarTranslationController: TaskbarTranslationController @Mock lateinit var taskbarOverlayController: TaskbarOverlayController lateinit var mTaskbarControllers: TaskbarControllers @Before open fun setup() { /* * NOTE: Mocking of controllers that are written in Kotlin won't work since their methods * are final by default (and should not be changed only for tests), meaning unmockable. * Womp, womp woooommmmppp. * If you want to mock one of those methods, you need to make a parent interface that * includes that method to allow mocking it. */ MockitoAnnotations.initMocks(this) mTaskbarControllers = TaskbarControllers( taskbarActivityContext, taskbarDragController, navButtonController, navbarButtonsViewController, rotationButtonController, taskbarDragLayerController, taskbarViewController, taskbarScrimViewController, taskbarUnfoldAnimationController, taskbarKeyguardController, stashedHandleViewController, taskbarStashController, taskbarEduController, taskbarAutohideSuspendController, taskbarPopupController, taskbarForceVisibleImmersiveController, taskbarOverlayController, taskbarAllAppsController, taskbarInsetsController, voiceInteractionWindowController, taskbarTranslationController, taskbarRecentAppsController ) } } No newline at end of file quickstep/tests/src/com/android/launcher3/taskbar/TaskbarKeyguardControllerTest.kt 0 → 100644 +150 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.taskbar import android.app.KeyguardManager import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DOZING import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED import org.junit.Before import org.junit.Test import org.mockito.Mock import org.mockito.Mockito.anyBoolean import org.mockito.Mockito.never import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever class TaskbarKeyguardControllerTest : TaskbarBaseTestCase() { @Mock lateinit var baseDragLayer: TaskbarDragLayer @Mock lateinit var keyguardManager: KeyguardManager @Before override fun setup() { super.setup() whenever(taskbarActivityContext.getSystemService(KeyguardManager::class.java)) .thenReturn(keyguardManager) whenever(baseDragLayer.childCount).thenReturn(0) whenever(taskbarActivityContext.dragLayer).thenReturn(baseDragLayer) taskbarKeyguardController = TaskbarKeyguardController(taskbarActivityContext) taskbarKeyguardController.init(navbarButtonsViewController) } @Test fun uninterestingFlags_noActions() { setFlags(0) verify(navbarButtonsViewController, never()).setKeyguardVisible(anyBoolean(), anyBoolean()) } @Test fun keyguardShowing() { setFlags(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( true /*isKeyguardVisible*/, false /*isKeyguardOccluded*/) } @Test fun dozingShowing() { setFlags(SYSUI_STATE_DEVICE_DOZING) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( true /*isKeyguardVisible*/, false /*isKeyguardOccluded*/) } @Test fun keyguardOccluded() { setFlags(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( false /*isKeyguardVisible*/, true /*isKeyguardOccluded*/) } @Test fun keyguardOccludedAndDozing() { setFlags(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED.or(SYSUI_STATE_DEVICE_DOZING)) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( true /*isKeyguardVisible*/, true /*isKeyguardOccluded*/) } @Test fun deviceInsecure_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(false) setFlags(SYSUI_STATE_OVERVIEW_DISABLED .or(SYSUI_STATE_HOME_DISABLED) .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) } @Test fun deviceSecure_showBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_OVERVIEW_DISABLED .or(SYSUI_STATE_HOME_DISABLED) .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(true) } @Test fun homeShowing_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_OVERVIEW_DISABLED .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) } @Test fun overviewShowing_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_HOME_DISABLED .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) } @Test fun backDisabled_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_BACK_DISABLED .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) // back disabled along with home and overview setFlags(SYSUI_STATE_BACK_DISABLED .or(SYSUI_STATE_HOME_DISABLED) .or(SYSUI_STATE_OVERVIEW_DISABLED) .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(2)).setBackForBouncer(false) } private fun setFlags(flags: Int) { taskbarKeyguardController.updateStateForSysuiFlags(flags) } } No newline at end of file Loading
quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +0 −8 Original line number Diff line number Diff line Loading @@ -51,7 +51,6 @@ import android.annotation.IdRes; import android.annotation.LayoutRes; import android.content.pm.ActivityInfo.Config; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; Loading Loading @@ -725,13 +724,6 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mPropertyHolders.add(new StatePropertyHolder( mBackButtonAlpha.get(ALPHA_INDEX_SUW), flags -> (flags & FLAG_IME_VISIBLE) == 0)); // TODO(b/210906568) Dark intensity is currently not propagated during setup, so set // it based on dark theme for now. int mode = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; boolean isDarkTheme = mode == Configuration.UI_MODE_NIGHT_YES; mTaskbarNavButtonDarkIntensity.updateValue(isDarkTheme ? 0 : 1); } else if (isInKidsMode) { int iconSize = res.getDimensionPixelSize( R.dimen.taskbar_icon_size_kids); Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +7 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,13 @@ public class TaskbarControllers { // Roundness property for round corner above taskbar . private final AnimatedFloat mCornerRoundness = new AnimatedFloat(this::updateCornerRoundness); /** * Want to add a new controller? Don't forget to: * * Call init * * Call onDestroy * * Add to mControllersToLog * * Add tests by adding this controller to TaskbarBaseTestCase.kt and extending that class */ public TaskbarControllers(TaskbarActivityContext taskbarActivityContext, TaskbarDragController taskbarDragController, TaskbarNavButtonController navButtonController, Loading
quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.taskbar import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController import com.android.launcher3.taskbar.overlay.TaskbarOverlayController import com.android.systemui.shared.rotation.RotationButtonController import org.junit.Before import org.mockito.Mock import org.mockito.MockitoAnnotations /** * Helper class to extend to get access to all controllers. * Gotta be careful of your relationship with this class though, it can be quite... controlling. */ abstract class TaskbarBaseTestCase { @Mock lateinit var taskbarActivityContext: TaskbarActivityContext @Mock lateinit var taskbarDragController: TaskbarDragController @Mock lateinit var navButtonController: TaskbarNavButtonController @Mock lateinit var navbarButtonsViewController: NavbarButtonsViewController @Mock lateinit var rotationButtonController: RotationButtonController @Mock lateinit var taskbarDragLayerController: TaskbarDragLayerController @Mock lateinit var taskbarScrimViewController: TaskbarScrimViewController @Mock lateinit var taskbarViewController: TaskbarViewController @Mock lateinit var taskbarUnfoldAnimationController: TaskbarUnfoldAnimationController @Mock lateinit var taskbarKeyguardController: TaskbarKeyguardController @Mock lateinit var stashedHandleViewController: StashedHandleViewController @Mock lateinit var taskbarStashController: TaskbarStashController @Mock lateinit var taskbarEduController: TaskbarEduController @Mock lateinit var taskbarAutohideSuspendController: TaskbarAutohideSuspendController @Mock lateinit var taskbarPopupController: TaskbarPopupController @Mock lateinit var taskbarForceVisibleImmersiveController: TaskbarForceVisibleImmersiveController @Mock lateinit var taskbarAllAppsController: TaskbarAllAppsController @Mock lateinit var taskbarInsetsController: TaskbarInsetsController @Mock lateinit var voiceInteractionWindowController: VoiceInteractionWindowController @Mock lateinit var taskbarRecentAppsController: TaskbarRecentAppsController @Mock lateinit var taskbarTranslationController: TaskbarTranslationController @Mock lateinit var taskbarOverlayController: TaskbarOverlayController lateinit var mTaskbarControllers: TaskbarControllers @Before open fun setup() { /* * NOTE: Mocking of controllers that are written in Kotlin won't work since their methods * are final by default (and should not be changed only for tests), meaning unmockable. * Womp, womp woooommmmppp. * If you want to mock one of those methods, you need to make a parent interface that * includes that method to allow mocking it. */ MockitoAnnotations.initMocks(this) mTaskbarControllers = TaskbarControllers( taskbarActivityContext, taskbarDragController, navButtonController, navbarButtonsViewController, rotationButtonController, taskbarDragLayerController, taskbarViewController, taskbarScrimViewController, taskbarUnfoldAnimationController, taskbarKeyguardController, stashedHandleViewController, taskbarStashController, taskbarEduController, taskbarAutohideSuspendController, taskbarPopupController, taskbarForceVisibleImmersiveController, taskbarOverlayController, taskbarAllAppsController, taskbarInsetsController, voiceInteractionWindowController, taskbarTranslationController, taskbarRecentAppsController ) } } No newline at end of file
quickstep/tests/src/com/android/launcher3/taskbar/TaskbarKeyguardControllerTest.kt 0 → 100644 +150 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.taskbar import android.app.KeyguardManager import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BACK_DISABLED import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DOZING import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED import org.junit.Before import org.junit.Test import org.mockito.Mock import org.mockito.Mockito.anyBoolean import org.mockito.Mockito.never import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever class TaskbarKeyguardControllerTest : TaskbarBaseTestCase() { @Mock lateinit var baseDragLayer: TaskbarDragLayer @Mock lateinit var keyguardManager: KeyguardManager @Before override fun setup() { super.setup() whenever(taskbarActivityContext.getSystemService(KeyguardManager::class.java)) .thenReturn(keyguardManager) whenever(baseDragLayer.childCount).thenReturn(0) whenever(taskbarActivityContext.dragLayer).thenReturn(baseDragLayer) taskbarKeyguardController = TaskbarKeyguardController(taskbarActivityContext) taskbarKeyguardController.init(navbarButtonsViewController) } @Test fun uninterestingFlags_noActions() { setFlags(0) verify(navbarButtonsViewController, never()).setKeyguardVisible(anyBoolean(), anyBoolean()) } @Test fun keyguardShowing() { setFlags(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( true /*isKeyguardVisible*/, false /*isKeyguardOccluded*/) } @Test fun dozingShowing() { setFlags(SYSUI_STATE_DEVICE_DOZING) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( true /*isKeyguardVisible*/, false /*isKeyguardOccluded*/) } @Test fun keyguardOccluded() { setFlags(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( false /*isKeyguardVisible*/, true /*isKeyguardOccluded*/) } @Test fun keyguardOccludedAndDozing() { setFlags(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED.or(SYSUI_STATE_DEVICE_DOZING)) verify(navbarButtonsViewController, times(1)).setKeyguardVisible( true /*isKeyguardVisible*/, true /*isKeyguardOccluded*/) } @Test fun deviceInsecure_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(false) setFlags(SYSUI_STATE_OVERVIEW_DISABLED .or(SYSUI_STATE_HOME_DISABLED) .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) } @Test fun deviceSecure_showBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_OVERVIEW_DISABLED .or(SYSUI_STATE_HOME_DISABLED) .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(true) } @Test fun homeShowing_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_OVERVIEW_DISABLED .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) } @Test fun overviewShowing_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_HOME_DISABLED .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) } @Test fun backDisabled_hideBackForBouncer() { whenever(keyguardManager.isDeviceSecure).thenReturn(true) setFlags(SYSUI_STATE_BACK_DISABLED .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(1)).setBackForBouncer(false) // back disabled along with home and overview setFlags(SYSUI_STATE_BACK_DISABLED .or(SYSUI_STATE_HOME_DISABLED) .or(SYSUI_STATE_OVERVIEW_DISABLED) .or(SYSUI_STATE_BOUNCER_SHOWING)) verify(navbarButtonsViewController, times(2)).setBackForBouncer(false) } private fun setFlags(flags: Int) { taskbarKeyguardController.updateStateForSysuiFlags(flags) } } No newline at end of file