Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt +9 −4 Original line number Diff line number Diff line Loading @@ -19,10 +19,10 @@ package com.android.systemui.statusbar.phone.userswitcher import android.content.Intent import android.os.UserHandle import android.view.View import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.user.UserSwitchDialogController import com.android.systemui.user.UserSwitcherActivity Loading @@ -39,7 +39,8 @@ class StatusBarUserSwitcherControllerImpl @Inject constructor( private val featureController: StatusBarUserSwitcherFeatureController, private val userSwitcherDialogController: UserSwitchDialogController, private val featureFlags: FeatureFlags, private val activityStarter: ActivityStarter private val activityStarter: ActivityStarter, private val falsingManager: FalsingManager ) : ViewController<StatusBarUserSwitcherContainer>(view), StatusBarUserSwitcherController { private val listener = object : CurrentUserChipInfoUpdatedListener { Loading @@ -58,16 +59,20 @@ class StatusBarUserSwitcherControllerImpl @Inject constructor( } } override fun onViewAttached() { public override fun onViewAttached() { tracker.addCallback(listener) featureController.addCallback(featureFlagListener) mView.setOnClickListener { view: View -> if (falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { return@setOnClickListener } if (featureFlags.isEnabled(Flags.FULL_SCREEN_USER_SWITCHER)) { val intent = Intent(context, UserSwitcherActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) activityStarter.startActivity(intent, true /* dismissShade */, ActivityLaunchAnimator.Controller.fromView(view, null), null /* ActivityLaunchAnimator.Controller */, true /* showOverlockscreenwhenlocked */, UserHandle.SYSTEM) } else { userSwitcherDialogController.showDialog(view) Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerTest.kt 0 → 100644 +103 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 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.systemui.statusbar.phone.userswitcher import android.content.Intent import android.os.UserHandle import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.View import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.user.UserSwitchDialogController import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) @TestableLooper.RunWithLooper @SmallTest class StatusBarUserSwitcherControllerTest : SysuiTestCase() { @Mock private lateinit var tracker: StatusBarUserInfoTracker @Mock private lateinit var featureController: StatusBarUserSwitcherFeatureController @Mock private lateinit var userSwitcherDialogController: UserSwitchDialogController @Mock private lateinit var featureFlags: FeatureFlags @Mock private lateinit var activityStarter: ActivityStarter @Mock private lateinit var falsingManager: FalsingManager private lateinit var statusBarUserSwitcherContainer: StatusBarUserSwitcherContainer private lateinit var controller: StatusBarUserSwitcherControllerImpl @Before fun setup() { MockitoAnnotations.initMocks(this) statusBarUserSwitcherContainer = StatusBarUserSwitcherContainer(mContext, null) statusBarUserSwitcherContainer controller = StatusBarUserSwitcherControllerImpl( statusBarUserSwitcherContainer, tracker, featureController, userSwitcherDialogController, featureFlags, activityStarter, falsingManager ) controller.init() controller.onViewAttached() } @Test fun testFalsingManager() { statusBarUserSwitcherContainer.callOnClick() verify(falsingManager).isFalseTap(FalsingManager.LOW_PENALTY) } @Test fun testStartActivity() { `when`(featureFlags.isEnabled(Flags.FULL_SCREEN_USER_SWITCHER)).thenReturn(false) statusBarUserSwitcherContainer.callOnClick() verify(userSwitcherDialogController).showDialog(any(View::class.java)) `when`(featureFlags.isEnabled(Flags.FULL_SCREEN_USER_SWITCHER)).thenReturn(true) statusBarUserSwitcherContainer.callOnClick() verify(activityStarter).startActivity(any(Intent::class.java), eq(true) /* dismissShade */, eq(null) /* animationController */, eq(true) /* showOverLockscreenWhenLocked */, eq(UserHandle.SYSTEM)) } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt +9 −4 Original line number Diff line number Diff line Loading @@ -19,10 +19,10 @@ package com.android.systemui.statusbar.phone.userswitcher import android.content.Intent import android.os.UserHandle import android.view.View import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.user.UserSwitchDialogController import com.android.systemui.user.UserSwitcherActivity Loading @@ -39,7 +39,8 @@ class StatusBarUserSwitcherControllerImpl @Inject constructor( private val featureController: StatusBarUserSwitcherFeatureController, private val userSwitcherDialogController: UserSwitchDialogController, private val featureFlags: FeatureFlags, private val activityStarter: ActivityStarter private val activityStarter: ActivityStarter, private val falsingManager: FalsingManager ) : ViewController<StatusBarUserSwitcherContainer>(view), StatusBarUserSwitcherController { private val listener = object : CurrentUserChipInfoUpdatedListener { Loading @@ -58,16 +59,20 @@ class StatusBarUserSwitcherControllerImpl @Inject constructor( } } override fun onViewAttached() { public override fun onViewAttached() { tracker.addCallback(listener) featureController.addCallback(featureFlagListener) mView.setOnClickListener { view: View -> if (falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { return@setOnClickListener } if (featureFlags.isEnabled(Flags.FULL_SCREEN_USER_SWITCHER)) { val intent = Intent(context, UserSwitcherActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) activityStarter.startActivity(intent, true /* dismissShade */, ActivityLaunchAnimator.Controller.fromView(view, null), null /* ActivityLaunchAnimator.Controller */, true /* showOverlockscreenwhenlocked */, UserHandle.SYSTEM) } else { userSwitcherDialogController.showDialog(view) Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerTest.kt 0 → 100644 +103 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 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.systemui.statusbar.phone.userswitcher import android.content.Intent import android.os.UserHandle import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.View import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.user.UserSwitchDialogController import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) @TestableLooper.RunWithLooper @SmallTest class StatusBarUserSwitcherControllerTest : SysuiTestCase() { @Mock private lateinit var tracker: StatusBarUserInfoTracker @Mock private lateinit var featureController: StatusBarUserSwitcherFeatureController @Mock private lateinit var userSwitcherDialogController: UserSwitchDialogController @Mock private lateinit var featureFlags: FeatureFlags @Mock private lateinit var activityStarter: ActivityStarter @Mock private lateinit var falsingManager: FalsingManager private lateinit var statusBarUserSwitcherContainer: StatusBarUserSwitcherContainer private lateinit var controller: StatusBarUserSwitcherControllerImpl @Before fun setup() { MockitoAnnotations.initMocks(this) statusBarUserSwitcherContainer = StatusBarUserSwitcherContainer(mContext, null) statusBarUserSwitcherContainer controller = StatusBarUserSwitcherControllerImpl( statusBarUserSwitcherContainer, tracker, featureController, userSwitcherDialogController, featureFlags, activityStarter, falsingManager ) controller.init() controller.onViewAttached() } @Test fun testFalsingManager() { statusBarUserSwitcherContainer.callOnClick() verify(falsingManager).isFalseTap(FalsingManager.LOW_PENALTY) } @Test fun testStartActivity() { `when`(featureFlags.isEnabled(Flags.FULL_SCREEN_USER_SWITCHER)).thenReturn(false) statusBarUserSwitcherContainer.callOnClick() verify(userSwitcherDialogController).showDialog(any(View::class.java)) `when`(featureFlags.isEnabled(Flags.FULL_SCREEN_USER_SWITCHER)).thenReturn(true) statusBarUserSwitcherContainer.callOnClick() verify(activityStarter).startActivity(any(Intent::class.java), eq(true) /* dismissShade */, eq(null) /* animationController */, eq(true) /* showOverLockscreenWhenLocked */, eq(UserHandle.SYSTEM)) } }