blob: a73269a81b113bbca5205f185a5379b7a4353a67 [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 android.view;
18
Jorim Jaggi5bb571d2018-11-06 14:42:04 +010019import static android.view.InsetsState.INSET_SIDE_BOTTOM;
20import static android.view.InsetsState.INSET_SIDE_TOP;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020021import static android.view.InsetsState.TYPE_IME;
22import static android.view.InsetsState.TYPE_NAVIGATION_BAR;
Jorim Jaggie35c0592018-11-06 16:21:08 +010023import static android.view.InsetsState.TYPE_SIDE_BAR_1;
24import static android.view.InsetsState.TYPE_SIDE_BAR_2;
25import static android.view.InsetsState.TYPE_SIDE_BAR_3;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020026import static android.view.InsetsState.TYPE_TOP_BAR;
Jorim Jaggi648e5882019-01-24 13:24:02 +010027import static android.view.WindowInsets.Type.ime;
28import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
Tadashi G. Takaokab4470f22019-01-15 18:29:15 +090029
Tadashi G. Takaoka82eb7a52019-03-26 18:22:01 +090030import static org.junit.Assert.assertEquals;
31import static org.junit.Assert.assertFalse;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020032import static org.junit.Assert.assertNotEquals;
Tadashi G. Takaoka82eb7a52019-03-26 18:22:01 +090033import static org.junit.Assert.assertTrue;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020034
Jorim Jaggibcf99ff2018-12-03 18:04:26 +010035import android.graphics.Insets;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020036import android.graphics.Rect;
37import android.os.Parcel;
38import android.platform.test.annotations.Presubmit;
Jorim Jaggi5bb571d2018-11-06 14:42:04 +010039import android.util.SparseIntArray;
Jorim Jaggibcf99ff2018-12-03 18:04:26 +010040import android.view.WindowInsets.Type;
Tarandeep Singha6f35612019-01-11 19:50:46 -080041import android.view.test.InsetsModeSession;
Jorim Jaggif96c90a2018-09-26 16:55:15 +020042
Tadashi G. Takaokab4470f22019-01-15 18:29:15 +090043import androidx.test.runner.AndroidJUnit4;
44
Jorim Jaggif96c90a2018-09-26 16:55:15 +020045import org.junit.Test;
46import org.junit.runner.RunWith;
47
Tadashi G. Takaoka82eb7a52019-03-26 18:22:01 +090048/**
49 * Tests for {@link InsetsState}.
50 *
51 * <p>Build/Install/Run:
52 * atest FrameworksCoreTests:InsetsStateTest
53 *
54 * <p>This test class is a part of Window Manager Service tests and specified in
55 * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}.
56 */
Jorim Jaggif96c90a2018-09-26 16:55:15 +020057@Presubmit
Jorim Jaggif96c90a2018-09-26 16:55:15 +020058@RunWith(AndroidJUnit4.class)
59public class InsetsStateTest {
60
61 private InsetsState mState = new InsetsState();
62 private InsetsState mState2 = new InsetsState();
63
64 @Test
Tarandeep Singha6f35612019-01-11 19:50:46 -080065 public void testCalculateInsets() throws Exception {
66 try (final InsetsModeSession session =
67 new InsetsModeSession(ViewRootImpl.NEW_INSETS_MODE_FULL)) {
68 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
69 mState.getSource(TYPE_TOP_BAR).setVisible(true);
70 mState.getSource(TYPE_IME).setFrame(new Rect(0, 200, 100, 300));
71 mState.getSource(TYPE_IME).setVisible(true);
72 SparseIntArray typeSideMap = new SparseIntArray();
73 WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), false, false,
Jorim Jaggi648e5882019-01-24 13:24:02 +010074 DisplayCutout.NO_CUTOUT, null, null, SOFT_INPUT_ADJUST_RESIZE, typeSideMap);
Tarandeep Singha6f35612019-01-11 19:50:46 -080075 assertEquals(Insets.of(0, 100, 0, 100), insets.getSystemWindowInsets());
76 assertEquals(Insets.of(0, 100, 0, 100), insets.getInsets(Type.all()));
77 assertEquals(INSET_SIDE_TOP, typeSideMap.get(TYPE_TOP_BAR));
78 assertEquals(INSET_SIDE_BOTTOM, typeSideMap.get(TYPE_IME));
79 assertEquals(Insets.of(0, 100, 0, 0), insets.getInsets(Type.topBar()));
80 assertEquals(Insets.of(0, 0, 0, 100), insets.getInsets(Type.ime()));
81 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +020082 }
83
84 @Test
Tarandeep Singha6f35612019-01-11 19:50:46 -080085 public void testCalculateInsets_imeAndNav() throws Exception{
86 try (final InsetsModeSession session =
87 new InsetsModeSession(ViewRootImpl.NEW_INSETS_MODE_FULL)) {
88 mState.getSource(TYPE_NAVIGATION_BAR).setFrame(new Rect(0, 200, 100, 300));
89 mState.getSource(TYPE_NAVIGATION_BAR).setVisible(true);
90 mState.getSource(TYPE_IME).setFrame(new Rect(0, 100, 100, 300));
91 mState.getSource(TYPE_IME).setVisible(true);
92 WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), false, false,
Jorim Jaggi648e5882019-01-24 13:24:02 +010093 DisplayCutout.NO_CUTOUT, null, null, SOFT_INPUT_ADJUST_RESIZE, null);
Tarandeep Singha6f35612019-01-11 19:50:46 -080094 assertEquals(100, insets.getStableInsetBottom());
95 assertEquals(Insets.of(0, 0, 0, 100), insets.getMaxInsets(Type.systemBars()));
96 assertEquals(Insets.of(0, 0, 0, 200), insets.getSystemWindowInsets());
97 assertEquals(Insets.of(0, 0, 0, 200), insets.getInsets(Type.all()));
98 assertEquals(Insets.of(0, 0, 0, 100), insets.getInsets(Type.sideBars()));
99 assertEquals(Insets.of(0, 0, 0, 200), insets.getInsets(Type.ime()));
100 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200101 }
102
103 @Test
Tarandeep Singha6f35612019-01-11 19:50:46 -0800104 public void testCalculateInsets_navRightStatusTop() throws Exception {
105 try (final InsetsModeSession session =
106 new InsetsModeSession(ViewRootImpl.NEW_INSETS_MODE_FULL)) {
107 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
108 mState.getSource(TYPE_TOP_BAR).setVisible(true);
109 mState.getSource(TYPE_NAVIGATION_BAR).setFrame(new Rect(80, 0, 100, 300));
110 mState.getSource(TYPE_NAVIGATION_BAR).setVisible(true);
111 WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), false, false,
Jorim Jaggi648e5882019-01-24 13:24:02 +0100112 DisplayCutout.NO_CUTOUT, null, null, 0, null);
Tarandeep Singha6f35612019-01-11 19:50:46 -0800113 assertEquals(Insets.of(0, 100, 20, 0), insets.getSystemWindowInsets());
114 assertEquals(Insets.of(0, 100, 0, 0), insets.getInsets(Type.topBar()));
115 assertEquals(Insets.of(0, 0, 20, 0), insets.getInsets(Type.sideBars()));
116 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200117 }
118
119 @Test
Jorim Jaggi648e5882019-01-24 13:24:02 +0100120 public void testCalculateInsets_imeIgnoredWithoutAdjustResize() {
121 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
122 mState.getSource(TYPE_TOP_BAR).setVisible(true);
123 mState.getSource(TYPE_IME).setFrame(new Rect(0, 200, 100, 300));
124 mState.getSource(TYPE_IME).setVisible(true);
125 WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), false, false,
126 DisplayCutout.NO_CUTOUT, null, null, 0, null);
127 assertEquals(0, insets.getSystemWindowInsetBottom());
128 assertTrue(insets.isVisible(ime()));
129 }
130
131 @Test
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200132 public void testStripForDispatch() {
133 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
134 mState.getSource(TYPE_TOP_BAR).setVisible(true);
135 mState.getSource(TYPE_IME).setFrame(new Rect(0, 200, 100, 300));
136 mState.getSource(TYPE_IME).setVisible(true);
137 mState.removeSource(TYPE_IME);
138 WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), false, false,
Jorim Jaggi648e5882019-01-24 13:24:02 +0100139 DisplayCutout.NO_CUTOUT, null, null, SOFT_INPUT_ADJUST_RESIZE, null);
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200140 assertEquals(0, insets.getSystemWindowInsetBottom());
141 }
142
143 @Test
144 public void testEquals_differentRect() {
145 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
146 mState2.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 10, 10));
Tarandeep Singha6f35612019-01-11 19:50:46 -0800147 assertNotEqualsAndHashCode();
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200148 }
149
150 @Test
151 public void testEquals_differentSource() {
152 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
153 mState2.getSource(TYPE_IME).setFrame(new Rect(0, 0, 100, 100));
Tarandeep Singha6f35612019-01-11 19:50:46 -0800154 assertNotEqualsAndHashCode();
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200155 }
156
157 @Test
158 public void testEquals_sameButDifferentInsertOrder() {
159 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
160 mState.getSource(TYPE_IME).setFrame(new Rect(0, 0, 100, 100));
161 mState2.getSource(TYPE_IME).setFrame(new Rect(0, 0, 100, 100));
162 mState2.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
Tarandeep Singha6f35612019-01-11 19:50:46 -0800163 assertEqualsAndHashCode();
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200164 }
165
166 @Test
167 public void testEquals_visibility() {
168 mState.getSource(TYPE_IME).setFrame(new Rect(0, 0, 100, 100));
169 mState.getSource(TYPE_IME).setVisible(true);
170 mState2.getSource(TYPE_IME).setFrame(new Rect(0, 0, 100, 100));
Tarandeep Singha6f35612019-01-11 19:50:46 -0800171 assertNotEqualsAndHashCode();
172 }
173
174 @Test
175 public void testEquals_differentFrame() {
176 mState.setDisplayFrame(new Rect(0, 1, 2, 3));
177 mState.setDisplayFrame(new Rect(4, 5, 6, 7));
178 assertNotEqualsAndHashCode();
179 }
180
181 @Test
182 public void testEquals_sameFrame() {
183 mState.setDisplayFrame(new Rect(0, 1, 2, 3));
184 mState2.setDisplayFrame(new Rect(0, 1, 2, 3));
185 assertEqualsAndHashCode();
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200186 }
187
188 @Test
189 public void testParcelUnparcel() {
190 mState.getSource(TYPE_IME).setFrame(new Rect(0, 0, 100, 100));
191 mState.getSource(TYPE_IME).setVisible(true);
192 mState.getSource(TYPE_TOP_BAR).setFrame(new Rect(0, 0, 100, 100));
193 Parcel p = Parcel.obtain();
194 mState.writeToParcel(p, 0 /* flags */);
Tarandeep Singha6f35612019-01-11 19:50:46 -0800195 p.setDataPosition(0);
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200196 mState2.readFromParcel(p);
197 p.recycle();
198 assertEquals(mState, mState2);
199 }
Jorim Jaggie35c0592018-11-06 16:21:08 +0100200
201 @Test
202 public void testGetDefaultVisibility() {
Jorim Jaggid89efeb2019-01-22 17:48:34 +0100203 assertTrue(InsetsState.getDefaultVisibility(TYPE_TOP_BAR));
204 assertTrue(InsetsState.getDefaultVisibility(TYPE_SIDE_BAR_1));
205 assertTrue(InsetsState.getDefaultVisibility(TYPE_SIDE_BAR_2));
206 assertTrue(InsetsState.getDefaultVisibility(TYPE_SIDE_BAR_3));
207 assertFalse(InsetsState.getDefaultVisibility(TYPE_IME));
Jorim Jaggie35c0592018-11-06 16:21:08 +0100208 }
Tarandeep Singha6f35612019-01-11 19:50:46 -0800209
210 private void assertEqualsAndHashCode() {
211 assertEquals(mState, mState2);
212 assertEquals(mState.hashCode(), mState2.hashCode());
213 }
214
215 private void assertNotEqualsAndHashCode() {
216 assertNotEquals(mState, mState2);
217 assertNotEquals(mState.hashCode(), mState2.hashCode());
218 }
Jorim Jaggif96c90a2018-09-26 16:55:15 +0200219}