From 20aec82f711e0d16e70a4e6554d1c216a0381baf Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Mon, 24 Oct 2022 13:18:55 -0700 Subject: [PATCH] [User Switcher] dismiss dialog appropriately. Dismisses the dialog in the phone user switcher when an action is selected. This will dismiss the dialog when adding a user, adding a supervised user, and going to manage users settings. Bug: 254704051 Test: Unit tests and open phone user switcher. I spammed the buttons, and observed that the dialog has disappeared. I switched users and created guests. Change-Id: Ib3929c8b7d95c5aed6da0c18c10a2c1f5793d163 --- .../systemui/qs/tiles/UserDetailView.java | 9 +++++ .../policy/BaseUserSwitcherAdapter.kt | 2 +- .../qs/tiles/UserDetailViewAdapterTest.kt | 39 ++++++++++++++----- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index b6b657ec82f69..57a00c9a16205 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -204,6 +204,15 @@ public class UserDetailView extends PseudoGridView { Trace.endSection(); } + @Override + public void onUserListItemClicked(@NonNull UserRecord record, + @Nullable UserSwitchDialogController.DialogShower dialogShower) { + if (dialogShower != null) { + mDialogShower.dismiss(); + } + super.onUserListItemClicked(record, dialogShower); + } + public void linkToViewGroup(ViewGroup viewGroup) { PseudoGridView.ViewGroupAdapterBridge.link(viewGroup, this); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapter.kt index 28a9b97b8ea63..cf4106c508cb2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapter.kt @@ -61,7 +61,7 @@ protected constructor( * animation to and from the parent dialog. */ @JvmOverloads - fun onUserListItemClicked( + open fun onUserListItemClicked( record: UserRecord, dialogShower: DialogShower? = null, ) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt index bc27bbc13f817..3131f60893c74 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt @@ -30,6 +30,7 @@ import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.qs.QSUserSwitcherEvent +import com.android.systemui.qs.user.UserSwitchDialogController import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.user.data.source.UserRecord import org.junit.Assert.assertEquals @@ -41,20 +42,27 @@ import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock -import org.mockito.Mockito.verify import org.mockito.Mockito.`when` +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) @SmallTest class UserDetailViewAdapterTest : SysuiTestCase() { - @Mock private lateinit var mUserSwitcherController: UserSwitcherController - @Mock private lateinit var mParent: ViewGroup - @Mock private lateinit var mUserDetailItemView: UserDetailItemView - @Mock private lateinit var mOtherView: View - @Mock private lateinit var mInflatedUserDetailItemView: UserDetailItemView - @Mock private lateinit var mLayoutInflater: LayoutInflater + @Mock + private lateinit var mUserSwitcherController: UserSwitcherController + @Mock + private lateinit var mParent: ViewGroup + @Mock + private lateinit var mUserDetailItemView: UserDetailItemView + @Mock + private lateinit var mOtherView: View + @Mock + private lateinit var mInflatedUserDetailItemView: UserDetailItemView + @Mock + private lateinit var mLayoutInflater: LayoutInflater private var falsingManagerFake: FalsingManagerFake = FalsingManagerFake() private lateinit var adapter: UserDetailView.Adapter private lateinit var uiEventLogger: UiEventLoggerFake @@ -67,10 +75,12 @@ class UserDetailViewAdapterTest : SysuiTestCase() { mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE, mLayoutInflater) `when`(mLayoutInflater.inflate(anyInt(), any(ViewGroup::class.java), anyBoolean())) - .thenReturn(mInflatedUserDetailItemView) + .thenReturn(mInflatedUserDetailItemView) `when`(mParent.context).thenReturn(mContext) - adapter = UserDetailView.Adapter(mContext, mUserSwitcherController, uiEventLogger, - falsingManagerFake) + adapter = UserDetailView.Adapter( + mContext, mUserSwitcherController, uiEventLogger, + falsingManagerFake + ) mPicture = UserIcons.convertToBitmap(mContext.getDrawable(R.drawable.ic_avatar_user)) } @@ -145,6 +155,15 @@ class UserDetailViewAdapterTest : SysuiTestCase() { assertNull(adapter.users.find { it.isManageUsers }) } + @Test + fun clickDismissDialog() { + val shower: UserSwitchDialogController.DialogShower = + mock(UserSwitchDialogController.DialogShower::class.java) + adapter.injectDialogShower(shower) + adapter.onUserListItemClicked(createUserRecord(current = true, guest = false), shower) + verify(shower).dismiss() + } + private fun createUserRecord(current: Boolean, guest: Boolean) = UserRecord( UserInfo(0 /* id */, "name", 0 /* flags */),