• 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.statusbar.phone;
18 
19 import android.content.Context;
20 import android.content.Intent;
21 import android.os.UserHandle;
22 import android.os.UserManager;
23 import android.provider.ContactsContract;
24 import android.text.TextUtils;
25 import android.util.AttributeSet;
26 import android.view.View;
27 import android.view.ViewGroup;
28 import android.view.accessibility.AccessibilityEvent;
29 import android.view.accessibility.AccessibilityNodeInfo;
30 import android.widget.Button;
31 import android.widget.FrameLayout;
32 
33 import com.android.systemui.R;
34 import com.android.systemui.qs.QSPanel;
35 import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
36 import com.android.systemui.statusbar.policy.UserSwitcherController;
37 
38 /**
39  * Container for image of the multi user switcher (tappable).
40  */
41 public class MultiUserSwitch extends FrameLayout implements View.OnClickListener {
42 
43     private QSPanel mQsPanel;
44     private KeyguardUserSwitcher mKeyguardUserSwitcher;
45     private boolean mKeyguardMode;
46     private UserSwitcherController.BaseUserAdapter mUserListener;
47 
48     final UserManager mUserManager;
49 
50     private final int[] mTmpInt2 = new int[2];
51 
52     private UserSwitcherController mUserSwitcherController;
53 
MultiUserSwitch(Context context, AttributeSet attrs)54     public MultiUserSwitch(Context context, AttributeSet attrs) {
55         super(context, attrs);
56         mUserManager = UserManager.get(getContext());
57     }
58 
59     @Override
onFinishInflate()60     protected void onFinishInflate() {
61         super.onFinishInflate();
62         setOnClickListener(this);
63         refreshContentDescription();
64     }
65 
setQsPanel(QSPanel qsPanel)66     public void setQsPanel(QSPanel qsPanel) {
67         mQsPanel = qsPanel;
68         setUserSwitcherController(qsPanel.getHost().getUserSwitcherController());
69     }
70 
hasMultipleUsers()71     public boolean hasMultipleUsers() {
72         if (mUserListener == null) {
73             return false;
74         }
75         return mUserListener.getCount() != 0;
76     }
77 
setUserSwitcherController(UserSwitcherController userSwitcherController)78     public void setUserSwitcherController(UserSwitcherController userSwitcherController) {
79         mUserSwitcherController = userSwitcherController;
80         registerListener();
81         refreshContentDescription();
82     }
83 
setKeyguardUserSwitcher(KeyguardUserSwitcher keyguardUserSwitcher)84     public void setKeyguardUserSwitcher(KeyguardUserSwitcher keyguardUserSwitcher) {
85         mKeyguardUserSwitcher = keyguardUserSwitcher;
86     }
87 
setKeyguardMode(boolean keyguardShowing)88     public void setKeyguardMode(boolean keyguardShowing) {
89         mKeyguardMode = keyguardShowing;
90         registerListener();
91     }
92 
registerListener()93     private void registerListener() {
94         if (mUserManager.isUserSwitcherEnabled() && mUserListener == null) {
95 
96             final UserSwitcherController controller = mUserSwitcherController;
97             if (controller != null) {
98                 mUserListener = new UserSwitcherController.BaseUserAdapter(controller) {
99                     @Override
100                     public void notifyDataSetChanged() {
101                         refreshContentDescription();
102                     }
103 
104                     @Override
105                     public View getView(int position, View convertView, ViewGroup parent) {
106                         return null;
107                     }
108                 };
109                 refreshContentDescription();
110             }
111         }
112     }
113 
114     @Override
onClick(View v)115     public void onClick(View v) {
116         if (mUserManager.isUserSwitcherEnabled()) {
117             if (mKeyguardMode) {
118                 if (mKeyguardUserSwitcher != null) {
119                     mKeyguardUserSwitcher.show(true /* animate */);
120                 }
121             } else if (mQsPanel != null && mUserSwitcherController != null) {
122                 View center = getChildCount() > 0 ? getChildAt(0) : this;
123 
124                 center.getLocationInWindow(mTmpInt2);
125                 mTmpInt2[0] += center.getWidth() / 2;
126                 mTmpInt2[1] += center.getHeight() / 2;
127 
128                 mQsPanel.showDetailAdapter(true,
129                         mUserSwitcherController.userDetailAdapter,
130                         mTmpInt2);
131             }
132         } else {
133             if (mQsPanel != null) {
134                 Intent intent = ContactsContract.QuickContact.composeQuickContactsIntent(
135                         getContext(), v, ContactsContract.Profile.CONTENT_URI,
136                         ContactsContract.QuickContact.MODE_LARGE, null);
137                 mQsPanel.getHost().startActivityDismissingKeyguard(intent);
138             }
139         }
140     }
141 
142     @Override
setClickable(boolean clickable)143     public void setClickable(boolean clickable) {
144         super.setClickable(clickable);
145         refreshContentDescription();
146     }
147 
refreshContentDescription()148     private void refreshContentDescription() {
149         String currentUser = null;
150         if (mUserManager.isUserSwitcherEnabled()
151                 && mUserSwitcherController != null) {
152             currentUser = mUserSwitcherController.getCurrentUserName(mContext);
153         }
154 
155         String text = null;
156 
157         if (!TextUtils.isEmpty(currentUser)) {
158             text = mContext.getString(
159                     R.string.accessibility_quick_settings_user,
160                     currentUser);
161         }
162 
163         if (!TextUtils.equals(getContentDescription(), text)) {
164             setContentDescription(text);
165         }
166     }
167 
168     @Override
onInitializeAccessibilityEvent(AccessibilityEvent event)169     public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
170         super.onInitializeAccessibilityEvent(event);
171         event.setClassName(Button.class.getName());
172     }
173 
174     @Override
onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info)175     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
176         super.onInitializeAccessibilityNodeInfo(info);
177         info.setClassName(Button.class.getName());
178     }
179 
180     @Override
hasOverlappingRendering()181     public boolean hasOverlappingRendering() {
182         return false;
183     }
184 
185 }
186