2 * Copyright (C) 2015 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings.notification;
19 import android.app.Activity;
20 import android.app.Application;
21 import android.app.Fragment;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.os.Bundle;
25 import android.os.UserHandle;
26 import android.provider.SearchIndexableResource;
27 import android.support.annotation.VisibleForTesting;
28 import android.support.v7.preference.Preference;
30 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
31 import com.android.settings.R;
32 import com.android.settings.RingtonePreference;
33 import com.android.settings.dashboard.DashboardFragment;
34 import com.android.settings.gestures.SwipeToNotificationPreferenceController;
35 import com.android.settings.search.BaseSearchIndexProvider;
36 import com.android.settings.search.Indexable;
37 import com.android.settingslib.core.AbstractPreferenceController;
38 import com.android.settingslib.core.lifecycle.Lifecycle;
40 import java.util.ArrayList;
41 import java.util.Arrays;
42 import java.util.List;
44 public class ConfigureNotificationSettings extends DashboardFragment {
45 private static final String TAG = "ConfigNotiSettings";
48 static final String KEY_LOCKSCREEN = "lock_screen_notifications";
50 static final String KEY_LOCKSCREEN_WORK_PROFILE_HEADER =
51 "lock_screen_notifications_profile_header";
53 static final String KEY_LOCKSCREEN_WORK_PROFILE = "lock_screen_notifications_profile";
55 static final String KEY_SWIPE_DOWN = "gesture_swipe_down_fingerprint_notifications";
57 private static final String KEY_NOTI_DEFAULT_RINGTONE = "notification_default_ringtone";
58 private static final String KEY_ZEN_MODE = "zen_mode_notifications";
60 private RingtonePreference mRequestPreference;
61 private static final int REQUEST_CODE = 200;
62 private static final String SELECTED_PREFERENCE_KEY = "selected_preference";
65 public int getMetricsCategory() {
66 return MetricsEvent.CONFIGURE_NOTIFICATION;
70 protected String getLogTag() {
75 protected int getPreferenceScreenResId() {
76 return R.xml.configure_notification_settings;
80 protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
81 final Activity activity = getActivity();
82 final Application app;
83 if (activity != null) {
84 app = activity.getApplication();
88 return buildPreferenceControllers(context, getLifecycle(), app, this);
91 private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
92 Lifecycle lifecycle, Application app, Fragment host) {
93 final List<AbstractPreferenceController> controllers = new ArrayList<>();
94 final BadgingNotificationPreferenceController badgeController =
95 new BadgingNotificationPreferenceController(context);
96 final PulseNotificationPreferenceController pulseController =
97 new PulseNotificationPreferenceController(context);
98 final LockScreenNotificationPreferenceController lockScreenNotificationController =
99 new LockScreenNotificationPreferenceController(context,
101 KEY_LOCKSCREEN_WORK_PROFILE_HEADER,
102 KEY_LOCKSCREEN_WORK_PROFILE);
103 if (lifecycle != null) {
104 lifecycle.addObserver(pulseController);
105 lifecycle.addObserver(lockScreenNotificationController);
107 controllers.add(new RecentNotifyingAppsPreferenceController(
108 context, new NotificationBackend(), app, host));
109 controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle,
111 controllers.add(badgeController);
112 controllers.add(pulseController);
113 controllers.add(lockScreenNotificationController);
114 controllers.add(new NotificationRingtonePreferenceController(context) {
116 public String getPreferenceKey() {
117 return KEY_NOTI_DEFAULT_RINGTONE;
121 controllers.add(new ZenModePreferenceController(context, lifecycle, KEY_ZEN_MODE));
126 public boolean onPreferenceTreeClick(Preference preference) {
127 if (preference instanceof RingtonePreference) {
128 mRequestPreference = (RingtonePreference) preference;
129 mRequestPreference.onPrepareRingtonePickerIntent(mRequestPreference.getIntent());
130 startActivityForResultAsUser(
131 mRequestPreference.getIntent(),
134 UserHandle.of(mRequestPreference.getUserId()));
137 return super.onPreferenceTreeClick(preference);
141 public void onActivityResult(int requestCode, int resultCode, Intent data) {
142 if (mRequestPreference != null) {
143 mRequestPreference.onActivityResult(requestCode, resultCode, data);
144 mRequestPreference = null;
149 public void onSaveInstanceState(Bundle outState) {
150 super.onSaveInstanceState(outState);
151 if (mRequestPreference != null) {
152 outState.putString(SELECTED_PREFERENCE_KEY, mRequestPreference.getKey());
159 public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
160 new BaseSearchIndexProvider() {
162 public List<SearchIndexableResource> getXmlResourcesToIndex(
163 Context context, boolean enabled) {
164 final SearchIndexableResource sir = new SearchIndexableResource(context);
165 sir.xmlResId = R.xml.configure_notification_settings;
166 return Arrays.asList(sir);
170 public List<AbstractPreferenceController> createPreferenceControllers(
172 return buildPreferenceControllers(context, null, null, null);
176 public List<String> getNonIndexableKeys(Context context) {
177 final List<String> keys = super.getNonIndexableKeys(context);
178 keys.add(KEY_SWIPE_DOWN);
179 keys.add(KEY_LOCKSCREEN);
180 keys.add(KEY_LOCKSCREEN_WORK_PROFILE);
181 keys.add(KEY_LOCKSCREEN_WORK_PROFILE_HEADER);
182 keys.add(KEY_ZEN_MODE);