1f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock/*
2f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * Copyright (C) 2015 The Android Open Source Project
3f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock *
4f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License");
5f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * you may not use this file except in compliance with the License.
6f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * You may obtain a copy of the License at
7f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock *
8f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock *      http://www.apache.org/licenses/LICENSE-2.0
9f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock *
10f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * Unless required by applicable law or agreed to in writing, software
11f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS,
12f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * See the License for the specific language governing permissions and
14f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock * limitations under the License.
15f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock */
16f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockpackage com.android.systemui.volume;
17f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
18f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.animation.LayoutTransition;
1922def3d4ebe47d39a03447f46a945228f565a1bfJohn Spurlockimport android.animation.ValueAnimator;
20f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.content.Context;
21f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.provider.Settings.Global;
22b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlockimport android.service.notification.ZenModeConfig;
23f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.util.AttributeSet;
24f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.view.View;
254ec8b6029568021131b38d31df4c5be9ed7e20faJohn Spurlockimport android.widget.ImageView;
26f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.widget.LinearLayout;
27f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport android.widget.TextView;
28f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
29f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport com.android.systemui.R;
30f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockimport com.android.systemui.statusbar.policy.ZenModeController;
31f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
32b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlockimport java.util.Objects;
33b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock
34f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock/**
35d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock * Zen mode information (and end button) attached to the bottom of the volume dialog.
36f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock */
37f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlockpublic class ZenFooter extends LinearLayout {
38f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private static final String TAG = Util.logTag(ZenFooter.class);
39f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
40f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private final Context mContext;
419ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock    private final SpTexts mSpTexts;
42f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
434ec8b6029568021131b38d31df4c5be9ed7e20faJohn Spurlock    private ImageView mIcon;
44f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private TextView mSummaryLine1;
45f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private TextView mSummaryLine2;
469ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock    private TextView mEndNowButton;
47f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private int mZen = -1;
48b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock    private ZenModeConfig mConfig;
49d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock    private ZenModeController mController;
50f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
51f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    public ZenFooter(Context context, AttributeSet attrs) {
52f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        super(context, attrs);
53f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        mContext = context;
549ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock        mSpTexts = new SpTexts(mContext);
5522def3d4ebe47d39a03447f46a945228f565a1bfJohn Spurlock        final LayoutTransition layoutTransition = new LayoutTransition();
5622def3d4ebe47d39a03447f46a945228f565a1bfJohn Spurlock        layoutTransition.setDuration(new ValueAnimator().getDuration() / 2);
5722def3d4ebe47d39a03447f46a945228f565a1bfJohn Spurlock        setLayoutTransition(layoutTransition);
58f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
59f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
60f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    @Override
61f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    protected void onFinishInflate() {
62f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        super.onFinishInflate();
634ec8b6029568021131b38d31df4c5be9ed7e20faJohn Spurlock        mIcon = (ImageView) findViewById(R.id.volume_zen_icon);
64d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock        mSummaryLine1 = (TextView) findViewById(R.id.volume_zen_summary_line_1);
65d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock        mSummaryLine2 = (TextView) findViewById(R.id.volume_zen_summary_line_2);
669ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock        mEndNowButton = (TextView) findViewById(R.id.volume_zen_end_now);
679ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock        mSpTexts.add(mSummaryLine1);
689ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock        mSpTexts.add(mSummaryLine2);
699ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock        mSpTexts.add(mEndNowButton);
70f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
71f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
72d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock    public void init(final ZenModeController controller) {
73d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock        mEndNowButton.setOnClickListener(new OnClickListener() {
74f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock            @Override
75f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock            public void onClick(View v) {
76d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock                controller.setZen(Global.ZEN_MODE_OFF, null, TAG);
77f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock            }
78f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        });
79d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock        mZen = controller.getZen();
80d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock        mConfig = controller.getConfig();
81d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock        mController = controller;
82b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        mController.addCallback(mZenCallback);
838d0a400119d3095a1e3aa0bcdb118e179b7eb050Julia Reynolds        update();
84b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds    }
85b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds
868d0a400119d3095a1e3aa0bcdb118e179b7eb050Julia Reynolds    public void cleanup() {
87b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        mController.removeCallback(mZenCallback);
88b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds    }
89b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds
90f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private void setZen(int zen) {
91f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        if (mZen == zen) return;
92f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        mZen = zen;
93f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        update();
94f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
95f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
96b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock    private void setConfig(ZenModeConfig config) {
97b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock        if (Objects.equals(mConfig, config)) return;
98b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock        mConfig = config;
99b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock        update();
100b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock    }
101b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock
102f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    public boolean isZen() {
1034f1163c83e79da52b2be7ff6b10163441895bc26John Spurlock        return isZenPriority() || isZenAlarms() || isZenNone();
104f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
105f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
106f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private boolean isZenPriority() {
107f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        return mZen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
108f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
109f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
1104f1163c83e79da52b2be7ff6b10163441895bc26John Spurlock    private boolean isZenAlarms() {
1114f1163c83e79da52b2be7ff6b10163441895bc26John Spurlock        return mZen == Global.ZEN_MODE_ALARMS;
1124f1163c83e79da52b2be7ff6b10163441895bc26John Spurlock    }
1134f1163c83e79da52b2be7ff6b10163441895bc26John Spurlock
114f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    private boolean isZenNone() {
115f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        return mZen == Global.ZEN_MODE_NO_INTERRUPTIONS;
116f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
117f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
118f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    public void update() {
1194ec8b6029568021131b38d31df4c5be9ed7e20faJohn Spurlock        mIcon.setImageResource(isZenNone() ? R.drawable.ic_dnd_total_silence : R.drawable.ic_dnd);
120f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        final String line1 =
121f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock                isZenPriority() ? mContext.getString(R.string.interruption_level_priority)
1224f1163c83e79da52b2be7ff6b10163441895bc26John Spurlock                : isZenAlarms() ? mContext.getString(R.string.interruption_level_alarms)
123f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock                : isZenNone() ? mContext.getString(R.string.interruption_level_none)
124f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock                : null;
125f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock        Util.setText(mSummaryLine1, line1);
126d9c75dba75ad4742dbaadc34db99d2b76cebca91John Spurlock
12744ad6ff4c2162842335372060ad6a34fabc8b29dJulia Reynolds        final CharSequence line2 = ZenModeConfig.getConditionSummary(mContext, mConfig,
12844ad6ff4c2162842335372060ad6a34fabc8b29dJulia Reynolds                                mController.getCurrentUser(), true /*shortVersion*/);
129b2278d65714c0dd0a6f94d1913db1ebc8bfc8b06John Spurlock        Util.setText(mSummaryLine2, line2);
130f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock    }
131f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock
1329ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock    public void onConfigurationChanged() {
133f2d824fd560fb32fb789d15b670e9258a177da71Johan Redestig        Util.setText(mEndNowButton, mContext.getString(R.string.volume_zen_end_now));
134c791e05f768ff66e801f872cfdf27cc62b6195dbJulia Reynolds        mSpTexts.update();
1359ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock    }
1369ea3a1e19f66317adbedae1244432d4757e1723fJohn Spurlock
137b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds    private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() {
138b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        @Override
139b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        public void onZenChanged(int zen) {
140b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds            setZen(zen);
141b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        }
142b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        @Override
143b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        public void onConfigChanged(ZenModeConfig config) {
144b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds            setConfig(config);
145b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds        }
146b44ef7eb43a07b7c2968d21f53a5b30243229bdbJulia Reynolds    };
147f88d8082a86bee00c604cbbcfb5261f5573936feJohn Spurlock}
148