OSDN Git Service

Link to dnd settings from notification settings
[android-x86/packages-apps-Settings.git] / src / com / android / settings / notification / ConfigureNotificationSettings.java
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.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;
29
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;
39
40 import java.util.ArrayList;
41 import java.util.Arrays;
42 import java.util.List;
43
44 public class ConfigureNotificationSettings extends DashboardFragment {
45     private static final String TAG = "ConfigNotiSettings";
46
47     @VisibleForTesting
48     static final String KEY_LOCKSCREEN = "lock_screen_notifications";
49     @VisibleForTesting
50     static final String KEY_LOCKSCREEN_WORK_PROFILE_HEADER =
51             "lock_screen_notifications_profile_header";
52     @VisibleForTesting
53     static final String KEY_LOCKSCREEN_WORK_PROFILE = "lock_screen_notifications_profile";
54     @VisibleForTesting
55     static final String KEY_SWIPE_DOWN = "gesture_swipe_down_fingerprint_notifications";
56
57     private static final String KEY_NOTI_DEFAULT_RINGTONE = "notification_default_ringtone";
58     private static final String KEY_ZEN_MODE = "zen_mode_notifications";
59
60     private RingtonePreference mRequestPreference;
61     private static final int REQUEST_CODE = 200;
62     private static final String SELECTED_PREFERENCE_KEY = "selected_preference";
63
64     @Override
65     public int getMetricsCategory() {
66         return MetricsEvent.CONFIGURE_NOTIFICATION;
67     }
68
69     @Override
70     protected String getLogTag() {
71         return TAG;
72     }
73
74     @Override
75     protected int getPreferenceScreenResId() {
76         return R.xml.configure_notification_settings;
77     }
78
79     @Override
80     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
81         final Activity activity = getActivity();
82         final Application app;
83         if (activity != null) {
84             app = activity.getApplication();
85         } else {
86             app = null;
87         }
88         return buildPreferenceControllers(context, getLifecycle(), app, this);
89     }
90
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,
100                         KEY_LOCKSCREEN,
101                         KEY_LOCKSCREEN_WORK_PROFILE_HEADER,
102                         KEY_LOCKSCREEN_WORK_PROFILE);
103         if (lifecycle != null) {
104             lifecycle.addObserver(pulseController);
105             lifecycle.addObserver(lockScreenNotificationController);
106         }
107         controllers.add(new RecentNotifyingAppsPreferenceController(
108                 context, new NotificationBackend(), app, host));
109         controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle,
110                 KEY_SWIPE_DOWN));
111         controllers.add(badgeController);
112         controllers.add(pulseController);
113         controllers.add(lockScreenNotificationController);
114         controllers.add(new NotificationRingtonePreferenceController(context) {
115             @Override
116             public String getPreferenceKey() {
117                 return KEY_NOTI_DEFAULT_RINGTONE;
118             }
119
120         });
121         controllers.add(new ZenModePreferenceController(context, lifecycle, KEY_ZEN_MODE));
122         return controllers;
123     }
124
125     @Override
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(),
132                     REQUEST_CODE,
133                     null,
134                     UserHandle.of(mRequestPreference.getUserId()));
135             return true;
136         }
137         return super.onPreferenceTreeClick(preference);
138     }
139
140     @Override
141     public void onActivityResult(int requestCode, int resultCode, Intent data) {
142         if (mRequestPreference != null) {
143             mRequestPreference.onActivityResult(requestCode, resultCode, data);
144             mRequestPreference = null;
145         }
146     }
147
148     @Override
149     public void onSaveInstanceState(Bundle outState) {
150         super.onSaveInstanceState(outState);
151         if (mRequestPreference != null) {
152             outState.putString(SELECTED_PREFERENCE_KEY, mRequestPreference.getKey());
153         }
154     }
155
156     /**
157      * For Search.
158      */
159     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
160             new BaseSearchIndexProvider() {
161                 @Override
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);
167                 }
168
169                 @Override
170                 public List<AbstractPreferenceController> createPreferenceControllers(
171                         Context context) {
172                     return buildPreferenceControllers(context, null, null, null);
173                 }
174
175                 @Override
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);
183                     return keys;
184                 }
185             };
186 }