blob: 09ac9ce381c0bc6083c42d8a7973479761962c37 [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
Tiger Huang332793b2019-10-29 23:21:27 +080019import static android.view.InsetsState.ITYPE_STATUS_BAR;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020020import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
Tadashi G. Takaokabf0d57b2018-11-19 16:09:58 +090021
Jorim Jaggif96c90a2018-09-26 16:55:15 +020022import static org.junit.Assert.assertEquals;
Yunfan Chend552c162019-02-08 16:51:28 +090023import static org.junit.Assert.assertFalse;
Jorim Jaggie35c0592018-11-06 16:21:08 +010024import static org.junit.Assert.assertNotNull;
Yunfan Chend552c162019-02-08 16:51:28 +090025import static org.junit.Assert.assertNull;
26import static org.junit.Assert.assertTrue;
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 Jaggif96c90a2018-09-26 16:55:15 +020034import androidx.test.filters.SmallTest;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020035
Jorim Jaggib6030952018-10-23 18:31:52 +020036import org.junit.Before;
Tadashi G. Takaokabf0d57b2018-11-19 16:09:58 +090037import org.junit.Test;
Jorim Jaggia12ea562019-01-07 17:47:47 +010038import org.junit.runner.RunWith;
Tadashi G. Takaokabf0d57b2018-11-19 16:09:58 +090039
Jorim Jaggif96c90a2018-09-26 16:55:15 +020040@SmallTest
Jorim Jaggif96c90a2018-09-26 16:55:15 +020041@Presubmit
Jorim Jaggia12ea562019-01-07 17:47:47 +010042@RunWith(WindowTestRunner.class)
Jorim Jaggif96c90a2018-09-26 16:55:15 +020043public class InsetsSourceProviderTest extends WindowTestsBase {
44
Tiger Huang332793b2019-10-29 23:21:27 +080045 private InsetsSource mSource = new InsetsSource(ITYPE_STATUS_BAR);
Jorim Jaggib6030952018-10-23 18:31:52 +020046 private InsetsSourceProvider mProvider;
47
48 @Before
49 public void setUp() throws Exception {
50 mSource.setVisible(true);
51 mProvider = new InsetsSourceProvider(mSource,
52 mDisplayContent.getInsetsStateController(), mDisplayContent);
53 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +020054
55 @Test
56 public void testPostLayout() {
Tiger Huang332793b2019-10-29 23:21:27 +080057 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
58 statusBar.getFrameLw().set(0, 0, 500, 100);
59 statusBar.mHasSurface = true;
60 mProvider.setWindow(statusBar, null);
Jorim Jaggif96c90a2018-09-26 16:55:15 +020061 mProvider.onPostLayout();
62 assertEquals(new Rect(0, 0, 500, 100), mProvider.getSource().getFrame());
63 assertEquals(Insets.of(0, 100, 0, 0),
64 mProvider.getSource().calculateInsets(new Rect(0, 0, 500, 500),
65 false /* ignoreVisibility */));
66 }
67
68 @Test
69 public void testPostLayout_invisible() {
Tiger Huang332793b2019-10-29 23:21:27 +080070 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
71 statusBar.getFrameLw().set(0, 0, 500, 100);
72 mProvider.setWindow(statusBar, null);
Jorim Jaggif96c90a2018-09-26 16:55:15 +020073 mProvider.onPostLayout();
74 assertEquals(Insets.NONE, mProvider.getSource().calculateInsets(new Rect(0, 0, 500, 500),
75 false /* ignoreVisibility */));
76 }
77
78 @Test
79 public void testPostLayout_frameProvider() {
Tiger Huang332793b2019-10-29 23:21:27 +080080 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
81 statusBar.getFrameLw().set(0, 0, 500, 100);
82 mProvider.setWindow(statusBar,
Jorim Jaggif96c90a2018-09-26 16:55:15 +020083 (displayFrames, windowState, rect) -> {
84 rect.set(10, 10, 20, 20);
85 });
86 mProvider.onPostLayout();
87 assertEquals(new Rect(10, 10, 20, 20), mProvider.getSource().getFrame());
88 }
Jorim Jaggie35c0592018-11-06 16:21:08 +010089
90 @Test
91 public void testUpdateControlForTarget() {
Tiger Huang332793b2019-10-29 23:21:27 +080092 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
Jorim Jaggie35c0592018-11-06 16:21:08 +010093 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
Tiger Huang332793b2019-10-29 23:21:27 +080094 statusBar.getFrameLw().set(0, 0, 500, 100);
95 mProvider.setWindow(statusBar, null);
Jorim Jaggia2759b22019-01-24 13:21:40 +010096 mProvider.updateControlForTarget(target, false /* force */);
Jorim Jaggia12ea562019-01-07 17:47:47 +010097 assertNotNull(mProvider.getControl(target));
Jorim Jaggia2759b22019-01-24 13:21:40 +010098 mProvider.updateControlForTarget(null, false /* force */);
Jorim Jaggia12ea562019-01-07 17:47:47 +010099 assertNull(mProvider.getControl(target));
100 }
101
102 @Test
103 public void testUpdateControlForFakeTarget() {
Tiger Huang332793b2019-10-29 23:21:27 +0800104 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
Jorim Jaggia12ea562019-01-07 17:47:47 +0100105 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
Tiger Huang332793b2019-10-29 23:21:27 +0800106 statusBar.getFrameLw().set(0, 0, 500, 100);
107 mProvider.setWindow(statusBar, null);
Jorim Jaggia12ea562019-01-07 17:47:47 +0100108 mProvider.updateControlForFakeTarget(target);
109 assertNotNull(mProvider.getControl(target));
110 assertNull(mProvider.getControl(target).getLeash());
111 mProvider.updateControlForFakeTarget(null);
112 assertNull(mProvider.getControl(target));
Jorim Jaggie35c0592018-11-06 16:21:08 +0100113 }
114
115 @Test
116 public void testInsetsModified() {
Tiger Huang332793b2019-10-29 23:21:27 +0800117 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
Jorim Jaggie35c0592018-11-06 16:21:08 +0100118 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
Tiger Huang332793b2019-10-29 23:21:27 +0800119 statusBar.getFrameLw().set(0, 0, 500, 100);
120 mProvider.setWindow(statusBar, null);
Jorim Jaggia2759b22019-01-24 13:21:40 +0100121 mProvider.updateControlForTarget(target, false /* force */);
Jorim Jaggie35c0592018-11-06 16:21:08 +0100122 InsetsState state = new InsetsState();
Tiger Huang332793b2019-10-29 23:21:27 +0800123 state.getSource(ITYPE_STATUS_BAR).setVisible(false);
124 mProvider.onInsetsModified(target, state.getSource(ITYPE_STATUS_BAR));
Jorim Jaggie35c0592018-11-06 16:21:08 +0100125 assertFalse(mSource.isVisible());
126 }
127
128 @Test
129 public void testInsetsModified_noControl() {
Tiger Huang332793b2019-10-29 23:21:27 +0800130 final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
Jorim Jaggie35c0592018-11-06 16:21:08 +0100131 final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
Tiger Huang332793b2019-10-29 23:21:27 +0800132 statusBar.getFrameLw().set(0, 0, 500, 100);
133 mProvider.setWindow(statusBar, null);
Jorim Jaggie35c0592018-11-06 16:21:08 +0100134 InsetsState state = new InsetsState();
Tiger Huang332793b2019-10-29 23:21:27 +0800135 state.getSource(ITYPE_STATUS_BAR).setVisible(false);
136 mProvider.onInsetsModified(target, state.getSource(ITYPE_STATUS_BAR));
Jorim Jaggie35c0592018-11-06 16:21:08 +0100137 assertTrue(mSource.isVisible());
138 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200139}