Fix keyguard and qs user switcher disabled state
- Set grayscale for disabled user's image
- Set gray color for disabled icons
- Set reduced alpha for disabled users
Test: Manual test
Bug: 155896542
Change-Id: I35ffb6382685ff5ed4f53a14fdc77517c83da306
diff --git a/packages/SystemUI/res/color/qs_user_detail_avatar_tint.xml b/packages/SystemUI/res/color/qs_user_detail_avatar_tint.xml
deleted file mode 100644
index 696e9b1..0000000
--- a/packages/SystemUI/res/color/qs_user_detail_avatar_tint.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- ~ Copyright (C) 2016 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License
- -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="?android:attr/textColorPrimary" />
- <item android:color="@android:color/transparent" />
-</selector>
diff --git a/packages/SystemUI/res/layout-sw600dp/keyguard_user_switcher_item.xml b/packages/SystemUI/res/layout-sw600dp/keyguard_user_switcher_item.xml
index 4413b1e..9ce030e 100644
--- a/packages/SystemUI/res/layout-sw600dp/keyguard_user_switcher_item.xml
+++ b/packages/SystemUI/res/layout-sw600dp/keyguard_user_switcher_item.xml
@@ -27,13 +27,13 @@
android:gravity="end|center_vertical"
android:clickable="true"
android:background="@drawable/kg_user_switcher_rounded_bg"
+ sysui:activatedTextAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher"
sysui:regularTextAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher">
<TextView android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="25dp"
android:layout_marginEnd="12dp"
- android:textAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher"
/>
<com.android.systemui.statusbar.phone.UserAvatarView android:id="@+id/user_picture"
android:layout_width="@dimen/kg_framed_avatar_size"
diff --git a/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml b/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml
index 626951c..1cd1a04 100644
--- a/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml
+++ b/packages/SystemUI/res/layout/keyguard_user_switcher_item.xml
@@ -39,8 +39,6 @@
android:layout_width="@dimen/kg_framed_avatar_size"
android:layout_height="@dimen/kg_framed_avatar_size"
android:contentDescription="@null"
- android:backgroundTint="@color/qs_user_detail_avatar_tint"
- android:backgroundTintMode="src_atop"
sysui:frameWidth="@dimen/keyguard_user_switcher_border_thickness"
sysui:framePadding="2.5dp"
sysui:badgeDiameter="18dp"
diff --git a/packages/SystemUI/res/layout/qs_user_detail_item.xml b/packages/SystemUI/res/layout/qs_user_detail_item.xml
index 0608685..cc6c5d3 100644
--- a/packages/SystemUI/res/layout/qs_user_detail_item.xml
+++ b/packages/SystemUI/res/layout/qs_user_detail_item.xml
@@ -30,6 +30,7 @@
android:clipToPadding="false"
android:focusable="true"
android:background="@drawable/ripple_drawable"
+ systemui:activatedTextAppearance="@style/TextAppearance.QS.UserSwitcher"
systemui:regularTextAppearance="@style/TextAppearance.QS.UserSwitcher">
<com.android.systemui.statusbar.phone.UserAvatarView
@@ -37,8 +38,6 @@
android:layout_width="@dimen/qs_framed_avatar_size"
android:layout_height="@dimen/qs_framed_avatar_size"
android:layout_marginBottom="7dp"
- android:backgroundTint="@color/qs_user_detail_avatar_tint"
- android:backgroundTintMode="src_atop"
systemui:frameWidth="6dp"
systemui:badgeDiameter="18dp"
systemui:badgeMargin="1dp"
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java
index aa63b40..6a8c6149 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java
@@ -95,14 +95,11 @@
mAvatar.setDrawableWithBadge(picture, userId);
}
- public void setAvatarEnabled(boolean enabled) {
- mAvatar.setEnabled(enabled);
- }
-
public void setDisabledByAdmin(boolean disabled) {
- mRestrictedPadlock.setVisibility(disabled ? View.VISIBLE : View.GONE);
- mName.setEnabled(!disabled);
- mAvatar.setEnabled(!disabled);
+ if (mRestrictedPadlock != null) {
+ mRestrictedPadlock.setVisibility(disabled ? View.VISIBLE : View.GONE);
+ }
+ setEnabled(!disabled);
}
public void setEnabled(boolean enabled) {
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 89ce125..fba7a22 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java
@@ -16,8 +16,12 @@
package com.android.systemui.qs.tiles;
+import static com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_DISABLED_ALPHA;
+import static com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_ENABLED_ALPHA;
+
import android.content.Context;
import android.content.Intent;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
@@ -94,18 +98,21 @@
}
String name = getName(mContext, item);
if (item.picture == null) {
- v.bind(name, getDrawable(mContext, item), item.resolveId());
+ v.bind(name, getDrawable(mContext, item).mutate(), item.resolveId());
} else {
- v.bind(name, item.picture, item.info.id);
+ Drawable drawable = new BitmapDrawable(v.getResources(), item.picture);
+ drawable.setColorFilter(
+ item.isSwitchToEnabled ? null : getDisabledUserAvatarColorFilter());
+ v.bind(name, drawable, item.info.id);
}
v.setActivated(item.isCurrent);
+ v.setDisabledByAdmin(item.isDisabledByAdmin);
+ v.setEnabled(item.isSwitchToEnabled);
+ v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);
+
if (item.isCurrent) {
mCurrentUserView = v;
}
- v.setDisabledByAdmin(item.isDisabledByAdmin);
- if (!item.isSwitchToEnabled) {
- v.setEnabled(false);
- }
v.setTag(item);
return v;
}
@@ -113,8 +120,14 @@
private static Drawable getDrawable(Context context,
UserSwitcherController.UserRecord item) {
Drawable icon = getIconDrawable(context, item);
- int iconColorRes = item.isCurrent ? R.color.qs_user_switcher_selected_avatar_icon_color
- : R.color.qs_user_switcher_avatar_icon_color;
+ int iconColorRes;
+ if (item.isCurrent) {
+ iconColorRes = R.color.qs_user_switcher_selected_avatar_icon_color;
+ } else if (!item.isSwitchToEnabled) {
+ iconColorRes = R.color.GM2_grey_600;
+ } else {
+ iconColorRes = R.color.qs_user_switcher_avatar_icon_color;
+ }
icon.setTint(context.getResources().getColor(iconColorRes, context.getTheme()));
int bgRes = item.isCurrent ? R.drawable.bg_avatar_selected : R.drawable.qs_bg_avatar;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java
index df3748a..512d0f3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java
@@ -16,11 +16,15 @@
package com.android.systemui.statusbar.policy;
+import static com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_DISABLED_ALPHA;
+import static com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_ENABLED_ALPHA;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.database.DataSetObserver;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
@@ -46,8 +50,6 @@
private static final String TAG = "KeyguardUserSwitcher";
private static final boolean ALWAYS_ON = false;
- private static final float USER_SWITCH_ENABLED_ALPHA = 1.0f;
- private static final float USER_SWITCH_DISABLED_ALPHA = 0.38f;
private final Container mUserSwitcherContainer;
private final KeyguardStatusBarView mStatusBarView;
@@ -286,27 +288,34 @@
if (item.picture == null) {
v.bind(name, getDrawable(mContext, item).mutate(), item.resolveId());
} else {
- v.bind(name, item.picture, item.info.id);
+ Drawable drawable = new BitmapDrawable(v.getResources(), item.picture);
+ drawable.setColorFilter(
+ item.isSwitchToEnabled ? null : getDisabledUserAvatarColorFilter());
+ v.bind(name, drawable, item.info.id);
}
- // Disable the icon if switching is disabled
- v.setAvatarEnabled(item.isSwitchToEnabled);
- convertView.setActivated(item.isCurrent);
+ v.setActivated(item.isCurrent);
+ v.setDisabledByAdmin(item.isDisabledByAdmin);
+ v.setEnabled(item.isSwitchToEnabled);
+ v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);
+
if (item.isCurrent) {
- mCurrentUserView = convertView;
+ mCurrentUserView = v;
}
- convertView.setTag(item);
- convertView.setAlpha(
- item.isCurrent || item.isSwitchToEnabled ? USER_SWITCH_ENABLED_ALPHA
- : USER_SWITCH_DISABLED_ALPHA);
- convertView.setEnabled(item.isSwitchToEnabled);
- return convertView;
+ v.setTag(item);
+ return v;
}
private static Drawable getDrawable(Context context,
UserSwitcherController.UserRecord item) {
Drawable drawable = getIconDrawable(context, item);
- int iconColorRes = item.isCurrent ? R.color.kg_user_switcher_selected_avatar_icon_color
- : R.color.kg_user_switcher_avatar_icon_color;
+ int iconColorRes;
+ if (item.isCurrent) {
+ iconColorRes = R.color.kg_user_switcher_selected_avatar_icon_color;
+ } else if (!item.isSwitchToEnabled) {
+ iconColorRes = R.color.GM2_grey_600;
+ } else {
+ iconColorRes = R.color.kg_user_switcher_avatar_icon_color;
+ }
drawable.setTint(context.getResources().getColor(iconColorRes, context.getTheme()));
if (item.isCurrent) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index db00770..270f248 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -31,6 +31,9 @@
import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.graphics.Bitmap;
+import android.graphics.ColorFilter;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Handler;
@@ -81,6 +84,9 @@
@Singleton
public class UserSwitcherController implements Dumpable {
+ public static final float USER_SWITCH_ENABLED_ALPHA = 1.0f;
+ public static final float USER_SWITCH_DISABLED_ALPHA = 0.38f;
+
private static final String TAG = "UserSwitcherController";
private static final boolean DEBUG = false;
private static final String SIMPLE_USER_SWITCHER_GLOBAL_SETTING =
@@ -674,6 +680,12 @@
}
}
+ protected static ColorFilter getDisabledUserAvatarColorFilter() {
+ ColorMatrix matrix = new ColorMatrix();
+ matrix.setSaturation(0f); // 0 - grayscale
+ return new ColorMatrixColorFilter(matrix);
+ }
+
protected static Drawable getIconDrawable(Context context, UserRecord item) {
int iconRes;
if (item.isAddUser) {