OSDN Git Service

Add setting to turn off icon badging
[android-x86/packages-apps-Launcher3.git] / src / com / android / launcher3 / SettingsActivity.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.launcher3;
18
19 import android.app.Activity;
20 import android.content.ContentResolver;
21 import android.database.ContentObserver;
22 import android.os.Bundle;
23 import android.os.Handler;
24 import android.preference.ListPreference;
25 import android.preference.Preference;
26 import android.preference.PreferenceFragment;
27 import android.provider.Settings;
28 import android.provider.Settings.System;
29 import android.support.v4.os.BuildCompat;
30
31 import com.android.launcher3.graphics.IconShapeOverride;
32
33 /**
34  * Settings activity for Launcher. Currently implements the following setting: Allow rotation
35  */
36 public class SettingsActivity extends Activity {
37
38     private static final String ICON_BADGING_PREFERENCE_KEY = "pref_icon_badging";
39     // TODO: use Settings.Secure.NOTIFICATION_BADGING
40     private static final String NOTIFICATION_BADGING = "notification_badging";
41
42     @Override
43     protected void onCreate(Bundle savedInstanceState) {
44         super.onCreate(savedInstanceState);
45
46         // Display the fragment as the main content.
47         getFragmentManager().beginTransaction()
48                 .replace(android.R.id.content, new LauncherSettingsFragment())
49                 .commit();
50     }
51
52     /**
53      * This fragment shows the launcher preferences.
54      */
55     public static class LauncherSettingsFragment extends PreferenceFragment {
56
57         private SystemDisplayRotationLockObserver mRotationLockObserver;
58         private IconBadgingObserver mIconBadgingObserver;
59
60         @Override
61         public void onCreate(Bundle savedInstanceState) {
62             super.onCreate(savedInstanceState);
63             getPreferenceManager().setSharedPreferencesName(LauncherFiles.SHARED_PREFERENCES_KEY);
64             addPreferencesFromResource(R.xml.launcher_preferences);
65
66             ContentResolver resolver = getActivity().getContentResolver();
67
68             // Setup allow rotation preference
69             Preference rotationPref = findPreference(Utilities.ALLOW_ROTATION_PREFERENCE_KEY);
70             if (getResources().getBoolean(R.bool.allow_rotation)) {
71                 // Launcher supports rotation by default. No need to show this setting.
72                 getPreferenceScreen().removePreference(rotationPref);
73             } else {
74                 mRotationLockObserver = new SystemDisplayRotationLockObserver(rotationPref, resolver);
75
76                 // Register a content observer to listen for system setting changes while
77                 // this UI is active.
78                 resolver.registerContentObserver(
79                         Settings.System.getUriFor(System.ACCELEROMETER_ROTATION),
80                         false, mRotationLockObserver);
81
82                 // Initialize the UI once
83                 mRotationLockObserver.onChange(true);
84                 rotationPref.setDefaultValue(Utilities.getAllowRotationDefaultValue(getActivity()));
85             }
86
87             Preference iconBadgingPref = findPreference(ICON_BADGING_PREFERENCE_KEY);
88             if (!BuildCompat.isAtLeastO()) {
89                 getPreferenceScreen().removePreference(
90                         findPreference(SessionCommitReceiver.ADD_ICON_PREFERENCE_KEY));
91                 getPreferenceScreen().removePreference(iconBadgingPref);
92             } else {
93                 // Listen to system notification badge settings while this UI is active.
94                 mIconBadgingObserver = new IconBadgingObserver(iconBadgingPref, resolver);
95                 resolver.registerContentObserver(
96                         Settings.Secure.getUriFor(NOTIFICATION_BADGING),
97                         false, mIconBadgingObserver);
98                 mIconBadgingObserver.onChange(true);
99             }
100
101             Preference iconShapeOverride = findPreference(IconShapeOverride.KEY_PREFERENCE);
102             if (iconShapeOverride != null) {
103                 if (IconShapeOverride.isSupported(getActivity())) {
104                     IconShapeOverride.handlePreferenceUi((ListPreference) iconShapeOverride);
105                 } else {
106                     getPreferenceScreen().removePreference(iconShapeOverride);
107                 }
108             }
109         }
110
111         @Override
112         public void onDestroy() {
113             if (mRotationLockObserver != null) {
114                 getActivity().getContentResolver().unregisterContentObserver(mRotationLockObserver);
115                 mRotationLockObserver = null;
116             }
117             if (mIconBadgingObserver != null) {
118                 getActivity().getContentResolver().unregisterContentObserver(mIconBadgingObserver);
119                 mIconBadgingObserver = null;
120             }
121             super.onDestroy();
122         }
123     }
124
125     /**
126      * Content observer which listens for system auto-rotate setting changes, and enables/disables
127      * the launcher rotation setting accordingly.
128      */
129     private static class SystemDisplayRotationLockObserver extends ContentObserver {
130
131         private final Preference mRotationPref;
132         private final ContentResolver mResolver;
133
134         public SystemDisplayRotationLockObserver(
135                 Preference rotationPref, ContentResolver resolver) {
136             super(new Handler());
137             mRotationPref = rotationPref;
138             mResolver = resolver;
139         }
140
141         @Override
142         public void onChange(boolean selfChange) {
143             boolean enabled = Settings.System.getInt(mResolver,
144                     Settings.System.ACCELEROMETER_ROTATION, 1) == 1;
145             mRotationPref.setEnabled(enabled);
146             mRotationPref.setSummary(enabled
147                     ? R.string.allow_rotation_desc : R.string.allow_rotation_blocked_desc);
148         }
149     }
150
151     /**
152      * Content observer which listens for system badging setting changes,
153      * and updates the launcher badging setting subtext accordingly.
154      */
155     private static class IconBadgingObserver extends ContentObserver {
156
157         private final Preference mBadgingPref;
158         private final ContentResolver mResolver;
159
160         public IconBadgingObserver(Preference badgingPref, ContentResolver resolver) {
161             super(new Handler());
162             mBadgingPref = badgingPref;
163             mResolver = resolver;
164         }
165
166         @Override
167         public void onChange(boolean selfChange) {
168             boolean enabled = Settings.Secure.getInt(mResolver, NOTIFICATION_BADGING, 1) == 1;
169             mBadgingPref.setSummary(enabled
170                     ? R.string.icon_badging_desc_on
171                     : R.string.icon_badging_desc_off);
172         }
173     }
174
175 }