summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/DeviceInfoSettings.java12
-rw-r--r--src/com/android/settings/DisplaySettings.java506
-rw-r--r--src/com/android/settings/Settings.java1
-rw-r--r--src/com/android/settings/SettingsActivity.java1
-rw-r--r--src/com/android/settings/core/PreferenceController.java44
-rw-r--r--src/com/android/settings/dashboard/DashboardFragment.java66
-rw-r--r--src/com/android/settings/dashboard/SummaryLoader.java11
-rw-r--r--src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java46
-rw-r--r--src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java19
-rw-r--r--src/com/android/settings/deviceinfo/StorageDashboardFragment.java19
-rw-r--r--src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java40
-rw-r--r--src/com/android/settings/display/AutoBrightnessPreferenceController.java73
-rw-r--r--src/com/android/settings/display/AutoRotatePreferenceController.java96
-rw-r--r--src/com/android/settings/display/CameraGesturePreferenceController.java72
-rw-r--r--src/com/android/settings/display/DozePreferenceController.java83
-rw-r--r--src/com/android/settings/display/FontSizePreferenceController.java64
-rw-r--r--src/com/android/settings/display/LiftToWakePreferenceController.java70
-rw-r--r--src/com/android/settings/display/NightDisplayPreferenceController.java44
-rw-r--r--src/com/android/settings/display/NightModePreferenceController.java82
-rw-r--r--src/com/android/settings/display/ScreenSaverPreferenceController.java55
-rw-r--r--src/com/android/settings/display/TapToWakePreferenceController.java67
-rw-r--r--src/com/android/settings/display/TimeoutPreferenceController.java127
-rw-r--r--src/com/android/settings/display/VrDisplayPreferenceController.java88
-rw-r--r--src/com/android/settings/display/WallpaperPreferenceController.java69
-rw-r--r--src/com/android/settings/system/SystemDashboardFragment.java29
-rw-r--r--src/com/android/settings/users/UserSettings.java2
26 files changed, 1255 insertions, 531 deletions
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index a9b170ca43..3305b985b9 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -35,10 +35,9 @@ import android.util.Log;
import android.widget.Toast;
import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.deviceinfo.AdditionalSystemUpdatePreferenceController;
import com.android.settings.deviceinfo.SystemUpdatePreferenceController;
-import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Index;
import com.android.settings.search.Indexable;
@@ -77,7 +76,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
int mDevHitCountdown;
Toast mDevHitToast;
private SystemUpdatePreferenceController mSystemUpdatePreferenceController;
- private DashboardFeatureProvider mDashboardFeatureProvider;
+ private AdditionalSystemUpdatePreferenceController mAdditionalSystemUpdatePreferenceController;
private UserManager mUm;
@@ -102,8 +101,8 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
final Activity activity = getActivity();
mUm = UserManager.get(activity);
mSystemUpdatePreferenceController = new SystemUpdatePreferenceController(activity, mUm);
- mDashboardFeatureProvider = FeatureFactory.getFactory(activity)
- .getDashboardFeatureProvider(activity);
+ mAdditionalSystemUpdatePreferenceController =
+ new AdditionalSystemUpdatePreferenceController(activity);
addPreferencesFromResource(R.xml.device_info_settings);
@@ -159,6 +158,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
* info.
*/
mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen());
+ mAdditionalSystemUpdatePreferenceController.displayPreference(getPreferenceScreen());
// Remove manual entry if none present.
removePreferenceIfBoolFalse(KEY_MANUAL, R.bool.config_show_manual);
@@ -398,6 +398,8 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
}
new SystemUpdatePreferenceController(context, UserManager.get(context))
.updateNonIndexableKeys(keys);
+ new AdditionalSystemUpdatePreferenceController(context)
+ .updateNonIndexableKeys(keys);
return keys;
}
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 0e680bca2e..2e8b92667a 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -17,435 +17,76 @@
package com.android.settings;
import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.UiModeManager;
-import android.app.admin.DevicePolicyManager;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.hardware.Sensor;
-import android.hardware.SensorManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.DropDownPreference;
-import android.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.text.TextUtils;
-import android.util.Log;
-import com.android.internal.app.NightDisplayController;
import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.internal.view.RotationPolicy;
-import com.android.settings.accessibility.ToggleFontSizePreferenceFragment;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.display.AutoBrightnessPreferenceController;
+import com.android.settings.display.AutoRotatePreferenceController;
+import com.android.settings.display.CameraGesturePreferenceController;
+import com.android.settings.display.DozePreferenceController;
+import com.android.settings.display.FontSizePreferenceController;
+import com.android.settings.display.LiftToWakePreferenceController;
+import com.android.settings.display.NightDisplayPreferenceController;
+import com.android.settings.display.NightModePreferenceController;
+import com.android.settings.display.ScreenSaverPreferenceController;
+import com.android.settings.display.TapToWakePreferenceController;
+import com.android.settings.display.TimeoutPreferenceController;
+import com.android.settings.display.VrDisplayPreferenceController;
+import com.android.settings.display.WallpaperPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.drawer.CategoryKey;
import java.util.ArrayList;
import java.util.List;
-import static android.provider.Settings.Secure.CAMERA_GESTURE_DISABLED;
-import static android.provider.Settings.Secure.DOUBLE_TAP_TO_WAKE;
-import static android.provider.Settings.Secure.DOZE_ENABLED;
-import static android.provider.Settings.Secure.WAKE_GESTURE_ENABLED;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-public class DisplaySettings extends SettingsPreferenceFragment implements
- Preference.OnPreferenceChangeListener, Indexable {
+public class DisplaySettings extends DashboardFragment {
private static final String TAG = "DisplaySettings";
- /** If there is no setting in the provider, use this. */
- private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
-
- private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
- private static final String KEY_FONT_SIZE = "font_size";
- private static final String KEY_SCREEN_SAVER = "screensaver";
- private static final String KEY_LIFT_TO_WAKE = "lift_to_wake";
- private static final String KEY_DOZE = "doze";
- private static final String KEY_TAP_TO_WAKE = "tap_to_wake";
- private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness";
- private static final String KEY_AUTO_ROTATE = "auto_rotate";
- private static final String KEY_NIGHT_DISPLAY = "night_display";
- private static final String KEY_NIGHT_MODE = "night_mode";
- private static final String KEY_CAMERA_GESTURE = "camera_gesture";
- private static final String KEY_WALLPAPER = "wallpaper";
- private static final String KEY_VR_DISPLAY_PREF = "vr_display_pref";
-
- private Preference mFontSizePref;
-
- private TimeoutListPreference mScreenTimeoutPreference;
- private ListPreference mNightModePreference;
- private Preference mScreenSaverPreference;
- private SwitchPreference mLiftToWakePreference;
- private SwitchPreference mDozePreference;
- private SwitchPreference mTapToWakePreference;
- private SwitchPreference mAutoBrightnessPreference;
- private SwitchPreference mCameraGesturePreference;
-
@Override
public int getMetricsCategory() {
return MetricsEvent.DISPLAY;
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- final Activity activity = getActivity();
- final ContentResolver resolver = activity.getContentResolver();
-
- addPreferencesFromResource(R.xml.display_settings);
-
- mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
- if (mScreenSaverPreference != null
- && getResources().getBoolean(
- com.android.internal.R.bool.config_dreamsSupported) == false) {
- getPreferenceScreen().removePreference(mScreenSaverPreference);
- }
-
- mScreenTimeoutPreference = (TimeoutListPreference) findPreference(KEY_SCREEN_TIMEOUT);
-
- mFontSizePref = findPreference(KEY_FONT_SIZE);
-
- if (isAutomaticBrightnessAvailable(getResources())) {
- mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
- mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
- } else {
- removePreference(KEY_AUTO_BRIGHTNESS);
- }
-
- if (!NightDisplayController.isAvailable(activity)) {
- removePreference(KEY_NIGHT_DISPLAY);
- }
-
- if (isLiftToWakeAvailable(activity)) {
- mLiftToWakePreference = (SwitchPreference) findPreference(KEY_LIFT_TO_WAKE);
- mLiftToWakePreference.setOnPreferenceChangeListener(this);
- } else {
- removePreference(KEY_LIFT_TO_WAKE);
- }
-
- if (isDozeAvailable(activity)) {
- mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
- mDozePreference.setOnPreferenceChangeListener(this);
- } else {
- removePreference(KEY_DOZE);
- }
-
- if (isTapToWakeAvailable(getResources())) {
- mTapToWakePreference = (SwitchPreference) findPreference(KEY_TAP_TO_WAKE);
- mTapToWakePreference.setOnPreferenceChangeListener(this);
- } else {
- removePreference(KEY_TAP_TO_WAKE);
- }
-
- if (isCameraGestureAvailable(getResources())) {
- mCameraGesturePreference = (SwitchPreference) findPreference(KEY_CAMERA_GESTURE);
- mCameraGesturePreference.setOnPreferenceChangeListener(this);
- } else {
- removePreference(KEY_CAMERA_GESTURE);
- }
-
- if (RotationPolicy.isRotationLockToggleVisible(activity)) {
- DropDownPreference rotatePreference =
- (DropDownPreference) findPreference(KEY_AUTO_ROTATE);
- int rotateLockedResourceId;
- // The following block sets the string used when rotation is locked.
- // If the device locks specifically to portrait or landscape (rather than current
- // rotation), then we use a different string to include this information.
- if (allowAllRotations(activity)) {
- rotateLockedResourceId = R.string.display_auto_rotate_stay_in_current;
- } else {
- if (RotationPolicy.getRotationLockOrientation(activity)
- == Configuration.ORIENTATION_PORTRAIT) {
- rotateLockedResourceId =
- R.string.display_auto_rotate_stay_in_portrait;
- } else {
- rotateLockedResourceId =
- R.string.display_auto_rotate_stay_in_landscape;
- }
- }
- rotatePreference.setEntries(new CharSequence[] {
- activity.getString(R.string.display_auto_rotate_rotate),
- activity.getString(rotateLockedResourceId),
- });
- rotatePreference.setEntryValues(new CharSequence[] { "0", "1" });
- rotatePreference.setValueIndex(RotationPolicy.isRotationLocked(activity) ?
- 1 : 0);
- rotatePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean locked = Integer.parseInt((String) newValue) != 0;
- mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_ROTATION_LOCK,
- locked);
- RotationPolicy.setRotationLock(activity, locked);
- return true;
- }
- });
- } else {
- removePreference(KEY_AUTO_ROTATE);
- }
-
- if (isVrDisplayModeAvailable(activity)) {
- DropDownPreference vrDisplayPref =
- (DropDownPreference) findPreference(KEY_VR_DISPLAY_PREF);
- vrDisplayPref.setEntries(new CharSequence[] {
- activity.getString(R.string.display_vr_pref_low_persistence),
- activity.getString(R.string.display_vr_pref_off),
- });
- vrDisplayPref.setEntryValues(new CharSequence[] { "0", "1" });
-
- final Context c = activity;
- int currentUser = ActivityManager.getCurrentUser();
- int current = Settings.Secure.getIntForUser(c.getContentResolver(),
- Settings.Secure.VR_DISPLAY_MODE,
- /*default*/Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
- currentUser);
- vrDisplayPref.setValueIndex(current);
- vrDisplayPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- int i = Integer.parseInt((String) newValue);
- int u = ActivityManager.getCurrentUser();
- if (!Settings.Secure.putIntForUser(c.getContentResolver(),
- Settings.Secure.VR_DISPLAY_MODE,
- i, u)) {
- Log.e(TAG, "Could not change setting for " +
- Settings.Secure.VR_DISPLAY_MODE);
- }
- return true;
- }
- });
- } else {
- removePreference(KEY_VR_DISPLAY_PREF);
- }
-
- mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
- if (mNightModePreference != null) {
- final UiModeManager uiManager = (UiModeManager) getSystemService(
- Context.UI_MODE_SERVICE);
- final int currentNightMode = uiManager.getNightMode();
- mNightModePreference.setValue(String.valueOf(currentNightMode));
- mNightModePreference.setOnPreferenceChangeListener(this);
- }
- }
-
- private static boolean allowAllRotations(Context context) {
- return Resources.getSystem().getBoolean(
- com.android.internal.R.bool.config_allowAllRotations);
- }
-
- private static boolean isLiftToWakeAvailable(Context context) {
- SensorManager sensors = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
- return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null;
- }
-
- private static boolean isDozeAvailable(Context context) {
- String name = Build.IS_DEBUGGABLE ? SystemProperties.get("debug.doze.component") : null;
- if (TextUtils.isEmpty(name)) {
- name = context.getResources().getString(
- com.android.internal.R.string.config_dozeComponent);
- }
- return !TextUtils.isEmpty(name);
- }
-
- private static boolean isTapToWakeAvailable(Resources res) {
- return res.getBoolean(com.android.internal.R.bool.config_supportDoubleTapWake);
- }
-
- private static boolean isAutomaticBrightnessAvailable(Resources res) {
- return res.getBoolean(com.android.internal.R.bool.config_automatic_brightness_available);
- }
-
- private static boolean isCameraGestureAvailable(Resources res) {
- boolean configSet = res.getInteger(
- com.android.internal.R.integer.config_cameraLaunchGestureSensorType) != -1;
- return configSet &&
- !SystemProperties.getBoolean("gesture.disable_camera_launch", false);
- }
-
- private static boolean isVrDisplayModeAvailable(Context context) {
- PackageManager pm = context.getPackageManager();
- return pm.hasSystemFeature(PackageManager.FEATURE_VR_MODE_HIGH_PERFORMANCE);
- }
-
- private void updateTimeoutPreferenceDescription(long currentTimeout) {
- TimeoutListPreference preference = mScreenTimeoutPreference;
- final CharSequence[] entries = preference.getEntries();
- final CharSequence[] values = preference.getEntryValues();
- String summary;
- if (preference.isDisabledByAdmin()) {
- summary = getString(R.string.disabled_by_policy_title);
- } else {
- CharSequence timeoutDescription = getTimeoutDescription(
- currentTimeout, entries, values);
- summary = timeoutDescription == null ? ""
- : getString(R.string.screen_timeout_summary, timeoutDescription);
- }
- preference.setSummary(summary);
- }
-
- private static CharSequence getTimeoutDescription(
- long currentTimeout, CharSequence[] entries, CharSequence[] values) {
- if (currentTimeout < 0 || entries == null || values == null
- || values.length != entries.length) {
- return null;
- }
-
- for (int i = 0; i < values.length; i++) {
- long timeout = Long.parseLong(values[i].toString());
- if (currentTimeout == timeout) {
- return entries[i];
- }
- }
- return null;
+ protected String getLogTag() {
+ return TAG;
}
@Override
- public void onResume() {
- super.onResume();
- updateState();
-
- final long currentTimeout = Settings.System.getLong(getActivity().getContentResolver(),
- SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE);
- mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout));
- mScreenTimeoutPreference.setOnPreferenceChangeListener(this);
- final DevicePolicyManager dpm = (DevicePolicyManager) getActivity().getSystemService(
- Context.DEVICE_POLICY_SERVICE);
- if (dpm != null) {
- final EnforcedAdmin admin = RestrictedLockUtils.checkIfMaximumTimeToLockIsSet(
- getActivity());
- final long maxTimeout = dpm
- .getMaximumTimeToLockForUserAndProfiles(UserHandle.myUserId());
- mScreenTimeoutPreference.removeUnusableTimeouts(maxTimeout, admin);
- }
- updateTimeoutPreferenceDescription(currentTimeout);
-
- disablePreferenceIfManaged(KEY_WALLPAPER, UserManager.DISALLOW_SET_WALLPAPER);
- }
-
- private void updateState() {
- updateFontSizeSummary();
- updateScreenSaverSummary();
-
- // Update auto brightness if it is available.
- if (mAutoBrightnessPreference != null) {
- int brightnessMode = Settings.System.getInt(getContentResolver(),
- SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
- mAutoBrightnessPreference.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL);
- }
-
- // Update lift-to-wake if it is available.
- if (mLiftToWakePreference != null) {
- int value = Settings.Secure.getInt(getContentResolver(), WAKE_GESTURE_ENABLED, 0);
- mLiftToWakePreference.setChecked(value != 0);
- }
-
- // Update tap to wake if it is available.
- if (mTapToWakePreference != null) {
- int value = Settings.Secure.getInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, 0);
- mTapToWakePreference.setChecked(value != 0);
- }
-
- // Update doze if it is available.
- if (mDozePreference != null) {
- int value = Settings.Secure.getInt(getContentResolver(), DOZE_ENABLED, 1);
- mDozePreference.setChecked(value != 0);
- }
-
- // Update camera gesture #1 if it is available.
- if (mCameraGesturePreference != null) {
- int value = Settings.Secure.getInt(getContentResolver(), CAMERA_GESTURE_DISABLED, 0);
- mCameraGesturePreference.setChecked(value == 0);
- }
- }
-
- private void updateScreenSaverSummary() {
- if (mScreenSaverPreference != null) {
- mScreenSaverPreference.setSummary(
- DreamSettings.getSummaryTextWithDreamName(getActivity()));
- }
- }
-
- private void updateFontSizeSummary() {
- final Context context = mFontSizePref.getContext();
- final float currentScale = Settings.System.getFloat(context.getContentResolver(),
- Settings.System.FONT_SCALE, 1.0f);
- final Resources res = context.getResources();
- final String[] entries = res.getStringArray(R.array.entries_font_size);
- final String[] strEntryValues = res.getStringArray(R.array.entryvalues_font_size);
- final int index = ToggleFontSizePreferenceFragment.fontSizeValueToIndex(currentScale,
- strEntryValues);
- mFontSizePref.setSummary(entries[index]);
+ protected String getCategoryKey() {
+ return CategoryKey.CATEGORY_DISPLAY;
}
@Override
- public boolean onPreferenceChange(Preference preference, Object objValue) {
- final String key = preference.getKey();
- if (KEY_SCREEN_TIMEOUT.equals(key)) {
- try {
- int value = Integer.parseInt((String) objValue);
- Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
- updateTimeoutPreferenceDescription(value);
- } catch (NumberFormatException e) {
- Log.e(TAG, "could not persist screen timeout setting", e);
- }
- }
- if (preference == mAutoBrightnessPreference) {
- boolean auto = (Boolean) objValue;
- Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE,
- auto ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL);
- }
- if (preference == mLiftToWakePreference) {
- boolean value = (Boolean) objValue;
- Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
- }
- if (preference == mDozePreference) {
- boolean value = (Boolean) objValue;
- Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
- }
- if (preference == mTapToWakePreference) {
- boolean value = (Boolean) objValue;
- Settings.Secure.putInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, value ? 1 : 0);
- }
- if (preference == mCameraGesturePreference) {
- boolean value = (Boolean) objValue;
- Settings.Secure.putInt(getContentResolver(), CAMERA_GESTURE_DISABLED,
- value ? 0 : 1 /* Backwards because setting is for disabling */);
- }
- if (preference == mNightModePreference) {
- try {
- final int value = Integer.parseInt((String) objValue);
- final UiModeManager uiManager = (UiModeManager) getSystemService(
- Context.UI_MODE_SERVICE);
- uiManager.setNightMode(value);
- } catch (NumberFormatException e) {
- Log.e(TAG, "could not persist night mode setting", e);
- }
- }
- return true;
+ protected int getPreferenceScreenResId() {
+ return R.xml.display_settings;
}
@Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (preference == mDozePreference) {
- mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_AMBIENT_DISPLAY);
- }
- return super.onPreferenceTreeClick(preference);
+ protected List<PreferenceController> getPreferenceControllers(Context context) {
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new AutoBrightnessPreferenceController(context));
+ controllers.add(new AutoRotatePreferenceController(context));
+ controllers.add(new CameraGesturePreferenceController(context));
+ controllers.add(new DozePreferenceController(context));
+ controllers.add(new FontSizePreferenceController(context));
+ controllers.add(new LiftToWakePreferenceController(context));
+ controllers.add(new NightDisplayPreferenceController(context));
+ controllers.add(new NightModePreferenceController(context));
+ controllers.add(new ScreenSaverPreferenceController(context));
+ controllers.add(new TapToWakePreferenceController(context));
+ controllers.add(new TimeoutPreferenceController(context));
+ controllers.add(new VrDisplayPreferenceController(context));
+ controllers.add(new WallpaperPreferenceController(context));
+ return controllers;
}
@Override
@@ -453,19 +94,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
return R.string.help_uri_display;
}
- private void disablePreferenceIfManaged(String key, String restriction) {
- final RestrictedPreference pref = (RestrictedPreference) findPreference(key);
- if (pref != null) {
- pref.setDisabledByAdmin(null);
- if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(), restriction,
- UserHandle.myUserId())) {
- pref.setEnabled(false);
- } else {
- pref.checkRestrictionAndSetDisabled(restriction);
- }
- }
- }
-
private static class SummaryProvider implements SummaryLoader.SummaryProvider {
private final Context mContext;
private final SummaryLoader mLoader;
@@ -484,13 +112,13 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
private void updateSummary() {
final long currentTimeout = Settings.System.getLong(mContext.getContentResolver(),
- SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE);
+ SCREEN_OFF_TIMEOUT, TimeoutPreferenceController.FALLBACK_SCREEN_TIMEOUT_VALUE);
final CharSequence[] entries =
mContext.getResources().getTextArray(R.array.screen_timeout_entries);
final CharSequence[] values =
mContext.getResources().getTextArray(R.array.screen_timeout_values);
- final CharSequence timeoutDescription = getTimeoutDescription(
- currentTimeout, entries, values);
+ final CharSequence timeoutDescription = TimeoutPreferenceController
+ .getTimeoutDescription(currentTimeout, entries, values);
final String summary = timeoutDescription == null ? ""
: mContext.getString(R.string.display_summary, timeoutDescription);
mLoader.setSummary(this, summary);
@@ -501,7 +129,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
= new SummaryLoader.SummaryProviderFactory() {
@Override
public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
- SummaryLoader summaryLoader) {
+ SummaryLoader summaryLoader) {
return new SummaryProvider(activity, summaryLoader);
}
};
@@ -511,8 +139,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
- ArrayList<SearchIndexableResource> result =
- new ArrayList<SearchIndexableResource>();
+ ArrayList<SearchIndexableResource> result = new ArrayList<>();
SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.display_settings;
@@ -523,35 +150,22 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
@Override
public List<String> getNonIndexableKeys(Context context) {
- ArrayList<String> result = new ArrayList<String>();
- if (!context.getResources().getBoolean(
- com.android.internal.R.bool.config_dreamsSupported)) {
- result.add(KEY_SCREEN_SAVER);
- }
- if (!isAutomaticBrightnessAvailable(context.getResources())) {
- result.add(KEY_AUTO_BRIGHTNESS);
- }
- if (!NightDisplayController.isAvailable(context)) {
- result.add(KEY_NIGHT_DISPLAY);
- }
- if (!isLiftToWakeAvailable(context)) {
- result.add(KEY_LIFT_TO_WAKE);
- }
- if (!isDozeAvailable(context)) {
- result.add(KEY_DOZE);
- }
- if (!RotationPolicy.isRotationLockToggleVisible(context)) {
- result.add(KEY_AUTO_ROTATE);
- }
- if (!isTapToWakeAvailable(context.getResources())) {
- result.add(KEY_TAP_TO_WAKE);
- }
- if (!isCameraGestureAvailable(context.getResources())) {
- result.add(KEY_CAMERA_GESTURE);
- }
- if (!isVrDisplayModeAvailable(context)) {
- result.add(KEY_VR_DISPLAY_PREF);
- }
+ ArrayList<String> result = new ArrayList<>();
+
+ new AutoBrightnessPreferenceController(context).updateNonIndexableKeys(result);
+ new AutoRotatePreferenceController(context).updateNonIndexableKeys(result);
+ new CameraGesturePreferenceController(context).updateNonIndexableKeys(result);
+ new DozePreferenceController(context).updateNonIndexableKeys(result);
+ new FontSizePreferenceController(context).updateNonIndexableKeys(result);
+ new LiftToWakePreferenceController(context).updateNonIndexableKeys(result);
+ new NightDisplayPreferenceController(context).updateNonIndexableKeys(result);
+ new NightModePreferenceController(context).updateNonIndexableKeys(result);
+ new ScreenSaverPreferenceController(context).updateNonIndexableKeys(result);
+ new TapToWakePreferenceController(context).updateNonIndexableKeys(result);
+ new TimeoutPreferenceController(context).updateNonIndexableKeys(result);
+ new VrDisplayPreferenceController(context).updateNonIndexableKeys(result);
+ new WallpaperPreferenceController(context).updateNonIndexableKeys(result);
+
return result;
}
};
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 62ad337c9d..477c326206 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -164,6 +164,7 @@ public class Settings extends SettingsActivity {
public static class SystemSettings extends SettingsActivity { /* empty */ }
// Top level categories for new IA
+ public static class DisplayDashboardActivity extends SettingsActivity {}
public static class StorageDashboardActivity extends SettingsActivity {}
public static class SystemDashboardActivity extends SettingsActivity {}
public static class SupportDashboardActivity extends SettingsActivity {}
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 9f8686049d..f9974b61f4 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -271,6 +271,7 @@ public class SettingsActivity extends SettingsDrawerActivity
// New IA
// Home page
"com.android.settings.Settings.BatteryDashboardAlias",
+ "com.android.settings.Settings.DisplayDashboardAlias",
Settings.SystemDashboardActivity.class.getName(),
Settings.SupportDashboardActivity.class.getName(),
// Home page > System
diff --git a/src/com/android/settings/core/PreferenceController.java b/src/com/android/settings/core/PreferenceController.java
index eb912b2bd0..6eac2bd467 100644
--- a/src/com/android/settings/core/PreferenceController.java
+++ b/src/com/android/settings/core/PreferenceController.java
@@ -35,22 +35,42 @@ public abstract class PreferenceController {
/**
* Displays preference in this controller.
*/
- public abstract void displayPreference(PreferenceScreen screen);
+ public void displayPreference(PreferenceScreen screen) {
+ if (isAvailable()) {
+ if (this instanceof Preference.OnPreferenceChangeListener) {
+ final Preference preference = screen.findPreference(getPreferenceKey());
+ preference.setOnPreferenceChangeListener(
+ (Preference.OnPreferenceChangeListener) this);
+ }
+ } else {
+ removePreference(screen, getPreferenceKey());
+ }
+ }
/**
- * Handles preference tree click
- *
- * @param preference the preference being clicked
- * @return true if click is handled
+ * Updates the current status of preference (summary, switch state, etc)
*/
- public abstract boolean handlePreferenceTreeClick(Preference preference);
+ public void updateState(PreferenceScreen screen) {
+ }
/**
* Updates non-indexable keys for search provider.
*
* Called by SearchIndexProvider#getNonIndexableKeys
*/
- public abstract void updateNonIndexableKeys(List<String> keys);
+ public void updateNonIndexableKeys(List<String> keys) {
+ if (!isAvailable()) {
+ keys.add(getPreferenceKey());
+ }
+ }
+
+ /**
+ * Handles preference tree click
+ *
+ * @param preference the preference being clicked
+ * @return true if click is handled
+ */
+ public abstract boolean handlePreferenceTreeClick(Preference preference);
/**
* Removes preference from screen.
@@ -62,4 +82,14 @@ public abstract class PreferenceController {
}
}
+ /**
+ * Returns true if preference is available (should be displayed)
+ */
+ protected abstract boolean isAvailable();
+
+ /**
+ * Returns the key for this preference.
+ */
+ protected abstract String getPreferenceKey();
+
}
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 0aee0b51e2..0758e4a8e3 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -55,6 +55,14 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
super.onAttach(context);
mDashboardFeatureProvider =
FeatureFactory.getFactory(context).getDashboardFeatureProvider(context);
+
+ final List<PreferenceController> controllers = getPreferenceControllers(context);
+ if (controllers == null) {
+ return;
+ }
+ for (PreferenceController controller : controllers) {
+ addPreferenceController(controller);
+ }
}
@Override
@@ -81,7 +89,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
if (category == null) {
return;
}
- mSummaryLoader.setListening(true);
+ if (mSummaryLoader != null) {
+ // SummaryLoader can be null when there is no dynamic tiles.
+ mSummaryLoader.setListening(true);
+ }
final Activity activity = getActivity();
if (activity instanceof SettingsDrawerActivity) {
mListeningToCategoryChange = true;
@@ -103,6 +114,12 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
}
@Override
+ public void onResume() {
+ super.onResume();
+ updatePreferenceStates();
+ }
+
+ @Override
public boolean onPreferenceTreeClick(Preference preference) {
Collection<PreferenceController> controllers = mPreferenceControllers.values();
// Give all controllers a chance to handle click.
@@ -117,7 +134,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
@Override
public void onStop() {
super.onStop();
- mSummaryLoader.setListening(false);
+ if (mSummaryLoader != null) {
+ // SummaryLoader can be null when there is no dynamic tiles.
+ mSummaryLoader.setListening(false);
+ }
if (mListeningToCategoryChange) {
final Activity activity = getActivity();
if (activity instanceof SettingsDrawerActivity) {
@@ -142,13 +162,37 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
protected abstract String getCategoryKey();
/**
- * Displays resource based tiles.
+ * Get the tag string for logging.
*/
- protected abstract void displayResourceTiles();
-
protected abstract String getLogTag();
/**
+ * Get the res id for static preference xml for this fragment.
+ */
+ protected abstract int getPreferenceScreenResId();
+
+ /**
+ * Get a list of {@link PreferenceController} for this fragment.
+ */
+ protected abstract List<PreferenceController> getPreferenceControllers(Context context);
+
+ /**
+ * Displays resource based tiles.
+ */
+ private void displayResourceTiles() {
+ final int resId = getPreferenceScreenResId();
+ if (resId <= 0) {
+ return;
+ }
+ addPreferencesFromResource(resId);
+ final PreferenceScreen screen = getPreferenceScreen();
+ Collection<PreferenceController> controllers = mPreferenceControllers.values();
+ for (PreferenceController controller : controllers) {
+ controller.displayPreference(screen);
+ }
+ }
+
+ /**
* Displays dashboard tiles as preference.
*/
private final void displayDashboardTiles(final String TAG, PreferenceScreen screen) {
@@ -196,6 +240,17 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
}
/**
+ * Update state of each preference managed by PreferenceController.
+ */
+ private void updatePreferenceStates() {
+ Collection<PreferenceController> controllers = mPreferenceControllers.values();
+ final PreferenceScreen screen = getPreferenceScreen();
+ for (PreferenceController controller : controllers) {
+ controller.updateState(screen);
+ }
+ }
+
+ /**
* Refresh preference items using system category dashboard items.
*/
private void refreshAllPreferences(final String TAG) {
@@ -206,6 +261,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
}
// Add resource based tiles.
displayResourceTiles();
+
// Add dashboard tiles.
displayDashboardTiles(TAG, getPreferenceScreen());
}
diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java
index ff69a0b987..4e4dd404e6 100644
--- a/src/com/android/settings/dashboard/SummaryLoader.java
+++ b/src/com/android/settings/dashboard/SummaryLoader.java
@@ -86,7 +86,13 @@ public class SummaryLoader {
mWorker = new Worker(mWorkerThread.getLooper());
mActivity = activity;
- List<Tile> tiles = mDashboardFeatureProvider.getTilesForCategory(categoryKey).tiles;
+ final DashboardCategory category =
+ mDashboardFeatureProvider.getTilesForCategory(categoryKey);
+ if (category == null || category.tiles == null) {
+ return;
+ }
+
+ List<Tile> tiles = category.tiles;
for (Tile tile : tiles) {
mWorker.obtainMessage(Worker.MSG_GET_PROVIDER, tile).sendToTarget();
}
@@ -258,6 +264,9 @@ public class SummaryLoader {
}
private Tile getTileFromCategory(DashboardCategory category, ComponentName component) {
+ if (category == null || category.tiles == null) {
+ return null;
+ }
final int tileCount = category.tiles.size();
for (int j = 0; j < tileCount; j++) {
final Tile tile = category.tiles.get(j);
diff --git a/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java
new file mode 100644
index 0000000000..6dd6aba0e3
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.deviceinfo;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.core.PreferenceController;
+
+public class AdditionalSystemUpdatePreferenceController extends PreferenceController {
+
+ private static final String KEY_UPDATE_SETTING = "additional_system_update_settings";
+
+ public AdditionalSystemUpdatePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return mContext.getResources().getBoolean(
+ com.android.settings.R.bool.config_additional_system_update_setting_enable);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_UPDATE_SETTING;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java b/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java
index aae4be0bf8..add4781e1d 100644
--- a/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java
@@ -33,17 +33,8 @@ public class ManageStoragePreferenceController extends PreferenceController {
}
@Override
- public void displayPreference(PreferenceScreen screen) {
- if (!isAvailable()) {
- removePreference(screen, KEY_MANAGE_STORAGE);
- }
- }
-
- @Override
- public void updateNonIndexableKeys(List<String> keys) {
- if (!isAvailable()) {
- keys.add(KEY_MANAGE_STORAGE);
- }
+ protected String getPreferenceKey() {
+ return KEY_MANAGE_STORAGE;
}
@Override
@@ -51,10 +42,8 @@ public class ManageStoragePreferenceController extends PreferenceController {
return false;
}
- /**
- * Whether a preference should be available on screen.
- */
- private boolean isAvailable() {
+ @Override
+ protected boolean isAvailable() {
return mContext.getResources().getBoolean(R.bool.config_storage_manager_settings_enabled);
}
}
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 7e8d9256e0..aa4d834d2c 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.provider.SearchIndexableResource;
import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -45,22 +46,20 @@ public class StorageDashboardFragment extends DashboardFragment {
}
@Override
- public void onAttach(Context context) {
- super.onAttach(context);
- addPreferenceController(new ManageStoragePreferenceController(context));
- }
-
- @Override
protected String getCategoryKey() {
return CategoryKey.CATEGORY_STORAGE;
}
@Override
- protected void displayResourceTiles() {
- addPreferencesFromResource(R.xml.storage_dashboard_fragment);
+ protected int getPreferenceScreenResId() {
+ return R.xml.storage_dashboard_fragment;
+ }
- getPreferenceController(ManageStoragePreferenceController.class)
- .displayPreference(getPreferenceScreen());
+ @Override
+ protected List<PreferenceController> getPreferenceControllers(Context context) {
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new ManageStoragePreferenceController(context));
+ return controllers;
}
/**
diff --git a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
index 5c2ebcb4b7..449847a429 100644
--- a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
@@ -25,7 +25,6 @@ import android.telephony.CarrierConfigManager;
import android.text.TextUtils;
import android.util.Log;
-import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceController;
@@ -37,8 +36,7 @@ public class SystemUpdatePreferenceController extends PreferenceController {
private static final String TAG = "SysUpdatePrefContr";
- static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings";
- static final String KEY_UPDATE_SETTING = "additional_system_update_settings";
+ private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings";
private final UserManager mUm;
@@ -48,29 +46,32 @@ public class SystemUpdatePreferenceController extends PreferenceController {
}
@Override
+ protected boolean isAvailable() {
+ return mUm.isAdminUser();
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_SYSTEM_UPDATE_SETTINGS;
+ }
+
+ @Override
public void displayPreference(PreferenceScreen screen) {
- if (isAvailable(mContext, KEY_SYSTEM_UPDATE_SETTINGS)) {
+ if (isAvailable()) {
Utils.updatePreferenceToSpecificActivityOrRemove(mContext, screen,
KEY_SYSTEM_UPDATE_SETTINGS,
Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
} else {
removePreference(screen, KEY_SYSTEM_UPDATE_SETTINGS);
}
-
- if (!isAvailable(mContext, KEY_UPDATE_SETTING)) {
- removePreference(screen, KEY_UPDATE_SETTING);
- }
}
@Override
public void updateNonIndexableKeys(List<String> keys) {
// TODO: system update needs to be fixed for non-owner user b/22760654
- if (!isAvailable(mContext, KEY_SYSTEM_UPDATE_SETTINGS)) {
+ if (!isAvailable()) {
keys.add(KEY_SYSTEM_UPDATE_SETTINGS);
}
- if (!isAvailable(mContext, KEY_UPDATE_SETTING)) {
- keys.add(KEY_UPDATE_SETTING);
- }
}
@Override
@@ -88,21 +89,6 @@ public class SystemUpdatePreferenceController extends PreferenceController {
}
/**
- * Whether a preference should be available on screen.
- */
- private boolean isAvailable(Context context, String key) {
- switch (key) {
- case KEY_SYSTEM_UPDATE_SETTINGS:
- return mUm.isAdminUser();
- case KEY_UPDATE_SETTING:
- return context.getResources().getBoolean(
- R.bool.config_additional_system_update_setting_enable);
- default:
- return false;
- }
- }
-
- /**
* Trigger client initiated action (send intent) on system update
*/
private void ciActionOnSysUpdate(PersistableBundle b) {
diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
new file mode 100644
index 0000000000..934ccf2cf7
--- /dev/null
+++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+
+
+public class AutoBrightnessPreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness";
+
+ public AutoBrightnessPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_automatic_brightness_available);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_AUTO_BRIGHTNESS;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final SwitchPreference preference =
+ (SwitchPreference) screen.findPreference(KEY_AUTO_BRIGHTNESS);
+ if (preference == null) {
+ return;
+ }
+ int brightnessMode = Settings.System.getInt(mContext.getContentResolver(),
+ SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
+ preference.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean auto = (Boolean) newValue;
+ Settings.System.putInt(mContext.getContentResolver(), SCREEN_BRIGHTNESS_MODE,
+ auto ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL);
+ return true;
+ }
+}
diff --git a/src/com/android/settings/display/AutoRotatePreferenceController.java b/src/com/android/settings/display/AutoRotatePreferenceController.java
new file mode 100644
index 0000000000..f28e1d672d
--- /dev/null
+++ b/src/com/android/settings/display/AutoRotatePreferenceController.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.support.v7.preference.DropDownPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.internal.logging.MetricsProto;
+import com.android.internal.view.RotationPolicy;
+import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
+
+public class AutoRotatePreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_AUTO_ROTATE = "auto_rotate";
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
+
+ public AutoRotatePreferenceController(Context context) {
+ super(context);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_AUTO_ROTATE;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final DropDownPreference rotatePreference =
+ (DropDownPreference) screen.findPreference(KEY_AUTO_ROTATE);
+ final int rotateLockedResourceId;
+ // The following block sets the string used when rotation is locked.
+ // If the device locks specifically to portrait or landscape (rather than current
+ // rotation), then we use a different string to include this information.
+ if (allowAllRotations()) {
+ rotateLockedResourceId = R.string.display_auto_rotate_stay_in_current;
+ } else {
+ if (RotationPolicy.getRotationLockOrientation(mContext)
+ == Configuration.ORIENTATION_PORTRAIT) {
+ rotateLockedResourceId = R.string.display_auto_rotate_stay_in_portrait;
+ } else {
+ rotateLockedResourceId = R.string.display_auto_rotate_stay_in_landscape;
+ }
+ }
+ rotatePreference.setEntries(new CharSequence[]{
+ mContext.getString(R.string.display_auto_rotate_rotate),
+ mContext.getString(rotateLockedResourceId),
+ });
+ rotatePreference.setEntryValues(new CharSequence[]{"0", "1"});
+ rotatePreference.setValueIndex(RotationPolicy.isRotationLocked(mContext) ?
+ 1 : 0);
+ }
+
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return RotationPolicy.isRotationLockToggleVisible(mContext);
+ }
+
+ private boolean allowAllRotations() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowAllRotations);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean locked = Integer.parseInt((String) newValue) != 0;
+ mMetricsFeatureProvider.action(mContext, MetricsProto.MetricsEvent.ACTION_ROTATION_LOCK,
+ locked);
+ RotationPolicy.setRotationLock(mContext, locked);
+ return true;
+ }
+}
diff --git a/src/com/android/settings/display/CameraGesturePreferenceController.java b/src/com/android/settings/display/CameraGesturePreferenceController.java
new file mode 100644
index 0000000000..98486c5f0e
--- /dev/null
+++ b/src/com/android/settings/display/CameraGesturePreferenceController.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+
+import static android.provider.Settings.Secure.CAMERA_GESTURE_DISABLED;
+
+public class CameraGesturePreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_CAMERA_GESTURE = "camera_gesture";
+
+ public CameraGesturePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_CAMERA_GESTURE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final SwitchPreference preference =
+ (SwitchPreference) screen.findPreference(KEY_CAMERA_GESTURE);
+ if (preference != null) {
+ int value = Settings.Secure.getInt(mContext.getContentResolver(),
+ CAMERA_GESTURE_DISABLED, 0);
+ preference.setChecked(value == 0);
+ }
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ boolean configSet = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_cameraLaunchGestureSensorType) != -1;
+ return configSet
+ && !SystemProperties.getBoolean("gesture.disable_camera_launch", false);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ Settings.Secure.putInt(mContext.getContentResolver(), CAMERA_GESTURE_DISABLED,
+ value ? 0 : 1 /* Backwards because setting is for disabling */);
+ return true;
+ }
+}
diff --git a/src/com/android/settings/display/DozePreferenceController.java b/src/com/android/settings/display/DozePreferenceController.java
new file mode 100644
index 0000000000..9fcc8079f8
--- /dev/null
+++ b/src/com/android/settings/display/DozePreferenceController.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.os.Build;
+import android.os.SystemProperties;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
+
+import static android.provider.Settings.Secure.DOZE_ENABLED;
+import static com.android.internal.logging.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
+
+public class DozePreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_DOZE = "doze";
+
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
+
+ public DozePreferenceController(Context context) {
+ super(context);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_DOZE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (KEY_DOZE.equals(preference.getKey())) {
+ mMetricsFeatureProvider.action(mContext, ACTION_AMBIENT_DISPLAY);
+ }
+ return false;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final SwitchPreference preference = (SwitchPreference) screen.findPreference(KEY_DOZE);
+ // Update doze if it is available.
+ if (preference != null) {
+ int value = Settings.Secure.getInt(mContext.getContentResolver(), DOZE_ENABLED, 1);
+ preference.setChecked(value != 0);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ Settings.Secure.putInt(mContext.getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
+ return true;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ String name = Build.IS_DEBUGGABLE ? SystemProperties.get("debug.doze.component") : null;
+ if (TextUtils.isEmpty(name)) {
+ name = mContext.getResources().getString(
+ com.android.internal.R.string.config_dozeComponent);
+ }
+ return !TextUtils.isEmpty(name);
+ }
+}
diff --git a/src/com/android/settings/display/FontSizePreferenceController.java b/src/com/android/settings/display/FontSizePreferenceController.java
new file mode 100644
index 0000000000..9981fcd36a
--- /dev/null
+++ b/src/com/android/settings/display/FontSizePreferenceController.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ToggleFontSizePreferenceFragment;
+import com.android.settings.core.PreferenceController;
+
+public class FontSizePreferenceController extends PreferenceController {
+
+ private static final String KEY_FONT_SIZE = "font_size";
+
+ public FontSizePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_FONT_SIZE;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final Preference preference = screen.findPreference(KEY_FONT_SIZE);
+ if (preference == null) {
+ return;
+ }
+ final float currentScale = Settings.System.getFloat(mContext.getContentResolver(),
+ Settings.System.FONT_SCALE, 1.0f);
+ final Resources res = mContext.getResources();
+ final String[] entries = res.getStringArray(R.array.entries_font_size);
+ final String[] strEntryValues = res.getStringArray(R.array.entryvalues_font_size);
+ final int index = ToggleFontSizePreferenceFragment.fontSizeValueToIndex(currentScale,
+ strEntryValues);
+ preference.setSummary(entries[index]);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+}
diff --git a/src/com/android/settings/display/LiftToWakePreferenceController.java b/src/com/android/settings/display/LiftToWakePreferenceController.java
new file mode 100644
index 0000000000..0b573cf827
--- /dev/null
+++ b/src/com/android/settings/display/LiftToWakePreferenceController.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+
+import static android.provider.Settings.Secure.WAKE_GESTURE_ENABLED;
+
+public class LiftToWakePreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_LIFT_TO_WAKE = "lift_to_wake";
+
+ public LiftToWakePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ SensorManager sensors = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
+ return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null;
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_LIFT_TO_WAKE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ Settings.Secure.putInt(mContext.getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
+ return true;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final SwitchPreference pref = (SwitchPreference) screen.findPreference(KEY_LIFT_TO_WAKE);
+ // Update lift-to-wake if it is available.
+ if (pref != null) {
+ int value =
+ Settings.Secure.getInt(mContext.getContentResolver(), WAKE_GESTURE_ENABLED, 0);
+ pref.setChecked(value != 0);
+ }
+ }
+}
diff --git a/src/com/android/settings/display/NightDisplayPreferenceController.java b/src/com/android/settings/display/NightDisplayPreferenceController.java
new file mode 100644
index 0000000000..d7191d2035
--- /dev/null
+++ b/src/com/android/settings/display/NightDisplayPreferenceController.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.internal.app.NightDisplayController;
+import com.android.settings.core.PreferenceController;
+
+public class NightDisplayPreferenceController extends PreferenceController {
+
+ private static final String KEY_NIGHT_DISPLAY = "night_display";
+
+ public NightDisplayPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return NightDisplayController.isAvailable(mContext);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_NIGHT_DISPLAY;
+ }
+}
diff --git a/src/com/android/settings/display/NightModePreferenceController.java b/src/com/android/settings/display/NightModePreferenceController.java
new file mode 100644
index 0000000000..7b3c584d5d
--- /dev/null
+++ b/src/com/android/settings/display/NightModePreferenceController.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.app.UiModeManager;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.Log;
+
+import com.android.settings.core.PreferenceController;
+
+import static android.content.Context.UI_MODE_SERVICE;
+
+public class NightModePreferenceController extends PreferenceController
+ implements Preference.OnPreferenceChangeListener {
+
+ private static final String TAG = "NightModePrefContr";
+ private static final String KEY_NIGHT_MODE = "night_mode";
+
+ public NightModePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return false;
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_NIGHT_MODE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ if (!isAvailable()) {
+ removePreference(screen, KEY_NIGHT_MODE);
+ return;
+ }
+ ListPreference mNightModePreference = (ListPreference) screen.findPreference(
+ KEY_NIGHT_MODE);
+ if (mNightModePreference != null) {
+ final UiModeManager uiManager =
+ (UiModeManager) mContext.getSystemService(UI_MODE_SERVICE);
+ final int currentNightMode = uiManager.getNightMode();
+ mNightModePreference.setValue(String.valueOf(currentNightMode));
+ mNightModePreference.setOnPreferenceChangeListener(this);
+ }
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ try {
+ final int value = Integer.parseInt((String) newValue);
+ final UiModeManager uiManager =
+ (UiModeManager) mContext.getSystemService(UI_MODE_SERVICE);
+ uiManager.setNightMode(value);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "could not persist night mode setting", e);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java
new file mode 100644
index 0000000000..6376fcfe65
--- /dev/null
+++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.DreamSettings;
+import com.android.settings.core.PreferenceController;
+
+public class ScreenSaverPreferenceController extends PreferenceController {
+
+ private static final String KEY_SCREEN_SAVER = "screensaver";
+
+ public ScreenSaverPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_dreamsSupported);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_SCREEN_SAVER;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final Preference preference = screen.findPreference(KEY_SCREEN_SAVER);
+ if (preference != null) {
+ preference.setSummary(
+ DreamSettings.getSummaryTextWithDreamName(mContext));
+ }
+ }
+}
diff --git a/src/com/android/settings/display/TapToWakePreferenceController.java b/src/com/android/settings/display/TapToWakePreferenceController.java
new file mode 100644
index 0000000000..6d1681f745
--- /dev/null
+++ b/src/com/android/settings/display/TapToWakePreferenceController.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+
+public class TapToWakePreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_TAP_TO_WAKE = "tap_to_wake";
+
+ public TapToWakePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_TAP_TO_WAKE;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_supportDoubleTapWake);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final SwitchPreference preference =
+ (SwitchPreference) screen.findPreference(KEY_TAP_TO_WAKE);
+ if (preference != null) {
+ int value = Settings.Secure.getInt(
+ mContext.getContentResolver(), Settings.Secure.DOUBLE_TAP_TO_WAKE, 0);
+ preference.setChecked(value != 0);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ Settings.Secure.putInt(
+ mContext.getContentResolver(), Settings.Secure.DOUBLE_TAP_TO_WAKE, value ? 1 : 0);
+ return true;
+ }
+}
diff --git a/src/com/android/settings/display/TimeoutPreferenceController.java b/src/com/android/settings/display/TimeoutPreferenceController.java
new file mode 100644
index 0000000000..1295a47503
--- /dev/null
+++ b/src/com/android/settings/display/TimeoutPreferenceController.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.TimeoutListPreference;
+import com.android.settings.core.PreferenceController;
+import com.android.settingslib.RestrictedLockUtils;
+
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
+public class TimeoutPreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String TAG = "TimeoutPrefContr";
+
+ /** If there is no setting in the provider, use this. */
+ public static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
+
+ private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
+
+ public TimeoutPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_SCREEN_TIMEOUT;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final TimeoutListPreference preference =
+ (TimeoutListPreference) screen.findPreference(KEY_SCREEN_TIMEOUT);
+ if (preference == null) {
+ return;
+ }
+ final long currentTimeout = Settings.System.getLong(mContext.getContentResolver(),
+ SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE);
+ preference.setValue(String.valueOf(currentTimeout));
+ final DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
+ Context.DEVICE_POLICY_SERVICE);
+ if (dpm != null) {
+ final RestrictedLockUtils.EnforcedAdmin admin =
+ RestrictedLockUtils.checkIfMaximumTimeToLockIsSet(mContext);
+ final long maxTimeout =
+ dpm.getMaximumTimeToLockForUserAndProfiles(UserHandle.myUserId());
+ preference.removeUnusableTimeouts(maxTimeout, admin);
+ }
+ updateTimeoutPreferenceDescription(preference, currentTimeout);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ try {
+ int value = Integer.parseInt((String) newValue);
+ Settings.System.putInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, value);
+ updateTimeoutPreferenceDescription((TimeoutListPreference) preference, value);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "could not persist screen timeout setting", e);
+ }
+ return true;
+ }
+
+ public static CharSequence getTimeoutDescription(
+ long currentTimeout, CharSequence[] entries, CharSequence[] values) {
+ if (currentTimeout < 0 || entries == null || values == null
+ || values.length != entries.length) {
+ return null;
+ }
+
+ for (int i = 0; i < values.length; i++) {
+ long timeout = Long.parseLong(values[i].toString());
+ if (currentTimeout == timeout) {
+ return entries[i];
+ }
+ }
+ return null;
+ }
+
+ private void updateTimeoutPreferenceDescription(TimeoutListPreference preference,
+ long currentTimeout) {
+ final CharSequence[] entries = preference.getEntries();
+ final CharSequence[] values = preference.getEntryValues();
+ final String summary;
+ if (preference.isDisabledByAdmin()) {
+ summary = mContext.getString(com.android.settings.R.string.disabled_by_policy_title);
+ } else {
+ final CharSequence timeoutDescription = getTimeoutDescription(
+ currentTimeout, entries, values);
+ summary = timeoutDescription == null
+ ? ""
+ : mContext.getString(R.string.screen_timeout_summary, timeoutDescription);
+ }
+ preference.setSummary(summary);
+ }
+
+}
diff --git a/src/com/android/settings/display/VrDisplayPreferenceController.java b/src/com/android/settings/display/VrDisplayPreferenceController.java
new file mode 100644
index 0000000000..c340759cfc
--- /dev/null
+++ b/src/com/android/settings/display/VrDisplayPreferenceController.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.provider.Settings;
+import android.support.v7.preference.DropDownPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
+
+public class VrDisplayPreferenceController extends PreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String TAG = "VrDisplayPrefContr";
+ private static final String KEY_VR_DISPLAY_PREF = "vr_display_pref";
+
+ public VrDisplayPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ final PackageManager pm = mContext.getPackageManager();
+ return pm.hasSystemFeature(PackageManager.FEATURE_VR_MODE_HIGH_PERFORMANCE);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_VR_DISPLAY_PREF;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ final DropDownPreference pref =
+ (DropDownPreference) screen.findPreference(KEY_VR_DISPLAY_PREF);
+ if (pref == null) {
+ Log.d(TAG, "Could not find VR display preference.");
+ return;
+ }
+ pref.setEntries(new CharSequence[]{
+ mContext.getString(R.string.display_vr_pref_low_persistence),
+ mContext.getString(R.string.display_vr_pref_off),
+ });
+ pref.setEntryValues(new CharSequence[]{"0", "1"});
+
+ int currentUser = ActivityManager.getCurrentUser();
+ int current = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ Settings.Secure.VR_DISPLAY_MODE,
+ /*default*/Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
+ currentUser);
+ pref.setValueIndex(current);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ int i = Integer.parseInt((String) newValue);
+ int u = ActivityManager.getCurrentUser();
+ if (!Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.VR_DISPLAY_MODE,
+ i, u)) {
+ Log.e(TAG, "Could not change setting for " +
+ Settings.Secure.VR_DISPLAY_MODE);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+}
diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java
new file mode 100644
index 0000000000..32e9abcea0
--- /dev/null
+++ b/src/com/android/settings/display/WallpaperPreferenceController.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedPreference;
+
+import static android.os.UserManager.DISALLOW_SET_WALLPAPER;
+
+public class WallpaperPreferenceController extends PreferenceController {
+
+ private static final String KEY_WALLPAPER = "wallpaper";
+
+ public WallpaperPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_WALLPAPER;
+ }
+
+ @Override
+ public void updateState(PreferenceScreen screen) {
+ disablePreferenceIfManaged(screen);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ private void disablePreferenceIfManaged(PreferenceScreen screen) {
+ final RestrictedPreference pref =
+ (RestrictedPreference) screen.findPreference(KEY_WALLPAPER);
+ final String restriction = DISALLOW_SET_WALLPAPER;
+ if (pref != null) {
+ pref.setDisabledByAdmin(null);
+ if (RestrictedLockUtils.hasBaseUserRestriction(mContext,
+ restriction, UserHandle.myUserId())) {
+ pref.setEnabled(false);
+ } else {
+ pref.checkRestrictionAndSetDisabled(restriction);
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index e5c5119469..6f1e6f6cc1 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -20,7 +20,9 @@ import android.os.UserManager;
import android.provider.SearchIndexableResource;
import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.deviceinfo.AdditionalSystemUpdatePreferenceController;
import com.android.settings.deviceinfo.SystemUpdatePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -47,23 +49,21 @@ public class SystemDashboardFragment extends DashboardFragment {
}
@Override
- public void onAttach(Context context) {
- super.onAttach(context);
- addPreferenceController(
- new SystemUpdatePreferenceController(context, UserManager.get(context)));
+ protected int getPreferenceScreenResId() {
+ return R.xml.system_dashboard_fragment;
}
@Override
- protected void displayResourceTiles() {
- addPreferencesFromResource(R.xml.system_dashboard_fragment);
-
- getPreferenceController(SystemUpdatePreferenceController.class)
- .displayPreference(getPreferenceScreen());
+ protected String getCategoryKey() {
+ return CategoryKey.CATEGORY_SYSTEM;
}
@Override
- protected String getCategoryKey() {
- return CategoryKey.CATEGORY_SYSTEM;
+ protected List<PreferenceController> getPreferenceControllers(Context context) {
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new SystemUpdatePreferenceController(context, UserManager.get(context)));
+ controllers.add(new AdditionalSystemUpdatePreferenceController(context));
+ return controllers;
}
/**
@@ -89,10 +89,11 @@ public class SystemDashboardFragment extends DashboardFragment {
.isEnabled()) {
return null;
}
- final SystemUpdatePreferenceController systemUpdatePreferenceController =
- new SystemUpdatePreferenceController(context, UserManager.get(context));
final List<String> keys = new ArrayList<>();
- systemUpdatePreferenceController.updateNonIndexableKeys(keys);
+ new SystemUpdatePreferenceController(context, UserManager.get(context))
+ .updateNonIndexableKeys(keys);
+ new AdditionalSystemUpdatePreferenceController(context)
+ .updateNonIndexableKeys(keys);
return keys;
}
};
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 88ae259d90..ca455b8d8b 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -40,11 +40,11 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
+import android.provider.Settings.Global;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
-import android.provider.Settings.Global;
import android.util.Log;
import android.util.SparseArray;
import android.view.Menu;