summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerTest.kt103
2 files changed, 112 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt
index 62549a70897b..0d52f46e571f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherController.kt
@@ -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
@@ -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 {
@@ -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)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerTest.kt
new file mode 100644
index 000000000000..37c0f3621b6f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerTest.kt
@@ -0,0 +1,103 @@
+/*
+ * 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))
+ }
+}