[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
This commit is contained in:
Aaron Liu
2022-10-24 13:18:55 -07:00
parent fd6c30921f
commit 20aec82f71
3 changed files with 39 additions and 11 deletions

View File

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

View File

@@ -61,7 +61,7 @@ protected constructor(
* animation to and from the parent dialog.
*/
@JvmOverloads
fun onUserListItemClicked(
open fun onUserListItemClicked(
record: UserRecord,
dialogShower: DialogShower? = null,
) {

View File

@@ -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 */),