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