summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorTom Giordano <tomgiordano83@gmail.com>2012-01-24 22:51:01 +1100
committerSteve Kondik <shade@chemlab.org>2012-01-28 16:02:19 -0800
commitba55296d7575871aeac4b37d7c28fff59fd26c35 (patch)
treec763be33886b6667092dfeb5e06fadd5ee8b173e /services
parent1f7ebf20b8d0166836fc9841c33a08b3ec75e982 (diff)
downloadframeworks_base-ba55296d7575871aeac4b37d7c28fff59fd26c35.zip
frameworks_base-ba55296d7575871aeac4b37d7c28fff59fd26c35.tar.gz
frameworks_base-ba55296d7575871aeac4b37d7c28fff59fd26c35.tar.bz2
framework: fix screenshot and rotation aimation for devices with abnormal hw rotation
Change-Id: I42694931cb1a754aa6c7652c0a96304ef1f88492
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/wm/ScreenRotationAnimation.java25
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java3
-rw-r--r--services/surfaceflinger/Android.mk3
3 files changed, 22 insertions, 9 deletions
diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java
index 8fc9a70..35503d3 100644
--- a/services/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -65,16 +65,27 @@ class ScreenRotationAnimation {
mContext = context;
// Screenshot does NOT include rotation!
- mSnapshotRotation = 0;
- if (originalRotation == Surface.ROTATION_90
+ // Allow for abnormal hardware orientation
+ mSnapshotRotation = (4 - android.os.SystemProperties.getInt("ro.sf.hwrotation",0) / 90) % 4;
+ if (mSnapshotRotation == Surface.ROTATION_0 || mSnapshotRotation == Surface.ROTATION_180) {
+ if (originalRotation == Surface.ROTATION_90
|| originalRotation == Surface.ROTATION_270) {
- mWidth = originalHeight;
- mHeight = originalWidth;
+ mWidth = originalHeight;
+ mHeight = originalWidth;
+ } else {
+ mWidth = originalWidth;
+ mHeight = originalHeight;
+ }
} else {
- mWidth = originalWidth;
- mHeight = originalHeight;
+ if (originalRotation == Surface.ROTATION_90
+ || originalRotation == Surface.ROTATION_270) {
+ mWidth = originalWidth;
+ mHeight = originalHeight;
+ } else {
+ mWidth = originalHeight;
+ mHeight = originalWidth;
+ }
}
-
mOriginalRotation = originalRotation;
mOriginalWidth = originalWidth;
mOriginalHeight = originalHeight;
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 669fdbb..6564ff8 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -5133,6 +5133,9 @@ public class WindowManagerService extends IWindowManager.Stub
// The screenshot API does not apply the current screen rotation.
rot = mDisplay.getRotation();
+ // Allow for abnormal hardware orientation
+ rot = (rot + (android.os.SystemProperties.getInt("ro.sf.hwrotation",0) / 90 )) % 4;
+
int fw = frame.width();
int fh = frame.height();
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index f1a43e7..930842e 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -14,8 +14,7 @@ LOCAL_SRC_FILES:= \
MessageQueue.cpp \
SurfaceFlinger.cpp \
SurfaceTextureLayer.cpp \
- Transform.cpp \
-
+ Transform.cpp
LOCAL_CFLAGS:= -DLOG_TAG=\"SurfaceFlinger\"
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES