am 1b405592: Merge "Fix issue #4539687: At least one compatibility-mode app (Androminion)..." into honeycomb-mr2

* commit '1b405592550c719aa5dd93178705ae08b4e84a2f':
  Fix issue #4539687: At least one compatibility-mode app (Androminion)...
This commit is contained in:
Dianne Hackborn
2011-06-06 17:33:59 -07:00
committed by Android Git Automerger
2 changed files with 30 additions and 14 deletions

View File

@ -90,7 +90,6 @@ import android.os.FileObserver;
import android.os.FileUtils; import android.os.FileUtils;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.IInterface;
import android.os.IPermissionController; import android.os.IPermissionController;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;

View File

@ -153,6 +153,7 @@ public class WindowManagerService extends IWindowManager.Stub
static final boolean DEBUG_WINDOW_MOVEMENT = false; static final boolean DEBUG_WINDOW_MOVEMENT = false;
static final boolean DEBUG_TOKEN_MOVEMENT = false; static final boolean DEBUG_TOKEN_MOVEMENT = false;
static final boolean DEBUG_ORIENTATION = false; static final boolean DEBUG_ORIENTATION = false;
static final boolean DEBUG_APP_ORIENTATION = false;
static final boolean DEBUG_CONFIGURATION = false; static final boolean DEBUG_CONFIGURATION = false;
static final boolean DEBUG_APP_TRANSITIONS = false; static final boolean DEBUG_APP_TRANSITIONS = false;
static final boolean DEBUG_STARTING_WINDOW = false; static final boolean DEBUG_STARTING_WINDOW = false;
@ -427,6 +428,7 @@ public class WindowManagerService extends IWindowManager.Stub
boolean mWindowsFreezingScreen = false; boolean mWindowsFreezingScreen = false;
long mFreezeGcPending = 0; long mFreezeGcPending = 0;
int mAppsFreezingScreen = 0; int mAppsFreezingScreen = 0;
int mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
int mLayoutSeq = 0; int mLayoutSeq = 0;
@ -3187,6 +3189,15 @@ public class WindowManagerService extends IWindowManager.Stub
} }
public int getOrientationFromWindowsLocked() { public int getOrientationFromWindowsLocked() {
if (mDisplayFrozen || mOpeningApps.size() > 0 || mClosingApps.size() > 0) {
// If the display is frozen, some activities may be in the middle
// of restarting, and thus have removed their old window. If the
// window has the flag to hide the lock screen, then the lock screen
// can re-appear and inflict its own orientation on us. Keep the
// orientation stable until this all settles down.
return mLastWindowForcedOrientation;
}
int pos = mWindows.size() - 1; int pos = mWindows.size() - 1;
while (pos >= 0) { while (pos >= 0) {
WindowState wtoken = mWindows.get(pos); WindowState wtoken = mWindows.get(pos);
@ -3194,7 +3205,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (wtoken.mAppToken != null) { if (wtoken.mAppToken != null) {
// We hit an application window. so the orientation will be determined by the // We hit an application window. so the orientation will be determined by the
// app window. No point in continuing further. // app window. No point in continuing further.
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
} }
if (!wtoken.isVisibleLw() || !wtoken.mPolicyVisibilityAfterAnim) { if (!wtoken.isVisibleLw() || !wtoken.mPolicyVisibilityAfterAnim) {
continue; continue;
@ -3204,10 +3215,10 @@ public class WindowManagerService extends IWindowManager.Stub
(req == ActivityInfo.SCREEN_ORIENTATION_BEHIND)){ (req == ActivityInfo.SCREEN_ORIENTATION_BEHIND)){
continue; continue;
} else { } else {
return req; return (mLastWindowForcedOrientation=req);
} }
} }
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
} }
public int getOrientationFromAppTokensLocked() { public int getOrientationFromAppTokensLocked() {
@ -3220,16 +3231,23 @@ public class WindowManagerService extends IWindowManager.Stub
while (pos >= 0) { while (pos >= 0) {
AppWindowToken wtoken = mAppTokens.get(pos); AppWindowToken wtoken = mAppTokens.get(pos);
pos--; pos--;
if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "Checking app orientation: " + wtoken);
// if we're about to tear down this window and not seek for // if we're about to tear down this window and not seek for
// the behind activity, don't use it for orientation // the behind activity, don't use it for orientation
if (!findingBehind if (!findingBehind
&& (!wtoken.hidden && wtoken.hiddenRequested)) { && (!wtoken.hidden && wtoken.hiddenRequested)) {
if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + wtoken
+ " -- going to hide");
continue; continue;
} }
if (!haveGroup) { if (!haveGroup) {
// We ignore any hidden applications on the top. // We ignore any hidden applications on the top.
if (wtoken.hiddenRequested || wtoken.willBeHidden) { if (wtoken.hiddenRequested || wtoken.willBeHidden) {
if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + wtoken
+ " -- hidden on top");
continue; continue;
} }
haveGroup = true; haveGroup = true;
@ -3243,6 +3261,8 @@ public class WindowManagerService extends IWindowManager.Stub
// user's orientation. // user's orientation.
if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND
&& lastFullscreen) { && lastFullscreen) {
if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + wtoken
+ " -- end of group, return " + lastOrientation);
return lastOrientation; return lastOrientation;
} }
} }
@ -3253,16 +3273,21 @@ public class WindowManagerService extends IWindowManager.Stub
lastFullscreen = wtoken.appFullscreen; lastFullscreen = wtoken.appFullscreen;
if (lastFullscreen if (lastFullscreen
&& or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { && or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) {
if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + wtoken
+ " -- full screen, return " + or);
return or; return or;
} }
// If this application has requested an explicit orientation, // If this application has requested an explicit orientation,
// then use it. // then use it.
if (or != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED if (or != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
&& or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { && or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) {
if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + wtoken
+ " -- explicitly set, return " + or);
return or; return or;
} }
findingBehind |= (or == ActivityInfo.SCREEN_ORIENTATION_BEHIND); findingBehind |= (or == ActivityInfo.SCREEN_ORIENTATION_BEHIND);
} }
if (DEBUG_ORIENTATION) Slog.v(TAG, "No app is requesting an orientation");
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
} }
@ -3335,15 +3360,6 @@ public class WindowManagerService extends IWindowManager.Stub
* android.os.IBinder) * android.os.IBinder)
*/ */
boolean updateOrientationFromAppTokensLocked(boolean inTransaction) { boolean updateOrientationFromAppTokensLocked(boolean inTransaction) {
if (mDisplayFrozen || mOpeningApps.size() > 0 || mClosingApps.size() > 0) {
// If the display is frozen, some activities may be in the middle
// of restarting, and thus have removed their old window. If the
// window has the flag to hide the lock screen, then the lock screen
// can re-appear and inflict its own orientation on us. Keep the
// orientation stable until this all settles down.
return false;
}
boolean changed = false; boolean changed = false;
long ident = Binder.clearCallingIdentity(); long ident = Binder.clearCallingIdentity();
try { try {
@ -8934,9 +8950,10 @@ public class WindowManagerService extends IWindowManager.Stub
pw.print(" mAppsFreezingScreen="); pw.print(mAppsFreezingScreen); pw.print(" mAppsFreezingScreen="); pw.print(mAppsFreezingScreen);
pw.print(" mWaitingForConfig="); pw.println(mWaitingForConfig); pw.print(" mWaitingForConfig="); pw.println(mWaitingForConfig);
pw.print(" mRotation="); pw.print(mRotation); pw.print(" mRotation="); pw.print(mRotation);
pw.print(" mForcedAppOrientation="); pw.print(mForcedAppOrientation);
pw.print(" mRequestedRotation="); pw.print(mRequestedRotation); pw.print(" mRequestedRotation="); pw.print(mRequestedRotation);
pw.print(" mAltOrientation="); pw.println(mAltOrientation); pw.print(" mAltOrientation="); pw.println(mAltOrientation);
pw.print(" mLastWindowForcedOrientation"); pw.print(mLastWindowForcedOrientation);
pw.print(" mForcedAppOrientation="); pw.println(mForcedAppOrientation);
pw.print(" mDeferredRotation="); pw.print(mDeferredRotation); pw.print(" mDeferredRotation="); pw.print(mDeferredRotation);
pw.print(", mDeferredRotationAnimFlags="); pw.println(mDeferredRotationAnimFlags); pw.print(", mDeferredRotationAnimFlags="); pw.println(mDeferredRotationAnimFlags);
pw.print(" mAnimationPending="); pw.print(mAnimationPending); pw.print(" mAnimationPending="); pw.print(mAnimationPending);