summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/DisplaySettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/DisplaySettings.java')
-rw-r--r--src/com/android/settings/DisplaySettings.java531
1 files changed, 395 insertions, 136 deletions
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index de15d4c..399e1eb 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2014 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,14 +16,24 @@
*/
package com.android.settings;
-
import com.android.internal.logging.MetricsLogger;
+
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.preference.CheckBoxPreference;
+
+import android.os.UserHandle;
+import android.view.Display;
+import android.view.IWindowManager;
+import android.view.WindowManager;
+import android.view.WindowManagerGlobal;
+import android.view.WindowManagerImpl;
+import android.widget.Toast;
import com.android.internal.view.RotationPolicy;
import com.android.settings.DropDownPreference.Callback;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
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;
@@ -35,30 +46,45 @@ import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
import android.app.Activity;
import android.app.ActivityManagerNative;
import android.app.Dialog;
+import android.app.IActivityManager;
+import android.app.ProgressDialog;
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.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.hardware.Sensor;
import android.hardware.SensorManager;
+import android.os.AsyncTask;
import android.os.Build;
+import android.database.ContentObserver;
import android.os.Bundle;
+import android.os.Handler;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemProperties;
import android.preference.ListPreference;
import android.preference.Preference;
+import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceCategory;
+import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.DisplayMetrics;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
+import com.android.settings.Utils;
+import com.android.settings.cyanogenmod.DisplayRotation;
+import cyanogenmod.providers.CMSettings;
public class DisplaySettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener, OnPreferenceClickListener, Indexable {
@@ -67,7 +93,11 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
/** If there is no setting in the provider, use this. */
private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
+ private static final String KEY_CATEGORY_LIGHTS = "lights";
+ private static final String KEY_CATEGORY_DISPLAY = "display";
+ private static final String KEY_CATEGORY_INTERFACE = "interface";
private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
+ private static final String KEY_LCD_DENSITY = "lcd_density";
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";
@@ -77,24 +107,48 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
private static final String KEY_AUTO_ROTATE = "auto_rotate";
private static final String KEY_NIGHT_MODE = "night_mode";
private static final String KEY_CAMERA_GESTURE = "camera_gesture";
- private static final String KEY_CAMERA_DOUBLE_TAP_POWER_GESTURE
- = "camera_double_tap_power_gesture";
+ private static final String KEY_PROXIMITY_WAKE = "proximity_on_wake";
+ private static final String KEY_DISPLAY_ROTATION = "display_rotation";
+ private static final String KEY_WAKE_WHEN_PLUGGED_OR_UNPLUGGED = "wake_when_plugged_or_unplugged";
+ private static final String KEY_NOTIFICATION_LIGHT = "notification_light";
+ private static final String KEY_BATTERY_LIGHT = "battery_light";
private static final int DLG_GLOBAL_CHANGE_WARNING = 1;
- private WarnedListPreference mFontSizePref;
+ private ListPreference mLcdDensityPreference;
+ private FontDialogPreference mFontSizePref;
+ private PreferenceScreen mDisplayRotationPreference;
private final Configuration mCurConfig = new Configuration();
private ListPreference mScreenTimeoutPreference;
private ListPreference mNightModePreference;
private Preference mScreenSaverPreference;
+ private SwitchPreference mAccelerometer;
private SwitchPreference mLiftToWakePreference;
private SwitchPreference mDozePreference;
private SwitchPreference mTapToWakePreference;
+ private SwitchPreference mProximityCheckOnWakePreference;
private SwitchPreference mAutoBrightnessPreference;
+ private SwitchPreference mWakeWhenPluggedOrUnplugged;
+
+ private ContentObserver mAccelerometerRotationObserver =
+ new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateDisplayRotationPreferenceDescription();
+ updateAccelerometerRotationSwitch();
+ }
+ };
+
+ private final RotationPolicy.RotationPolicyListener mRotationPolicyListener =
+ new RotationPolicy.RotationPolicyListener() {
+ @Override
+ public void onChange() {
+ updateDisplayRotationPreferenceDescription();
+ }
+ };
private SwitchPreference mCameraGesturePreference;
- private SwitchPreference mCameraDoubleTapPowerGesturePreference;
@Override
protected int getMetricsCategory() {
@@ -106,14 +160,23 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
super.onCreate(savedInstanceState);
final Activity activity = getActivity();
final ContentResolver resolver = activity.getContentResolver();
+ addPreferencesFromResource(R.xml.display);
- addPreferencesFromResource(R.xml.display_settings);
+ PreferenceCategory displayPrefs = (PreferenceCategory)
+ findPreference(KEY_CATEGORY_DISPLAY);
+ PreferenceCategory interfacePrefs = (PreferenceCategory)
+ findPreference(KEY_CATEGORY_INTERFACE);
+ mDisplayRotationPreference = (PreferenceScreen) findPreference(KEY_DISPLAY_ROTATION);
+ mAccelerometer = (SwitchPreference) findPreference(DisplayRotation.KEY_ACCELEROMETER);
+ if (mAccelerometer != null) {
+ mAccelerometer.setPersistent(false);
+ }
mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
if (mScreenSaverPreference != null
&& getResources().getBoolean(
com.android.internal.R.bool.config_dreamsSupported) == false) {
- getPreferenceScreen().removePreference(mScreenSaverPreference);
+ interfacePrefs.removePreference(mScreenSaverPreference);
}
mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);
@@ -123,90 +186,87 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mScreenTimeoutPreference.setOnPreferenceChangeListener(this);
disableUnusableTimeouts(mScreenTimeoutPreference);
updateTimeoutPreferenceDescription(currentTimeout);
+ updateDisplayRotationPreferenceDescription();
+
+ mLcdDensityPreference = (ListPreference) findPreference(KEY_LCD_DENSITY);
+ if (mLcdDensityPreference != null) {
+ if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
+ interfacePrefs.removePreference(mLcdDensityPreference);
+ } else {
+ int defaultDensity = getDefaultDensity();
+ int currentDensity = getCurrentDensity();
+ if (currentDensity < 10 || currentDensity >= 1000) {
+ // Unsupported value, force default
+ currentDensity = defaultDensity;
+ }
- mFontSizePref = (WarnedListPreference) findPreference(KEY_FONT_SIZE);
+ int factor = defaultDensity >= 480 ? 40 : 20;
+ int minimumDensity = defaultDensity - 4 * factor;
+ int currentIndex = -1;
+ String[] densityEntries = new String[7];
+ String[] densityValues = new String[7];
+ for (int idx = 0; idx < 7; ++idx) {
+ int val = minimumDensity + factor * idx;
+ int valueFormatResId = val == defaultDensity
+ ? R.string.lcd_density_default_value_format
+ : R.string.lcd_density_value_format;
+
+ densityEntries[idx] = getString(valueFormatResId, val);
+ densityValues[idx] = Integer.toString(val);
+ if (currentDensity == val) {
+ currentIndex = idx;
+ }
+ }
+ mLcdDensityPreference.setEntries(densityEntries);
+ mLcdDensityPreference.setEntryValues(densityValues);
+ if (currentIndex != -1) {
+ mLcdDensityPreference.setValueIndex(currentIndex);
+ }
+ mLcdDensityPreference.setOnPreferenceChangeListener(this);
+ updateLcdDensityPreferenceDescription(currentDensity);
+ }
+ }
+
+ mFontSizePref = (FontDialogPreference) findPreference(KEY_FONT_SIZE);
mFontSizePref.setOnPreferenceChangeListener(this);
mFontSizePref.setOnPreferenceClickListener(this);
- if (isAutomaticBrightnessAvailable(getResources())) {
- mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
+ mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
+ if (mAutoBrightnessPreference != null && isAutomaticBrightnessAvailable(getResources())) {
mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
} else {
- removePreference(KEY_AUTO_BRIGHTNESS);
+ if (displayPrefs != null && mAutoBrightnessPreference != null) {
+ displayPrefs.removePreference(mAutoBrightnessPreference);
+ mAutoBrightnessPreference = null;
+ }
}
- if (isLiftToWakeAvailable(activity)) {
- mLiftToWakePreference = (SwitchPreference) findPreference(KEY_LIFT_TO_WAKE);
+ mLiftToWakePreference = (SwitchPreference) findPreference(KEY_LIFT_TO_WAKE);
+ if (mLiftToWakePreference != null && isLiftToWakeAvailable(activity)) {
mLiftToWakePreference.setOnPreferenceChangeListener(this);
} else {
- removePreference(KEY_LIFT_TO_WAKE);
+ if (displayPrefs != null && mLiftToWakePreference != null) {
+ displayPrefs.removePreference(mLiftToWakePreference);
+ mLiftToWakePreference = null;
+ }
}
- if (isDozeAvailable(activity)) {
- mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
+ mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
+ if (mDozePreference != null && Utils.isDozeAvailable(activity)) {
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 (displayPrefs != null && mDozePreference != null) {
+ displayPrefs.removePreference(mDozePreference);
+ }
}
- if (isCameraGestureAvailable(getResources())) {
- mCameraGesturePreference = (SwitchPreference) findPreference(KEY_CAMERA_GESTURE);
+ mCameraGesturePreference = (SwitchPreference) findPreference(KEY_CAMERA_GESTURE);
+ if (mCameraGesturePreference != null && isCameraGestureAvailable(getResources())) {
mCameraGesturePreference.setOnPreferenceChangeListener(this);
} else {
- removePreference(KEY_CAMERA_GESTURE);
- }
-
- if (isCameraDoubleTapPowerGestureAvailable(getResources())) {
- mCameraDoubleTapPowerGesturePreference
- = (SwitchPreference) findPreference(KEY_CAMERA_DOUBLE_TAP_POWER_GESTURE);
- mCameraDoubleTapPowerGesturePreference.setOnPreferenceChangeListener(this);
- } else {
- removePreference(KEY_CAMERA_DOUBLE_TAP_POWER_GESTURE);
- }
-
- if (RotationPolicy.isRotationLockToggleVisible(activity)) {
- DropDownPreference rotatePreference =
- (DropDownPreference) findPreference(KEY_AUTO_ROTATE);
- rotatePreference.addItem(activity.getString(R.string.display_auto_rotate_rotate),
- false);
- 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;
- }
+ if (displayPrefs != null && mCameraGesturePreference != null) {
+ displayPrefs.removePreference(mCameraGesturePreference);
}
- rotatePreference.addItem(activity.getString(rotateLockedResourceId), true);
- rotatePreference.setSelectedItem(RotationPolicy.isRotationLocked(activity) ?
- 1 : 0);
- rotatePreference.setCallback(new Callback() {
- @Override
- public boolean onItemSelected(int pos, Object value) {
- final boolean locked = (Boolean) value;
- MetricsLogger.action(getActivity(), MetricsLogger.ACTION_ROTATION_LOCK,
- locked);
- RotationPolicy.setRotationLock(activity, locked);
- return true;
- }
- });
- } else {
- removePreference(KEY_AUTO_ROTATE);
}
mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
@@ -217,6 +277,51 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mNightModePreference.setValue(String.valueOf(currentNightMode));
mNightModePreference.setOnPreferenceChangeListener(this);
}
+
+ mTapToWakePreference = (SwitchPreference) findPreference(KEY_TAP_TO_WAKE);
+ if (mTapToWakePreference != null && isTapToWakeAvailable(getResources())) {
+ mTapToWakePreference.setOnPreferenceChangeListener(this);
+ } else {
+ if (displayPrefs != null && mTapToWakePreference != null) {
+ displayPrefs.removePreference(mTapToWakePreference);
+ }
+ }
+
+ mProximityCheckOnWakePreference = (SwitchPreference) findPreference(KEY_PROXIMITY_WAKE);
+ boolean proximityCheckOnWake = getResources().getBoolean(
+ org.cyanogenmod.platform.internal.R.bool.config_proximityCheckOnWake);
+ if (!proximityCheckOnWake) {
+ if (displayPrefs != null && mProximityCheckOnWakePreference != null) {
+ displayPrefs.removePreference(mProximityCheckOnWakePreference);
+ }
+ CMSettings.System.putInt(getContentResolver(), CMSettings.System.PROXIMITY_ON_WAKE, 1);
+ }
+
+ mWakeWhenPluggedOrUnplugged =
+ (SwitchPreference) findPreference(KEY_WAKE_WHEN_PLUGGED_OR_UNPLUGGED);
+ initPulse((PreferenceCategory) findPreference(KEY_CATEGORY_LIGHTS));
+ }
+
+ private int getDefaultDensity() {
+ IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.checkService(
+ Context.WINDOW_SERVICE));
+ try {
+ return wm.getInitialDisplayDensity(Display.DEFAULT_DISPLAY);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ return DisplayMetrics.DENSITY_DEVICE;
+ }
+
+ private int getCurrentDensity() {
+ IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.checkService(
+ Context.WINDOW_SERVICE));
+ try {
+ return wm.getBaseDisplayDensity(Display.DEFAULT_DISPLAY);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ return DisplayMetrics.DENSITY_DEVICE;
}
private static boolean allowAllRotations(Context context) {
@@ -229,15 +334,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
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);
}
@@ -246,6 +342,59 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
return res.getBoolean(com.android.internal.R.bool.config_automatic_brightness_available);
}
+ private void updateAccelerometerRotationSwitch() {
+ if (mAccelerometer != null) {
+ mAccelerometer.setChecked(!RotationPolicy.isRotationLocked(getActivity()));
+ }
+ }
+ private void updateDisplayRotationPreferenceDescription() {
+ if (mDisplayRotationPreference == null) {
+ // The preference was removed, do nothing
+ return;
+ }
+
+ // We have a preference, lets update the summary
+ boolean rotationEnabled = Settings.System.getInt(getContentResolver(),
+ Settings.System.ACCELEROMETER_ROTATION, 0) != 0;
+
+ if (!rotationEnabled) {
+ mDisplayRotationPreference.setSummary(R.string.display_rotation_disabled);
+ return;
+ }
+
+ StringBuilder summary = new StringBuilder();
+ int mode = Settings.System.getInt(getContentResolver(),
+ Settings.System.ACCELEROMETER_ROTATION_ANGLES,
+ DisplayRotation.ROTATION_0_MODE
+ | DisplayRotation.ROTATION_90_MODE
+ | DisplayRotation.ROTATION_270_MODE);
+ ArrayList<String> rotationList = new ArrayList<String>();
+ String delim = "";
+
+ if ((mode & DisplayRotation.ROTATION_0_MODE) != 0) {
+ rotationList.add("0");
+ }
+ if ((mode & DisplayRotation.ROTATION_90_MODE) != 0) {
+ rotationList.add("90");
+ }
+ if ((mode & DisplayRotation.ROTATION_180_MODE) != 0) {
+ rotationList.add("180");
+ }
+ if ((mode & DisplayRotation.ROTATION_270_MODE) != 0) {
+ rotationList.add("270");
+ }
+ for (int i = 0; i < rotationList.size(); i++) {
+ summary.append(delim).append(rotationList.get(i));
+ if ((rotationList.size() - i) > 2) {
+ delim = ", ";
+ } else {
+ delim = " & ";
+ }
+ }
+ summary.append(" " + getString(R.string.display_rotation_unit));
+ mDisplayRotationPreference.setSummary(summary);
+ }
+
private static boolean isCameraGestureAvailable(Resources res) {
boolean configSet = res.getInteger(
com.android.internal.R.integer.config_cameraLaunchGestureSensorType) != -1;
@@ -253,11 +402,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
!SystemProperties.getBoolean("gesture.disable_camera_launch", false);
}
- private static boolean isCameraDoubleTapPowerGestureAvailable(Resources res) {
- return res.getBoolean(
- com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled);
- }
-
private void updateTimeoutPreferenceDescription(long currentTimeout) {
ListPreference preference = mScreenTimeoutPreference;
String summary;
@@ -284,6 +428,12 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
preference.setSummary(summary);
}
+ private void updateLcdDensityPreferenceDescription(int currentDensity) {
+ final int summaryResId = currentDensity == getDefaultDensity()
+ ? R.string.lcd_density_default_value_format : R.string.lcd_density_value_format;
+ mLcdDensityPreference.setSummary(getString(summaryResId, currentDensity));
+ }
+
private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) {
final DevicePolicyManager dpm =
(DevicePolicyManager) getActivity().getSystemService(
@@ -325,41 +475,44 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
screenTimeoutPreference.setEnabled(revisedEntries.size() > 0);
}
- int floatToIndex(float val) {
- String[] indices = getResources().getStringArray(R.array.entryvalues_font_size);
- float lastVal = Float.parseFloat(indices[0]);
- for (int i=1; i<indices.length; i++) {
- float thisVal = Float.parseFloat(indices[i]);
- if (val < (lastVal + (thisVal-lastVal)*.5f)) {
- return i-1;
- }
- lastVal = thisVal;
- }
- return indices.length-1;
- }
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateDisplayRotationPreferenceDescription();
- public void readFontSizePreference(ListPreference pref) {
- try {
- mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration());
- } catch (RemoteException e) {
- Log.w(TAG, "Unable to retrieve font size");
- }
+ RotationPolicy.registerRotationPolicyListener(getActivity(),
+ mRotationPolicyListener);
- // mark the appropriate item in the preferences list
- int index = floatToIndex(mCurConfig.fontScale);
- pref.setValueIndex(index);
+ final ContentResolver resolver = getContentResolver();
- // report the current size in the summary text
- final Resources res = getResources();
- String[] fontSizeNames = res.getStringArray(R.array.entries_font_size);
- pref.setSummary(String.format(res.getString(R.string.summary_font_size),
- fontSizeNames[index]));
+ // Display rotation observer
+ resolver.registerContentObserver(
+ Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), true,
+ mAccelerometerRotationObserver);
+
+ // Default value for wake-on-plug behavior from config.xml
+ boolean wakeUpWhenPluggedOrUnpluggedConfig = getResources().getBoolean(
+ com.android.internal.R.bool.config_unplugTurnsOnScreen);
+
+ if (mWakeWhenPluggedOrUnplugged != null) {
+ mWakeWhenPluggedOrUnplugged.setChecked(CMSettings.Global.getInt(getContentResolver(),
+ CMSettings.Global.WAKE_WHEN_PLUGGED_OR_UNPLUGGED,
+ (wakeUpWhenPluggedOrUnpluggedConfig ? 1 : 0)) == 1);
+ }
+
+ updateState();
+ updateAccelerometerRotationSwitch();
}
@Override
- public void onResume() {
- super.onResume();
- updateState();
+ public void onPause() {
+ super.onPause();
+
+ RotationPolicy.unregisterRotationPolicyListener(getActivity(),
+ mRotationPolicyListener);
+
+ // Display rotation observer
+ getContentResolver().unregisterContentObserver(mAccelerometerRotationObserver);
}
@Override
@@ -410,13 +563,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
int value = Settings.Secure.getInt(getContentResolver(), CAMERA_GESTURE_DISABLED, 0);
mCameraGesturePreference.setChecked(value == 0);
}
-
- // Update camera gesture #2 if it is available.
- if (mCameraDoubleTapPowerGesturePreference != null) {
- int value = Settings.Secure.getInt(
- getContentResolver(), CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0);
- mCameraDoubleTapPowerGesturePreference.setChecked(value == 0);
- }
}
private void updateScreenSaverSummary() {
@@ -426,6 +572,79 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
}
}
+ private void writeLcdDensityPreference(final Context context, final int density) {
+ final IActivityManager am = ActivityManagerNative.asInterface(
+ ServiceManager.checkService("activity"));
+ final IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.checkService(
+ Context.WINDOW_SERVICE));
+ AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected void onPreExecute() {
+ ProgressDialog dialog = new ProgressDialog(context);
+ dialog.setMessage(getResources().getString(R.string.restarting_ui));
+ dialog.setCancelable(false);
+ dialog.setIndeterminate(true);
+ dialog.show();
+ }
+ @Override
+ protected Void doInBackground(Void... params) {
+ // Give the user a second to see the dialog
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+
+ try {
+ wm.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, density);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to set density to " + density, e);
+ }
+
+ // Restart the UI
+ try {
+ am.restart();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to restart");
+ }
+ return null;
+ }
+ };
+ task.execute();
+ }
+
+ // === Pulse notification light ===
+
+ private void initPulse(PreferenceCategory parent) {
+ if (!getResources().getBoolean(
+ com.android.internal.R.bool.config_intrusiveNotificationLed)) {
+ parent.removePreference(parent.findPreference(KEY_NOTIFICATION_LIGHT));
+ }
+ if (!getResources().getBoolean(
+ com.android.internal.R.bool.config_intrusiveBatteryLed)
+ || UserHandle.myUserId() != UserHandle.USER_OWNER) {
+ parent.removePreference(parent.findPreference(KEY_BATTERY_LIGHT));
+ }
+ if (parent.getPreferenceCount() == 0) {
+ getPreferenceScreen().removePreference(parent);
+ }
+ }
+ /**
+ * Reads the current font size and sets the value in the summary text
+ */
+ public void readFontSizePreference(Preference pref) {
+ try {
+ mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration());
+ } catch (RemoteException e) {
+ Log.w(TAG, "Unable to retrieve font size");
+ }
+
+ // report the current size in the summary text
+ final Resources res = getResources();
+ String fontDesc = FontDialogPreference.getFontSizeDescription(res, mCurConfig.fontScale);
+ pref.setSummary(getString(R.string.summary_font_size, fontDesc));
+ }
+
public void writeFontSizePreference(Object objValue) {
try {
mCurConfig.fontScale = Float.parseFloat(objValue.toString());
@@ -437,6 +656,16 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+ if (preference == mWakeWhenPluggedOrUnplugged) {
+ CMSettings.Global.putInt(getContentResolver(),
+ CMSettings.Global.WAKE_WHEN_PLUGGED_OR_UNPLUGGED,
+ mWakeWhenPluggedOrUnplugged.isChecked() ? 1 : 0);
+ return true;
+ } else if (preference == mAccelerometer) {
+ RotationPolicy.setRotationLockForAccessibility(getActivity(),
+ !mAccelerometer.isChecked());
+ }
+
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
@@ -452,6 +681,14 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
Log.e(TAG, "could not persist screen timeout setting", e);
}
}
+ if (KEY_LCD_DENSITY.equals(key)) {
+ String newValue = (String) objValue;
+ String oldValue = mLcdDensityPreference.getValue();
+ if (!TextUtils.equals(newValue, oldValue)) {
+ showLcdConfirmationDialog((String) objValue);
+ }
+ return false;
+ }
if (KEY_FONT_SIZE.equals(key)) {
writeFontSizePreference(objValue);
}
@@ -477,11 +714,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
Settings.Secure.putInt(getContentResolver(), CAMERA_GESTURE_DISABLED,
value ? 0 : 1 /* Backwards because setting is for disabling */);
}
- if (preference == mCameraDoubleTapPowerGesturePreference) {
- boolean value = (Boolean) objValue;
- Settings.Secure.putInt(getContentResolver(), CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
- value ? 0 : 1 /* Backwards because setting is for disabling */);
- }
if (preference == mNightModePreference) {
try {
final int value = Integer.parseInt((String) objValue);
@@ -495,6 +727,26 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
return true;
}
+ private void showLcdConfirmationDialog(final String lcdDensity) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.lcd_density);
+ builder.setMessage(R.string.lcd_density_prompt_message);
+ builder.setPositiveButton(R.string.print_restart,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ try {
+ int value = Integer.parseInt(lcdDensity);
+ writeLcdDensityPreference(getActivity(), value);
+ updateLcdDensityPreferenceDescription(value);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "could not persist display density setting", e);
+ }
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ }
+
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference == mFontSizePref) {
@@ -515,6 +767,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
+
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
@@ -522,7 +775,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
new ArrayList<SearchIndexableResource>();
SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.display_settings;
+ sir.xmlResId = R.xml.display;
result.add(sir);
return result;
@@ -535,27 +788,33 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
com.android.internal.R.bool.config_dreamsSupported)) {
result.add(KEY_SCREEN_SAVER);
}
+ if (!context.getResources().getBoolean(
+ com.android.internal.R.bool.config_intrusiveNotificationLed)) {
+ result.add(KEY_NOTIFICATION_LIGHT);
+ }
+ if (!context.getResources().getBoolean(
+ com.android.internal.R.bool.config_intrusiveBatteryLed)) {
+ result.add(KEY_BATTERY_LIGHT);
+ }
if (!isAutomaticBrightnessAvailable(context.getResources())) {
result.add(KEY_AUTO_BRIGHTNESS);
}
if (!isLiftToWakeAvailable(context)) {
result.add(KEY_LIFT_TO_WAKE);
}
- if (!isDozeAvailable(context)) {
+ if (!Utils.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 (!context.getResources().getBoolean(
+ org.cyanogenmod.platform.internal.R.bool.config_proximityCheckOnWake)) {
+ result.add(KEY_PROXIMITY_WAKE);
+ }
if (!isCameraGestureAvailable(context.getResources())) {
result.add(KEY_CAMERA_GESTURE);
}
- if (!isCameraDoubleTapPowerGestureAvailable(context.getResources())) {
- result.add(KEY_CAMERA_DOUBLE_TAP_POWER_GESTURE);
- }
return result;
}
};