Fix user icon visibility bugs
Remove call that made user icon VISIBLE whenever view was attached. This
fixes issue where lock screen user icon was shown in QS after phone was
unlocked.
Also, remove call that made user icon GONE whenever the current user is
null. This could cause the user switcher icon to erroneously disappear.
Instead, handle the null case by drawing a default user icon.
Additionally,
- Remove unused dependency on UserManager
- Add fallback TalkBack announcement if current user is null so it does
not announce "unlabeled, double-tap to choose user." Instead it will
now announce "Switch user, double-tap to choose user."
- Remove redundant/unnecessary calls in getCurrentUserIcon
- mCurrentUser.isCurrentUser is redundant
- mCurrentUser.isSwitchToEnabled should not affect how icon is drawn
- Call to mAdapter.getIconDrawable is unnecessary because all it
does is check for whether it should drawn an "Add user" icon, but
the lock screen user icon should never be an "Add user" icon
Test: With config_keyguard_user_switch_opens_qs_details=true,
disable lock screen for owner, then run adb shell am restart.
Open QS, ensure that user icon isn't shown in the upper right.
Fixes: 190062147
Change-Id: Ieb9a9274af452b69c0a916afb3ef0e177cab8d0d
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java
index 1f1817c..5e70d0d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java
@@ -21,7 +21,7 @@
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
-import android.os.UserManager;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -76,7 +76,6 @@
private final KeyguardVisibilityHelper mKeyguardVisibilityHelper;
private final KeyguardUserDetailAdapter mUserDetailAdapter;
private NotificationPanelViewController mNotificationPanelViewController;
- private UserManager mUserManager;
UserSwitcherController.UserRecord mCurrentUser;
// State info for the user switch and keyguard
@@ -115,7 +114,6 @@
UserAvatarView view,
Context context,
@Main Resources resources,
- UserManager userManager,
ScreenLifecycle screenLifecycle,
UserSwitcherController userSwitcherController,
KeyguardStateController keyguardStateController,
@@ -129,7 +127,6 @@
if (DEBUG) Log.d(TAG, "New KeyguardQsUserSwitchController");
mContext = context;
mResources = resources;
- mUserManager = userManager;
mScreenLifecycle = screenLifecycle;
mUserSwitcherController = userSwitcherController;
mKeyguardStateController = keyguardStateController;
@@ -227,47 +224,39 @@
return;
}
- if (mCurrentUser == null) {
- mView.setVisibility(View.GONE);
- return;
- }
-
- mView.setVisibility(View.VISIBLE);
-
- String currentUserName = mCurrentUser.info.name;
String contentDescription = null;
-
- if (!TextUtils.isEmpty(currentUserName)) {
+ if (mCurrentUser != null && mCurrentUser.info != null && !TextUtils.isEmpty(
+ mCurrentUser.info.name)) {
+ // If we know the current user's name, have TalkBack to announce "Signed in as [user
+ // name]" when the icon is selected
+ contentDescription = mContext.getString(R.string.accessibility_quick_settings_user,
+ mCurrentUser.info.name);
+ } else {
+ // As a fallback, have TalkBack announce "Switch user"
contentDescription = mContext.getString(
- R.string.accessibility_quick_settings_user,
- currentUserName);
+ R.string.accessibility_multi_user_switch_switcher);
}
if (!TextUtils.equals(mView.getContentDescription(), contentDescription)) {
mView.setContentDescription(contentDescription);
}
- mView.setDrawableWithBadge(getCurrentUserIcon().mutate(), mCurrentUser.resolveId());
+ int userId = mCurrentUser != null ? mCurrentUser.resolveId() : UserHandle.USER_NULL;
+ mView.setDrawableWithBadge(getCurrentUserIcon().mutate(), userId);
}
Drawable getCurrentUserIcon() {
Drawable drawable;
- if (mCurrentUser.picture == null) {
- if (mCurrentUser.isCurrent && mCurrentUser.isGuest) {
+ if (mCurrentUser == null || mCurrentUser.picture == null) {
+ if (mCurrentUser != null && mCurrentUser.isGuest) {
drawable = mContext.getDrawable(R.drawable.ic_avatar_guest_user);
} else {
- drawable = mAdapter.getIconDrawable(mContext, mCurrentUser);
+ drawable = mContext.getDrawable(R.drawable.ic_avatar_user);
}
- int iconColorRes;
- if (mCurrentUser.isSwitchToEnabled) {
- iconColorRes = R.color.kg_user_switcher_avatar_icon_color;
- } else {
- iconColorRes = R.color.kg_user_switcher_restricted_avatar_icon_color;
- }
+ int iconColorRes = R.color.kg_user_switcher_avatar_icon_color;
drawable.setTint(mResources.getColor(iconColorRes, mContext.getTheme()));
} else {
- int avatarSize =
- (int) mResources.getDimension(R.dimen.kg_framed_avatar_size);
+ int avatarSize = (int) mResources.getDimension(R.dimen.kg_framed_avatar_size);
drawable = new CircleFramedDrawable(mCurrentUser.picture, avatarSize);
}