diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-07-28 09:11:34 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-07-28 09:11:34 +0000 |
| commit | 5948d5c2096bc88ea04d10842a355d25efb9e593 (patch) | |
| tree | e0db996d38e82c5d074beb433627682fe564c5a4 /core/java | |
| parent | 23ef82f4ded2791b6717f69e08649727aa6adb37 (diff) | |
| parent | 5a24a59d0c74680b5ea8f864511f76eaf4149292 (diff) | |
Merge changes from topic "max_bounds"
* changes:
Verify DisplayArea bounds in WindowMetricsTests
Add DisplayArea support for WM#getMaximumWindowMetrics
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/WindowConfiguration.java | 7 | ||||
| -rw-r--r-- | core/java/android/view/Display.java | 13 | ||||
| -rw-r--r-- | core/java/android/view/WindowManager.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerImpl.java | 16 |
4 files changed, 32 insertions, 16 deletions
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java index ec81ae3bc7c2..79f05a3caa93 100644 --- a/core/java/android/app/WindowConfiguration.java +++ b/core/java/android/app/WindowConfiguration.java @@ -310,7 +310,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu * Sets the maximum bounds to the provided {@link Rect}. * @param rect the new bounds value. * @see #getMaxBounds() - * @hide */ public void setMaxBounds(@Nullable Rect rect) { if (rect == null) { @@ -364,10 +363,8 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu return mBounds; } - /** - * @see #setMaxBounds(Rect) - * @hide - */ + /** @see #setMaxBounds(Rect) */ + @NonNull public Rect getMaxBounds() { return mMaxBounds; } diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 0cc469a2d5eb..c4048e5a032d 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -26,6 +26,7 @@ import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.KeyguardManager; import android.compat.annotation.UnsupportedAppUsage; +import android.content.Context; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Resources; @@ -1157,9 +1158,19 @@ public final class Display { * </p><p> * The real size may be smaller than the physical size of the screen when the * window manager is emulating a smaller display (using adb shell wm size). - * </p> + * </p><p> + * In general, {@link #getRealSize(Point)} and {@link WindowManager#getMaximumWindowMetrics()} + * report the same bounds except that certain areas of the display may not be available to + * windows created in the {@link WindowManager}'s {@link Context}. + * + * For example, imagine a device which has a multi-task mode that limits windows to half of the + * screen. In this case, {@link WindowManager#getMaximumWindowMetrics()} reports the + * bounds of the screen half where the window is located, while {@link #getRealSize(Point)} + * still reports the bounds of the whole display. * * @param outSize Set to the real size of the display. + * + * @see WindowManager#getMaximumWindowMetrics() */ public void getRealSize(Point outSize) { synchronized (this) { diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 1d54d9251abb..cf4315fc7c00 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -72,6 +72,7 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ActivityInfo; import android.graphics.PixelFormat; +import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.os.IBinder; @@ -473,9 +474,18 @@ public interface WindowManager extends ViewManager { * * Note that this might still be smaller than the size of the physical display if certain areas * of the display are not available to windows created in this {@link Context}. + * <p> + * For example, given that there's a device which have a multi-task mode to limit activities + * to a half screen. In this case, {@link #getMaximumWindowMetrics()} reports the bounds of + * the half screen which the activity is located, while {@link Display#getRealSize(Point)} still + * reports the bounds of the whole physical display. * - * @see #getMaximumWindowMetrics() + * Despite this, {@link #getMaximumWindowMetrics()} and {@link Display#getRealSize(Point)} + * reports the same bounds in general. + * + * @see #getCurrentWindowMetrics() * @see WindowMetrics + * @see Display#getRealSize(Point) */ default @NonNull WindowMetrics getMaximumWindowMetrics() { throw new UnsupportedOperationException(); diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 2fe7c021bb21..b4561c5795b9 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -29,7 +29,6 @@ import android.app.ResourcesManager; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.Insets; -import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.os.Bundle; @@ -233,17 +232,16 @@ public final class WindowManagerImpl implements WindowManager { @Override public WindowMetrics getMaximumWindowMetrics() { - final Rect maxBounds = getMaximumBounds(); + final Context context = mParentWindow != null ? mParentWindow.getContext() : mContext; + final Rect maxBounds = getMaximumBounds(context); + return new WindowMetrics(maxBounds, computeWindowInsets(maxBounds)); } - private Rect getMaximumBounds() { - // TODO(b/128338354): Current maximum bound is display size, but it should be displayArea - // bound after displayArea feature is finished. - final Display display = mContext.getDisplayNoVerify(); - final Point displaySize = new Point(); - display.getRealSize(displaySize); - return new Rect(0, 0, displaySize.x, displaySize.y); + private static Rect getMaximumBounds(Context context) { + synchronized (ResourcesManager.getInstance()) { + return context.getResources().getConfiguration().windowConfiguration.getMaxBounds(); + } } // TODO(b/150095967): Set window type to LayoutParams |
