blob: 374078625f4a6ab14fc724839201a90b5004dbc7 [file] [log] [blame]
Jorim Jaggif96c90a2018-09-26 16:55:15 +02001/*
2 * Copyright (C) 2018 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 com.android.server.wm;
18
19import static android.view.InsetsState.TYPE_TOP_BAR;
20import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
Tadashi G. Takaokabf0d57b2018-11-19 16:09:58 +090021
Jorim Jaggie35c0592018-11-06 16:21:08 +010022import static junit.framework.Assert.assertFalse;
23import static junit.framework.Assert.assertNull;
24import static junit.framework.Assert.assertTrue;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020025import static org.junit.Assert.assertEquals;
Jorim Jaggie35c0592018-11-06 16:21:08 +010026import static org.junit.Assert.assertNotNull;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020027
28import android.graphics.Insets;
29import android.graphics.Rect;
30import android.platform.test.annotations.Presubmit;
31import android.view.InsetsSource;
Jorim Jaggie35c0592018-11-06 16:21:08 +010032import android.view.InsetsState;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020033
Jorim Jaggie35c0592018-11-06 16:21:08 +010034import org.junit.Before;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020035import androidx.test.filters.FlakyTest;
36import androidx.test.filters.SmallTest;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020037
Jorim Jaggib6030952018-10-23 18:31:52 +020038import org.junit.Before;
Tadashi G. Takaokabf0d57b2018-11-19 16:09:58 +090039import org.junit.Test;
40
Jorim Jaggif96c90a2018-09-26 16:55:15 +020041@SmallTest
42@FlakyTest(detail = "Promote once confirmed non-flaky")
43@Presubmit
44public class InsetsSourceProviderTest extends WindowTestsBase {
45
Jorim Jaggib6030952018-10-23 18:31:52 +020046 private InsetsSource mSource = new InsetsSource(TYPE_TOP_BAR);
47 private InsetsSourceProvider mProvider;
48
49 @Before
50 public void setUp() throws Exception {
51 mSource.setVisible(true);
52 mProvider = new InsetsSourceProvider(mSource,
53 mDisplayContent.getInsetsStateController(), mDisplayContent);
54 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +020055
56 @Test
57 public void testPostLayout() {
58 final WindowState topBar = createWindow(null, TYPE_APPLICATION, "parentWindow");
59 topBar.getFrameLw().set(0, 0, 500, 100);
60 topBar.mHasSurface = true;
61 mProvider.setWindow(topBar, null);
62 mProvider.onPostLayout();
63 assertEquals(new Rect(0, 0, 500, 100), mProvider.getSource().getFrame());
64 assertEquals(Insets.of(0, 100, 0, 0),
65 mProvider.getSource().calculateInsets(new Rect(0, 0, 500, 500),
66 false /* ignoreVisibility */));
67 }
68
69 @Test
70 public void testPostLayout_invisible() {
71 final WindowState topBar = createWindow(null, TYPE_APPLICATION, "parentWindow");
72 topBar.getFrameLw().set(0, 0, 500, 100);
73 mProvider.setWindow(topBar, null);
74 mProvider.onPostLayout();
75 assertEquals(Insets.NONE, mProvider.getSource().calculateInsets(new Rect(0, 0, 500, 500),
76 false /* ignoreVisibility */));
77 }
78
79 @Test
80 public void testPostLayout_frameProvider() {
81 final WindowState topBar = createWindow(null, TYPE_APPLICATION, "parentWindow");
82 topBar.getFrameLw().set(0, 0, 500, 100);
83 mProvider.setWindow(topBar,
84 (displayFrames, windowState, rect) -> {
85 rect.set(10, 10, 20, 20);
86 });
87 mProvider.onPostLayout();
88 assertEquals(new Rect(10, 10, 20, 20), mProvider.getSource().getFrame());
89 }
Jorim Jaggie35c0592018-11-06 16:21:08 +010090
91 @Test
92 public void testUpdateControlForTarget() {
93 final WindowState topBar = createWindow(null, TYPE_APPLICATION, "parentWindow");
94 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
95 topBar.getFrameLw().set(0, 0, 500, 100);
96 mProvider.setWindow(topBar, null);
97 mProvider.updateControlForTarget(target);
98 assertNotNull(mProvider.getControl());
99 mProvider.updateControlForTarget(null);
100 assertNull(mProvider.getControl());
101 }
102
103 @Test
104 public void testInsetsModified() {
105 final WindowState topBar = createWindow(null, TYPE_APPLICATION, "parentWindow");
106 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
107 topBar.getFrameLw().set(0, 0, 500, 100);
108 mProvider.setWindow(topBar, null);
109 mProvider.updateControlForTarget(target);
110 InsetsState state = new InsetsState();
111 state.getSource(TYPE_TOP_BAR).setVisible(false);
112 mProvider.onInsetsModified(target, state.getSource(TYPE_TOP_BAR));
113 assertFalse(mSource.isVisible());
114 }
115
116 @Test
117 public void testInsetsModified_noControl() {
118 final WindowState topBar = createWindow(null, TYPE_APPLICATION, "parentWindow");
119 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
120 topBar.getFrameLw().set(0, 0, 500, 100);
121 mProvider.setWindow(topBar, null);
122 InsetsState state = new InsetsState();
123 state.getSource(TYPE_TOP_BAR).setVisible(false);
124 mProvider.onInsetsModified(target, state.getSource(TYPE_TOP_BAR));
125 assertTrue(mSource.isVisible());
126 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200127}