blob: 01808cb7462d33037f299e6e1d894b28f7d83ed4 [file] [log] [blame]
Wale Ogunwaleb783fd82016-11-04 09:51:54 -07001/*
2 * Copyright (C) 2016 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
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070019import org.junit.Test;
20import org.junit.runner.RunWith;
21
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070022import android.platform.test.annotations.Presubmit;
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070023import android.support.test.filters.SmallTest;
24import android.support.test.runner.AndroidJUnit4;
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070025
26import java.util.ArrayList;
27
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070028import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
Wale Ogunwale5d7e7f12016-12-12 14:47:05 -080029import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070030import static org.junit.Assert.assertEquals;
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070031
32/**
33 * Tests for the {@link DisplayContent} class.
34 *
35 * Build/Install/Run:
36 * bit FrameworksServicesTests:com.android.server.wm.DisplayContentTests
37 */
38@SmallTest
39@Presubmit
40@RunWith(AndroidJUnit4.class)
Wale Ogunwale44fbdf52016-11-16 10:18:45 -080041public class DisplayContentTests extends WindowTestsBase {
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070042
43 @Test
44 public void testForAllWindows() throws Exception {
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080045 final WindowState exitingAppWindow = createWindow(null, TYPE_BASE_APPLICATION,
46 sDisplayContent, "exiting app");
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070047 final AppWindowToken exitingAppToken = exitingAppWindow.mAppToken;
48 exitingAppToken.mIsExiting = true;
49 exitingAppToken.mTask.mStack.mExitingAppTokens.add(exitingAppToken);
50
51 final ArrayList<WindowState> windows = new ArrayList();
52
53 // Test forward traversal.
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080054 sDisplayContent.forAllWindows(w -> {windows.add(w);}, false /* traverseTopToBottom */);
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070055
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080056 assertEquals(sWallpaperWindow, windows.get(0));
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070057 assertEquals(exitingAppWindow, windows.get(1));
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080058 assertEquals(sChildAppWindowBelow, windows.get(2));
59 assertEquals(sAppWindow, windows.get(3));
60 assertEquals(sChildAppWindowAbove, windows.get(4));
61 assertEquals(sDockedDividerWindow, windows.get(5));
62 assertEquals(sStatusBarWindow, windows.get(6));
63 assertEquals(sNavBarWindow, windows.get(7));
64 assertEquals(sImeWindow, windows.get(8));
65 assertEquals(sImeDialogWindow, windows.get(9));
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070066
67 // Test backward traversal.
68 windows.clear();
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080069 sDisplayContent.forAllWindows(w -> {windows.add(w);}, true /* traverseTopToBottom */);
Wale Ogunwaleb783fd82016-11-04 09:51:54 -070070
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080071 assertEquals(sWallpaperWindow, windows.get(9));
72 assertEquals(exitingAppWindow, windows.get(8));
73 assertEquals(sChildAppWindowBelow, windows.get(7));
74 assertEquals(sAppWindow, windows.get(6));
75 assertEquals(sChildAppWindowAbove, windows.get(5));
76 assertEquals(sDockedDividerWindow, windows.get(4));
77 assertEquals(sStatusBarWindow, windows.get(3));
78 assertEquals(sNavBarWindow, windows.get(2));
79 assertEquals(sImeWindow, windows.get(1));
80 assertEquals(sImeDialogWindow, windows.get(0));
Wale Ogunwale5d7e7f12016-12-12 14:47:05 -080081
82 exitingAppWindow.removeImmediately();
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080083 }
84
85 @Test
Wale Ogunwale6ce0fb82016-12-13 14:24:00 -080086 public void testForAllWindows_WithAppImeTarget() throws Exception {
Wale Ogunwale3c1170d2016-12-02 14:44:52 -080087 final WindowState imeAppTarget =
88 createWindow(null, TYPE_BASE_APPLICATION, sDisplayContent, "imeAppTarget");
89
90 sWm.mInputMethodTarget = imeAppTarget;
91
92 final ArrayList<WindowState> windows = new ArrayList();
93
94 // Test forward traversal.
95 sDisplayContent.forAllWindows(w -> {windows.add(w);}, false /* traverseTopToBottom */);
96
97 assertEquals(sWallpaperWindow, windows.get(0));
98 assertEquals(sChildAppWindowBelow, windows.get(1));
99 assertEquals(sAppWindow, windows.get(2));
100 assertEquals(sChildAppWindowAbove, windows.get(3));
101 assertEquals(imeAppTarget, windows.get(4));
102 assertEquals(sImeWindow, windows.get(5));
103 assertEquals(sImeDialogWindow, windows.get(6));
104 assertEquals(sDockedDividerWindow, windows.get(7));
105 assertEquals(sStatusBarWindow, windows.get(8));
106 assertEquals(sNavBarWindow, windows.get(9));
107
108 // Test backward traversal.
109 windows.clear();
110 sDisplayContent.forAllWindows(w -> {windows.add(w);}, true /* traverseTopToBottom */);
111
112 assertEquals(sWallpaperWindow, windows.get(9));
113 assertEquals(sChildAppWindowBelow, windows.get(8));
114 assertEquals(sAppWindow, windows.get(7));
115 assertEquals(sChildAppWindowAbove, windows.get(6));
116 assertEquals(imeAppTarget, windows.get(5));
117 assertEquals(sImeWindow, windows.get(4));
118 assertEquals(sImeDialogWindow, windows.get(3));
119 assertEquals(sDockedDividerWindow, windows.get(2));
120 assertEquals(sStatusBarWindow, windows.get(1));
121 assertEquals(sNavBarWindow, windows.get(0));
122
123 // Clean-up
124 sWm.mInputMethodTarget = null;
125 imeAppTarget.removeImmediately();
Wale Ogunwaleb783fd82016-11-04 09:51:54 -0700126 }
Wale Ogunwale5d7e7f12016-12-12 14:47:05 -0800127
128 @Test
Wale Ogunwale6ce0fb82016-12-13 14:24:00 -0800129 public void testForAllWindows_WithStatusBarImeTarget() throws Exception {
130
131 sWm.mInputMethodTarget = sStatusBarWindow;
132
133 final ArrayList<WindowState> windows = new ArrayList();
134
135 // Test forward traversal.
136 sDisplayContent.forAllWindows(w -> {windows.add(w);}, false /* traverseTopToBottom */);
137
138 assertEquals(sWallpaperWindow, windows.get(0));
139 assertEquals(sChildAppWindowBelow, windows.get(1));
140 assertEquals(sAppWindow, windows.get(2));
141 assertEquals(sChildAppWindowAbove, windows.get(3));
142 assertEquals(sDockedDividerWindow, windows.get(4));
143 assertEquals(sStatusBarWindow, windows.get(5));
144 assertEquals(sImeWindow, windows.get(6));
145 assertEquals(sImeDialogWindow, windows.get(7));
146 assertEquals(sNavBarWindow, windows.get(8));
147
148 // Test backward traversal.
149 windows.clear();
150 sDisplayContent.forAllWindows(w -> {windows.add(w);}, true /* traverseTopToBottom */);
151
152 assertEquals(sWallpaperWindow, windows.get(8));
153 assertEquals(sChildAppWindowBelow, windows.get(7));
154 assertEquals(sAppWindow, windows.get(6));
155 assertEquals(sChildAppWindowAbove, windows.get(5));
156 assertEquals(sDockedDividerWindow, windows.get(4));
157 assertEquals(sStatusBarWindow, windows.get(3));
158 assertEquals(sImeWindow, windows.get(2));
159 assertEquals(sImeDialogWindow, windows.get(1));
160 assertEquals(sNavBarWindow, windows.get(0));
161
162 // Clean-up
163 sWm.mInputMethodTarget = null;
164 }
165
166 @Test
Wale Ogunwale5d7e7f12016-12-12 14:47:05 -0800167 public void testForAllWindows_WithInBetweenWindowToken() throws Exception {
168 // This window is set-up to be z-ordered between some windows that go in the same token like
169 // the nav bar and status bar.
170 final WindowState voiceInteractionWindow = createWindow(null, TYPE_VOICE_INTERACTION,
171 sDisplayContent, "voiceInteractionWindow");
172
173 final ArrayList<WindowState> windows = new ArrayList();
174
175 // Test forward traversal.
176 sDisplayContent.forAllWindows(w -> {windows.add(w);}, false /* traverseTopToBottom */);
177
178 assertEquals(sWallpaperWindow, windows.get(0));
179 assertEquals(sChildAppWindowBelow, windows.get(1));
180 assertEquals(sAppWindow, windows.get(2));
181 assertEquals(sChildAppWindowAbove, windows.get(3));
182 assertEquals(sDockedDividerWindow, windows.get(4));
183 assertEquals(voiceInteractionWindow, windows.get(5));
184 assertEquals(sStatusBarWindow, windows.get(6));
185 assertEquals(sNavBarWindow, windows.get(7));
186 assertEquals(sImeWindow, windows.get(8));
187 assertEquals(sImeDialogWindow, windows.get(9));
188
189 // Test backward traversal.
190 windows.clear();
191 sDisplayContent.forAllWindows(w -> {windows.add(w);}, true /* traverseTopToBottom */);
192
193 assertEquals(sWallpaperWindow, windows.get(9));
194 assertEquals(sChildAppWindowBelow, windows.get(8));
195 assertEquals(sAppWindow, windows.get(7));
196 assertEquals(sChildAppWindowAbove, windows.get(6));
197 assertEquals(sDockedDividerWindow, windows.get(5));
198 assertEquals(voiceInteractionWindow, windows.get(4));
199 assertEquals(sStatusBarWindow, windows.get(3));
200 assertEquals(sNavBarWindow, windows.get(2));
201 assertEquals(sImeWindow, windows.get(1));
202 assertEquals(sImeDialogWindow, windows.get(0));
203
204 voiceInteractionWindow.removeImmediately();
205 }
Wale Ogunwaleb783fd82016-11-04 09:51:54 -0700206}