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