diff options
author | Tom Giordano <tomgiordano83@gmail.com> | 2012-01-24 22:51:01 +1100 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2012-01-28 16:02:19 -0800 |
commit | ba55296d7575871aeac4b37d7c28fff59fd26c35 (patch) | |
tree | c763be33886b6667092dfeb5e06fadd5ee8b173e /services | |
parent | 1f7ebf20b8d0166836fc9841c33a08b3ec75e982 (diff) | |
download | frameworks_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.java | 25 | ||||
-rwxr-xr-x | services/java/com/android/server/wm/WindowManagerService.java | 3 | ||||
-rw-r--r-- | services/surfaceflinger/Android.mk | 3 |
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 |