diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-07-17 13:58:40 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-07-17 13:58:40 -0700 |
commit | 0fde7de9d660e4acdb8404f954f75d8c331b5d45 (patch) | |
tree | 9be145df09757f1963f18ba465f15906840900fe | |
parent | 1007bf2e50ab6d8bfe96479c1e44d7a1f9cb4e7a (diff) | |
parent | 54f09101381fa63dca35ae4ea0ba3802ee863236 (diff) | |
download | frameworks_base-0fde7de9d660e4acdb8404f954f75d8c331b5d45.zip frameworks_base-0fde7de9d660e4acdb8404f954f75d8c331b5d45.tar.gz frameworks_base-0fde7de9d660e4acdb8404f954f75d8c331b5d45.tar.bz2 |
am 54f09101: Merge change 7613 into donut
Merge commit '54f09101381fa63dca35ae4ea0ba3802ee863236'
* commit '54f09101381fa63dca35ae4ea0ba3802ee863236':
* Use Fede In/Out animation if one of opening/closing apps is in compatibility mode.
-rw-r--r-- | core/java/android/content/res/CompatibilityInfo.java | 9 | ||||
-rw-r--r-- | core/java/android/view/ViewRoot.java | 9 | ||||
-rw-r--r-- | core/java/android/view/WindowManager.java | 3 | ||||
-rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 45 |
4 files changed, 49 insertions, 17 deletions
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index ebe556e..08e3a40 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -38,7 +38,12 @@ public class CompatibilityInfo { private static final String TAG = "CompatibilityInfo"; /** default compatibility info object for compatible applications */ - public static final CompatibilityInfo DEFAULT_COMPATIBILITY_INFO = new CompatibilityInfo(); + public static final CompatibilityInfo DEFAULT_COMPATIBILITY_INFO = new CompatibilityInfo() { + @Override + public void setExpandable(boolean expandable) { + throw new UnsupportedOperationException("trying to change default compatibility info"); + } + }; /** * The default width of the screen in portrait mode. @@ -191,7 +196,7 @@ public class CompatibilityInfo { @Override public String toString() { return "CompatibilityInfo{scale=" + applicationScale + - ", compatibility flag=" + mCompatibilityFlags + "}"; + ", supports screen=" + supportsScreen() + "}"; } /** diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index 1e3cdb3..2acf790 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -504,8 +504,12 @@ public final class ViewRoot extends Handler implements ViewParent, void setLayoutParams(WindowManager.LayoutParams attrs, boolean newView) { synchronized (this) { int oldSoftInputMode = mWindowAttributes.softInputMode; + // preserve compatible window flag if exists. + int compatibleWindowFlag = + mWindowAttributes.flags & WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW; mWindowAttributes.copyFrom(attrs); - + mWindowAttributes.flags |= compatibleWindowFlag; + if (newView) { mSoftInputMode = attrs.softInputMode; requestLayout(); @@ -1308,7 +1312,8 @@ public final class ViewRoot extends Handler implements ViewParent, if (DEBUG_DRAW) { Context cxt = mView.getContext(); Log.i(TAG, "Drawing: package:" + cxt.getPackageName() + - ", metrics=" + mView.getContext().getResources().getDisplayMetrics()); + ", metrics=" + cxt.getResources().getDisplayMetrics() + + ", compatibilityInfo=" + cxt.getResources().getCompatibilityInfo()); } int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG); try { diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index e96a15b..ba3bfa7 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -986,6 +986,9 @@ public interface WindowManager extends ViewManager { sb.append(" or="); sb.append(screenOrientation); } + if ((flags & FLAG_COMPATIBLE_WINDOW) != 0) { + sb.append(" compatible=true"); + } sb.append('}'); return sb.toString(); } diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index e41524e..f04cfd6 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -1898,7 +1898,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo break; case WindowManagerPolicy.TRANSIT_TASK_TO_BACK: animAttr = enter - ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation + ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation : com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation; break; } @@ -7281,17 +7281,27 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo public static WindowManager.LayoutParams findAnimations( ArrayList<AppWindowToken> order, - ArrayList<AppWindowToken> tokenList1, - ArrayList<AppWindowToken> tokenList2) { + ArrayList<AppWindowToken> openingTokenList1, + ArrayList<AppWindowToken> closingTokenList2) { // We need to figure out which animation to use... + + // First, check if there is a compatible window in opening/closing + // apps, and use it if exists. WindowManager.LayoutParams animParams = null; int animSrc = 0; - + animParams = findCompatibleWindowParams(openingTokenList1); + if (animParams == null) { + animParams = findCompatibleWindowParams(closingTokenList2); + } + if (animParams != null) { + return animParams; + } + //Log.i(TAG, "Looking for animations..."); for (int i=order.size()-1; i>=0; i--) { AppWindowToken wtoken = order.get(i); //Log.i(TAG, "Token " + wtoken + " with " + wtoken.windows.size() + " windows"); - if (tokenList1.contains(wtoken) || tokenList2.contains(wtoken)) { + if (openingTokenList1.contains(wtoken) || closingTokenList2.contains(wtoken)) { int j = wtoken.windows.size(); while (j > 0) { j--; @@ -7319,6 +7329,21 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo return animParams; } + private static LayoutParams findCompatibleWindowParams(ArrayList<AppWindowToken> tokenList) { + for (int appCount = tokenList.size() - 1; appCount >= 0; appCount--) { + AppWindowToken wtoken = tokenList.get(appCount); + // Just checking one window is sufficient as all windows have the compatible flag + // if the application is in compatibility mode. + if (wtoken.windows.size() > 0) { + WindowManager.LayoutParams params = wtoken.windows.get(0).mAttrs; + if ((params.flags & FLAG_COMPATIBLE_WINDOW) != 0) { + return params; + } + } + } + return null; + } + // ------------------------------------------------------------- // DummyAnimation // ------------------------------------------------------------- @@ -9326,16 +9351,10 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo // width is the screen width {@see AppWindowToken#stepAnimatinoLocked} mWidth = width; } - - @Override - public boolean willChangeTransformationMatrix() { - return true; - } @Override - public boolean willChangeBounds() { - return true; + public int getZAdjustment() { + return Animation.ZORDER_TOP; } } } - |