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
This commit is contained in:
Andras Kloczl
2020-06-01 13:43:23 +00:00
parent 8083336a88
commit 9319d0cec9
8 changed files with 63 additions and 57 deletions

View File

@@ -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>

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -95,14 +95,11 @@ public class UserDetailItemView extends LinearLayout {
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) {

View File

@@ -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 @@ public class UserDetailView extends PseudoGridView {
}
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 @@ public class UserDetailView extends PseudoGridView {
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;

View File

@@ -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 @@ public class KeyguardUserSwitcher {
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 @@ public class KeyguardUserSwitcher {
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) {

View File

@@ -31,6 +31,9 @@ import android.content.IntentFilter;
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 @@ import javax.inject.Singleton;
@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 @@ public class UserSwitcherController implements Dumpable {
}
}
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) {