ZenModeRuleSettingsBase.java revision 1d33d59be29c719f8003458373585397a781dc77
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;
28f7748e4ae15e49f9f4a9cc15a372e9a6d3c35c56Julia Reynoldsimport android.service.notification.ConditionProviderService;
291230ac820ea94b8f3f6285fd4cae056e62d96183Jason Monkimport android.support.v7.preference.DropDownPreference;
3039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference;
3139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceChangeListener;
3239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceClickListener;
3339b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen;
34c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.util.Log;
35c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.view.Menu;
36c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.view.MenuInflater;
37c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.view.MenuItem;
38b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lamimport android.view.View;
39c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.widget.Switch;
40c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport android.widget.Toast;
41c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
421b6ffba9e69dc1926e3c4cbcb52d1844c6ccaa32Chris Wrenimport com.android.internal.logging.MetricsLogger;
439d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
44c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.R;
45c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.SettingsActivity;
46c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockimport com.android.settings.widget.SwitchBar;
47c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
48c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlockpublic abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase
49c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        implements SwitchBar.OnSwitchChangeListener {
50c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected static final String TAG = ZenModeSettingsBase.TAG;
51c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected static final boolean DEBUG = ZenModeSettingsBase.DEBUG;
52c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
53c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private static final String KEY_RULE_NAME = "rule_name";
54c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private static final String KEY_ZEN_MODE = "zen_mode";
55c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
56c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected Context mContext;
57c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected boolean mDisableListeners;
587d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    protected AutomaticZenRule mRule;
5925cb8f06914538f337be66d9a784834a7373b58aJulia Reynolds    protected String mId;
60c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
61c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private boolean mDeleting;
62c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private Preference mRuleName;
63c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private SwitchBar mSwitchBar;
64c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private DropDownPreference mZenMode;
65f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock    private Toast mEnabledToast;
66c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
67c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    abstract protected void onCreateInternal();
687d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    abstract protected boolean setRule(AutomaticZenRule rule);
69c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    abstract protected String getZenModeDependency();
70c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    abstract protected void updateControlsInternal();
71f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock    abstract protected int getEnabledToastText();
72c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
73c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
74c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onCreate(Bundle icicle) {
75c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onCreate(icicle);
76c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
77c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mContext = getActivity();
78c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
79c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final Intent intent = getActivity().getIntent();
80c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onCreate getIntent()=" + intent);
81c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (intent == null) {
82c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            Log.w(TAG, "No intent");
83c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            toastAndFinish();
84c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return;
85c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
86c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
8725cb8f06914538f337be66d9a784834a7373b58aJulia Reynolds        mId = intent.getStringExtra(ConditionProviderService.EXTRA_RULE_ID);
8825cb8f06914538f337be66d9a784834a7373b58aJulia Reynolds        if (DEBUG) Log.d(TAG, "mId=" + mId);
89c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (refreshRuleOrFinish()) {
90c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return;
91c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
92c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
93c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        setHasOptionsMenu(true);
94c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
95c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        onCreateInternal();
96c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
97c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final PreferenceScreen root = getPreferenceScreen();
98c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mRuleName = root.findPreference(KEY_RULE_NAME);
99c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mRuleName.setOnPreferenceClickListener(new OnPreferenceClickListener() {
100c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            @Override
101c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            public boolean onPreferenceClick(Preference preference) {
102c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                showRuleNameDialog();
103c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                return true;
104c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            }
105c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        });
106c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
107c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mZenMode = (DropDownPreference) root.findPreference(KEY_ZEN_MODE);
10849b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        mZenMode.setEntries(new CharSequence[] {
10949b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                getString(R.string.zen_mode_option_important_interruptions),
11049b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                getString(R.string.zen_mode_option_alarms),
11149b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                getString(R.string.zen_mode_option_no_interruptions),
11249b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        });
11349b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        mZenMode.setEntryValues(new CharSequence[] {
1147d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                Integer.toString(NotificationManager.INTERRUPTION_FILTER_PRIORITY),
1157d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                Integer.toString(NotificationManager.INTERRUPTION_FILTER_ALARMS),
1167d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                Integer.toString(NotificationManager.INTERRUPTION_FILTER_NONE),
11749b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        });
11849b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk        mZenMode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
119c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            @Override
12049b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk            public boolean onPreferenceChange(Preference preference, Object newValue) {
12149b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                if (mDisableListeners) return false;
12249b6103b56d777cb41f280e0dc636f738f6ba56dJason Monk                final int zenMode = Integer.parseInt((String) newValue);
1237d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                if (zenMode == mRule.getInterruptionFilter()) return false;
124c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                if (DEBUG) Log.d(TAG, "onPrefChange zenMode=" + zenMode);
1257d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                mRule.setInterruptionFilter(zenMode);
1261d33d59be29c719f8003458373585397a781dc77Julia Reynolds                setZenRule(mId, mRule);
127c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                return true;
128c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            }
129c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        });
130c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mZenMode.setOrder(10);  // sort at the bottom of the category
131c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mZenMode.setDependency(getZenModeDependency());
132c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
133c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
134c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
135c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onResume() {
136c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onResume();
137366d8809c886fd5857f872def96a436a50be2c06Sudheer Shanka        if (isUiRestricted()) {
138366d8809c886fd5857f872def96a436a50be2c06Sudheer Shanka            return;
139366d8809c886fd5857f872def96a436a50be2c06Sudheer Shanka        }
140c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        updateControls();
141c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
142c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
143c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
144c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onActivityCreated(Bundle savedInstanceState) {
145c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onActivityCreated(savedInstanceState);
146c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
147c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final SettingsActivity activity = (SettingsActivity) getActivity();
148c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar = activity.getSwitchBar();
149c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.addOnSwitchChangeListener(this);
150c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.show();
151c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
152c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
153c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
154c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onDestroyView() {
155c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        super.onDestroyView();
156c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.removeOnSwitchChangeListener(this);
157c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mSwitchBar.hide();
158c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
159c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
160c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
161c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onSwitchChanged(Switch switchView, boolean isChecked) {
162c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onSwitchChanged " + isChecked);
163c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (mDisableListeners) return;
164c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        final boolean enabled = isChecked;
1657d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        if (enabled == mRule.isEnabled()) return;
1669d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ENABLE_RULE, enabled);
167c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onSwitchChanged enabled=" + enabled);
1687d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRule.setEnabled(enabled);
1691d33d59be29c719f8003458373585397a781dc77Julia Reynolds        setZenRule(mId, mRule);
170f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        if (enabled) {
171f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            final int toastText = getEnabledToastText();
172f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            if (toastText != 0) {
173f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock                mEnabledToast = Toast.makeText(mContext, toastText, Toast.LENGTH_SHORT);
174f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock                mEnabledToast.show();
175f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            }
176f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        } else {
177f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            if (mEnabledToast != null) {
178f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock                mEnabledToast.cancel();
179f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock            }
180f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        }
181c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
182c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
183c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected void updateRule(Uri newConditionId) {
1847d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRule.setConditionId(newConditionId);
1851d33d59be29c719f8003458373585397a781dc77Julia Reynolds        setZenRule(mId, mRule);
186c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
187c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
188c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
189c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected void onZenModeChanged() {
190c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        // noop
191c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
192c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
193c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
194c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    protected void onZenModeConfigChanged() {
195c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (!refreshRuleOrFinish()) {
196c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            updateControls();
197c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
198c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
199c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
200c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
201c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
202c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onCreateOptionsMenu");
203c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        inflater.inflate(R.menu.zen_mode_rule, menu);
204c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
205c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
206c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    @Override
207c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    public boolean onOptionsItemSelected(MenuItem item) {
208c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "onOptionsItemSelected " + item.getItemId());
209c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (item.getItemId() == R.id.delete) {
2109d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren            MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_DELETE_RULE);
211c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            showDeleteRuleDialog();
212c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return true;
213c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
214c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        return super.onOptionsItemSelected(item);
215c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
216c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
217c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void showRuleNameDialog() {
21825cb8f06914538f337be66d9a784834a7373b58aJulia Reynolds        new ZenRuleNameDialog(mContext, mRule.getName()) {
219c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            @Override
220f7748e4ae15e49f9f4a9cc15a372e9a6d3c35c56Julia Reynolds            public void onOk(String ruleName) {
22125cb8f06914538f337be66d9a784834a7373b58aJulia Reynolds                mRule.setName(ruleName);
2221d33d59be29c719f8003458373585397a781dc77Julia Reynolds                setZenRule(mId, mRule);
223c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            }
224c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }.show();
225c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
226c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
227c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private boolean refreshRuleOrFinish() {
2287d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRule = getZenRule();
229c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (DEBUG) Log.d(TAG, "mRule=" + mRule);
230c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (!setRule(mRule)) {
231c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            toastAndFinish();
232c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            return true;
233c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
234c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        return false;
235c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
236c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
237c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void showDeleteRuleDialog() {
238b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        final AlertDialog dialog = new AlertDialog.Builder(mContext)
2397d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds                .setMessage(getString(R.string.zen_mode_delete_rule_confirmation, mRule.getName()))
240c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                .setNegativeButton(R.string.cancel, null)
241c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                .setPositiveButton(R.string.zen_mode_delete_rule_button, new OnClickListener() {
242c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    @Override
243c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    public void onClick(DialogInterface dialog, int which) {
2449d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren                        MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_DELETE_RULE_OK);
245c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                        mDeleting = true;
2461d33d59be29c719f8003458373585397a781dc77Julia Reynolds                        removeZenRule(mId);
247c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    }
248c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                })
249c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                .show();
250b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        final View messageView = dialog.findViewById(android.R.id.message);
251b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        if (messageView != null) {
252b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam            messageView.setTextDirection(View.TEXT_DIRECTION_LOCALE);
253b01383beab9d2d1dc610e51dfeff9da0c5db8302Maurice Lam        }
254c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
255c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
256c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void toastAndFinish() {
257c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (!mDeleting) {
258c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock            Toast.makeText(mContext, R.string.zen_mode_rule_not_found_text, Toast.LENGTH_SHORT)
259c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock                    .show();
260c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
261c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        getActivity().finish();
262c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
263c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
264c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void updateRuleName() {
2657d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        getActivity().setTitle(mRule.getName());
2667d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mRuleName.setSummary(mRule.getName());
2677d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    }
2687d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds
2697d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds    private AutomaticZenRule getZenRule() {
27025cb8f06914538f337be66d9a784834a7373b58aJulia Reynolds        return NotificationManager.from(mContext).getAutomaticZenRule(mId);
271c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
272c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
273c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    private void updateControls() {
274c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        mDisableListeners = true;
275c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        updateRuleName();
276c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        updateControlsInternal();
2777d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds        mZenMode.setValue(Integer.toString(mRule.getInterruptionFilter()));
278c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        if (mSwitchBar != null) {
2797d8a9aead53f817c9df14cc5feaae223a8a834e8Julia Reynolds            mSwitchBar.setChecked(mRule.isEnabled());
280c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock        }
281f57bad7d5b0f9044231fc52351ed27e14013f491John Spurlock        mDisableListeners = false;
282c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock    }
283c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock
284c96a5dcbfc3f37f71e8b3e8b962f9571b1e7ceafJohn Spurlock}
285