blob: c06b63bd8f662e9ccc49b400e2d34dfb609583df [file] [log] [blame]
John Spurlockf88d8082015-03-25 18:09:51 -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 */
16package com.android.systemui.volume;
17
18import android.animation.LayoutTransition;
John Spurlock22def3d2015-06-17 11:56:12 -040019import android.animation.ValueAnimator;
John Spurlockf88d8082015-03-25 18:09:51 -040020import android.content.Context;
John Spurlockf88d8082015-03-25 18:09:51 -040021import android.provider.Settings.Global;
John Spurlockb2278d62015-04-07 12:47:12 -040022import android.service.notification.ZenModeConfig;
John Spurlockf88d8082015-03-25 18:09:51 -040023import android.util.AttributeSet;
John Spurlockf88d8082015-03-25 18:09:51 -040024import android.view.View;
John Spurlock4ec8b602015-05-11 17:46:28 -040025import android.widget.ImageView;
John Spurlockf88d8082015-03-25 18:09:51 -040026import android.widget.LinearLayout;
John Spurlockf88d8082015-03-25 18:09:51 -040027import android.widget.TextView;
28
29import com.android.systemui.R;
30import com.android.systemui.statusbar.policy.ZenModeController;
31
John Spurlockb2278d62015-04-07 12:47:12 -040032import java.util.Objects;
33
John Spurlockf88d8082015-03-25 18:09:51 -040034/**
John Spurlockd9c75db2015-04-28 11:19:13 -040035 * Zen mode information (and end button) attached to the bottom of the volume dialog.
John Spurlockf88d8082015-03-25 18:09:51 -040036 */
37public class ZenFooter extends LinearLayout {
38 private static final String TAG = Util.logTag(ZenFooter.class);
39
40 private final Context mContext;
John Spurlock9ea3a1e2015-05-06 17:12:18 -040041 private final SpTexts mSpTexts;
John Spurlockf88d8082015-03-25 18:09:51 -040042
John Spurlock4ec8b602015-05-11 17:46:28 -040043 private ImageView mIcon;
John Spurlockf88d8082015-03-25 18:09:51 -040044 private TextView mSummaryLine1;
45 private TextView mSummaryLine2;
John Spurlock9ea3a1e2015-05-06 17:12:18 -040046 private TextView mEndNowButton;
John Spurlockf88d8082015-03-25 18:09:51 -040047 private int mZen = -1;
John Spurlockb2278d62015-04-07 12:47:12 -040048 private ZenModeConfig mConfig;
John Spurlockd9c75db2015-04-28 11:19:13 -040049 private ZenModeController mController;
John Spurlockf88d8082015-03-25 18:09:51 -040050
51 public ZenFooter(Context context, AttributeSet attrs) {
52 super(context, attrs);
53 mContext = context;
John Spurlock9ea3a1e2015-05-06 17:12:18 -040054 mSpTexts = new SpTexts(mContext);
John Spurlock22def3d2015-06-17 11:56:12 -040055 final LayoutTransition layoutTransition = new LayoutTransition();
56 layoutTransition.setDuration(new ValueAnimator().getDuration() / 2);
57 setLayoutTransition(layoutTransition);
John Spurlockf88d8082015-03-25 18:09:51 -040058 }
59
60 @Override
61 protected void onFinishInflate() {
62 super.onFinishInflate();
John Spurlock4ec8b602015-05-11 17:46:28 -040063 mIcon = (ImageView) findViewById(R.id.volume_zen_icon);
John Spurlockd9c75db2015-04-28 11:19:13 -040064 mSummaryLine1 = (TextView) findViewById(R.id.volume_zen_summary_line_1);
65 mSummaryLine2 = (TextView) findViewById(R.id.volume_zen_summary_line_2);
John Spurlock9ea3a1e2015-05-06 17:12:18 -040066 mEndNowButton = (TextView) findViewById(R.id.volume_zen_end_now);
67 mSpTexts.add(mSummaryLine1);
68 mSpTexts.add(mSummaryLine2);
69 mSpTexts.add(mEndNowButton);
John Spurlockf88d8082015-03-25 18:09:51 -040070 }
71
John Spurlockd9c75db2015-04-28 11:19:13 -040072 public void init(final ZenModeController controller) {
73 controller.addCallback(new ZenModeController.Callback() {
John Spurlockf88d8082015-03-25 18:09:51 -040074 @Override
75 public void onZenChanged(int zen) {
76 setZen(zen);
77 }
78 @Override
John Spurlockb2278d62015-04-07 12:47:12 -040079 public void onConfigChanged(ZenModeConfig config) {
80 setConfig(config);
John Spurlockf88d8082015-03-25 18:09:51 -040081 }
82 });
John Spurlockd9c75db2015-04-28 11:19:13 -040083 mEndNowButton.setOnClickListener(new OnClickListener() {
John Spurlockf88d8082015-03-25 18:09:51 -040084 @Override
85 public void onClick(View v) {
John Spurlockd9c75db2015-04-28 11:19:13 -040086 controller.setZen(Global.ZEN_MODE_OFF, null, TAG);
John Spurlockf88d8082015-03-25 18:09:51 -040087 }
88 });
John Spurlockd9c75db2015-04-28 11:19:13 -040089 mZen = controller.getZen();
90 mConfig = controller.getConfig();
91 mController = controller;
John Spurlockf88d8082015-03-25 18:09:51 -040092 update();
93 }
94
95 private void setZen(int zen) {
96 if (mZen == zen) return;
97 mZen = zen;
98 update();
99 }
100
John Spurlockb2278d62015-04-07 12:47:12 -0400101 private void setConfig(ZenModeConfig config) {
102 if (Objects.equals(mConfig, config)) return;
103 mConfig = config;
104 update();
105 }
106
John Spurlockf88d8082015-03-25 18:09:51 -0400107 public boolean isZen() {
John Spurlock4f1163c2015-04-02 17:41:21 -0400108 return isZenPriority() || isZenAlarms() || isZenNone();
John Spurlockf88d8082015-03-25 18:09:51 -0400109 }
110
111 private boolean isZenPriority() {
112 return mZen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
113 }
114
John Spurlock4f1163c2015-04-02 17:41:21 -0400115 private boolean isZenAlarms() {
116 return mZen == Global.ZEN_MODE_ALARMS;
117 }
118
John Spurlockf88d8082015-03-25 18:09:51 -0400119 private boolean isZenNone() {
120 return mZen == Global.ZEN_MODE_NO_INTERRUPTIONS;
121 }
122
John Spurlockf88d8082015-03-25 18:09:51 -0400123 public void update() {
John Spurlock4ec8b602015-05-11 17:46:28 -0400124 mIcon.setImageResource(isZenNone() ? R.drawable.ic_dnd_total_silence : R.drawable.ic_dnd);
John Spurlockf88d8082015-03-25 18:09:51 -0400125 final String line1 =
126 isZenPriority() ? mContext.getString(R.string.interruption_level_priority)
John Spurlock4f1163c2015-04-02 17:41:21 -0400127 : isZenAlarms() ? mContext.getString(R.string.interruption_level_alarms)
John Spurlockf88d8082015-03-25 18:09:51 -0400128 : isZenNone() ? mContext.getString(R.string.interruption_level_none)
129 : null;
130 Util.setText(mSummaryLine1, line1);
John Spurlockd9c75db2015-04-28 11:19:13 -0400131
John Spurlock023544f2015-06-02 17:52:46 -0400132 final boolean isForever = mConfig != null && mConfig.manualRule != null
133 && mConfig.manualRule.conditionId == null;
134 final String line2 =
135 isForever ? mContext.getString(com.android.internal.R.string.zen_mode_forever_dnd)
136 : ZenModeConfig.getConditionSummary(mContext, mConfig, mController.getCurrentUser(),
137 true /*shortVersion*/);
John Spurlockb2278d62015-04-07 12:47:12 -0400138 Util.setText(mSummaryLine2, line2);
John Spurlockf88d8082015-03-25 18:09:51 -0400139 }
140
John Spurlock9ea3a1e2015-05-06 17:12:18 -0400141 public void onConfigurationChanged() {
Johan Redestigf2d824f2015-10-23 18:23:40 +0200142 Util.setText(mEndNowButton, mContext.getString(R.string.volume_zen_end_now));
Julia Reynoldsc791e052016-02-19 16:02:01 -0500143 mSpTexts.update();
John Spurlock9ea3a1e2015-05-06 17:12:18 -0400144 }
145
John Spurlockf88d8082015-03-25 18:09:51 -0400146}