blob: 28aed878b506772376067157ef70945b7c9fe5a4 [file] [log] [blame]
Jason Monkc34befb2015-10-07 16:40:02 -04001/*
2 * Copyright (C) 2015 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
17package com.android.systemui.statusbar.phone;
18
19import android.app.AlarmManager;
20import android.app.PendingIntent;
21import android.content.Context;
22import android.content.Intent;
Jason Monkdbd88172016-02-17 15:20:29 -050023import android.content.res.Configuration;
Jason Monk69e76cc2016-01-26 10:56:37 -050024import android.graphics.drawable.Drawable;
Jason Monk94a1bf62015-10-20 08:43:36 -070025import android.graphics.drawable.RippleDrawable;
Sudheer Shankaad790492016-06-03 10:48:27 -070026import android.os.UserManager;
Jason Monkc34befb2015-10-07 16:40:02 -040027import android.util.AttributeSet;
28import android.view.View;
Jason Monk97cb9c72016-02-17 16:41:01 -050029import android.view.View.OnClickListener;
Jason Monkc34befb2015-10-07 16:40:02 -040030import android.view.ViewGroup;
31import android.widget.ImageView;
Jason Monkc34befb2015-10-07 16:40:02 -040032import android.widget.TextView;
33import android.widget.Toast;
Julia Reynolds8f3e66f2016-05-12 10:33:47 -040034
35import com.android.internal.logging.MetricsLogger;
Tamas Berghammer383db5eb2016-06-22 15:21:38 +010036import com.android.internal.logging.nano.MetricsProto;
Jason Monkdeba7a42015-12-08 16:14:10 -050037import com.android.keyguard.KeyguardStatusView;
Jason Monkdbd88172016-02-17 15:20:29 -050038import com.android.systemui.FontSizeUtils;
Jason Monkc34befb2015-10-07 16:40:02 -040039import com.android.systemui.R;
Jason Monk0ceef212016-11-02 14:05:23 -040040import com.android.systemui.plugins.qs.QS.ActivityStarter;
41import com.android.systemui.plugins.qs.QS.BaseStatusBarHeader;
Jason Monkc34befb2015-10-07 16:40:02 -040042import com.android.systemui.qs.QSPanel;
Jason Monk0ceef212016-11-02 14:05:23 -040043import com.android.systemui.plugins.qs.QS.Callback;
Jason Monkdc35dcb2015-12-04 16:36:15 -050044import com.android.systemui.qs.QuickQSPanel;
Jason Monk97cb9c72016-02-17 16:41:01 -050045import com.android.systemui.qs.TouchAnimator;
Jason Monkf25e6a12016-07-13 14:45:52 -040046import com.android.systemui.qs.TouchAnimator.Builder;
Jason Monkc34befb2015-10-07 16:40:02 -040047import com.android.systemui.statusbar.policy.BatteryController;
Jason Monk46767b72016-08-18 10:58:04 -040048import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
Jason Monkc34befb2015-10-07 16:40:02 -040049import com.android.systemui.statusbar.policy.NextAlarmController;
Jason Monk97cb9c72016-02-17 16:41:01 -050050import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback;
Jason Monkc34befb2015-10-07 16:40:02 -040051import com.android.systemui.statusbar.policy.UserInfoController;
Jason Monk46dbfb42016-02-25 14:59:20 -050052import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
Jason Monkc34befb2015-10-07 16:40:02 -040053import com.android.systemui.tuner.TunerService;
54
55public class QuickStatusBarHeader extends BaseStatusBarHeader implements
Jason Monk46767b72016-08-18 10:58:04 -040056 NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener {
Jason Monkc34befb2015-10-07 16:40:02 -040057
Jason Monkdeba7a42015-12-08 16:14:10 -050058 private static final String TAG = "QuickStatusBarHeader";
Jason Monk97cb9c72016-02-17 16:41:01 -050059
Jason Monk162011e2016-02-19 08:11:55 -050060 private static final float EXPAND_INDICATOR_THRESHOLD = .93f;
Jason Monk97cb9c72016-02-17 16:41:01 -050061
Jason Monkc34befb2015-10-07 16:40:02 -040062 private ActivityStarter mActivityStarter;
63 private NextAlarmController mNextAlarmController;
64 private SettingsButton mSettingsButton;
Xiaohui Chen2f3551b2016-04-07 10:37:25 -070065 protected View mSettingsContainer;
Jason Monkdbd88172016-02-17 15:20:29 -050066
Jason Monkc34befb2015-10-07 16:40:02 -040067 private TextView mAlarmStatus;
Jason Monkb8ae7882016-05-05 14:36:57 -040068 private View mAlarmStatusCollapsed;
Jason Monkc34befb2015-10-07 16:40:02 -040069
Jason Monkc34befb2015-10-07 16:40:02 -040070 private QSPanel mQsPanel;
Jason Monkc34befb2015-10-07 16:40:02 -040071
72 private boolean mExpanded;
73 private boolean mAlarmShowing;
Jason Monkc34befb2015-10-07 16:40:02 -040074
Jason Monkec9af012015-12-10 11:10:23 -050075 private ViewGroup mDateTimeGroup;
Jason Monkdbd88172016-02-17 15:20:29 -050076 private ViewGroup mDateTimeAlarmGroup;
77 private TextView mEmergencyOnly;
78
Xiaohui Chen311b98e2016-03-30 11:55:54 -070079 protected ExpandableIndicator mExpandIndicator;
Jason Monk97cb9c72016-02-17 16:41:01 -050080
Jason Monkc34befb2015-10-07 16:40:02 -040081 private boolean mListening;
82 private AlarmManager.AlarmClockInfo mNextAlarm;
83
Muyuan Li0e9f5382016-04-27 15:51:15 -070084 protected QuickQSPanel mHeaderQsPanel;
Jason Monkec9af012015-12-10 11:10:23 -050085 private boolean mShowEmergencyCallsOnly;
Xiaohui Chen2f3551b2016-04-07 10:37:25 -070086 protected MultiUserSwitch mMultiUserSwitch;
Jason Monk69e76cc2016-01-26 10:56:37 -050087 private ImageView mMultiUserAvatar;
Jason Monkdb50de82016-02-03 15:34:54 -050088
Jason Monk97cb9c72016-02-17 16:41:01 -050089
Jason Monkf25e6a12016-07-13 14:45:52 -040090 private TouchAnimator mAnimator;
Xiaohui Chen2f3551b2016-04-07 10:37:25 -070091 protected TouchAnimator mSettingsAlpha;
Jason Monk97cb9c72016-02-17 16:41:01 -050092 private float mExpansionAmount;
Muyuan Lid6c5ff22016-05-23 19:08:45 -070093 protected QSTileHost mHost;
Muyuan Li93b2fa72016-06-09 11:50:58 -070094 protected View mEdit;
Jason Monk487e1f82016-06-07 15:59:51 -040095 private boolean mShowFullAlarm;
Jason Monkf25e6a12016-07-13 14:45:52 -040096 private float mDateTimeTranslation;
Jason Monkc34befb2015-10-07 16:40:02 -040097
98 public QuickStatusBarHeader(Context context, AttributeSet attrs) {
99 super(context, attrs);
100 }
101
102 @Override
103 protected void onFinishInflate() {
104 super.onFinishInflate();
105
Jason Monkdbd88172016-02-17 15:20:29 -0500106 mEmergencyOnly = (TextView) findViewById(R.id.header_emergency_calls_only);
107
Jason Monk4bb7b1a2016-05-27 15:19:15 -0400108 mEdit = findViewById(android.R.id.edit);
109 findViewById(android.R.id.edit).setOnClickListener(view ->
110 mHost.startRunnableDismissingKeyguard(() -> mQsPanel.showEdit(view)));
111
Jason Monkdbd88172016-02-17 15:20:29 -0500112 mDateTimeAlarmGroup = (ViewGroup) findViewById(R.id.date_time_alarm_group);
113 mDateTimeAlarmGroup.findViewById(R.id.empty_time_view).setVisibility(View.GONE);
Jason Monkec9af012015-12-10 11:10:23 -0500114 mDateTimeGroup = (ViewGroup) findViewById(R.id.date_time_group);
Jason Monk97cb9c72016-02-17 16:41:01 -0500115 mDateTimeGroup.setPivotX(0);
116 mDateTimeGroup.setPivotY(0);
Jason Monkf25e6a12016-07-13 14:45:52 -0400117 mDateTimeTranslation = getResources().getDimension(R.dimen.qs_date_time_translation);
Jason Monk487e1f82016-06-07 15:59:51 -0400118 mShowFullAlarm = getResources().getBoolean(R.bool.quick_settings_show_full_alarm);
Jason Monkdbd88172016-02-17 15:20:29 -0500119
Jason Monk97cb9c72016-02-17 16:41:01 -0500120 mExpandIndicator = (ExpandableIndicator) findViewById(R.id.expand_indicator);
Jason Monkc34befb2015-10-07 16:40:02 -0400121
Jason Monkdc35dcb2015-12-04 16:36:15 -0500122 mHeaderQsPanel = (QuickQSPanel) findViewById(R.id.quick_qs_panel);
Jason Monkc34befb2015-10-07 16:40:02 -0400123
124 mSettingsButton = (SettingsButton) findViewById(R.id.settings_button);
125 mSettingsContainer = findViewById(R.id.settings_button_container);
126 mSettingsButton.setOnClickListener(this);
127
Jason Monkb8ae7882016-05-05 14:36:57 -0400128 mAlarmStatusCollapsed = findViewById(R.id.alarm_status_collapsed);
Jason Monkc34befb2015-10-07 16:40:02 -0400129 mAlarmStatus = (TextView) findViewById(R.id.alarm_status);
130 mAlarmStatus.setOnClickListener(this);
131
Jason Monk69e76cc2016-01-26 10:56:37 -0500132 mMultiUserSwitch = (MultiUserSwitch) findViewById(R.id.multi_user_switch);
133 mMultiUserAvatar = (ImageView) mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
134
Jason Monk94a1bf62015-10-20 08:43:36 -0700135 // RenderThread is doing more harm than good when touching the header (to expand quick
136 // settings), so disable it for this view
Jason Monk94a1bf62015-10-20 08:43:36 -0700137 ((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true);
Jorim Jaggic3081172016-04-08 23:56:37 -0700138 ((RippleDrawable) mExpandIndicator.getBackground()).setForceSoftware(true);
Jason Monk94a1bf62015-10-20 08:43:36 -0700139
Jason Monkdbd88172016-02-17 15:20:29 -0500140 updateResources();
141 }
142
143 @Override
144 protected void onConfigurationChanged(Configuration newConfig) {
145 super.onConfigurationChanged(newConfig);
146 updateResources();
147 }
148
Jason Monk51fb85a2016-03-28 14:06:04 -0400149 @Override
150 public void onRtlPropertiesChanged(int layoutDirection) {
151 super.onRtlPropertiesChanged(layoutDirection);
152 updateResources();
153 }
154
Jason Monkdbd88172016-02-17 15:20:29 -0500155 private void updateResources() {
156 FontSizeUtils.updateFontSize(mAlarmStatus, R.dimen.qs_date_collapsed_size);
157 FontSizeUtils.updateFontSize(mEmergencyOnly, R.dimen.qs_emergency_calls_only_text_size);
158
Jason Monkf25e6a12016-07-13 14:45:52 -0400159 Builder builder = new Builder()
Jason Monk487e1f82016-06-07 15:59:51 -0400160 .addFloat(mShowFullAlarm ? mAlarmStatus : findViewById(R.id.date), "alpha", 0, 1)
Jason Monkf25e6a12016-07-13 14:45:52 -0400161 .addFloat(mEmergencyOnly, "alpha", 0, 1);
Jason Monk487e1f82016-06-07 15:59:51 -0400162 if (mShowFullAlarm) {
Jason Monkf25e6a12016-07-13 14:45:52 -0400163 builder.addFloat(mAlarmStatusCollapsed, "alpha", 1, 0);
Jason Monk487e1f82016-06-07 15:59:51 -0400164 }
Jason Monkf25e6a12016-07-13 14:45:52 -0400165 mAnimator = builder.build();
Xiaohui Chen2f3551b2016-04-07 10:37:25 -0700166
167 updateSettingsAnimator();
168 }
169
170 protected void updateSettingsAnimator() {
Jason Monk162011e2016-02-19 08:11:55 -0500171 mSettingsAlpha = new TouchAnimator.Builder()
Jason Monk4bb7b1a2016-05-27 15:19:15 -0400172 .addFloat(mEdit, "alpha", 0, 1)
Jason Monk162011e2016-02-19 08:11:55 -0500173 .addFloat(mMultiUserSwitch, "alpha", 0, 1)
Jason Monk162011e2016-02-19 08:11:55 -0500174 .build();
Jason Monk51fb85a2016-03-28 14:06:04 -0400175
176 final boolean isRtl = isLayoutRtl();
177 if (isRtl && mDateTimeGroup.getWidth() == 0) {
178 mDateTimeGroup.addOnLayoutChangeListener(new OnLayoutChangeListener() {
179 @Override
180 public void onLayoutChange(View v, int left, int top, int right, int bottom,
181 int oldLeft, int oldTop, int oldRight, int oldBottom) {
182 mDateTimeGroup.setPivotX(getWidth());
183 mDateTimeGroup.removeOnLayoutChangeListener(this);
184 }
185 });
186 } else {
187 mDateTimeGroup.setPivotX(isRtl ? mDateTimeGroup.getWidth() : 0);
188 }
Jason Monkc34befb2015-10-07 16:40:02 -0400189 }
190
191 @Override
192 public int getCollapsedHeight() {
193 return getHeight();
194 }
195
196 @Override
197 public int getExpandedHeight() {
198 return getHeight();
199 }
200
201 @Override
202 public void setExpanded(boolean expanded) {
Jason Monkd8fb07f2016-08-02 15:39:42 -0400203 if (mExpanded == expanded) return;
Jason Monkc34befb2015-10-07 16:40:02 -0400204 mExpanded = expanded;
Xiaohui Chen66448932016-04-18 12:53:28 -0700205 mHeaderQsPanel.setExpanded(expanded);
Jason Monkdeba7a42015-12-08 16:14:10 -0500206 updateEverything();
Jason Monkc34befb2015-10-07 16:40:02 -0400207 }
208
209 @Override
210 public void onNextAlarmChanged(AlarmManager.AlarmClockInfo nextAlarm) {
211 mNextAlarm = nextAlarm;
212 if (nextAlarm != null) {
Julia Reynolds20aef8a2016-05-04 16:44:08 -0400213 String alarmString = KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm);
214 mAlarmStatus.setText(alarmString);
215 mAlarmStatus.setContentDescription(mContext.getString(
216 R.string.accessibility_quick_settings_alarm, alarmString));
217 mAlarmStatusCollapsed.setContentDescription(mContext.getString(
218 R.string.accessibility_quick_settings_alarm, alarmString));
Jason Monkc34befb2015-10-07 16:40:02 -0400219 }
Jason Monk97cb9c72016-02-17 16:41:01 -0500220 if (mAlarmShowing != (nextAlarm != null)) {
221 mAlarmShowing = nextAlarm != null;
222 updateEverything();
223 }
Jason Monkc34befb2015-10-07 16:40:02 -0400224 }
225
226 @Override
227 public void setExpansion(float headerExpansionFraction) {
Jason Monk97cb9c72016-02-17 16:41:01 -0500228 mExpansionAmount = headerExpansionFraction;
Jason Monkf25e6a12016-07-13 14:45:52 -0400229 updateDateTimePosition();
230 mAnimator.setPosition(headerExpansionFraction);
Jason Monk162011e2016-02-19 08:11:55 -0500231 mSettingsAlpha.setPosition(headerExpansionFraction);
Jason Monkdbd88172016-02-17 15:20:29 -0500232
Jason Monkdbd88172016-02-17 15:20:29 -0500233 updateAlarmVisibilities();
234
Jason Monk97cb9c72016-02-17 16:41:01 -0500235 mExpandIndicator.setExpanded(headerExpansionFraction > EXPAND_INDICATOR_THRESHOLD);
236 }
Jason Monkdbd88172016-02-17 15:20:29 -0500237
Jason Monk46dbfb42016-02-25 14:59:20 -0500238 @Override
239 protected void onDetachedFromWindow() {
240 setListening(false);
Jason Monk88529052016-11-04 13:29:58 -0400241 mHost.getUserInfoController().removeCallback(this);
Jason Monk46dbfb42016-02-25 14:59:20 -0500242 mHost.getNetworkController().removeEmergencyListener(this);
243 super.onDetachedFromWindow();
244 }
245
Jason Monkdbd88172016-02-17 15:20:29 -0500246 private void updateAlarmVisibilities() {
Jason Monk487e1f82016-06-07 15:59:51 -0400247 mAlarmStatus.setVisibility(mAlarmShowing && mShowFullAlarm ? View.VISIBLE : View.INVISIBLE);
Jason Monk97cb9c72016-02-17 16:41:01 -0500248 mAlarmStatusCollapsed.setVisibility(mAlarmShowing ? View.VISIBLE : View.INVISIBLE);
Jason Monkdbd88172016-02-17 15:20:29 -0500249 }
250
Jason Monkc34befb2015-10-07 16:40:02 -0400251 public void setListening(boolean listening) {
252 if (listening == mListening) {
253 return;
254 }
255 mHeaderQsPanel.setListening(listening);
256 mListening = listening;
257 updateListeners();
258 }
259
260 @Override
Jason Monk46767b72016-08-18 10:58:04 -0400261 public View getExpandView() {
262 return findViewById(R.id.expand_indicator);
263 }
264
265 @Override
Jason Monkc34befb2015-10-07 16:40:02 -0400266 public void updateEverything() {
Jason Monk9c74ff12016-08-03 10:25:42 -0400267 post(() -> {
268 updateVisibilities();
269 setClickable(false);
270 });
Jason Monkc34befb2015-10-07 16:40:02 -0400271 }
272
Xiaohui Chen2f3551b2016-04-07 10:37:25 -0700273 protected void updateVisibilities() {
Jason Monkdbd88172016-02-17 15:20:29 -0500274 updateAlarmVisibilities();
Jason Monkf25e6a12016-07-13 14:45:52 -0400275 updateDateTimePosition();
Jason Monkec9af012015-12-10 11:10:23 -0500276 mEmergencyOnly.setVisibility(mExpanded && mShowEmergencyCallsOnly
277 ? View.VISIBLE : View.INVISIBLE);
Jason Monkc34befb2015-10-07 16:40:02 -0400278 mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
279 TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE);
Sudheer Shankaad790492016-06-03 10:48:27 -0700280 final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
281 mMultiUserSwitch.setVisibility(mExpanded && mMultiUserSwitch.hasMultipleUsers() && !isDemo
Jason Monkf3bd7a32016-05-05 10:15:25 -0400282 ? View.VISIBLE : View.INVISIBLE);
Jason Monk104d9de2016-07-01 10:25:16 -0400283 mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
Jason Monk69e76cc2016-01-26 10:56:37 -0500284 }
285
Jason Monkf25e6a12016-07-13 14:45:52 -0400286 private void updateDateTimePosition() {
287 mDateTimeAlarmGroup.setTranslationY(mShowEmergencyCallsOnly
288 ? mExpansionAmount * mDateTimeTranslation : 0);
289 }
290
Jason Monkc34befb2015-10-07 16:40:02 -0400291 private void updateListeners() {
292 if (mListening) {
Jason Monk88529052016-11-04 13:29:58 -0400293 mNextAlarmController.addCallback(this);
Jason Monkc34befb2015-10-07 16:40:02 -0400294 } else {
Jason Monk88529052016-11-04 13:29:58 -0400295 mNextAlarmController.removeCallback(this);
Jason Monkc34befb2015-10-07 16:40:02 -0400296 }
297 }
298
299 @Override
300 public void setActivityStarter(ActivityStarter activityStarter) {
301 mActivityStarter = activityStarter;
302 }
303
Jason Monkc34befb2015-10-07 16:40:02 -0400304 public void setQSPanel(final QSPanel qsPanel) {
305 mQsPanel = qsPanel;
306 setupHost(qsPanel.getHost());
307 if (mQsPanel != null) {
Jason Monk69e76cc2016-01-26 10:56:37 -0500308 mMultiUserSwitch.setQsPanel(qsPanel);
Jason Monkc34befb2015-10-07 16:40:02 -0400309 }
310 }
311
Jason Monkca894a02016-01-12 15:30:22 -0500312 public void setupHost(final QSTileHost host) {
Jason Monk46dbfb42016-02-25 14:59:20 -0500313 mHost = host;
Jason Monk324ed232016-04-07 11:48:49 -0400314 host.setHeaderView(mExpandIndicator);
Jason Monkdc35dcb2015-12-04 16:36:15 -0500315 mHeaderQsPanel.setQSPanelAndHeader(mQsPanel, this);
Jason Monk8b9d67f2016-03-02 08:59:08 -0500316 mHeaderQsPanel.setHost(host, null /* No customization in header */);
Jason Monk46dbfb42016-02-25 14:59:20 -0500317 setUserInfoController(host.getUserInfoController());
318 setBatteryController(host.getBatteryController());
319 setNextAlarmController(host.getNextAlarmController());
320
321 final boolean isAPhone = mHost.getNetworkController().hasVoiceCallingFeature();
322 if (isAPhone) {
323 mHost.getNetworkController().addEmergencyListener(this);
324 }
Jason Monkc34befb2015-10-07 16:40:02 -0400325 }
326
327 @Override
328 public void onClick(View v) {
329 if (v == mSettingsButton) {
Julia Reynolds8f3e66f2016-05-12 10:33:47 -0400330 MetricsLogger.action(mContext,
Jason Monk484fd362016-07-13 15:24:32 -0400331 mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
332 : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
Jason Monkc34befb2015-10-07 16:40:02 -0400333 if (mSettingsButton.isTunerClick()) {
Jason Monkee9fcf52016-07-19 12:39:58 -0400334 mHost.startRunnableDismissingKeyguard(() -> post(() -> {
335 if (TunerService.isTunerEnabled(mContext)) {
336 TunerService.showResetRequest(mContext, () -> {
Jason Monkc34befb2015-10-07 16:40:02 -0400337 // Relaunch settings so that the tuner disappears.
338 startSettingsActivity();
Jason Monkee9fcf52016-07-19 12:39:58 -0400339 });
340 } else {
341 Toast.makeText(getContext(), R.string.tuner_toast,
342 Toast.LENGTH_LONG).show();
343 TunerService.setTunerEnabled(mContext, true);
344 }
345 startSettingsActivity();
346
347 }));
348 } else {
349 startSettingsActivity();
Jason Monkc34befb2015-10-07 16:40:02 -0400350 }
Jason Monkc34befb2015-10-07 16:40:02 -0400351 } else if (v == mAlarmStatus && mNextAlarm != null) {
352 PendingIntent showIntent = mNextAlarm.getShowIntent();
Jason Monkd0408f02016-10-14 10:46:37 -0400353 mActivityStarter.startPendingIntentDismissingKeyguard(showIntent);
Jason Monkc34befb2015-10-07 16:40:02 -0400354 }
355 }
356
357 private void startSettingsActivity() {
358 mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
359 true /* dismissShade */);
360 }
361
Jason Monkc34befb2015-10-07 16:40:02 -0400362 public void setNextAlarmController(NextAlarmController nextAlarmController) {
363 mNextAlarmController = nextAlarmController;
364 }
365
Jason Monkc34befb2015-10-07 16:40:02 -0400366 public void setBatteryController(BatteryController batteryController) {
367 // Don't care
368 }
369
Jason Monkc34befb2015-10-07 16:40:02 -0400370 public void setUserInfoController(UserInfoController userInfoController) {
Jason Monk88529052016-11-04 13:29:58 -0400371 userInfoController.addCallback(this);
Jason Monkc34befb2015-10-07 16:40:02 -0400372 }
373
374 @Override
Xiaohui Chen66448932016-04-18 12:53:28 -0700375 public void setCallback(Callback qsPanelCallback) {
376 mHeaderQsPanel.setCallback(qsPanelCallback);
377 }
378
379 @Override
Jason Monkec9af012015-12-10 11:10:23 -0500380 public void setEmergencyCallsOnly(boolean show) {
381 boolean changed = show != mShowEmergencyCallsOnly;
382 if (changed) {
383 mShowEmergencyCallsOnly = show;
384 if (mExpanded) {
385 updateEverything();
386 }
387 }
Jason Monkc34befb2015-10-07 16:40:02 -0400388 }
Jason Monk46dbfb42016-02-25 14:59:20 -0500389
Xiaohui Chen2f3551b2016-04-07 10:37:25 -0700390 @Override
Jiaquan Hee1206372016-05-03 14:11:23 -0700391 public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
Xiaohui Chen2f3551b2016-04-07 10:37:25 -0700392 mMultiUserAvatar.setImageDrawable(picture);
393 }
Jason Monkc34befb2015-10-07 16:40:02 -0400394}