mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
Merge "Add unit tests for TaskbarKeyguardController" into tm-qpr-dev am: 8d98dd2905
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/21021735 Change-Id: Ibef64055af917cd865d364f27a99e319c695bbe7 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* 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
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user