blob: 4d95969a63b549dc5eed9c3374ff081c33191ce4 [file] [log] [blame]
/*
* 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.view.ViewGroup;
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);
// Hide the resizing space because it causes issues in the volume panel.
ViewGroup detail_header = findViewById(R.id.tuner_zen_switch);
detail_header.getChildAt(0).setVisibility(View.GONE);
// No background so it can blend with volume panel.
findViewById(R.id.edit_container).setBackground(null);
}
@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();
}
};
}