diff options
| -rw-r--r-- | core/api/test-current.txt | 3 | ||||
| -rw-r--r-- | core/java/android/content/pm/ActivityInfo.java | 28 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 13 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 71 | ||||
| -rw-r--r-- | core/java/android/view/WindowManager.java | 36 |
5 files changed, 3 insertions, 148 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index d3b63a85e3df..8c00c6a4bfd8 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -797,7 +797,6 @@ package android.content.pm { field public static final long OVERRIDE_MIN_ASPECT_RATIO_MEDIUM = 180326845L; // 0xabf91bdL field public static final float OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE = 1.5f; field public static final long OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY = 203647190L; // 0xc2368d6L - field public static final long OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS = 237531167L; // 0xe28701fL field public static final int RESIZE_MODE_RESIZEABLE = 2; // 0x2 } @@ -2918,9 +2917,7 @@ package android.view { } @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback { - method public void getBoundsOnScreen(@NonNull android.graphics.Rect, boolean); method public android.view.View getTooltipView(); - method public void getWindowDisplayFrame(@NonNull android.graphics.Rect); method public boolean isAutofilled(); method public static boolean isDefaultFocusHighlightEnabled(); method public boolean isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 226278cbe44d..bbe99f59fc21 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -1104,34 +1104,6 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { 264301586L; // buganizer id /** - * This change id forces the packages it is applied to sandbox {@link android.view.View} API to - * an activity bounds for: - * - * <p>{@link android.view.View#getLocationOnScreen}, - * {@link android.view.View#getWindowVisibleDisplayFrame}, - * {@link android.view.View}#getWindowDisplayFrame, - * {@link android.view.View}#getBoundsOnScreen. - * - * <p>For {@link android.view.View#getWindowVisibleDisplayFrame} and - * {@link android.view.View}#getWindowDisplayFrame this sandboxing is happening indirectly - * through - * {@link android.view.ViewRootImpl}#getWindowVisibleDisplayFrame, - * {@link android.view.ViewRootImpl}#getDisplayFrame respectively. - * - * <p>Some applications assume that they occupy the whole screen and therefore use the display - * coordinates in their calculations as if an activity is positioned in the top-left corner of - * the screen, with left coordinate equal to 0. This may not be the case of applications in - * multi-window and in letterbox modes. This can lead to shifted or out of bounds UI elements in - * case the activity is Letterboxed or is in multi-window mode. - * @hide - */ - @ChangeId - @Overridable - @Disabled - @TestApi - public static final long OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS = 237531167L; // buganizer id - - /** * This change id is the gatekeeper for all treatments that force a given min aspect ratio. * Enabling this change will allow the following min aspect ratio treatments to be applied: * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index baee0940ddf7..d7480e5037f4 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8774,8 +8774,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ @UnsupportedAppUsage - @TestApi - public void getBoundsOnScreen(@NonNull Rect outRect, boolean clipToParent) { + public void getBoundsOnScreen(Rect outRect, boolean clipToParent) { if (mAttachInfo == null) { return; } @@ -8783,7 +8782,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, getBoundsToScreenInternal(position, clipToParent); outRect.set(Math.round(position.left), Math.round(position.top), Math.round(position.right), Math.round(position.bottom)); - mAttachInfo.mViewRootImpl.applyViewBoundsSandboxingIfNeeded(outRect); } /** @@ -15588,8 +15586,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ @UnsupportedAppUsage - @TestApi - public void getWindowDisplayFrame(@NonNull Rect outRect) { + public void getWindowDisplayFrame(Rect outRect) { if (mAttachInfo != null) { mAttachInfo.mViewRootImpl.getDisplayFrame(outRect); return; @@ -25786,11 +25783,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, getLocationInWindow(outLocation); final AttachInfo info = mAttachInfo; - - // Need to offset the outLocation with the window bounds, but only if "Sandboxing View - // Bounds APIs" is disabled. If this override is enabled, it sandboxes {@link outLocation} - // within activity bounds. - if (info != null && !info.mViewRootImpl.isViewBoundsSandboxingEnabled()) { + if (info != null) { outLocation[0] += info.mWindowLeft; outLocation[1] += info.mWindowTop; } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 88861ee7afcf..c8e1131dd1da 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -16,7 +16,6 @@ package android.view; -import static android.content.pm.ActivityInfo.OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS; import static android.graphics.HardwareRenderer.SYNC_CONTEXT_IS_STOPPED; import static android.graphics.HardwareRenderer.SYNC_LOST_SURFACE_REWARD_IF_FOUND; import static android.os.IInputConstants.INVALID_INPUT_EVENT_ID; @@ -83,7 +82,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; -import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS; import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW; import static android.view.WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS; import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED; @@ -102,7 +100,6 @@ import android.app.ActivityThread; import android.app.ICompatCameraControlCallback; import android.app.ResourcesManager; import android.app.WindowConfiguration; -import android.app.compat.CompatChanges; import android.compat.annotation.UnsupportedAppUsage; import android.content.ClipData; import android.content.ClipDescription; @@ -874,15 +871,6 @@ public final class ViewRootImpl implements ViewParent, private boolean mRelayoutRequested; - /** - * Whether sandboxing of {@link android.view.View#getBoundsOnScreen}, - * {@link android.view.View#getLocationOnScreen}, - * {@link android.view.View#getWindowDisplayFrame} and - * {@link android.view.View#getWindowVisibleDisplayFrame} - * within Activity bounds is enabled for the current application. - */ - private final boolean mViewBoundsSandboxingEnabled; - private int mLastTransformHint = Integer.MIN_VALUE; /** @@ -970,8 +958,6 @@ public final class ViewRootImpl implements ViewParent, mHandwritingInitiator = new HandwritingInitiator(mViewConfiguration, mContext.getSystemService(InputMethodManager.class)); - mViewBoundsSandboxingEnabled = getViewBoundsSandboxingEnabled(); - String processorOverrideName = context.getResources().getString( R.string.config_inputEventCompatProcessorOverrideClassName); if (processorOverrideName.isEmpty()) { @@ -8438,9 +8424,6 @@ public final class ViewRootImpl implements ViewParent, */ void getDisplayFrame(Rect outFrame) { outFrame.set(mTmpFrames.displayFrame); - // Apply sandboxing here (in getter) due to possible layout updates on the client after - // {@link #mTmpFrames.displayFrame} is received from the server. - applyViewBoundsSandboxingIfNeeded(outFrame); } /** @@ -8457,60 +8440,6 @@ public final class ViewRootImpl implements ViewParent, outFrame.top += insets.top; outFrame.right -= insets.right; outFrame.bottom -= insets.bottom; - // Apply sandboxing here (in getter) due to possible layout updates on the client after - // {@link #mTmpFrames.displayFrame} is received from the server. - applyViewBoundsSandboxingIfNeeded(outFrame); - } - - /** - * Offset outRect to make it sandboxed within Window's bounds. - * - * <p>This is used by {@link android.view.View#getBoundsOnScreen}, - * {@link android.view.ViewRootImpl#getDisplayFrame} and - * {@link android.view.ViewRootImpl#getWindowVisibleDisplayFrame}, which are invoked by - * {@link android.view.View#getWindowDisplayFrame} and - * {@link android.view.View#getWindowVisibleDisplayFrame}, as well as - * {@link android.view.ViewDebug#captureLayers} for debugging. - */ - void applyViewBoundsSandboxingIfNeeded(final Rect inOutRect) { - if (isViewBoundsSandboxingEnabled()) { - inOutRect.offset(-mAttachInfo.mWindowLeft, -mAttachInfo.mWindowTop); - } - } - - /** - * Whether the sanboxing of the {@link android.view.View} APIs is enabled. - * - * <p>This is called by {@link #applyViewBoundsSandboxingIfNeeded} and - * {@link android.view.View#getLocationOnScreen} to check if there is a need to add - * {@link android.view.View.AttachInfo.mWindowLeft} and - * {@link android.view.View.AttachInfo.mWindowTop} offsets. - */ - boolean isViewBoundsSandboxingEnabled() { - return mViewBoundsSandboxingEnabled; - } - - private boolean getViewBoundsSandboxingEnabled() { - if (!CompatChanges.isChangeEnabled(OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS)) { - // OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS change-id is disabled. - return false; - } - - // OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS is enabled by the device manufacturer. - try { - final List<PackageManager.Property> properties = mContext.getPackageManager() - .queryApplicationProperty(PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS); - - final boolean isOptedOut = !properties.isEmpty() && !properties.get(0).getBoolean(); - if (isOptedOut) { - // PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS is disabled by the app devs. - return false; - } - } catch (RuntimeException e) { - // remote exception. - } - - return true; } /** diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index a01c8328b37c..17df585e424a 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -854,42 +854,6 @@ public interface WindowManager extends ViewManager { /** * Application level {@link android.content.pm.PackageManager.Property PackageManager - * .Property} for an app to inform the system that it needs to be opted-out from the - * compatibility treatment that sandboxes {@link android.view.View} API. - * - * <p>The treatment can be enabled by device manufacturers for applications which misuse - * {@link android.view.View} APIs by expecting that - * {@link android.view.View#getLocationOnScreen}, - * {@link android.view.View#getBoundsOnScreen}, - * {@link android.view.View#getWindowVisibleDisplayFrame}, - * {@link android.view.View#getWindowDisplayFrame} - * return coordinates as if an activity is positioned in the top-left corner of the screen, with - * left coordinate equal to 0. This may not be the case for applications in multi-window and in - * letterbox modes. - * - * <p>Setting this property to {@code false} informs the system that the application must be - * opted-out from the "Sandbox {@link android.view.View} API to Activity bounds" treatment even - * if the device manufacturer has opted the app into the treatment. - * - * <p>Not setting this property at all, or setting this property to {@code true} has no effect. - * - * <p><b>Syntax:</b> - * <pre> - * <application> - * <property - * android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS" - * android:value="false"/> - * </application> - * </pre> - * - * @hide - */ - // TODO(b/263984287): Make this public API. - String PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS = - "android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"; - - /** - * Application level {@link android.content.pm.PackageManager.Property PackageManager * .Property} for an app to inform the system that the application can be opted-in or opted-out * from the compatibility treatment that enables sending a fake focus event for unfocused * resumed split screen activities. This is needed because some game engines wait to get |