Merge "Fix issue #3362666 Activities launched from ongoing notifications don't animate" into honeycomb

This commit is contained in:
Dianne Hackborn
2011-01-18 11:14:46 -08:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 22 deletions

View File

@@ -1965,23 +1965,29 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// behind it.
return false;
}
if (mStatusBar != null && mStatusBar.isVisibleLw()) {
Rect rect = new Rect(mStatusBar.getShownFrameLw());
for (int i=mStatusBarPanels.size()-1; i>=0; i--) {
WindowState w = mStatusBarPanels.get(i);
if (w.isVisibleLw()) {
rect.union(w.getShownFrameLw());
if (false) {
// Don't do this on the tablet, since the system bar never completely
// covers the screen, and with all its transparency this will
// incorrectly think it does cover it when it doesn't. We'll revisit
// this later when we re-do the phone status bar.
if (mStatusBar != null && mStatusBar.isVisibleLw()) {
Rect rect = new Rect(mStatusBar.getShownFrameLw());
for (int i=mStatusBarPanels.size()-1; i>=0; i--) {
WindowState w = mStatusBarPanels.get(i);
if (w.isVisibleLw()) {
rect.union(w.getShownFrameLw());
}
}
final int insetw = mRestrictedScreenWidth/10;
final int inseth = mRestrictedScreenHeight/10;
if (rect.contains(insetw, inseth, mRestrictedScreenWidth-insetw,
mRestrictedScreenHeight-inseth)) {
// All of the status bar windows put together cover the
// screen, so the app can't be seen. (Note this test doesn't
// work if the rects of these windows are at off offsets or
// sizes, causing gaps in the rect union we have computed.)
return false;
}
}
final int insetw = mRestrictedScreenWidth/10;
final int inseth = mRestrictedScreenHeight/10;
if (rect.contains(insetw, inseth, mRestrictedScreenWidth-insetw,
mRestrictedScreenHeight-inseth)) {
// All of the status bar windows put together cover the
// screen, so the app can't be seen. (Note this test doesn't
// work if the rects of these windows are at off offsets or
// sizes, causing gaps in the rect union we have computed.)
return false;
}
}
return true;

View File

@@ -3031,7 +3031,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
private AttributeCache.Entry getCachedAnimations(WindowManager.LayoutParams lp) {
if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: params package="
if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: layout params pkg="
+ (lp != null ? lp.packageName : null)
+ " resId=0x" + (lp != null ? Integer.toHexString(lp.windowAnimations) : null));
if (lp != null && lp.windowAnimations != 0) {
@@ -3052,7 +3052,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
private AttributeCache.Entry getCachedAnimations(String packageName, int resId) {
if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: params package="
if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: package="
+ packageName + " resId=0x" + Integer.toHexString(resId));
if (packageName != null) {
if ((resId&0xFF000000) == 0x01000000) {
@@ -9957,8 +9957,8 @@ public class WindowManagerService extends IWindowManager.Stub
// The top-most window will supply the layout params,
// and we will determine it below.
LayoutParams animLp = null;
AppWindowToken animToken = null;
int bestAnimLayer = -1;
boolean fullscreenAnim = false;
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New wallpaper target=" + mWallpaperTarget
@@ -10000,11 +10000,18 @@ public class WindowManagerService extends IWindowManager.Stub
// window, we will always use its anim.
if ((ws.mAttrs.flags&FLAG_COMPATIBLE_WINDOW) != 0) {
animLp = ws.mAttrs;
animToken = ws.mAppToken;
bestAnimLayer = Integer.MAX_VALUE;
} else if (ws.mLayer > bestAnimLayer) {
} else if (!fullscreenAnim || ws.mLayer > bestAnimLayer) {
animLp = ws.mAttrs;
bestAnimLayer = ws.mLayer;
}
fullscreenAnim = true;
}
} else if (!fullscreenAnim) {
WindowState ws = wtoken.findMainWindow();
if (ws != null) {
if (ws.mLayer > bestAnimLayer) {
animLp = ws.mAttrs;
animToken = ws.mAppToken;
bestAnimLayer = ws.mLayer;
}
}