• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 static com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_DISABLED_ALPHA;
20 import static com.android.systemui.statusbar.policy.UserSwitcherController.USER_SWITCH_ENABLED_ALPHA;
21 
22 import android.content.Context;
23 import android.content.Intent;
24 import android.graphics.drawable.Drawable;
25 import android.graphics.drawable.LayerDrawable;
26 import android.util.AttributeSet;
27 import android.view.LayoutInflater;
28 import android.view.View;
29 import android.view.ViewGroup;
30 
31 import com.android.internal.logging.MetricsLogger;
32 import com.android.internal.logging.UiEventLogger;
33 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
34 import com.android.settingslib.RestrictedLockUtils;
35 import com.android.settingslib.drawable.CircleFramedDrawable;
36 import com.android.systemui.R;
37 import com.android.systemui.qs.PseudoGridView;
38 import com.android.systemui.qs.QSUserSwitcherEvent;
39 import com.android.systemui.statusbar.policy.UserSwitcherController;
40 
41 /**
42  * Quick settings detail view for user switching.
43  */
44 public class UserDetailView extends PseudoGridView {
45 
46     protected Adapter mAdapter;
47 
UserDetailView(Context context, AttributeSet attrs)48     public UserDetailView(Context context, AttributeSet attrs) {
49         super(context, attrs);
50     }
51 
inflate(Context context, ViewGroup parent, boolean attach)52     public static UserDetailView inflate(Context context, ViewGroup parent, boolean attach) {
53         return (UserDetailView) LayoutInflater.from(context).inflate(
54                 R.layout.qs_user_detail, parent, attach);
55     }
56 
createAndSetAdapter(UserSwitcherController controller, UiEventLogger uiEventLogger)57     public void createAndSetAdapter(UserSwitcherController controller,
58             UiEventLogger uiEventLogger) {
59         mAdapter = new Adapter(mContext, controller, uiEventLogger);
60         ViewGroupAdapterBridge.link(this, mAdapter);
61     }
62 
refreshAdapter()63     public void refreshAdapter() {
64         mAdapter.refresh();
65     }
66 
67     public static class Adapter extends UserSwitcherController.BaseUserAdapter
68             implements OnClickListener {
69 
70         private final Context mContext;
71         protected UserSwitcherController mController;
72         private View mCurrentUserView;
73         private final UiEventLogger mUiEventLogger;
74 
Adapter(Context context, UserSwitcherController controller, UiEventLogger uiEventLogger)75         public Adapter(Context context, UserSwitcherController controller,
76                 UiEventLogger uiEventLogger) {
77             super(controller);
78             mContext = context;
79             mController = controller;
80             mUiEventLogger = uiEventLogger;
81         }
82 
83         @Override
getView(int position, View convertView, ViewGroup parent)84         public View getView(int position, View convertView, ViewGroup parent) {
85             UserSwitcherController.UserRecord item = getItem(position);
86             return createUserDetailItemView(convertView, parent, item);
87         }
88 
createUserDetailItemView(View convertView, ViewGroup parent, UserSwitcherController.UserRecord item)89         public UserDetailItemView createUserDetailItemView(View convertView, ViewGroup parent,
90                 UserSwitcherController.UserRecord item) {
91             UserDetailItemView v = UserDetailItemView.convertOrInflate(
92                     mContext, convertView, parent);
93             if (!item.isCurrent || item.isGuest) {
94                 v.setOnClickListener(this);
95             } else {
96                 v.setOnClickListener(null);
97                 v.setClickable(false);
98             }
99             String name = getName(mContext, item);
100             if (item.picture == null) {
101                 v.bind(name, getDrawable(mContext, item).mutate(), item.resolveId());
102             } else {
103                 int avatarSize =
104                         (int) mContext.getResources().getDimension(R.dimen.qs_framed_avatar_size);
105                 Drawable drawable = new CircleFramedDrawable(item.picture, avatarSize);
106                 drawable.setColorFilter(
107                         item.isSwitchToEnabled ? null : getDisabledUserAvatarColorFilter());
108                 v.bind(name, drawable, item.info.id);
109             }
110             v.setActivated(item.isCurrent);
111             v.setDisabledByAdmin(item.isDisabledByAdmin);
112             v.setEnabled(item.isSwitchToEnabled);
113             v.setAlpha(v.isEnabled() ? USER_SWITCH_ENABLED_ALPHA : USER_SWITCH_DISABLED_ALPHA);
114 
115             if (item.isCurrent) {
116                 mCurrentUserView = v;
117             }
118             v.setTag(item);
119             return v;
120         }
121 
getDrawable(Context context, UserSwitcherController.UserRecord item)122         private static Drawable getDrawable(Context context,
123                 UserSwitcherController.UserRecord item) {
124             Drawable icon = getIconDrawable(context, item);
125             int iconColorRes;
126             if (item.isCurrent) {
127                 iconColorRes = R.color.qs_user_switcher_selected_avatar_icon_color;
128             } else if (!item.isSwitchToEnabled) {
129                 iconColorRes = R.color.GM2_grey_600;
130             } else {
131                 iconColorRes = R.color.qs_user_switcher_avatar_icon_color;
132             }
133             icon.setTint(context.getResources().getColor(iconColorRes, context.getTheme()));
134 
135             int bgRes = item.isCurrent ? R.drawable.bg_avatar_selected : R.drawable.qs_bg_avatar;
136             Drawable bg = context.getDrawable(bgRes);
137             LayerDrawable drawable = new LayerDrawable(new Drawable[]{bg, icon});
138             return drawable;
139         }
140 
141         @Override
onClick(View view)142         public void onClick(View view) {
143             UserSwitcherController.UserRecord tag =
144                     (UserSwitcherController.UserRecord) view.getTag();
145             if (tag.isDisabledByAdmin) {
146                 final Intent intent = RestrictedLockUtils.getShowAdminSupportDetailsIntent(
147                         mContext, tag.enforcedAdmin);
148                 mController.startActivity(intent);
149             } else if (tag.isSwitchToEnabled) {
150                 MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER);
151                 mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH);
152                 if (!tag.isAddUser && !tag.isRestricted && !tag.isDisabledByAdmin) {
153                     if (mCurrentUserView != null) {
154                         mCurrentUserView.setActivated(false);
155                     }
156                     view.setActivated(true);
157                 }
158                 switchTo(tag);
159             }
160         }
161     }
162 }
163