blob: 0e20c4e2225346fd53d235b8057794568e7d4bf5 [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
86 public void testForAllWindows_WithImeTarget() throws Exception {
87 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
129 public void testForAllWindows_WithInBetweenWindowToken() throws Exception {
130 // This window is set-up to be z-ordered between some windows that go in the same token like
131 // the nav bar and status bar.
132 final WindowState voiceInteractionWindow = createWindow(null, TYPE_VOICE_INTERACTION,
133 sDisplayContent, "voiceInteractionWindow");
134
135 final ArrayList<WindowState> windows = new ArrayList();
136
137 // Test forward traversal.
138 sDisplayContent.forAllWindows(w -> {windows.add(w);}, false /* traverseTopToBottom */);
139
140 assertEquals(sWallpaperWindow, windows.get(0));
141 assertEquals(sChildAppWindowBelow, windows.get(1));
142 assertEquals(sAppWindow, windows.get(2));
143 assertEquals(sChildAppWindowAbove, windows.get(3));
144 assertEquals(sDockedDividerWindow, windows.get(4));
145 assertEquals(voiceInteractionWindow, windows.get(5));
146 assertEquals(sStatusBarWindow, windows.get(6));
147 assertEquals(sNavBarWindow, windows.get(7));
148 assertEquals(sImeWindow, windows.get(8));
149 assertEquals(sImeDialogWindow, windows.get(9));
150
151 // Test backward traversal.
152 windows.clear();
153 sDisplayContent.forAllWindows(w -> {windows.add(w);}, true /* traverseTopToBottom */);
154
155 assertEquals(sWallpaperWindow, windows.get(9));
156 assertEquals(sChildAppWindowBelow, windows.get(8));
157 assertEquals(sAppWindow, windows.get(7));
158 assertEquals(sChildAppWindowAbove, windows.get(6));
159 assertEquals(sDockedDividerWindow, windows.get(5));
160 assertEquals(voiceInteractionWindow, windows.get(4));
161 assertEquals(sStatusBarWindow, windows.get(3));
162 assertEquals(sNavBarWindow, windows.get(2));
163 assertEquals(sImeWindow, windows.get(1));
164 assertEquals(sImeDialogWindow, windows.get(0));
165
166 voiceInteractionWindow.removeImmediately();
167 }
Wale Ogunwaleb783fd82016-11-04 09:51:54 -0700168}