Home | History | Annotate | Download | only in phone
      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 
     54     public MultiUserSwitch(Context context, AttributeSet attrs) {
     55         super(context, attrs);
     56         mUserManager = UserManager.get(getContext());
     57     }
     58 
     59     @Override
     60     protected void onFinishInflate() {
     61         super.onFinishInflate();
     62         setOnClickListener(this);
     63         refreshContentDescription();
     64     }
     65 
     66     public void setQsPanel(QSPanel qsPanel) {
     67         mQsPanel = qsPanel;
     68         setUserSwitcherController(qsPanel.getHost().getUserSwitcherController());
     69     }
     70 
     71     public boolean hasMultipleUsers() {
     72         if (mUserListener == null) {
     73             return false;
     74         }
     75         return mUserListener.getCount() != 0;
     76     }
     77 
     78     public void setUserSwitcherController(UserSwitcherController userSwitcherController) {
     79         mUserSwitcherController = userSwitcherController;
     80         registerListener();
     81         refreshContentDescription();
     82     }
     83 
     84     public void setKeyguardUserSwitcher(KeyguardUserSwitcher keyguardUserSwitcher) {
     85         mKeyguardUserSwitcher = keyguardUserSwitcher;
     86     }
     87 
     88     public void setKeyguardMode(boolean keyguardShowing) {
     89         mKeyguardMode = keyguardShowing;
     90         registerListener();
     91     }
     92 
     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
    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
    143     public void setClickable(boolean clickable) {
    144         super.setClickable(clickable);
    145         refreshContentDescription();
    146     }
    147 
    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
    169     public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
    170         super.onInitializeAccessibilityEvent(event);
    171         event.setClassName(Button.class.getName());
    172     }
    173 
    174     @Override
    175     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    176         super.onInitializeAccessibilityNodeInfo(info);
    177         info.setClassName(Button.class.getName());
    178     }
    179 
    180     @Override
    181     public boolean hasOverlappingRendering() {
    182         return false;
    183     }
    184 
    185 }
    186