Home | History | Annotate | Download | only in car
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
      5  * except in compliance with the License. You may obtain a copy of the License at
      6  *
      7  *      http://www.apache.org/licenses/LICENSE-2.0
      8  *
      9  * Unless required by applicable law or agreed to in writing, software distributed under the
     10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     11  * KIND, either express or implied. See the License for the specific language governing
     12  * permissions and limitations under the License.
     13  */
     14 package com.android.systemui.qs.car;
     15 
     16 import android.content.Context;
     17 import android.content.Intent;
     18 import android.graphics.drawable.Drawable;
     19 import android.support.annotation.Nullable;
     20 import android.util.AttributeSet;
     21 import android.util.Log;
     22 import android.view.View;
     23 import android.widget.ImageView;
     24 import android.widget.RelativeLayout;
     25 import android.widget.TextView;
     26 
     27 import com.android.systemui.Dependency;
     28 import com.android.systemui.R;
     29 import com.android.systemui.plugins.ActivityStarter;
     30 import com.android.systemui.qs.QSFooter;
     31 import com.android.systemui.qs.QSPanel;
     32 import com.android.systemui.statusbar.phone.MultiUserSwitch;
     33 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
     34 import com.android.systemui.statusbar.policy.UserInfoController;
     35 
     36 /**
     37  * The footer view that displays below the status bar in the auto use-case. This view shows the
     38  * user switcher and access to settings.
     39  */
     40 public class CarQSFooter extends RelativeLayout implements QSFooter,
     41         UserInfoController.OnUserInfoChangedListener {
     42     private static final String TAG = "CarQSFooter";
     43 
     44     private UserInfoController mUserInfoController;
     45 
     46     private MultiUserSwitch mMultiUserSwitch;
     47     private TextView mUserName;
     48     private ImageView mMultiUserAvatar;
     49     private CarQSFragment.UserSwitchCallback mUserSwitchCallback;
     50 
     51     public CarQSFooter(Context context, AttributeSet attrs) {
     52         super(context, attrs);
     53     }
     54 
     55     @Override
     56     protected void onFinishInflate() {
     57         super.onFinishInflate();
     58         mMultiUserSwitch = findViewById(R.id.multi_user_switch);
     59         mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
     60         mUserName = findViewById(R.id.user_name);
     61 
     62         mUserInfoController = Dependency.get(UserInfoController.class);
     63 
     64         mMultiUserSwitch.setOnClickListener(v -> {
     65             if (mUserSwitchCallback == null) {
     66                 Log.e(TAG, "CarQSFooter not properly set up; cannot display user switcher.");
     67                 return;
     68             }
     69 
     70             if (!mUserSwitchCallback.isShowing()) {
     71                 mUserSwitchCallback.show();
     72             } else {
     73                 mUserSwitchCallback.hide();
     74             }
     75         });
     76 
     77         findViewById(R.id.settings_button).setOnClickListener(v -> {
     78             ActivityStarter activityStarter = Dependency.get(ActivityStarter.class);
     79 
     80             if (!Dependency.get(DeviceProvisionedController.class).isCurrentUserSetup()) {
     81                 // If user isn't setup just unlock the device and dump them back at SUW.
     82                 activityStarter.postQSRunnableDismissingKeyguard(() -> { });
     83                 return;
     84             }
     85 
     86             activityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
     87                     true /* dismissShade */);
     88         });
     89     }
     90 
     91     @Override
     92     public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
     93         mMultiUserAvatar.setImageDrawable(picture);
     94         mUserName.setText(name);
     95     }
     96 
     97     @Override
     98     public void setQSPanel(@Nullable QSPanel panel) {
     99         if (panel != null) {
    100             mMultiUserSwitch.setQsPanel(panel);
    101         }
    102     }
    103 
    104     public void setUserSwitchCallback(CarQSFragment.UserSwitchCallback callback) {
    105         mUserSwitchCallback = callback;
    106     }
    107 
    108     @Override
    109     public void setListening(boolean listening) {
    110         if (listening) {
    111             mUserInfoController.addCallback(this);
    112         } else {
    113             mUserInfoController.removeCallback(this);
    114         }
    115     }
    116 
    117     @Override
    118     public void setExpandClickListener(OnClickListener onClickListener) {
    119         // No view that should expand/collapse the quick settings.
    120     }
    121 
    122     @Override
    123     public void setExpanded(boolean expanded) {
    124         // Do nothing because the quick settings cannot be expanded.
    125     }
    126 
    127     @Override
    128     public void setExpansion(float expansion) {
    129         // Do nothing because the quick settings cannot be expanded.
    130     }
    131 
    132     @Override
    133     public void setKeyguardShowing(boolean keyguardShowing) {
    134         // Do nothing because the footer will not be shown when the keyguard is up.
    135     }
    136 }
    137