Loading core/java/android/content/res/CompatibilityInfo.java +7 −2 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -191,7 +196,7 @@ public class CompatibilityInfo { @Override public String toString() { return "CompatibilityInfo{scale=" + applicationScale + ", compatibility flag=" + mCompatibilityFlags + "}"; ", supports screen=" + supportsScreen() + "}"; } /** Loading core/java/android/view/ViewRoot.java +7 −2 Original line number Diff line number Diff line Loading @@ -504,7 +504,11 @@ 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; Loading Loading @@ -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 { Loading core/java/android/view/WindowManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -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(); } Loading services/java/com/android/server/WindowManagerService.java +32 −13 Original line number Diff line number Diff line Loading @@ -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--; Loading Loading @@ -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 // ------------------------------------------------------------- Loading Loading @@ -9328,14 +9353,8 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } @Override public boolean willChangeTransformationMatrix() { return true; } @Override public boolean willChangeBounds() { return true; public int getZAdjustment() { return Animation.ZORDER_TOP; } } } Loading
core/java/android/content/res/CompatibilityInfo.java +7 −2 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -191,7 +196,7 @@ public class CompatibilityInfo { @Override public String toString() { return "CompatibilityInfo{scale=" + applicationScale + ", compatibility flag=" + mCompatibilityFlags + "}"; ", supports screen=" + supportsScreen() + "}"; } /** Loading
core/java/android/view/ViewRoot.java +7 −2 Original line number Diff line number Diff line Loading @@ -504,7 +504,11 @@ 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; Loading Loading @@ -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 { Loading
core/java/android/view/WindowManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -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(); } Loading
services/java/com/android/server/WindowManagerService.java +32 −13 Original line number Diff line number Diff line Loading @@ -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--; Loading Loading @@ -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 // ------------------------------------------------------------- Loading Loading @@ -9328,14 +9353,8 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } @Override public boolean willChangeTransformationMatrix() { return true; } @Override public boolean willChangeBounds() { return true; public int getZAdjustment() { return Animation.ZORDER_TOP; } } }