blob: ab5a06eb99de88a64325f4bbcdb82658afbc6830 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.view;
import android.annotation.NonNull;
import android.graphics.Point;
import android.util.Size;
/**
* Metrics about a Window, consisting of the size and {@link WindowInsets}.
* <p>
* This is usually obtained from {@link WindowManager#getCurrentWindowMetrics()} and
* {@link WindowManager#getMaximumWindowMetrics()}.
*
* @see WindowInsets#getInsets(int)
* @see WindowManager#getCurrentWindowMetrics()
* @see WindowManager#getMaximumWindowMetrics()
*/
public final class WindowMetrics {
private final @NonNull Size mSize;
private final @NonNull WindowInsets mWindowInsets;
public WindowMetrics(@NonNull Size size, @NonNull WindowInsets windowInsets) {
mSize = size;
mWindowInsets = windowInsets;
}
/**
* Returns the size of the window.
* <p>
* <b>Note that this reports a different size than {@link Display#getSize(Point)}.</b>
* This method reports the window size including all system bars area, while
* {@link Display#getSize(Point)} reports the area excluding navigation bars and display cutout
* areas. The value reported by {@link Display#getSize(Point)} can be obtained by using:
* <pre class="prettyprint">
* final WindowMetrics metrics = windowManager.getCurrentMetrics();
* // Gets all excluding insets
* final WindowInsets windowInsets = metrics.getWindowInsets();
* Insets insets = windowInsets.getInsets(WindowInsets.Type.navigationBars());
* final DisplayCutout cutout = windowInsets.getCutout();
* if (cutout != null) {
* final Insets cutoutSafeInsets = Insets.of(cutout.getSafeInsetsLeft(), ...);
* insets = insets.max(insets, cutoutSafeInsets);
* }
*
* int insetsWidth = insets.right + insets.left;
* int insetsHeight = insets.top + insets.bottom;
*
* // Legacy size that Display#getSize reports
* final Size legacySize = new Size(metrics.getWidth() - insetsWidth,
* metrics.getHeight() - insetsHeight);
* </pre>
* </p>
*
* @return window size in pixel.
*/
public @NonNull Size getSize() {
return mSize;
}
/**
* Returns the {@link WindowInsets} of the window.
*
* @return the {@link WindowInsets} of the window.
*/
public @NonNull WindowInsets getWindowInsets() {
return mWindowInsets;
}
}