1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.systemui.tuner; 16 17 import android.annotation.Nullable; 18 import android.content.Context; 19 import android.content.Intent; 20 import android.provider.Settings; 21 import android.provider.Settings.Global; 22 import android.util.AttributeSet; 23 import android.view.View; 24 import android.view.View.OnClickListener; 25 import android.widget.Checkable; 26 import android.widget.LinearLayout; 27 import android.widget.TextView; 28 import com.android.systemui.Prefs; 29 import com.android.systemui.R; 30 import com.android.systemui.statusbar.policy.ZenModeController; 31 import com.android.systemui.volume.ZenModePanel; 32 import com.android.systemui.volume.ZenModePanel.Callback; 33 34 public class TunerZenModePanel extends LinearLayout implements OnClickListener { 35 private static final String TAG = "TunerZenModePanel"; 36 37 private Callback mCallback; 38 private ZenModePanel mZenModePanel; 39 private View mHeaderSwitch; 40 private int mZenMode; 41 private ZenModeController mController; 42 private View mButtons; 43 private View mMoreSettings; 44 private View mDone; 45 private OnClickListener mDoneListener; 46 private boolean mEditing; 47 TunerZenModePanel(Context context, @Nullable AttributeSet attrs)48 public TunerZenModePanel(Context context, @Nullable AttributeSet attrs) { 49 super(context, attrs); 50 } 51 init(ZenModeController zenModeController)52 public void init(ZenModeController zenModeController) { 53 mController = zenModeController; 54 mHeaderSwitch = findViewById(R.id.tuner_zen_switch); 55 mHeaderSwitch.setVisibility(View.VISIBLE); 56 mHeaderSwitch.setOnClickListener(this); 57 ((TextView) mHeaderSwitch.findViewById(android.R.id.title)).setText( 58 R.string.quick_settings_dnd_label); 59 mZenModePanel = (ZenModePanel) findViewById(R.id.zen_mode_panel); 60 mZenModePanel.init(zenModeController); 61 mButtons = findViewById(R.id.tuner_zen_buttons); 62 mMoreSettings = mButtons.findViewById(android.R.id.button2); 63 mMoreSettings.setOnClickListener(this); 64 ((TextView) mMoreSettings).setText(R.string.quick_settings_more_settings); 65 mDone = mButtons.findViewById(android.R.id.button1); 66 mDone.setOnClickListener(this); 67 ((TextView) mDone).setText(R.string.quick_settings_done); 68 } 69 70 @Override onDetachedFromWindow()71 protected void onDetachedFromWindow() { 72 super.onDetachedFromWindow(); 73 mEditing = false; 74 } 75 setCallback(Callback zenPanelCallback)76 public void setCallback(Callback zenPanelCallback) { 77 mCallback = zenPanelCallback; 78 mZenModePanel.setCallback(zenPanelCallback); 79 } 80 81 @Override onClick(View v)82 public void onClick(View v) { 83 if (v == mHeaderSwitch) { 84 mEditing = true; 85 if (mZenMode == Global.ZEN_MODE_OFF) { 86 mZenMode = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, 87 Global.ZEN_MODE_ALARMS); 88 mController.setZen(mZenMode, null, TAG); 89 postUpdatePanel(); 90 } else { 91 mZenMode = Global.ZEN_MODE_OFF; 92 mController.setZen(Global.ZEN_MODE_OFF, null, TAG); 93 postUpdatePanel(); 94 } 95 } else if (v == mMoreSettings) { 96 Intent intent = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS); 97 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 98 getContext().startActivity(intent); 99 } else if (v == mDone) { 100 mEditing = false; 101 setVisibility(View.GONE); 102 mDoneListener.onClick(v); 103 } 104 } 105 isEditing()106 public boolean isEditing() { 107 return mEditing; 108 } 109 setZenState(int zenMode)110 public void setZenState(int zenMode) { 111 mZenMode = zenMode; 112 postUpdatePanel(); 113 } 114 postUpdatePanel()115 private void postUpdatePanel() { 116 // The complicated structure from reusing the same ZenPanel has resulted in some 117 // unstableness/flickering from callbacks coming in quickly. To solve this just 118 // post the UI updates a little bit. 119 removeCallbacks(mUpdate); 120 postDelayed(mUpdate, 40); 121 } 122 setDoneListener(OnClickListener onClickListener)123 public void setDoneListener(OnClickListener onClickListener) { 124 mDoneListener = onClickListener; 125 } 126 updatePanel()127 private void updatePanel() { 128 boolean zenOn = mZenMode != Global.ZEN_MODE_OFF; 129 ((Checkable) mHeaderSwitch.findViewById(android.R.id.toggle)).setChecked(zenOn); 130 mZenModePanel.setVisibility(zenOn ? View.VISIBLE : View.GONE); 131 mButtons.setVisibility(zenOn ? View.VISIBLE : View.GONE); 132 } 133 134 private final Runnable mUpdate = new Runnable() { 135 @Override 136 public void run() { 137 updatePanel(); 138 } 139 }; 140 } 141