blob: 748f7541b389820b65748e4f490fec6f379537f2 [file] [log] [blame]
/*
* Copyright (C) 2023 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.server.wm.other;
import static android.content.pm.PackageManager.FEATURE_LEANBACK;
import static android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY;
import static android.server.wm.app.Components.TEST_ACTIVITY;
import static android.server.wm.app30.Components.SDK_30_TEST_ACTIVITY;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.lessThanOrEqualTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeNotNull;
import static org.junit.Assume.assumeTrue;
import static java.util.Objects.requireNonNull;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.graphics.Point;
import android.hardware.display.DisplayManager;
import android.server.wm.ActivityManagerTestBase;
import android.server.wm.CommandSession;
import android.server.wm.WaitForValidActivityState;
import android.view.Display;
import org.junit.Before;
import org.junit.Test;
/**
* The goal of this test is to make sure that on Android TV applications with target SDK version
* lower than S do not get a larger than 1080p (1920x1080) Window.
*
* <p>Build/Install/Run:
* atest CtsWindowManagerDeviceOther:TvMaxWindowSizeTests
*/
public class TvMaxWindowSizeTests extends ActivityManagerTestBase {
private int mDisplayLongestWidth;
private int mDisplayShortestWidth;
@Before
public void setUp() {
// We only need to run this on TV.
final PackageManager pm = mInstrumentation.getContext().getPackageManager();
final boolean isTv = pm.hasSystemFeature(FEATURE_LEANBACK) ||
pm.hasSystemFeature(FEATURE_LEANBACK_ONLY);
assumeTrue(isTv);
// Get the real size of the display.
final DisplayManager dm = mInstrumentation.getContext()
.getSystemService(DisplayManager.class);
requireNonNull(dm);
final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
assumeNotNull(display);
final Point displaySize = new Point();
display.getRealSize(displaySize);
mDisplayLongestWidth = Math.max(displaySize.x, displaySize.y);
mDisplayShortestWidth = Math.min(displaySize.x, displaySize.y);
}
@Test
public void test_preSApplication_1080p_windowSizeCap() {
// Only run this if the resolution is over 1080p (at least on one side).
assumeFalse(mDisplayLongestWidth <= 1920 && mDisplayShortestWidth <= 1080);
final CommandSession.SizeInfo sizeInfo = launchAndGetReportedSizes(SDK_30_TEST_ACTIVITY);
final int longestWidth = Math.max(sizeInfo.windowAppWidth, sizeInfo.windowAppHeight);
final int shortestWidth = Math.min(sizeInfo.windowAppWidth, sizeInfo.windowAppHeight);
assertThat(longestWidth, lessThanOrEqualTo(1920));
assertThat(shortestWidth, lessThanOrEqualTo(1080));
}
@Test
public void test_windowSize_notLargerThan_displaySize() {
final CommandSession.SizeInfo sizeInfo = launchAndGetReportedSizes(TEST_ACTIVITY);
final int longestWidth = Math.max(sizeInfo.windowAppWidth, sizeInfo.windowAppHeight);
final int shortestWidth = Math.min(sizeInfo.windowAppWidth, sizeInfo.windowAppHeight);
assertThat(longestWidth, lessThanOrEqualTo(mDisplayLongestWidth));
assertThat(shortestWidth, lessThanOrEqualTo(mDisplayShortestWidth));
}
private CommandSession.SizeInfo launchAndGetReportedSizes(ComponentName componentName) {
startActivityOnDisplay(Display.DEFAULT_DISPLAY, componentName);
mWmState.computeState(new WaitForValidActivityState(componentName));
final CommandSession.SizeInfo sizeInfo = getLastReportedSizesForActivity(componentName);
assertNotNull(sizeInfo);
return sizeInfo;
}
}