172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock/*
272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * Copyright (C) 2014 The Android Open Source Project
372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *
472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License");
572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * you may not use this file except in compliance with the License.
672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * You may obtain a copy of the License at
772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *
872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *      http://www.apache.org/licenses/LICENSE-2.0
972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *
1072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * Unless required by applicable law or agreed to in writing, software
1172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS,
1272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * See the License for the specific language governing permissions and
1472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * limitations under the License.
1572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock */
1672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
174a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockpackage com.android.settings.notification;
1872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
1972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.content.Context;
20019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport android.content.res.Resources;
2172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.os.Bundle;
22cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlockimport android.preference.Preference;
23cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlockimport android.preference.PreferenceScreen;
24ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlockimport android.util.SparseArray;
254a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
268a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger;
274a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport com.android.settings.R;
28cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlockimport com.android.settings.search.BaseSearchIndexProvider;
29019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport com.android.settings.search.Indexable;
30019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport com.android.settings.search.SearchIndexableRaw;
3172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
32019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport java.util.ArrayList;
33019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport java.util.List;
34019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
35beff087b3ac3aae4eb120feef81274d7caeafb58John Spurlockpublic class ZenModeSettings extends ZenModeSettingsBase implements Indexable {
3648bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    private static final String KEY_PRIORITY_SETTINGS = "priority_settings";
37d8b36835707edbeeb9c9fbc30eba855a0b6231c6John Spurlock    private static final String KEY_AUTOMATION_SETTINGS = "automation_settings";
38c9afadb04b00598f5988101681089290cf14f79cJohn Spurlock
39d8b36835707edbeeb9c9fbc30eba855a0b6231c6John Spurlock    private Preference mPrioritySettings;
4007f7efba67a5f261fca31890a1b60f23021325f5John Spurlock
41b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    @Override
42b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    public void onCreate(Bundle savedInstanceState) {
43b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        super.onCreate(savedInstanceState);
44b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock
45b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        addPreferencesFromResource(R.xml.zen_mode_settings);
46b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        final PreferenceScreen root = getPreferenceScreen();
47b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock
48b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        mPrioritySettings = root.findPreference(KEY_PRIORITY_SETTINGS);
4945fa140b8c6846b4546fdeabebf989ae9102cebbJohn Spurlock        if (!isScheduleSupported(mContext)) {
50b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock            removePreference(KEY_AUTOMATION_SETTINGS);
51b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        }
52b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    }
53b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock
54b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    @Override
55b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    public void onResume() {
56b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        super.onResume();
57b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        updateControls();
58ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock    }
59ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock
607f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    @Override
618a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    protected int getMetricsCategory() {
628a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        return MetricsLogger.NOTIFICATION_ZEN_MODE;
638a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
648a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
658a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
6648bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    protected void onZenModeChanged() {
67b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        updateControls();
6848bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    }
6948bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock
7048bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    @Override
71b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    protected void onZenModeConfigChanged() {
72b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        updateControls();
73b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    }
74cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock
75b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    private void updateControls() {
7648bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        updatePrioritySettingsSummary();
777f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    }
787f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
7948bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    private void updatePrioritySettingsSummary() {
8035fba3eeafe47ccd900b3e18b6b64a16ad677462John Spurlock        final boolean callers = mConfig.allowCalls || mConfig.allowRepeatCallers;
8148bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        String s = getResources().getString(R.string.zen_mode_alarms);
8248bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        s = appendLowercase(s, mConfig.allowReminders, R.string.zen_mode_reminders);
8348bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        s = appendLowercase(s, mConfig.allowEvents, R.string.zen_mode_events);
8435fba3eeafe47ccd900b3e18b6b64a16ad677462John Spurlock        s = appendLowercase(s, callers, R.string.zen_mode_selected_callers);
85fcfcb5ddc49c8b4f6fb7b632a99437e8db74fab9John Spurlock        s = appendLowercase(s, mConfig.allowMessages, R.string.zen_mode_selected_messages);
8648bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        mPrioritySettings.setSummary(s);
8748bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    }
8848bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock
8948bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock    private String appendLowercase(String s, boolean condition, int resId) {
9048bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        if (condition) {
9148bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock            return getResources().getString(R.string.join_many_items_middle, s,
9248bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock                    getResources().getString(resId).toLowerCase());
9348bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        }
9448bbd5d1e414abfa7efe21d10f6848f4916d8162John Spurlock        return s;
95de99ccf18b6f8810f2743b5b9fef513304d0ed4fJohn Spurlock    }
96de99ccf18b6f8810f2743b5b9fef513304d0ed4fJohn Spurlock
97b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    private static SparseArray<String> allKeyTitles(Context context) {
98b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        final SparseArray<String> rt = new SparseArray<String>();
99b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        rt.put(R.string.zen_mode_priority_settings_title, KEY_PRIORITY_SETTINGS);
100b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        rt.put(R.string.zen_mode_automation_settings_title, KEY_AUTOMATION_SETTINGS);
101b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock        return rt;
102b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock    }
103b47b2c3f6af650441f8069b87d0d82549913f7c5John Spurlock
10423acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk    @Override
10523acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk    protected int getHelpResource() {
10623acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk        return R.string.help_uri_interruptions;
10723acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk    }
10823acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk
109cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock    // Enable indexing of searchable data
110cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
111cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock        new BaseSearchIndexProvider() {
112f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock
113cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock            @Override
114cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock            public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
11557c713d1d92f64a558115e5aff212ebc54a19151John Spurlock                final SparseArray<String> keyTitles = allKeyTitles(context);
11657c713d1d92f64a558115e5aff212ebc54a19151John Spurlock                final int N = keyTitles.size();
117ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(N);
118cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock                final Resources res = context.getResources();
119ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                for (int i = 0; i < N; i++) {
120ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                    final SearchIndexableRaw data = new SearchIndexableRaw(context);
12157c713d1d92f64a558115e5aff212ebc54a19151John Spurlock                    data.key = keyTitles.valueAt(i);
12257c713d1d92f64a558115e5aff212ebc54a19151John Spurlock                    data.title = res.getString(keyTitles.keyAt(i));
123ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                    data.screenTitle = res.getString(R.string.zen_mode_settings_title);
124ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                    result.add(data);
125ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                }
126ac1c42f5dcf43b4b7092d4d6ca0c9dbd4f9fbfdeJohn Spurlock                return result;
127cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock            }
128f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock
129f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock            @Override
130f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock            public List<String> getNonIndexableKeys(Context context) {
131f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock                final ArrayList<String> rt = new ArrayList<String>();
13245fa140b8c6846b4546fdeabebf989ae9102cebbJohn Spurlock                if (!isScheduleSupported(context)) {
133d8b36835707edbeeb9c9fbc30eba855a0b6231c6John Spurlock                    rt.add(KEY_AUTOMATION_SETTINGS);
134f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock                }
135f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock                return rt;
136f68bc6459352cf585b2cbb1c9e0c9b54e1936daaJohn Spurlock            }
137cc819a67f49ab4bfb42e51454bec54c03dd4f595John Spurlock        };
13872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock}
139