Merge change 7862 into donut

* changes:
      * Don't clip the display if LAYOUT_NO_LIMITS is specified (as with PhoneWindowmanager does)     * FullScreen mode was not hiding status bar for app in compatibility mode       * fixed fillsScreenLw to take compatibility window into account     * Fixed the logic in needsBackgroundFiller to be consistent with other places.     * Fix NPE in WindowManagerService#applyAnimationLocked  LayoutParam can be null.
This commit is contained in:
Android (Google) Code Review
2009-07-20 17:13:06 -07:00

View File

@@ -27,6 +27,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_BLUR_BEHIND;
import static android.view.WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW; import static android.view.WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
import static android.view.WindowManager.LayoutParams.FLAG_SYSTEM_ERROR; import static android.view.WindowManager.LayoutParams.FLAG_SYSTEM_ERROR;
import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
@@ -1857,7 +1858,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
// is running. // is running.
if (!mDisplayFrozen) { if (!mDisplayFrozen) {
Animation a; Animation a;
if ((lp.flags & FLAG_COMPATIBLE_WINDOW) != 0) { if (lp != null && (lp.flags & FLAG_COMPATIBLE_WINDOW) != 0) {
a = new FadeInOutAnimation(enter); a = new FadeInOutAnimation(enter);
if (DEBUG_ANIM) Log.v(TAG, if (DEBUG_ANIM) Log.v(TAG,
"applying FadeInOutAnimation for a window in compatibility mode"); "applying FadeInOutAnimation for a window in compatibility mode");
@@ -5871,8 +5872,10 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
if ((mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0) { if ((mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0) {
container.intersect(mCompatibleScreenFrame); container.intersect(mCompatibleScreenFrame);
if ((mAttrs.flags & FLAG_LAYOUT_NO_LIMITS) == 0) {
display.intersect(mCompatibleScreenFrame); display.intersect(mCompatibleScreenFrame);
} }
}
final int pw = container.right - container.left; final int pw = container.right - container.left;
final int ph = container.bottom - container.top; final int ph = container.bottom - container.top;
@@ -6588,12 +6591,17 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
return false; return false;
} }
final Rect frame = shownFrame ? mShownFrame : mFrame; final Rect frame = shownFrame ? mShownFrame : mFrame;
if (frame.left <= 0 && frame.top <= 0
if ((mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0) {
return frame.left <= mCompatibleScreenFrame.left &&
frame.top <= mCompatibleScreenFrame.top &&
frame.right >= mCompatibleScreenFrame.right &&
frame.bottom >= mCompatibleScreenFrame.bottom;
} else {
return frame.left <= 0 && frame.top <= 0
&& frame.right >= screenWidth && frame.right >= screenWidth
&& frame.bottom >= screenHeight) { && frame.bottom >= screenHeight;
return true;
} }
return false;
} }
/** /**
@@ -6610,16 +6618,13 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
(mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0 && (mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0 &&
// only if it's visible // only if it's visible
mHasDrawn && mViewVisibility == View.VISIBLE && mHasDrawn && mViewVisibility == View.VISIBLE &&
// and only if the application wanted to fill the screen // and only if the application fills the compatible screen
mAttrs.width == mAttrs.FILL_PARENT && mFrame.left <= mCompatibleScreenFrame.left &&
mAttrs.height == mAttrs.FILL_PARENT && mFrame.top <= mCompatibleScreenFrame.top &&
// and only if the window is not hidden mFrame.right >= mCompatibleScreenFrame.right &&
mFrame.left == mCompatibleScreenFrame.left && mFrame.bottom >= mCompatibleScreenFrame.bottom &&
// and starting window do not need background filler // and starting window do not need background filler
mAttrs.type != mAttrs.TYPE_APPLICATION_STARTING && mAttrs.type != mAttrs.TYPE_APPLICATION_STARTING;
// and only if the screen is bigger
((mFrame.right - mFrame.right) < screenWidth ||
(mFrame.bottom - mFrame.top) < screenHeight);
} }
boolean isFullscreen(int screenWidth, int screenHeight) { boolean isFullscreen(int screenWidth, int screenHeight) {