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