ZenModeRuleSettingsBase.java revision f7748e4ae15e49f9f4a9cc15a372e9a6d3c35c56
1c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock/*
2c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * Copyright (C) 2015 The Android Open Source Project
3c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock *
4c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License");
5c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * you may not use this file except in compliance with the License.
6c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * You may obtain a copy of the License at
7c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock *
8c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock *      http://www.apache.org/licenses/LICENSE-2.0
9c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock *
10c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * Unless required by applicable law or agreed to in writing, software
11c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS,
12c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * See the License for the specific language governing permissions and
14c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock * limitations under the License.
15c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock */
16c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
17c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockpackage com.android.settings.notification;
18c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
19c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.app.AlertDialog;
207d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynoldsimport android.app.AutomaticZenRule;
217d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynoldsimport android.app.NotificationManager;
22c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.content.Context;
23c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.content.DialogInterface;
24c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.content.DialogInterface.OnClickListener;
25c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.content.Intent;
26c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.net.Uri;
27c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.os.Bundle;
28c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.preference.Preference;
2949b6103b56d777cb41f280e0dc636f738f6ba56dJason Monkimport android.preference.Preference.OnPreferenceChangeListener;
30c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.preference.Preference.OnPreferenceClickListener;
31c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.preference.PreferenceScreen;
32f7748e4ae15e49f9f4a9cc15a372e9a6d3c35c56Julia Reynoldsimport android.service.notification.ConditionProviderService;
33c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.util.Log;
34c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.view.Menu;
35c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.view.MenuInflater;
36c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.view.MenuItem;
37b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lamimport android.view.View;
38c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.widget.Switch;
39c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.widget.Toast;
40c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
411b6ffba9e69dc1926e3c4cbcb52d1844c6ccaa32Chris Wrenimport com.android.internal.logging.MetricsLogger;
42c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.DropDownPreference;
43c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.R;
44c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.SettingsActivity;
45c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.widget.SwitchBar;
46c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
47c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockpublic abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase
48c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        implements SwitchBar.OnSwitchChangeListener {
49c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected static final String TAG = ZenModeSettingsBase.TAG;
50c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected static final boolean DEBUG = ZenModeSettingsBase.DEBUG;
51c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
52c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private static final String KEY_RULE_NAME = "rule_name";
53c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private static final String KEY_ZEN_MODE = "zen_mode";
54c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
55c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected Context mContext;
56c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected boolean mDisableListeners;
577d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    protected AutomaticZenRule mRule;
587d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    protected String mName;
59c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
60c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private boolean mDeleting;
61c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private Preference mRuleName;
62c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private SwitchBar mSwitchBar;
63c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private DropDownPreference mZenMode;
64f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock    private Toast mEnabledToast;
65c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
66c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    abstract protected void onCreateInternal();
677d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    abstract protected boolean setRule(AutomaticZenRule rule);
68c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    abstract protected String getZenModeDependency();
69c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    abstract protected void updateControlsInternal();
70f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock    abstract protected int getEnabledToastText();
71c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
72c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
73c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onCreate(Bundle icicle) {
74c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onCreate(icicle);
75c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
76c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mContext = getActivity();
77c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
78c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final Intent intent = getActivity().getIntent();
79c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onCreate getIntent()=" + intent);
80c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (intent == null) {
81c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            Log.w(TAG, "No intent");
82c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            toastAndFinish();
83c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return;
84c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
85c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
86f7748e4ae15e49f9f4a9cc15a372e9a6d3c35c56Julia Reynolds        mName = intent.getStringExtra(ConditionProviderService.EXTRA_RULE_NAME);
877d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        if (DEBUG) Log.d(TAG, "mName=" + mName);
88c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (refreshRuleOrFinish()) {
89c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return;
90c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
91c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
92c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        setHasOptionsMenu(true);
93c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
94c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        onCreateInternal();
95c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
96c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final PreferenceScreen root = getPreferenceScreen();
97c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mRuleName = root.findPreference(KEY_RULE_NAME);
98c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mRuleName.setOnPreferenceClickListener(new OnPreferenceClickListener() {
99c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            @Override
100c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            public boolean onPreferenceClick(Preference preference) {
101c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                showRuleNameDialog();
102c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                return true;
103c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            }
104c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        });
105c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
106c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mZenMode = (DropDownPreference) root.findPreference(KEY_ZEN_MODE);
10749b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        mZenMode.setEntries(new CharSequence[] {
10849b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                getString(R.string.zen_mode_option_important_interruptions),
10949b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                getString(R.string.zen_mode_option_alarms),
11049b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                getString(R.string.zen_mode_option_no_interruptions),
11149b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        });
11249b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        mZenMode.setEntryValues(new CharSequence[] {
1137d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                Integer.toString(NotificationManager.INTERRUPTION_FILTER_PRIORITY),
1147d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                Integer.toString(NotificationManager.INTERRUPTION_FILTER_ALARMS),
1157d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                Integer.toString(NotificationManager.INTERRUPTION_FILTER_NONE),
11649b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        });
11749b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        mZenMode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
118c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            @Override
11949b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk            public boolean onPreferenceChange(Preference preference, Object newValue) {
12049b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                if (mDisableListeners) return false;
12149b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                final int zenMode = Integer.parseInt((String) newValue);
1227d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                if (zenMode == mRule.getInterruptionFilter()) return false;
123c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                if (DEBUG) Log.d(TAG, "onPrefChange zenMode=" + zenMode);
1247d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                mRule.setInterruptionFilter(zenMode);
1257d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                setZenRule(mRule);
126c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                return true;
127c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            }
128c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        });
129c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mZenMode.setOrder(10);  // sort at the bottom of the category
130c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mZenMode.setDependency(getZenModeDependency());
131c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
132c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
133c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
134c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onResume() {
135c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onResume();
136c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        updateControls();
137c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
138c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
139c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
140c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onActivityCreated(Bundle savedInstanceState) {
141c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onActivityCreated(savedInstanceState);
142c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
143c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final SettingsActivity activity = (SettingsActivity) getActivity();
144c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar = activity.getSwitchBar();
145c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.addOnSwitchChangeListener(this);
146c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.show();
147c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
148c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
149c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
150c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onDestroyView() {
151c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onDestroyView();
152c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.removeOnSwitchChangeListener(this);
153c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.hide();
154c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
155c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
156c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
157c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onSwitchChanged(Switch switchView, boolean isChecked) {
158c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onSwitchChanged " + isChecked);
159c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (mDisableListeners) return;
160c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final boolean enabled = isChecked;
1617d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        if (enabled == mRule.isEnabled()) return;
1621b6ffba9e69dc1926e3c4cbcb52d1844c6ccaa32Chris Wren        MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ENABLE_RULE, enabled);
163c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onSwitchChanged enabled=" + enabled);
1647d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRule.setEnabled(enabled);
1657d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        setZenRule(mRule);
166f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        if (enabled) {
167f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            final int toastText = getEnabledToastText();
168f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            if (toastText != 0) {
169f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock                mEnabledToast = Toast.makeText(mContext, toastText, Toast.LENGTH_SHORT);
170f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock                mEnabledToast.show();
171f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            }
172f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        } else {
173f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            if (mEnabledToast != null) {
174f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock                mEnabledToast.cancel();
175f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            }
176f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        }
177c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
178c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
179c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected void updateRule(Uri newConditionId) {
1807d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRule.setConditionId(newConditionId);
1817d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        setZenRule(mRule);
182c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
183c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
184c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
185c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected void onZenModeChanged() {
186c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        // noop
187c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
188c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
189c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
190c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected void onZenModeConfigChanged() {
191c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (!refreshRuleOrFinish()) {
192c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            updateControls();
193c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
194c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
195c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
196c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
197c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
198c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onCreateOptionsMenu");
199c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        inflater.inflate(R.menu.zen_mode_rule, menu);
200c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
201c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
202c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
203c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public boolean onOptionsItemSelected(MenuItem item) {
204c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onOptionsItemSelected " + item.getItemId());
205c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (item.getItemId() == R.id.delete) {
2061b6ffba9e69dc1926e3c4cbcb52d1844c6ccaa32Chris Wren            MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_DELETE_RULE);
207c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            showDeleteRuleDialog();
208c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return true;
209c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
210c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        return super.onOptionsItemSelected(item);
211c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
212c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
213c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void showRuleNameDialog() {
2147d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        new ZenRuleNameDialog(mContext, null, mRule.getName(), mRules) {
215c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            @Override
216f7748e4ae15e49f9f4a9cc15a372e9a6d3c35c56Julia Reynolds            public void onOk(String ruleName) {
2177d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                renameZenRule(mRule.getName(), ruleName);
218c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            }
219c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }.show();
220c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
221c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
222c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private boolean refreshRuleOrFinish() {
2237d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRule = getZenRule();
224c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "mRule=" + mRule);
225c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (!setRule(mRule)) {
226c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            toastAndFinish();
227c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return true;
228c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
229c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        return false;
230c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
231c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
232c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void showDeleteRuleDialog() {
233b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        final AlertDialog dialog = new AlertDialog.Builder(mContext)
2347d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                .setMessage(getString(R.string.zen_mode_delete_rule_confirmation, mRule.getName()))
235c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                .setNegativeButton(R.string.cancel, null)
236c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                .setPositiveButton(R.string.zen_mode_delete_rule_button, new OnClickListener() {
237c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    @Override
238c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    public void onClick(DialogInterface dialog, int which) {
2391b6ffba9e69dc1926e3c4cbcb52d1844c6ccaa32Chris Wren                        MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_DELETE_RULE_OK);
240c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                        mDeleting = true;
2417d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                        removeZenRule(mRule.getName());
242c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    }
243c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                })
244c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                .show();
245b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        final View messageView = dialog.findViewById(android.R.id.message);
246b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        if (messageView != null) {
247b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam            messageView.setTextDirection(View.TEXT_DIRECTION_LOCALE);
248b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        }
249c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
250c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
251c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void toastAndFinish() {
252c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (!mDeleting) {
253c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            Toast.makeText(mContext, R.string.zen_mode_rule_not_found_text, Toast.LENGTH_SHORT)
254c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    .show();
255c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
256c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        getActivity().finish();
257c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
258c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
259c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void updateRuleName() {
2607d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        getActivity().setTitle(mRule.getName());
2617d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRuleName.setSummary(mRule.getName());
2627d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    }
2637d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds
2647d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    private AutomaticZenRule getZenRule() {
2657d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        return NotificationManager.from(mContext).getAutomaticZenRule(mName);
2667d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    }
2677d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds
2687d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    private boolean renameZenRule(String oldName, String newName) {
2697d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        final boolean success =
2707d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                NotificationManager.from(mContext).renameAutomaticZenRule(oldName, newName);
2717d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        if (success) {
2727d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds            mName = newName;
2737d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        }
2747d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        maybeRefreshRules(success, true);
2757d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        return success;
276c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
277c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
278c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void updateControls() {
279c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mDisableListeners = true;
280c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        updateRuleName();
281c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        updateControlsInternal();
2827d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mZenMode.setValue(Integer.toString(mRule.getInterruptionFilter()));
283c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (mSwitchBar != null) {
2847d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds            mSwitchBar.setChecked(mRule.isEnabled());
285c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
286f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        mDisableListeners = false;
287c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
288c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
289c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock}
290