Merge "User Switcher: Polish tap on user switcher." into tm-dev am: c7ce201c2c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17298455

Change-Id: Ia8be14f8454404404d1b00614903aa7f15519844
This commit is contained in:
Aaron Liu
2022-03-23 19:24:48 +00:00
committed by Automerger Merge Worker
2 changed files with 112 additions and 4 deletions

View File

@@ -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)

View File

@@ -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))
}
}