DisplaySettings.java revision b692056232dd6cf2422193dc18c5612468c4d1af
1/*
2 * Copyright (C) 2010 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
17package com.android.settings;
18
19import android.app.Activity;
20import android.content.Context;
21import android.provider.SearchIndexableResource;
22import android.provider.Settings;
23
24import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
25import com.android.settings.core.PreferenceController;
26import com.android.settings.dashboard.DashboardFragment;
27import com.android.settings.dashboard.SummaryLoader;
28import com.android.settings.display.AutoBrightnessPreferenceController;
29import com.android.settings.display.AutoRotatePreferenceController;
30import com.android.settings.display.CameraGesturePreferenceController;
31import com.android.settings.display.DozePreferenceController;
32import com.android.settings.display.FontSizePreferenceController;
33import com.android.settings.display.LiftToWakePreferenceController;
34import com.android.settings.display.NightDisplayPreferenceController;
35import com.android.settings.display.NightModePreferenceController;
36import com.android.settings.display.ScreenSaverPreferenceController;
37import com.android.settings.display.TapToWakePreferenceController;
38import com.android.settings.display.ThemePreferenceController;
39import com.android.settings.display.TimeoutPreferenceController;
40import com.android.settings.display.VrDisplayPreferenceController;
41import com.android.settings.display.WallpaperPreferenceController;
42import com.android.settings.overlay.FeatureFactory;
43import com.android.settings.search.BaseSearchIndexProvider;
44import com.android.settings.search.Indexable;
45import com.android.settingslib.drawer.CategoryKey;
46
47import java.util.ArrayList;
48import java.util.List;
49
50import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
51
52public class DisplaySettings extends DashboardFragment {
53    private static final String TAG = "DisplaySettings";
54
55    @Override
56    public int getMetricsCategory() {
57        return MetricsEvent.DISPLAY;
58    }
59
60    @Override
61    protected String getLogTag() {
62        return TAG;
63    }
64
65    @Override
66    public void onAttach(Context context) {
67        super.onAttach(context);
68        mProgressiveDisclosureMixin.setTileLimit(4);
69    }
70
71    @Override
72    protected int getPreferenceScreenResId() {
73        if (mDashboardFeatureProvider.isEnabled()) {
74            return R.xml.ia_display_settings;
75        } else {
76            return R.xml.display_settings;
77        }
78    }
79
80    @Override
81    protected List<PreferenceController> getPreferenceControllers(Context context) {
82        final List<PreferenceController> controllers = new ArrayList<>();
83        controllers.add(new AutoBrightnessPreferenceController(context));
84        controllers.add(new AutoRotatePreferenceController(context));
85        controllers.add(new CameraGesturePreferenceController(context));
86        controllers.add(new DozePreferenceController(context));
87        controllers.add(new FontSizePreferenceController(context));
88        controllers.add(new LiftToWakePreferenceController(context));
89        controllers.add(new NightDisplayPreferenceController(context));
90        controllers.add(new NightModePreferenceController(context));
91        controllers.add(new ScreenSaverPreferenceController(context));
92        controllers.add(new TapToWakePreferenceController(context));
93        controllers.add(new TimeoutPreferenceController(context));
94        controllers.add(new VrDisplayPreferenceController(context));
95        controllers.add(new WallpaperPreferenceController(context));
96        controllers.add(new ThemePreferenceController(context));
97        return controllers;
98    }
99
100    @Override
101    protected int getHelpResource() {
102        return R.string.help_uri_display;
103    }
104
105    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
106        private final Context mContext;
107        private final SummaryLoader mLoader;
108
109        private SummaryProvider(Context context, SummaryLoader loader) {
110            mContext = context;
111            mLoader = loader;
112        }
113
114        @Override
115        public void setListening(boolean listening) {
116            if (listening) {
117                updateSummary();
118            }
119        }
120
121        private void updateSummary() {
122            final long currentTimeout = Settings.System.getLong(mContext.getContentResolver(),
123                    SCREEN_OFF_TIMEOUT, TimeoutPreferenceController.FALLBACK_SCREEN_TIMEOUT_VALUE);
124            final CharSequence[] entries =
125                    mContext.getResources().getTextArray(R.array.screen_timeout_entries);
126            final CharSequence[] values =
127                    mContext.getResources().getTextArray(R.array.screen_timeout_values);
128            final CharSequence timeoutDescription = TimeoutPreferenceController
129                    .getTimeoutDescription(currentTimeout, entries, values);
130            final String summary = timeoutDescription == null ? ""
131                    : mContext.getString(R.string.display_summary, timeoutDescription);
132            mLoader.setSummary(this, summary);
133        }
134    }
135
136    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
137            = new SummaryLoader.SummaryProviderFactory() {
138        @Override
139        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
140                SummaryLoader summaryLoader) {
141            return new SummaryProvider(activity, summaryLoader);
142        }
143    };
144
145    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
146            new BaseSearchIndexProvider() {
147                @Override
148                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
149                        boolean enabled) {
150                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
151
152                    final SearchIndexableResource sir = new SearchIndexableResource(context);
153                    final boolean useNewIA = FeatureFactory.getFactory(context)
154                            .getDashboardFeatureProvider(context)
155                            .isEnabled();
156                    if (useNewIA) {
157                        sir.xmlResId = R.xml.ia_display_settings;
158                    } else {
159                        sir.xmlResId = R.xml.display_settings;
160                    }
161                    result.add(sir);
162                    return result;
163                }
164
165                @Override
166                public List<String> getNonIndexableKeys(Context context) {
167                    ArrayList<String> result = new ArrayList<>();
168
169                    new AutoBrightnessPreferenceController(context).updateNonIndexableKeys(result);
170                    new AutoRotatePreferenceController(context).updateNonIndexableKeys(result);
171                    new CameraGesturePreferenceController(context).updateNonIndexableKeys(result);
172                    new DozePreferenceController(context).updateNonIndexableKeys(result);
173                    new FontSizePreferenceController(context).updateNonIndexableKeys(result);
174                    new LiftToWakePreferenceController(context).updateNonIndexableKeys(result);
175                    new NightDisplayPreferenceController(context).updateNonIndexableKeys(result);
176                    new NightModePreferenceController(context).updateNonIndexableKeys(result);
177                    new ScreenSaverPreferenceController(context).updateNonIndexableKeys(result);
178                    new TapToWakePreferenceController(context).updateNonIndexableKeys(result);
179                    new TimeoutPreferenceController(context).updateNonIndexableKeys(result);
180                    new VrDisplayPreferenceController(context).updateNonIndexableKeys(result);
181                    new WallpaperPreferenceController(context).updateNonIndexableKeys(result);
182                    new ThemePreferenceController(context).updateNonIndexableKeys(result);
183
184                    return result;
185                }
186
187                @Override
188                public List<PreferenceController> getPreferenceControllers(Context context) {
189                    final List<PreferenceController> controllers = new ArrayList<>();
190                    controllers.add(new AutoBrightnessPreferenceController(context));
191                    return controllers;
192                }
193            };
194}
195