summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/wm/WindowManagerService.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2012-08-03 17:45:52 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-08-03 17:45:52 -0700
commit2e5746a7a807c6d9d61af48978695214ef9d6717 (patch)
tree9b750a0101d2e4b963c85d541a17813d309bdcd0 /services/java/com/android/server/wm/WindowManagerService.java
parentc09211911c28795354f7ce5a1b75b13ac6a7b4d0 (diff)
parentdde331cebd87982faded6818ad5f9927ff994c96 (diff)
downloadframeworks_base-2e5746a7a807c6d9d61af48978695214ef9d6717.zip
frameworks_base-2e5746a7a807c6d9d61af48978695214ef9d6717.tar.gz
frameworks_base-2e5746a7a807c6d9d61af48978695214ef9d6717.tar.bz2
Merge "We can now (kind-of) change screen density on the fly." into jb-mr1-dev
Diffstat (limited to 'services/java/com/android/server/wm/WindowManagerService.java')
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java117
1 files changed, 88 insertions, 29 deletions
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index e763a56..5b04810 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -6568,6 +6568,7 @@ public class WindowManagerService extends IWindowManager.Stub
displayInfo.rotation = mRotation;
displayInfo.logicalWidth = dw;
displayInfo.logicalHeight = dh;
+ displayInfo.logicalDensityDpi = displayContent.mBaseDisplayDensity;
displayInfo.appWidth = appWidth;
displayInfo.appHeight = appHeight;
displayInfo.getLogicalMetrics(mRealDisplayMetrics, null);
@@ -6594,7 +6595,7 @@ public class WindowManagerService extends IWindowManager.Stub
config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale);
config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale);
config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, dm, dw, dh);
- config.densityDpi = mDisplayMetrics.densityDpi;
+ config.densityDpi = displayContent.mBaseDisplayDensity;
// Update the configuration based on available input devices, lid switch,
// and platform configuration.
@@ -6902,8 +6903,8 @@ public class WindowManagerService extends IWindowManager.Stub
info.width, info.height);
mInputManager.setDisplayOrientation(Display.DEFAULT_DISPLAY,
mDisplay.getRotation(), Surface.ROTATION_0);
- mPolicy.setInitialDisplaySize(mDisplay,
- displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight);
+ mPolicy.setInitialDisplaySize(mDisplay, displayContent.mInitialDisplayWidth,
+ displayContent.mInitialDisplayHeight, displayContent.mInitialDisplayDensity);
}
}
@@ -6917,8 +6918,10 @@ public class WindowManagerService extends IWindowManager.Stub
mDisplayManager.getDisplayInfo(displayId, displayInfo);
displayContent.mInitialDisplayWidth = displayInfo.logicalWidth;
displayContent.mInitialDisplayHeight = displayInfo.logicalHeight;
+ displayContent.mInitialDisplayDensity = displayInfo.logicalDensityDpi;
displayContent.mBaseDisplayWidth = displayContent.mInitialDisplayWidth;
displayContent.mBaseDisplayHeight = displayContent.mInitialDisplayHeight;
+ displayContent.mBaseDisplayDensity = displayContent.mInitialDisplayDensity;
}
}
@@ -6928,7 +6931,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
synchronized (mWindowMap) {
- readForcedDisplaySizeLocked(getDisplayContent(displayId));
+ readForcedDisplaySizeAndDensityLocked(getDisplayContent(displayId));
}
}
@@ -7590,24 +7593,49 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
- private void readForcedDisplaySizeLocked(final DisplayContent displayContent) {
- final String str = Settings.Secure.getString(mContext.getContentResolver(),
+ private void readForcedDisplaySizeAndDensityLocked(final DisplayContent displayContent) {
+ boolean changed = false;
+ final String sizeStr = Settings.Secure.getString(mContext.getContentResolver(),
Settings.Secure.DISPLAY_SIZE_FORCED);
- if (str == null || str.length() == 0) {
- return;
+ if (sizeStr != null && sizeStr.length() > 0) {
+ final int pos = sizeStr.indexOf(',');
+ if (pos > 0 && sizeStr.lastIndexOf(',') == pos) {
+ int width, height;
+ try {
+ width = Integer.parseInt(sizeStr.substring(0, pos));
+ height = Integer.parseInt(sizeStr.substring(pos+1));
+ synchronized(displayContent.mDisplaySizeLock) {
+ if (displayContent.mBaseDisplayWidth != width
+ || displayContent.mBaseDisplayHeight != height) {
+ changed = true;
+ Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height);
+ displayContent.mBaseDisplayWidth = width;
+ displayContent.mBaseDisplayHeight = height;
+ }
+ }
+ } catch (NumberFormatException ex) {
+ }
+ }
}
- final int pos = str.indexOf(',');
- if (pos <= 0 || str.lastIndexOf(',') != pos) {
- return;
+ final String densityStr = Settings.Secure.getString(mContext.getContentResolver(),
+ Settings.Secure.DISPLAY_DENSITY_FORCED);
+ if (densityStr != null && densityStr.length() > 0) {
+ int density;
+ try {
+ density = Integer.parseInt(densityStr);
+ synchronized(displayContent.mDisplaySizeLock) {
+ if (displayContent.mBaseDisplayDensity != density) {
+ changed = true;
+ Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density);
+ displayContent.mBaseDisplayDensity = density;
+ }
+ }
+ } catch (NumberFormatException ex) {
+ }
}
- int width, height;
- try {
- width = Integer.parseInt(str.substring(0, pos));
- height = Integer.parseInt(str.substring(pos+1));
- } catch (NumberFormatException ex) {
- return;
+ if (changed) {
+ reconfigureDisplayLocked(displayContent);
}
- setForcedDisplaySizeLocked(displayContent, width, height);
}
private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) {
@@ -7617,8 +7645,49 @@ public class WindowManagerService extends IWindowManager.Stub
displayContent.mBaseDisplayWidth = width;
displayContent.mBaseDisplayHeight = height;
}
+ reconfigureDisplayLocked(displayContent);
+ }
+
+ public void clearForcedDisplaySize(int displayId) {
+ synchronized(mWindowMap) {
+ final DisplayContent displayContent = getDisplayContent(displayId);
+ setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth,
+ displayContent.mInitialDisplayHeight);
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.DISPLAY_SIZE_FORCED, "");
+ }
+ }
+
+ public void setForcedDisplayDensity(int displayId, int density) {
+ synchronized(mWindowMap) {
+ final DisplayContent displayContent = getDisplayContent(displayId);
+ setForcedDisplayDensityLocked(displayContent, density);
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.DISPLAY_SIZE_FORCED, Integer.toString(density));
+ }
+ }
+
+ private void setForcedDisplayDensityLocked(DisplayContent displayContent, int density) {
+ Slog.i(TAG, "Using new display density: " + density);
+
+ synchronized(displayContent.mDisplaySizeLock) {
+ displayContent.mBaseDisplayDensity = density;
+ }
+ reconfigureDisplayLocked(displayContent);
+ }
+
+ public void clearForcedDisplayDensity(int displayId) {
+ synchronized(mWindowMap) {
+ final DisplayContent displayContent = getDisplayContent(displayId);
+ setForcedDisplayDensityLocked(displayContent, displayContent.mInitialDisplayDensity);
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.DISPLAY_DENSITY_FORCED, "");
+ }
+ }
+
+ private void reconfigureDisplayLocked(DisplayContent displayContent) {
mPolicy.setInitialDisplaySize(mDisplay, displayContent.mBaseDisplayWidth,
- displayContent.mBaseDisplayHeight);
+ displayContent.mBaseDisplayHeight, displayContent.mBaseDisplayDensity);
mLayoutNeeded = true;
@@ -7642,16 +7711,6 @@ public class WindowManagerService extends IWindowManager.Stub
performLayoutAndPlaceSurfacesLocked();
}
- public void clearForcedDisplaySize(int displayId) {
- synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContent(displayId);
- setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth,
- displayContent.mInitialDisplayHeight);
- Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.DISPLAY_SIZE_FORCED, "");
- }
- }
-
public boolean hasSystemNavBar() {
return mPolicy.hasSystemNavBar();
}