• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.notification;
18 
19 import android.app.AutomaticZenRule;
20 import android.app.NotificationManager;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.net.Uri;
24 import android.os.Bundle;
25 import android.service.notification.ConditionProviderService;
26 import android.support.v7.preference.Preference;
27 import android.support.v7.preference.PreferenceScreen;
28 import android.util.Log;
29 import android.widget.Toast;
30 
31 import com.android.settings.R;
32 import com.android.settingslib.core.AbstractPreferenceController;
33 
34 public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase {
35 
36     protected static final String TAG = ZenModeSettingsBase.TAG;
37     protected static final boolean DEBUG = ZenModeSettingsBase.DEBUG;
38 
39     protected Context mContext;
40     protected boolean mDisableListeners;
41     protected AutomaticZenRule mRule;
42     protected String mId;
43 
44     protected ZenAutomaticRuleHeaderPreferenceController mHeader;
45     protected ZenAutomaticRuleSwitchPreferenceController mSwitch;
46 
onCreateInternal()47     abstract protected void onCreateInternal();
setRule(AutomaticZenRule rule)48     abstract protected boolean setRule(AutomaticZenRule rule);
updateControlsInternal()49     abstract protected void updateControlsInternal();
50 
51     @Override
onCreate(Bundle icicle)52     public void onCreate(Bundle icicle) {
53         mContext = getActivity();
54 
55         final Intent intent = getActivity().getIntent();
56         if (DEBUG) Log.d(TAG, "onCreate getIntent()=" + intent);
57         if (intent == null) {
58             Log.w(TAG, "No intent");
59             toastAndFinish();
60             return;
61         }
62 
63         mId = intent.getStringExtra(ConditionProviderService.EXTRA_RULE_ID);
64         if (mId == null) {
65             Log.w(TAG, "rule id is null");
66             toastAndFinish();
67             return;
68         }
69 
70         if (DEBUG) Log.d(TAG, "mId=" + mId);
71         if (refreshRuleOrFinish()) {
72             return;
73         }
74 
75         super.onCreate(icicle);
76         onCreateInternal();
77     }
78 
79     @Override
onResume()80     public void onResume() {
81         super.onResume();
82         if (isUiRestricted()) {
83             return;
84         }
85         updateControls();
86     }
87 
88     @Override
getHelpResource()89     public int getHelpResource() {
90         return R.string.help_uri_interruptions;
91     }
92 
93     /**
94      * Update state of header preference managed by PreferenceController.
95      */
updateHeader()96     protected void updateHeader() {
97         final PreferenceScreen screen = getPreferenceScreen();
98 
99         mSwitch.onResume(mRule, mId);
100         mSwitch.displayPreference(screen);
101         updatePreference(mSwitch);
102 
103         mHeader.onResume(mRule, mId);
104         mHeader.displayPreference(screen);
105         updatePreference(mHeader);
106     }
107 
updatePreference(AbstractPreferenceController controller)108     private void updatePreference(AbstractPreferenceController controller) {
109         final PreferenceScreen screen = getPreferenceScreen();
110         if (!controller.isAvailable()) {
111             return;
112         }
113         final String key = controller.getPreferenceKey();
114 
115         final Preference preference = screen.findPreference(key);
116         if (preference == null) {
117             Log.d(TAG, String.format("Cannot find preference with key %s in Controller %s",
118                     key, controller.getClass().getSimpleName()));
119             return;
120         }
121         controller.updateState(preference);
122     }
123 
updateRule(Uri newConditionId)124     protected void updateRule(Uri newConditionId) {
125         mRule.setConditionId(newConditionId);
126         mBackend.setZenRule(mId, mRule);
127     }
128 
129     @Override
onZenModeConfigChanged()130     protected void onZenModeConfigChanged() {
131         super.onZenModeConfigChanged();
132         if (!refreshRuleOrFinish()) {
133             updateControls();
134         }
135     }
136 
refreshRuleOrFinish()137     private boolean refreshRuleOrFinish() {
138         mRule = getZenRule();
139         if (DEBUG) Log.d(TAG, "mRule=" + mRule);
140         if (!setRule(mRule)) {
141             toastAndFinish();
142             return true;
143         }
144         return false;
145     }
146 
toastAndFinish()147     private void toastAndFinish() {
148         Toast.makeText(mContext, R.string.zen_mode_rule_not_found_text, Toast.LENGTH_SHORT)
149                     .show();
150         getActivity().finish();
151     }
152 
getZenRule()153     private AutomaticZenRule getZenRule() {
154         return NotificationManager.from(mContext).getAutomaticZenRule(mId);
155     }
156 
updateControls()157     private void updateControls() {
158         mDisableListeners = true;
159         updateControlsInternal();
160         updateHeader();
161         mDisableListeners = false;
162     }
163 }
164