summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/DisplaySettings.java
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2015-05-28 15:21:37 -0700
committerDanesh M <daneshm90@gmail.com>2015-11-25 17:00:41 -0800
commit267f0303a824f827a396dceaeae68acc4ca171c4 (patch)
tree9d7743aa5735d86f49c37cb7d53238a64324ffad /src/com/android/settings/DisplaySettings.java
parente94a36df3be936622c06d8fc1488caff7f995d4b (diff)
downloadpackages_apps_Settings-267f0303a824f827a396dceaeae68acc4ca171c4.zip
packages_apps_Settings-267f0303a824f827a396dceaeae68acc4ca171c4.tar.gz
packages_apps_Settings-267f0303a824f827a396dceaeae68acc4ca171c4.tar.bz2
Settings: use WindowManager to set custom DPI
Change-Id: I719bf391cc8746466c466b4b5a9a0e2bf9fc0056 Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'src/com/android/settings/DisplaySettings.java')
-rw-r--r--src/com/android/settings/DisplaySettings.java51
1 files changed, 41 insertions, 10 deletions
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 7d8b5e2..48a991b 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -20,6 +20,12 @@ import com.android.internal.logging.MetricsLogger;
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;
@@ -169,8 +175,8 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mLcdDensityPreference = (ListPreference) findPreference(KEY_LCD_DENSITY);
if (mLcdDensityPreference != null) {
- int defaultDensity = DisplayMetrics.DENSITY_DEVICE;
- int currentDensity = DisplayMetrics.DENSITY_CURRENT;
+ int defaultDensity = getDefaultDensity();
+ int currentDensity = getCurrentDensity();
if (currentDensity < 10 || currentDensity >= 1000) {
// Unsupported value, force default
currentDensity = defaultDensity;
@@ -275,6 +281,28 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
(SwitchPreference) findPreference(KEY_WAKE_WHEN_PLUGGED_OR_UNPLUGGED);
}
+ 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) {
return Resources.getSystem().getBoolean(
com.android.internal.R.bool.config_allowAllRotations);
@@ -380,7 +408,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
}
private void updateLcdDensityPreferenceDescription(int currentDensity) {
- final int summaryResId = currentDensity == DisplayMetrics.DENSITY_DEVICE
+ final int summaryResId = currentDensity == getDefaultDensity()
? R.string.lcd_density_default_value_format : R.string.lcd_density_value_format;
mLcdDensityPreference.setSummary(getString(summaryResId, currentDensity));
}
@@ -527,15 +555,11 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
}
}
- private void writeLcdDensityPreference(final Context context, int value) {
- try {
- SystemProperties.set("persist.sys.lcd_density", Integer.toString(value));
- } catch (RuntimeException e) {
- Log.e(TAG, "Unable to save LCD density");
- return;
- }
+ 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() {
@@ -553,6 +577,13 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
} 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();