/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.systemui.tuner; import android.annotation.Nullable; import android.content.Context; import android.content.Intent; import android.provider.Settings; import android.provider.Settings.Global; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.Checkable; import android.widget.LinearLayout; import android.widget.TextView; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.volume.ZenModePanel; import com.android.systemui.volume.ZenModePanel.Callback; public class TunerZenModePanel extends LinearLayout implements OnClickListener { private static final String TAG = "TunerZenModePanel"; private Callback mCallback; private ZenModePanel mZenModePanel; private View mHeaderSwitch; private int mZenMode; private ZenModeController mController; private View mButtons; private View mMoreSettings; private View mDone; private OnClickListener mDoneListener; private boolean mEditing; public TunerZenModePanel(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public void init(ZenModeController zenModeController) { mController = zenModeController; mHeaderSwitch = findViewById(R.id.tuner_zen_switch); mHeaderSwitch.setVisibility(View.VISIBLE); mHeaderSwitch.setOnClickListener(this); ((TextView) mHeaderSwitch.findViewById(android.R.id.title)).setText( R.string.quick_settings_dnd_label); mZenModePanel = (ZenModePanel) findViewById(R.id.zen_mode_panel); mZenModePanel.init(zenModeController); mButtons = findViewById(R.id.tuner_zen_buttons); mMoreSettings = mButtons.findViewById(android.R.id.button2); mMoreSettings.setOnClickListener(this); ((TextView) mMoreSettings).setText(R.string.quick_settings_more_settings); mDone = mButtons.findViewById(android.R.id.button1); mDone.setOnClickListener(this); ((TextView) mDone).setText(R.string.quick_settings_done); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mEditing = false; } public void setCallback(Callback zenPanelCallback) { mCallback = zenPanelCallback; mZenModePanel.setCallback(zenPanelCallback); } @Override public void onClick(View v) { if (v == mHeaderSwitch) { mEditing = true; if (mZenMode == Global.ZEN_MODE_OFF) { mZenMode = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS); mController.setZen(mZenMode, null, TAG); postUpdatePanel(); } else { mZenMode = Global.ZEN_MODE_OFF; mController.setZen(Global.ZEN_MODE_OFF, null, TAG); postUpdatePanel(); } } else if (v == mMoreSettings) { Intent intent = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getContext().startActivity(intent); } else if (v == mDone) { mEditing = false; setVisibility(View.GONE); mDoneListener.onClick(v); } } public boolean isEditing() { return mEditing; } public void setZenState(int zenMode) { mZenMode = zenMode; postUpdatePanel(); } private void postUpdatePanel() { // The complicated structure from reusing the same ZenPanel has resulted in some // unstableness/flickering from callbacks coming in quickly. To solve this just // post the UI updates a little bit. removeCallbacks(mUpdate); postDelayed(mUpdate, 40); } public void setDoneListener(OnClickListener onClickListener) { mDoneListener = onClickListener; } private void updatePanel() { boolean zenOn = mZenMode != Global.ZEN_MODE_OFF; ((Checkable) mHeaderSwitch.findViewById(android.R.id.toggle)).setChecked(zenOn); mZenModePanel.setVisibility(zenOn ? View.VISIBLE : View.GONE); mButtons.setVisibility(zenOn ? View.VISIBLE : View.GONE); } private final Runnable mUpdate = new Runnable() { @Override public void run() { updatePanel(); } }; }