blob: 7dcf5c0c3b35f5922db8ec2ad70d3ce5404cbc33 [file] [log] [blame]
John Spurlock3c4076a2015-02-24 12:12:25 -05001/*
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.qs.tiles;
18
Jason Monkbe3235a2017-04-05 09:29:53 -040019import static android.provider.Settings.Global.ZEN_MODE_ALARMS;
20import static android.provider.Settings.Global.ZEN_MODE_OFF;
21
Beverly09da25f2018-02-26 09:17:07 -050022import android.app.ActivityManager;
Beverly312ad022018-01-24 15:07:48 -050023import android.app.Dialog;
John Spurlock3c4076a2015-02-24 12:12:25 -050024import android.content.BroadcastReceiver;
25import android.content.Context;
26import android.content.Intent;
27import android.content.IntentFilter;
28import android.content.SharedPreferences;
John Spurlockcd863ad2015-04-07 14:01:28 -040029import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
Jason Monkbe3235a2017-04-05 09:29:53 -040030import android.content.pm.ApplicationInfo;
31import android.content.pm.PackageManager;
Beverly09da25f2018-02-26 09:17:07 -050032import android.net.Uri;
Sudheer Shanka1c7cda82015-12-31 14:46:02 +000033import android.os.UserManager;
John Spurlock3c4076a2015-02-24 12:12:25 -050034import android.provider.Settings;
35import android.provider.Settings.Global;
Jason Monkbe3235a2017-04-05 09:29:53 -040036import android.service.notification.ZenModeConfig;
37import android.service.notification.ZenModeConfig.ZenRule;
Jason Monk32508852017-01-18 09:17:13 -050038import android.service.quicksettings.Tile;
Jason Monkbe3235a2017-04-05 09:29:53 -040039import android.util.Slog;
John Spurlock3c4076a2015-02-24 12:12:25 -050040import android.view.LayoutInflater;
41import android.view.View;
42import android.view.View.OnAttachStateChangeListener;
43import android.view.ViewGroup;
Beverly312ad022018-01-24 15:07:48 -050044import android.view.WindowManager;
Julia Reynolds20aef8a2016-05-04 16:44:08 -040045import android.widget.Switch;
Sudheer Shankaa8fbbb32016-02-11 17:17:57 +000046import android.widget.Toast;
Chris Wrenf6e9228b2016-01-26 18:04:35 -050047
Chris Wren457a21c2015-05-06 17:50:34 -040048import com.android.internal.logging.MetricsLogger;
Tamas Berghammer383db5eb2016-06-22 15:21:38 +010049import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Beverly312ad022018-01-24 15:07:48 -050050import com.android.settingslib.notification.EnableZenModeDialog;
Jason Monk9c7844c2017-01-18 15:21:53 -050051import com.android.systemui.Dependency;
Andrew Flynn82862572015-04-01 14:22:37 -040052import com.android.systemui.Prefs;
John Spurlock3c4076a2015-02-24 12:12:25 -050053import com.android.systemui.R;
Sudheer Shankaa8fbbb32016-02-11 17:17:57 +000054import com.android.systemui.SysUIToast;
Jason Monkec34da82017-02-24 15:57:05 -050055import com.android.systemui.plugins.ActivityStarter;
Jason Monke5b770e2017-03-03 21:49:29 -050056import com.android.systemui.plugins.qs.DetailAdapter;
Jason Monk702e2eb2017-03-03 16:53:44 -050057import com.android.systemui.plugins.qs.QSTile.BooleanState;
Jason Monkbe3235a2017-04-05 09:29:53 -040058import com.android.systemui.qs.QSHost;
Jason Monk702e2eb2017-03-03 16:53:44 -050059import com.android.systemui.qs.tileimpl.QSTileImpl;
Beverly312ad022018-01-24 15:07:48 -050060import com.android.systemui.statusbar.phone.SystemUIDialog;
John Spurlock3c4076a2015-02-24 12:12:25 -050061import com.android.systemui.statusbar.policy.ZenModeController;
62import com.android.systemui.volume.ZenModePanel;
63
64/** Quick settings tile: Do not disturb **/
Jason Monk702e2eb2017-03-03 16:53:44 -050065public class DndTile extends QSTileImpl<BooleanState> {
John Spurlock036e7cb2015-06-15 13:49:57 -040066
John Spurlockd9c75db2015-04-28 11:19:13 -040067 private static final Intent ZEN_SETTINGS =
68 new Intent(Settings.ACTION_ZEN_MODE_SETTINGS);
69
70 private static final Intent ZEN_PRIORITY_SETTINGS =
71 new Intent(Settings.ACTION_ZEN_MODE_PRIORITY_SETTINGS);
John Spurlock3c4076a2015-02-24 12:12:25 -050072
73 private static final String ACTION_SET_VISIBLE = "com.android.systemui.dndtile.SET_VISIBLE";
74 private static final String EXTRA_VISIBLE = "visible";
John Spurlock3c4076a2015-02-24 12:12:25 -050075
76 private final ZenModeController mController;
77 private final DndDetailAdapter mDetailAdapter;
78
79 private boolean mListening;
John Spurlock3c4076a2015-02-24 12:12:25 -050080 private boolean mShowingDetail;
Yuta Yamada99fd2772016-10-06 17:40:19 +090081 private boolean mReceiverRegistered;
John Spurlock3c4076a2015-02-24 12:12:25 -050082
Jason Monk702e2eb2017-03-03 16:53:44 -050083 public DndTile(QSHost host) {
John Spurlock3c4076a2015-02-24 12:12:25 -050084 super(host);
Jason Monk9c7844c2017-01-18 15:21:53 -050085 mController = Dependency.get(ZenModeController.class);
John Spurlock3c4076a2015-02-24 12:12:25 -050086 mDetailAdapter = new DndDetailAdapter();
John Spurlock3c4076a2015-02-24 12:12:25 -050087 mContext.registerReceiver(mReceiver, new IntentFilter(ACTION_SET_VISIBLE));
Yuta Yamada99fd2772016-10-06 17:40:19 +090088 mReceiverRegistered = true;
89 }
90
91 @Override
92 protected void handleDestroy() {
93 super.handleDestroy();
94 if (mReceiverRegistered) {
95 mContext.unregisterReceiver(mReceiver);
96 mReceiverRegistered = false;
97 }
John Spurlock3c4076a2015-02-24 12:12:25 -050098 }
99
100 public static void setVisible(Context context, boolean visible) {
Andrew Flynn82862572015-04-01 14:22:37 -0400101 Prefs.putBoolean(context, Prefs.Key.DND_TILE_VISIBLE, visible);
John Spurlock3c4076a2015-02-24 12:12:25 -0500102 }
103
104 public static boolean isVisible(Context context) {
Andrew Flynn82862572015-04-01 14:22:37 -0400105 return Prefs.getBoolean(context, Prefs.Key.DND_TILE_VISIBLE, false /* defaultValue */);
John Spurlock3c4076a2015-02-24 12:12:25 -0500106 }
107
John Spurlockf88d8082015-03-25 18:09:51 -0400108 public static void setCombinedIcon(Context context, boolean combined) {
Andrew Flynn82862572015-04-01 14:22:37 -0400109 Prefs.putBoolean(context, Prefs.Key.DND_TILE_COMBINED_ICON, combined);
John Spurlockf88d8082015-03-25 18:09:51 -0400110 }
111
112 public static boolean isCombinedIcon(Context context) {
Andrew Flynn82862572015-04-01 14:22:37 -0400113 return Prefs.getBoolean(context, Prefs.Key.DND_TILE_COMBINED_ICON,
114 false /* defaultValue */);
John Spurlockf88d8082015-03-25 18:09:51 -0400115 }
116
John Spurlock3c4076a2015-02-24 12:12:25 -0500117 @Override
118 public DetailAdapter getDetailAdapter() {
119 return mDetailAdapter;
120 }
121
122 @Override
Jason Monk62b63a02016-02-02 15:15:31 -0500123 public BooleanState newTileState() {
John Spurlock3c4076a2015-02-24 12:12:25 -0500124 return new BooleanState();
125 }
126
127 @Override
Jason Monk76c67aa2016-02-19 14:49:42 -0500128 public Intent getLongClickIntent() {
129 return ZEN_SETTINGS;
130 }
131
132 @Override
Jason Monk32508852017-01-18 09:17:13 -0500133 protected void handleClick() {
Beverly312ad022018-01-24 15:07:48 -0500134 // Zen is currently on
Jason Monk32508852017-01-18 09:17:13 -0500135 if (mState.value) {
Jason Monkbe3235a2017-04-05 09:29:53 -0400136 mController.setZen(ZEN_MODE_OFF, null, TAG);
Jason Monk32508852017-01-18 09:17:13 -0500137 } else {
Beverly312ad022018-01-24 15:07:48 -0500138 showDetail(true);
Jason Monk32508852017-01-18 09:17:13 -0500139 }
140 }
141
142 @Override
Beverly312ad022018-01-24 15:07:48 -0500143 public void showDetail(boolean show) {
Beverly09da25f2018-02-26 09:17:07 -0500144 int zenDuration = Settings.Global.getInt(mContext.getContentResolver(),
145 Settings.Global.ZEN_DURATION, 0);
146 switch (zenDuration) {
147 case Settings.Global.ZEN_DURATION_PROMPT:
148 mUiHandler.post(() -> {
149 Dialog mDialog = new EnableZenModeDialog(mContext).createDialog();
150 mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
151 SystemUIDialog.setShowForAllUsers(mDialog, true);
152 SystemUIDialog.registerDismissListener(mDialog);
153 SystemUIDialog.setWindowOnTop(mDialog);
154 mUiHandler.post(() -> mDialog.show());
155 mHost.collapsePanels();
156 });
157 break;
158 case Settings.Global.ZEN_DURATION_FOREVER:
159 mController.setZen(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, TAG);
160 break;
161 default:
162 Uri conditionId = ZenModeConfig.toTimeCondition(mContext, zenDuration,
163 ActivityManager.getCurrentUser(), true).id;
164 mController.setZen(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS,
165 conditionId, TAG);
166 }
Beverly312ad022018-01-24 15:07:48 -0500167 }
168
169 @Override
Jason Monk32508852017-01-18 09:17:13 -0500170 protected void handleSecondaryClick() {
Sudheer Shankaa8fbbb32016-02-11 17:17:57 +0000171 if (mController.isVolumeRestricted()) {
172 // Collapse the panels, so the user can see the toast.
173 mHost.collapsePanels();
174 SysUIToast.makeText(mContext, mContext.getString(
175 com.android.internal.R.string.error_message_change_not_allowed),
176 Toast.LENGTH_LONG).show();
177 return;
178 }
Jason Monk3c3b6502017-07-27 15:41:26 -0400179 if (!mState.value) {
180 // Because of the complexity of the zen panel, it needs to be shown after
181 // we turn on zen below.
182 mController.addCallback(new ZenModeController.Callback() {
183 @Override
184 public void onZenChanged(int zen) {
185 mController.removeCallback(this);
186 showDetail(true);
187 }
188 });
Beverly3e906c52018-01-22 10:49:43 -0500189 mController.setZen(Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, TAG);
Jason Monk3c3b6502017-07-27 15:41:26 -0400190 } else {
191 showDetail(true);
192 }
John Spurlock3c4076a2015-02-24 12:12:25 -0500193 }
194
195 @Override
Jason Monk39c98e62016-03-16 09:18:35 -0400196 public CharSequence getTileLabel() {
197 return mContext.getString(R.string.quick_settings_dnd_label);
198 }
199
200 @Override
John Spurlock3c4076a2015-02-24 12:12:25 -0500201 protected void handleUpdateState(BooleanState state, Object arg) {
202 final int zen = arg instanceof Integer ? (Integer) arg : mController.getZen();
Jason Monkbe3235a2017-04-05 09:29:53 -0400203 final boolean newValue = zen != ZEN_MODE_OFF;
John Spurlockb1688f62015-05-12 15:52:38 -0400204 final boolean valueChanged = state.value != newValue;
Jason Monk395617f2017-05-05 14:07:58 -0400205 if (state.slash == null) state.slash = new SlashState();
Jason Monk2db46192017-02-01 17:18:22 -0500206 state.dualTarget = true;
John Spurlockb1688f62015-05-12 15:52:38 -0400207 state.value = newValue;
Jason Monk32508852017-01-18 09:17:13 -0500208 state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
Jason Monk395617f2017-05-05 14:07:58 -0400209 state.slash.isSlashed = !state.value;
Beverly7999ba92018-01-24 10:07:06 -0500210 state.label = getTileLabel();
Beverlya5effb42018-02-01 17:08:35 -0500211 state.secondaryLabel = ZenModeConfig.getDescription(mContext,zen != Global.ZEN_MODE_OFF,
212 mController.getConfig());
Beverlya93d1262018-01-25 09:58:30 -0500213 state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_on);
Sudheer Shankaa8fbbb32016-02-11 17:17:57 +0000214 checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_ADJUST_VOLUME);
John Spurlock3c4076a2015-02-24 12:12:25 -0500215 switch (zen) {
216 case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
John Spurlock3c4076a2015-02-24 12:12:25 -0500217 state.contentDescription = mContext.getString(
Beverly92ed74f2018-03-15 14:50:40 -0400218 R.string.accessibility_quick_settings_dnd_priority_on) + ", "
219 + state.secondaryLabel;
John Spurlock3c4076a2015-02-24 12:12:25 -0500220 break;
221 case Global.ZEN_MODE_NO_INTERRUPTIONS:
John Spurlock3c4076a2015-02-24 12:12:25 -0500222 state.contentDescription = mContext.getString(
Beverly92ed74f2018-03-15 14:50:40 -0400223 R.string.accessibility_quick_settings_dnd_none_on) + ", "
224 + state.secondaryLabel;
John Spurlock3c4076a2015-02-24 12:12:25 -0500225 break;
Jason Monkbe3235a2017-04-05 09:29:53 -0400226 case ZEN_MODE_ALARMS:
John Spurlock4f1163c2015-04-02 17:41:21 -0400227 state.contentDescription = mContext.getString(
Beverly92ed74f2018-03-15 14:50:40 -0400228 R.string.accessibility_quick_settings_dnd_alarms_on) + ", "
229 + state.secondaryLabel;
John Spurlock4f1163c2015-04-02 17:41:21 -0400230 break;
John Spurlock3c4076a2015-02-24 12:12:25 -0500231 default:
Jason Monkbe3235a2017-04-05 09:29:53 -0400232 state.contentDescription = mContext.getString(
Julia Reynolds20aef8a2016-05-04 16:44:08 -0400233 R.string.accessibility_quick_settings_dnd);
John Spurlock3c4076a2015-02-24 12:12:25 -0500234 break;
235 }
John Spurlockb1688f62015-05-12 15:52:38 -0400236 if (valueChanged) {
237 fireToggleStateChanged(state.value);
238 }
Jason Monk28df4ed2017-03-23 10:25:37 -0400239 state.dualLabelContentDescription = mContext.getResources().getString(
240 R.string.accessibility_quick_settings_open_settings, getTileLabel());
Jason Monk702e2eb2017-03-03 16:53:44 -0500241 state.expandedAccessibilityClassName = Switch.class.getName();
John Spurlock3c4076a2015-02-24 12:12:25 -0500242 }
243
244 @Override
Chris Wren457a21c2015-05-06 17:50:34 -0400245 public int getMetricsCategory() {
Chris Wrenf6e9228b2016-01-26 18:04:35 -0500246 return MetricsEvent.QS_DND;
Chris Wren457a21c2015-05-06 17:50:34 -0400247 }
248
249 @Override
John Spurlock3c4076a2015-02-24 12:12:25 -0500250 protected String composeChangeAnnouncement() {
251 if (mState.value) {
252 return mContext.getString(R.string.accessibility_quick_settings_dnd_changed_on);
253 } else {
254 return mContext.getString(R.string.accessibility_quick_settings_dnd_changed_off);
255 }
256 }
257
258 @Override
Jason Monk1c6116c2017-09-06 17:33:01 -0400259 public void handleSetListening(boolean listening) {
John Spurlock3c4076a2015-02-24 12:12:25 -0500260 if (mListening == listening) return;
261 mListening = listening;
262 if (mListening) {
263 mController.addCallback(mZenCallback);
Andrew Flynn82862572015-04-01 14:22:37 -0400264 Prefs.registerListener(mContext, mPrefListener);
John Spurlock3c4076a2015-02-24 12:12:25 -0500265 } else {
266 mController.removeCallback(mZenCallback);
Andrew Flynn82862572015-04-01 14:22:37 -0400267 Prefs.unregisterListener(mContext, mPrefListener);
John Spurlock3c4076a2015-02-24 12:12:25 -0500268 }
269 }
270
Jason Monkc3f42c12016-02-05 12:33:13 -0500271 @Override
272 public boolean isAvailable() {
273 return isVisible(mContext);
274 }
275
John Spurlockcd863ad2015-04-07 14:01:28 -0400276 private final OnSharedPreferenceChangeListener mPrefListener
277 = new OnSharedPreferenceChangeListener() {
278 @Override
Andrew Flynn82862572015-04-01 14:22:37 -0400279 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
280 @Prefs.Key String key) {
281 if (Prefs.Key.DND_TILE_COMBINED_ICON.equals(key) ||
282 Prefs.Key.DND_TILE_VISIBLE.equals(key)) {
John Spurlockcd863ad2015-04-07 14:01:28 -0400283 refreshState();
284 }
285 }
286 };
287
John Spurlock3c4076a2015-02-24 12:12:25 -0500288 private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() {
289 public void onZenChanged(int zen) {
290 refreshState(zen);
Jason Monkbe3235a2017-04-05 09:29:53 -0400291 if (isShowingDetail()) {
292 mDetailAdapter.updatePanel();
293 }
294 }
295
296 @Override
297 public void onConfigChanged(ZenModeConfig config) {
298 if (isShowingDetail()) {
299 mDetailAdapter.updatePanel();
300 }
John Spurlock3c4076a2015-02-24 12:12:25 -0500301 }
302 };
303
John Spurlock3c4076a2015-02-24 12:12:25 -0500304 private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
305 @Override
306 public void onReceive(Context context, Intent intent) {
John Spurlockcd863ad2015-04-07 14:01:28 -0400307 final boolean visible = intent.getBooleanExtra(EXTRA_VISIBLE, false);
308 setVisible(mContext, visible);
John Spurlock3c4076a2015-02-24 12:12:25 -0500309 refreshState();
310 }
311 };
312
313 private final class DndDetailAdapter implements DetailAdapter, OnAttachStateChangeListener {
314
Jason Monkbe3235a2017-04-05 09:29:53 -0400315 private ZenModePanel mZenPanel;
316 private boolean mAuto;
317
John Spurlock3c4076a2015-02-24 12:12:25 -0500318 @Override
Jason Monkc06fbb12016-01-08 14:12:18 -0500319 public CharSequence getTitle() {
320 return mContext.getString(R.string.quick_settings_dnd_label);
John Spurlock3c4076a2015-02-24 12:12:25 -0500321 }
322
323 @Override
324 public Boolean getToggleState() {
325 return mState.value;
326 }
327
328 @Override
329 public Intent getSettingsIntent() {
330 return ZEN_SETTINGS;
331 }
332
333 @Override
334 public void setToggleState(boolean state) {
Chris Wrenf6e9228b2016-01-26 18:04:35 -0500335 MetricsLogger.action(mContext, MetricsEvent.QS_DND_TOGGLE, state);
John Spurlock3c4076a2015-02-24 12:12:25 -0500336 if (!state) {
Jason Monkbe3235a2017-04-05 09:29:53 -0400337 mController.setZen(ZEN_MODE_OFF, null, TAG);
338 mAuto = false;
339 } else {
Beverly3e906c52018-01-22 10:49:43 -0500340 mController.setZen(Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, TAG);
John Spurlock3c4076a2015-02-24 12:12:25 -0500341 }
342 }
343
344 @Override
Chris Wren457a21c2015-05-06 17:50:34 -0400345 public int getMetricsCategory() {
Chris Wrenf6e9228b2016-01-26 18:04:35 -0500346 return MetricsEvent.QS_DND_DETAILS;
Chris Wren457a21c2015-05-06 17:50:34 -0400347 }
348
349 @Override
John Spurlock3c4076a2015-02-24 12:12:25 -0500350 public View createDetailView(Context context, View convertView, ViewGroup parent) {
Jason Monkbe3235a2017-04-05 09:29:53 -0400351 mZenPanel = convertView != null ? (ZenModePanel) convertView
John Spurlock3c4076a2015-02-24 12:12:25 -0500352 : (ZenModePanel) LayoutInflater.from(context).inflate(
353 R.layout.zen_mode_panel, parent, false);
354 if (convertView == null) {
Jason Monkbe3235a2017-04-05 09:29:53 -0400355 mZenPanel.init(mController);
356 mZenPanel.addOnAttachStateChangeListener(this);
357 mZenPanel.setCallback(mZenModePanelCallback);
Evan Lairdbcdd0462017-05-15 12:51:34 -0400358 mZenPanel.setEmptyState(R.drawable.ic_qs_dnd_detail_empty, R.string.dnd_is_off);
John Spurlock3c4076a2015-02-24 12:12:25 -0500359 }
Jason Monkbe3235a2017-04-05 09:29:53 -0400360 updatePanel();
361 return mZenPanel;
362 }
363
364 private void updatePanel() {
365 if (mZenPanel == null) return;
366 mAuto = false;
367 if (mController.getZen() == ZEN_MODE_OFF) {
368 mZenPanel.setState(ZenModePanel.STATE_OFF);
369 } else {
370 ZenModeConfig config = mController.getConfig();
371 String summary = "";
372 if (config.manualRule != null && config.manualRule.enabler != null) {
373 summary = getOwnerCaption(config.manualRule.enabler);
374 }
375 for (ZenRule automaticRule : config.automaticRules.values()) {
376 if (automaticRule.isAutomaticActive()) {
377 if (summary.isEmpty()) {
378 summary = mContext.getString(R.string.qs_dnd_prompt_auto_rule,
379 automaticRule.name);
380 } else {
381 summary = mContext.getString(R.string.qs_dnd_prompt_auto_rule_app);
382 }
383 }
384 }
385 if (summary.isEmpty()) {
386 mZenPanel.setState(ZenModePanel.STATE_MODIFY);
387 } else {
388 mAuto = true;
389 mZenPanel.setState(ZenModePanel.STATE_AUTO_RULE);
390 mZenPanel.setAutoText(summary);
391 }
392 }
393 }
394
395 private String getOwnerCaption(String owner) {
396 final PackageManager pm = mContext.getPackageManager();
397 try {
398 final ApplicationInfo info = pm.getApplicationInfo(owner, 0);
399 if (info != null) {
400 final CharSequence seq = info.loadLabel(pm);
401 if (seq != null) {
402 final String str = seq.toString().trim();
403 return mContext.getString(R.string.qs_dnd_prompt_app, str);
404 }
405 }
406 } catch (Throwable e) {
407 Slog.w(TAG, "Error loading owner caption", e);
408 }
409 return "";
John Spurlock3c4076a2015-02-24 12:12:25 -0500410 }
411
412 @Override
413 public void onViewAttachedToWindow(View v) {
414 mShowingDetail = true;
415 }
416
417 @Override
418 public void onViewDetachedFromWindow(View v) {
419 mShowingDetail = false;
Jason Monkbe3235a2017-04-05 09:29:53 -0400420 mZenPanel = null;
John Spurlock3c4076a2015-02-24 12:12:25 -0500421 }
422 }
John Spurlockd9c75db2015-04-28 11:19:13 -0400423
424 private final ZenModePanel.Callback mZenModePanelCallback = new ZenModePanel.Callback() {
425 @Override
426 public void onPrioritySettings() {
Jason Monk9c7844c2017-01-18 15:21:53 -0500427 Dependency.get(ActivityStarter.class).postStartActivityDismissingKeyguard(
428 ZEN_PRIORITY_SETTINGS, 0);
John Spurlockd9c75db2015-04-28 11:19:13 -0400429 }
430
431 @Override
432 public void onInteraction() {
433 // noop
434 }
435
436 @Override
437 public void onExpanded(boolean expanded) {
438 // noop
439 }
440 };
441
John Spurlock3c4076a2015-02-24 12:12:25 -0500442}