blob: 93f2530b86aee8277b94af2172e15432f9c1cb3a [file] [log] [blame]
Yuncheol Heob9554e12019-10-08 15:51:49 -07001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.car.apitest;
18
19import static android.view.Display.DEFAULT_DISPLAY;
20import static android.view.Display.INVALID_DISPLAY;
Yuncheol Heob9554e12019-10-08 15:51:49 -070021
22import static com.google.common.truth.Truth.assertThat;
23
24import static org.junit.Assume.assumeTrue;
25import static org.testng.Assert.assertThrows;
26
Jun9e5b2cf2019-12-18 16:24:47 -080027import androidx.test.filters.FlakyTest;
Antonio Kantek57bbf272020-05-01 11:31:16 -070028import androidx.test.filters.MediumTest;
Jun9e5b2cf2019-12-18 16:24:47 -080029
Yuncheol Heob9554e12019-10-08 15:51:49 -070030import org.junit.Test;
31import org.junit.runner.RunWith;
32import org.junit.runners.JUnit4;
Yuncheol Heob9554e12019-10-08 15:51:49 -070033
34/**
35 * Build/Install/Run:
36 * atest AndroidCarApiTest:CarActivityViewDisplayIdTest
37 */
38@RunWith(JUnit4.class)
Yuncheol Heob9554e12019-10-08 15:51:49 -070039@MediumTest
Antonio Kantek57bbf272020-05-01 11:31:16 -070040public class CarActivityViewDisplayIdTest extends CarActivityViewDisplayIdTestBase {
Yuncheol Heob9554e12019-10-08 15:51:49 -070041 private static final String CAR_LAUNCHER_PKG_NAME = "com.android.car.carlauncher";
Yuncheol Heob9554e12019-10-08 15:51:49 -070042 private static final int NONEXISTENT_DISPLAY_ID = Integer.MAX_VALUE;
Yuncheol Heob9554e12019-10-08 15:51:49 -070043
44 @Test
Jun9e5b2cf2019-12-18 16:24:47 -080045 @FlakyTest
Yuncheol Heob9554e12019-10-08 15:51:49 -070046 public void testSingleActivityView() throws Exception {
47 ActivityViewTestActivity activity = startActivityViewTestActivity(DEFAULT_DISPLAY);
48 activity.waitForActivityViewReady();
49 int virtualDisplayId = activity.getActivityView().getVirtualDisplayId();
50
51 startTestActivity(ActivityInActivityView.class, virtualDisplayId);
52
53 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId))
54 .isEqualTo(DEFAULT_DISPLAY);
55 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(DEFAULT_DISPLAY))
56 .isEqualTo(INVALID_DISPLAY);
57
58 activity.finish();
59 activity.waitForActivityViewDestroyed();
60
61 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId))
62 .isEqualTo(INVALID_DISPLAY);
63 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(DEFAULT_DISPLAY))
64 .isEqualTo(INVALID_DISPLAY);
65 }
66
67 @Test
Jun9e5b2cf2019-12-18 16:24:47 -080068 @FlakyTest
Yuncheol Heob9554e12019-10-08 15:51:49 -070069 public void testDoubleActivityView() throws Exception {
70 ActivityViewTestActivity activity1 = startActivityViewTestActivity(DEFAULT_DISPLAY);
71 activity1.waitForActivityViewReady();
72 int virtualDisplayId1 = activity1.getActivityView().getVirtualDisplayId();
73
74 ActivityViewTestActivity activity2 = startActivityViewTestActivity(virtualDisplayId1);
75 activity2.waitForActivityViewReady();
76 int virtualDisplayId2 = activity2.getActivityView().getVirtualDisplayId();
77
78 startTestActivity(ActivityInActivityView.class, virtualDisplayId2);
79
80 assertThat(virtualDisplayId1).isNotEqualTo(virtualDisplayId2);
81 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId1))
82 .isEqualTo(DEFAULT_DISPLAY);
83 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId2))
84 .isEqualTo(DEFAULT_DISPLAY);
85 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(DEFAULT_DISPLAY))
86 .isEqualTo(INVALID_DISPLAY);
87
88 activity2.finish();
89 activity1.finish();
90
91 activity2.waitForActivityViewDestroyed();
92 activity1.waitForActivityViewDestroyed();
93
94 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId1))
95 .isEqualTo(INVALID_DISPLAY);
96 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId2))
97 .isEqualTo(INVALID_DISPLAY);
98 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(DEFAULT_DISPLAY))
99 .isEqualTo(INVALID_DISPLAY);
100 }
101
102 @Test
Jun9e5b2cf2019-12-18 16:24:47 -0800103 @FlakyTest
Yuncheol Heob9554e12019-10-08 15:51:49 -0700104 public void testThrowsExceptionOnReportingNonExistingDisplay() throws Exception {
105 ActivityViewTestActivity activity = startActivityViewTestActivity(DEFAULT_DISPLAY);
106 activity.waitForActivityViewReady();
107 int virtualDisplayId = activity.getActivityView().getVirtualDisplayId();
108
109 // This will pass since the test owns the display.
110 mCarUxRestrictionsManager.reportVirtualDisplayToPhysicalDisplay(virtualDisplayId,
111 NONEXISTENT_DISPLAY_ID);
112
113 assertThat(getMappedPhysicalDisplayOfVirtualDisplay(virtualDisplayId))
114 .isEqualTo(NONEXISTENT_DISPLAY_ID);
115
116 activity.finish();
117 activity.waitForActivityViewDestroyed();
118
119 // Now the display was released, so expect to throw an Exception.
120 assertThrows(
121 java.lang.IllegalArgumentException.class,
122 () -> mCarUxRestrictionsManager.reportVirtualDisplayToPhysicalDisplay(
123 virtualDisplayId, NONEXISTENT_DISPLAY_ID));
124 }
125
126 // TODO(b/143353546): Make the following tests not to rely on CarLauncher.
127 @Test
Jun9e5b2cf2019-12-18 16:24:47 -0800128 @FlakyTest
Yuncheol Heob9554e12019-10-08 15:51:49 -0700129 public void testThrowsExceptionOnReportingNonOwningDisplay() throws Exception {
Yuncheol Heo667de7c2019-11-19 10:19:22 -0800130 int displayIdOfCarLauncher = waitForActivityViewDisplayReady(CAR_LAUNCHER_PKG_NAME);
Yuncheol Heob9554e12019-10-08 15:51:49 -0700131 assumeTrue(INVALID_DISPLAY != displayIdOfCarLauncher);
132
133 // CarLauncher owns the display, so expect to throw an Exception.
134 assertThrows(
135 java.lang.SecurityException.class,
136 () -> mCarUxRestrictionsManager.reportVirtualDisplayToPhysicalDisplay(
137 displayIdOfCarLauncher, DEFAULT_DISPLAY + 1));
Yuncheol Heo667de7c2019-11-19 10:19:22 -0800138
Yuncheol Heob9554e12019-10-08 15:51:49 -0700139 }
Yuncheol Heob9554e12019-10-08 15:51:49 -0700140}