Merge commit '1484b6d6b75e13dd96b0f47158926d7989808272' into froyo-plus-aosp * commit '1484b6d6b75e13dd96b0f47158926d7989808272': Fix "incall in landscape sometimes" bug #2523942
This commit is contained in:
@ -367,6 +367,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
boolean mSafeMode;
|
boolean mSafeMode;
|
||||||
boolean mDisplayEnabled = false;
|
boolean mDisplayEnabled = false;
|
||||||
boolean mSystemBooted = false;
|
boolean mSystemBooted = false;
|
||||||
|
int mInitialDisplayWidth = 0;
|
||||||
|
int mInitialDisplayHeight = 0;
|
||||||
int mRotation = 0;
|
int mRotation = 0;
|
||||||
int mRequestedRotation = 0;
|
int mRequestedRotation = 0;
|
||||||
int mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
int mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
||||||
@ -1842,6 +1844,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
if (mDisplay == null) {
|
if (mDisplay == null) {
|
||||||
WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
|
WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
|
||||||
mDisplay = wm.getDefaultDisplay();
|
mDisplay = wm.getDefaultDisplay();
|
||||||
|
mInitialDisplayWidth = mDisplay.getWidth();
|
||||||
|
mInitialDisplayHeight = mDisplay.getHeight();
|
||||||
mQueue.setDisplay(mDisplay);
|
mQueue.setDisplay(mDisplay);
|
||||||
reportNewConfig = true;
|
reportNewConfig = true;
|
||||||
}
|
}
|
||||||
@ -3025,7 +3029,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
// app window. No point in continuing further.
|
// app window. No point in continuing further.
|
||||||
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
||||||
}
|
}
|
||||||
if (!wtoken.isVisibleLw()) {
|
if (!wtoken.isVisibleLw() || !wtoken.mPolicyVisibilityAfterAnim) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int req = wtoken.mAttrs.screenOrientation;
|
int req = wtoken.mAttrs.screenOrientation;
|
||||||
@ -3154,6 +3158,15 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
* android.os.IBinder)
|
* android.os.IBinder)
|
||||||
*/
|
*/
|
||||||
boolean updateOrientationFromAppTokensLocked() {
|
boolean updateOrientationFromAppTokensLocked() {
|
||||||
|
if (mDisplayFrozen) {
|
||||||
|
// 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 {
|
||||||
@ -4843,8 +4856,13 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mQueue.getInputConfiguration(config);
|
mQueue.getInputConfiguration(config);
|
||||||
final int dw = mDisplay.getWidth();
|
|
||||||
final int dh = mDisplay.getHeight();
|
// Use the effective "visual" dimensions based on current rotation
|
||||||
|
final boolean rotated = (mRotation == Surface.ROTATION_90
|
||||||
|
|| mRotation == Surface.ROTATION_270);
|
||||||
|
final int dw = rotated ? mInitialDisplayHeight : mInitialDisplayWidth;
|
||||||
|
final int dh = rotated ? mInitialDisplayWidth : mInitialDisplayHeight;
|
||||||
|
|
||||||
int orientation = Configuration.ORIENTATION_SQUARE;
|
int orientation = Configuration.ORIENTATION_SQUARE;
|
||||||
if (dw < dh) {
|
if (dw < dh) {
|
||||||
orientation = Configuration.ORIENTATION_PORTRAIT;
|
orientation = Configuration.ORIENTATION_PORTRAIT;
|
||||||
@ -10998,6 +11016,14 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
mKeyWaiter.notifyAll();
|
mKeyWaiter.notifyAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// While the display is frozen we don't re-compute the orientation
|
||||||
|
// to avoid inconsistent states. However, something interesting
|
||||||
|
// could have actually changed during that time so re-evaluate it
|
||||||
|
// now to catch that.
|
||||||
|
if (updateOrientationFromAppTokensLocked()) {
|
||||||
|
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
|
||||||
|
}
|
||||||
|
|
||||||
// A little kludge: a lot could have happened while the
|
// A little kludge: a lot could have happened while the
|
||||||
// display was frozen, so now that we are coming back we
|
// display was frozen, so now that we are coming back we
|
||||||
// do a gc so that any remote references the system
|
// do a gc so that any remote references the system
|
||||||
|
Reference in New Issue
Block a user