Fixes clicking on foreground user in the switcher.
When foreground user is clicked, keyguard should be dismissed. If other user is clicked, we should switch to that user.
Bug: 77653809
Bug: 77808082
Test: Switcher tested in emulator and mojave by clicking on foreground and non-foreground users.
Change-Id: I72e56f8e157419ea05f155be647c11e6d98bde2c
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
index fb525f7..5a02d18 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
@@ -37,19 +37,20 @@
private final UserGridRecyclerView mUserGridView;
private final ProgressBar mSwitchingUsers;
private final int mShortAnimDuration;
+ private final StatusBar mStatusBar;
private boolean mShowing;
public FullscreenUserSwitcher(StatusBar statusBar, ViewStub containerStub, Context context) {
+ mStatusBar = statusBar;
mParent = containerStub.inflate();
mContainer = mParent.findViewById(R.id.container);
mUserGridView = mContainer.findViewById(R.id.user_grid);
- mUserGridView.setStatusBar(statusBar);
GridLayoutManager layoutManager = new GridLayoutManager(context,
context.getResources().getInteger(R.integer.user_fullscreen_switcher_num_col));
mUserGridView.setLayoutManager(layoutManager);
mUserGridView.buildAdapter();
- mUserGridView.setUserSelectionListener(record -> toggleSwitchInProgress(true));
+ mUserGridView.setUserSelectionListener(this::onUserSelected);
mShortAnimDuration = mContainer.getResources()
.getInteger(android.R.integer.config_shortAnimTime);
@@ -57,8 +58,35 @@
mSwitchingUsers = mParent.findViewById(R.id.switching_users);
}
+ public void show() {
+ if (mShowing) {
+ return;
+ }
+ mShowing = true;
+ mParent.setVisibility(View.VISIBLE);
+ }
+
+ public void hide() {
+ mShowing = false;
+ toggleSwitchInProgress(false);
+ mParent.setVisibility(View.GONE);
+ }
+
public void onUserSwitched(int newUserId) {
- mUserGridView.onUserSwitched(newUserId);
+ mParent.post(this::showOfflineAuthUi);
+ }
+
+ private void onUserSelected(UserGridRecyclerView.UserRecord record) {
+ if (record.mIsForeground) {
+ showOfflineAuthUi();
+ return;
+ }
+ toggleSwitchInProgress(true);
+ }
+
+ private void showOfflineAuthUi() {
+ mStatusBar.executeRunnableDismissingKeyguard(null/* runnable */, null /* cancelAction */,
+ true /* dismissShade */, true /* afterKeyguardGone */, true /* deferred */);
}
private void toggleSwitchInProgress(boolean inProgress) {
@@ -91,18 +119,4 @@
}
});
}
-
- public void show() {
- if (mShowing) {
- return;
- }
- mShowing = true;
- mParent.setVisibility(View.VISIBLE);
- }
-
- public void hide() {
- mShowing = false;
- toggleSwitchInProgress(false);
- mParent.setVisibility(View.GONE);
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
index 9c9d3ee..5ad08ac 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java
@@ -38,8 +38,6 @@
import com.android.settingslib.users.UserManagerHelper;
import com.android.systemui.R;
-import com.android.systemui.qs.car.CarQSFragment;
-import com.android.systemui.statusbar.phone.StatusBar;
import java.util.ArrayList;
import java.util.List;
@@ -50,8 +48,6 @@
*/
public class UserGridRecyclerView extends RecyclerView implements
UserManagerHelper.OnUsersUpdateListener {
-
- private StatusBar mStatusBar;
private UserSelectionListener mUserSelectionListener;
private UserAdapter mAdapter;
private UserManagerHelper mUserManagerHelper;
@@ -92,28 +88,21 @@
super.setAdapter(mAdapter);
}
- public void setStatusBar(@Nullable StatusBar statusBar) {
- mStatusBar = statusBar;
- }
-
private List<UserRecord> createUserRecords(List<UserInfo> userInfoList) {
List<UserRecord> userRecords = new ArrayList<>();
for (UserInfo userInfo : userInfoList) {
- boolean isCurrent = false;
- if (ActivityManager.getCurrentUser() == userInfo.id) {
- isCurrent = true;
- }
+ boolean isForeground = mUserManagerHelper.getForegroundUserId() == userInfo.id;
UserRecord record = new UserRecord(userInfo, false /* isGuest */,
- false /* isAddUser */, isCurrent);
+ false /* isAddUser */, isForeground);
userRecords.add(record);
}
- // Add guest user record if the current user is not a guest
+ // Add guest user record if the foreground user is not a guest
if (!mUserManagerHelper.foregroundUserIsGuestUser()) {
userRecords.add(addGuestUserRecord());
}
- // Add add user record if the current user can add users
+ // Add add user record if the foreground user can add users
if (mUserManagerHelper.foregroundUserCanAddUsers()) {
userRecords.add(addUserRecord());
}
@@ -128,7 +117,7 @@
UserInfo userInfo = new UserInfo();
userInfo.name = mContext.getString(R.string.car_guest);
return new UserRecord(userInfo, true /* isGuest */,
- false /* isAddUser */, false /* isCurrent */);
+ false /* isAddUser */, false /* isForeground */);
}
/**
@@ -138,26 +127,13 @@
UserInfo userInfo = new UserInfo();
userInfo.name = mContext.getString(R.string.car_add_user);
return new UserRecord(userInfo, false /* isGuest */,
- true /* isAddUser */, false /* isCurrent */);
- }
-
- public void onUserSwitched(int newUserId) {
- // Bring up security view after user switch is completed.
- post(this::showOfflineAuthUi);
+ true /* isAddUser */, false /* isForeground */);
}
public void setUserSelectionListener(UserSelectionListener userSelectionListener) {
mUserSelectionListener = userSelectionListener;
}
- void showOfflineAuthUi() {
- // TODO: Show keyguard UI in-place.
- if (mStatusBar != null) {
- mStatusBar.executeRunnableDismissingKeyguard(null/* runnable */, null /* cancelAction */,
- true /* dismissShade */, true /* afterKeyguardGone */, true /* deferred */);
- }
- }
-
@Override
public void onUsersUpdate() {
mAdapter.clearUsers();
@@ -332,21 +308,21 @@
/**
* Object wrapper class for the userInfo. Use it to distinguish if a profile is a
- * guest profile, add user profile, or a current user.
+ * guest profile, add user profile, or the foreground user.
*/
public static final class UserRecord {
public final UserInfo mInfo;
public final boolean mIsGuest;
public final boolean mIsAddUser;
- public final boolean mIsCurrent;
+ public final boolean mIsForeground;
public UserRecord(UserInfo userInfo, boolean isGuest, boolean isAddUser,
- boolean isCurrent) {
+ boolean isForeground) {
mInfo = userInfo;
mIsGuest = isGuest;
mIsAddUser = isAddUser;
- mIsCurrent = isCurrent;
+ mIsForeground = isForeground;
}
}