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