diff options
| author | 2022-10-24 13:18:55 -0700 | |
|---|---|---|
| committer | 2022-10-24 13:33:24 -0700 | |
| commit | 20aec82f711e0d16e70a4e6554d1c216a0381baf (patch) | |
| tree | 99e52c70540159b0309cd5b19f985e346c57774d | |
| parent | fd6c30921faf8267901351371374f19f90f3332f (diff) | |
[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
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 b6b657ec82f6..57a00c9a1620 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 28a9b97b8ea6..cf4106c508cb 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 bc27bbc13f81..3131f60893c7 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 */), |