1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.systemui.qs.tiles; 18 19 import android.content.Context; 20 import android.content.res.Configuration; 21 import android.content.res.TypedArray; 22 import android.graphics.Bitmap; 23 import android.graphics.drawable.Drawable; 24 import android.util.AttributeSet; 25 import android.view.LayoutInflater; 26 import android.view.View; 27 import android.view.ViewGroup; 28 import android.widget.LinearLayout; 29 import android.widget.TextView; 30 31 import androidx.annotation.Nullable; 32 33 import com.android.internal.util.ArrayUtils; 34 import com.android.systemui.FontSizeUtils; 35 import com.android.systemui.R; 36 import com.android.systemui.statusbar.phone.UserAvatarView; 37 38 /** 39 * Displays one user in the {@link UserDetailView} view. 40 */ 41 public class UserDetailItemView extends LinearLayout { 42 43 protected static int layoutResId = R.layout.qs_user_detail_item; 44 45 private UserAvatarView mAvatar; 46 protected TextView mName; 47 private int mActivatedStyle; 48 private int mRegularStyle; 49 private View mRestrictedPadlock; 50 UserDetailItemView(Context context)51 public UserDetailItemView(Context context) { 52 this(context, null); 53 } 54 UserDetailItemView(Context context, @Nullable AttributeSet attrs)55 public UserDetailItemView(Context context, @Nullable AttributeSet attrs) { 56 this(context, attrs, 0); 57 } 58 UserDetailItemView(Context context, @Nullable AttributeSet attrs, int defStyleAttr)59 public UserDetailItemView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 60 this(context, attrs, defStyleAttr, 0); 61 } 62 UserDetailItemView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes)63 public UserDetailItemView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, 64 int defStyleRes) { 65 super(context, attrs, defStyleAttr, defStyleRes); 66 67 final TypedArray a = context.obtainStyledAttributes( 68 attrs, R.styleable.UserDetailItemView, defStyleAttr, defStyleRes); 69 final int N = a.getIndexCount(); 70 for (int i = 0; i < N; i++) { 71 int attr = a.getIndex(i); 72 if (attr == R.styleable.UserDetailItemView_regularTextAppearance) { 73 mRegularStyle = a.getResourceId(attr, 0); 74 } else if (attr == R.styleable.UserDetailItemView_activatedTextAppearance) { 75 mActivatedStyle = a.getResourceId(attr, 0); 76 } 77 } 78 a.recycle(); 79 } 80 convertOrInflate(Context context, View convertView, ViewGroup root)81 public static UserDetailItemView convertOrInflate(Context context, View convertView, 82 ViewGroup root) { 83 if (!(convertView instanceof UserDetailItemView)) { 84 convertView = LayoutInflater.from(context).inflate( 85 layoutResId, root, false); 86 } 87 return (UserDetailItemView) convertView; 88 } 89 bind(String name, Bitmap picture, int userId)90 public void bind(String name, Bitmap picture, int userId) { 91 mName.setText(name); 92 mAvatar.setAvatarWithBadge(picture, userId); 93 } 94 bind(String name, Drawable picture, int userId)95 public void bind(String name, Drawable picture, int userId) { 96 mName.setText(name); 97 mAvatar.setDrawableWithBadge(picture, userId); 98 } 99 setDisabledByAdmin(boolean disabled)100 public void setDisabledByAdmin(boolean disabled) { 101 if (mRestrictedPadlock != null) { 102 mRestrictedPadlock.setVisibility(disabled ? View.VISIBLE : View.GONE); 103 } 104 setEnabled(!disabled); 105 } 106 setEnabled(boolean enabled)107 public void setEnabled(boolean enabled) { 108 super.setEnabled(enabled); 109 mName.setEnabled(enabled); 110 mAvatar.setEnabled(enabled); 111 } 112 113 @Override onFinishInflate()114 protected void onFinishInflate() { 115 mAvatar = findViewById(R.id.user_picture); 116 mName = findViewById(R.id.user_name); 117 118 if (mRegularStyle == 0) { 119 mRegularStyle = mName.getExplicitStyle(); 120 } 121 122 if (mActivatedStyle == 0) { 123 mActivatedStyle = mName.getExplicitStyle(); 124 } 125 126 updateTextStyle(); 127 mRestrictedPadlock = findViewById(R.id.restricted_padlock); 128 } 129 130 @Override onConfigurationChanged(Configuration newConfig)131 protected void onConfigurationChanged(Configuration newConfig) { 132 super.onConfigurationChanged(newConfig); 133 FontSizeUtils.updateFontSize(mName, getFontSizeDimen()); 134 } 135 136 @Override drawableStateChanged()137 protected void drawableStateChanged() { 138 super.drawableStateChanged(); 139 updateTextStyle(); 140 } 141 updateTextStyle()142 private void updateTextStyle() { 143 boolean activated = ArrayUtils.contains(getDrawableState(), android.R.attr.state_activated); 144 mName.setTextAppearance(activated ? mActivatedStyle : mRegularStyle); 145 } 146 147 @Override hasOverlappingRendering()148 public boolean hasOverlappingRendering() { 149 return false; 150 } 151 getFontSizeDimen()152 protected int getFontSizeDimen() { 153 return R.dimen.qs_tile_text_size; 154 } 155 } 156