• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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 package com.android.quickstep;
17 
18 import android.content.Intent;
19 
20 import androidx.annotation.NonNull;
21 import androidx.test.filters.LargeTest;
22 import androidx.test.runner.AndroidJUnit4;
23 
24 import com.android.launcher3.tapl.KeyboardQuickSwitch;
25 import com.android.launcher3.taskbar.KeyboardQuickSwitchController;
26 
27 import org.junit.Assume;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 
31 @LargeTest
32 @RunWith(AndroidJUnit4.class)
33 public class TaplTestsKeyboardQuickSwitch extends AbstractQuickStepTest {
34 
35     private enum TestSurface {
36         HOME(true),
37         LAUNCHED_APP(false),
38         HOME_ALL_APPS(true),
39         WIDGETS(true);
40 
41         private final boolean mInitialFocusAtZero;
42 
TestSurface(boolean initialFocusAtZero)43         TestSurface(boolean initialFocusAtZero) {
44             mInitialFocusAtZero = initialFocusAtZero;
45         }
46     }
47 
48     private enum TestCase {
49         DISMISS(0),
50         LAUNCH_LAST_APP(0),
51         LAUNCH_SELECTED_APP(1),
52         DISMISS_WHEN_GOING_HOME(1),
53         LAUNCH_OVERVIEW(KeyboardQuickSwitchController.MAX_TASKS - 1);
54 
55         private final int mNumAdditionalRunningTasks;
56 
TestCase(int numAdditionalRunningTasks)57         TestCase(int numAdditionalRunningTasks) {
58             mNumAdditionalRunningTasks = numAdditionalRunningTasks;
59         }
60     }
61 
62     private static final String CALCULATOR_APP_PACKAGE =
63             resolveSystemApp(Intent.CATEGORY_APP_CALCULATOR);
64 
65     @Override
setUp()66     public void setUp() throws Exception {
67         Assume.assumeTrue(mLauncher.isTablet());
68         super.setUp();
69         startAppFast(CALCULATOR_APP_PACKAGE);
70         startTestActivity(2);
71     }
72 
73     @Test
testDismiss_fromHome()74     public void testDismiss_fromHome() {
75         runTest(TestSurface.HOME, TestCase.DISMISS);
76     }
77 
78     @Test
testDismiss_fromApp()79     public void testDismiss_fromApp() {
80         runTest(TestSurface.LAUNCHED_APP, TestCase.DISMISS);
81     }
82 
83     @Test
testDismiss_fromHomeAllApps()84     public void testDismiss_fromHomeAllApps() {
85         runTest(TestSurface.HOME_ALL_APPS, TestCase.DISMISS);
86     }
87 
88     @Test
testDismiss_fromWidgets()89     public void testDismiss_fromWidgets() {
90         runTest(TestSurface.WIDGETS, TestCase.DISMISS);
91     }
92 
93     @Test
testLaunchLastTask_fromHome()94     public void testLaunchLastTask_fromHome() {
95         runTest(TestSurface.HOME, TestCase.LAUNCH_LAST_APP);
96     }
97 
98     @Test
testLaunchLastTask_fromApp()99     public void testLaunchLastTask_fromApp() {
100         runTest(TestSurface.LAUNCHED_APP, TestCase.LAUNCH_LAST_APP);
101     }
102 
103     @Test
testLaunchLastTask_fromHomeAllApps()104     public void testLaunchLastTask_fromHomeAllApps() {
105         runTest(TestSurface.HOME_ALL_APPS, TestCase.LAUNCH_LAST_APP);
106     }
107 
108     @Test
testLaunchLastTask_fromWidgets()109     public void testLaunchLastTask_fromWidgets() {
110         runTest(TestSurface.WIDGETS, TestCase.LAUNCH_LAST_APP);
111     }
112 
113     @Test
testLaunchSelectedTask_fromHome()114     public void testLaunchSelectedTask_fromHome() {
115         runTest(TestSurface.HOME, TestCase.LAUNCH_SELECTED_APP);
116     }
117 
118     @Test
testLaunchSelectedTask_fromApp()119     public void testLaunchSelectedTask_fromApp() {
120         runTest(TestSurface.LAUNCHED_APP, TestCase.LAUNCH_SELECTED_APP);
121     }
122 
123     @Test
testLaunchSelectedTask_fromHomeAllApps()124     public void testLaunchSelectedTask_fromHomeAllApps() {
125         runTest(TestSurface.HOME_ALL_APPS, TestCase.LAUNCH_SELECTED_APP);
126     }
127 
128     @Test
testLaunchSelectedTask_fromWidgets()129     public void testLaunchSelectedTask_fromWidgets() {
130         runTest(TestSurface.WIDGETS, TestCase.LAUNCH_SELECTED_APP);
131     }
132 
133     @Test
testLaunchOverviewTask_fromHome()134     public void testLaunchOverviewTask_fromHome() {
135         runTest(TestSurface.HOME, TestCase.LAUNCH_OVERVIEW);
136     }
137 
138     @Test
testLaunchOverviewTask_fromApp()139     public void testLaunchOverviewTask_fromApp() {
140         runTest(TestSurface.LAUNCHED_APP, TestCase.LAUNCH_OVERVIEW);
141     }
142 
143     @Test
testLaunchOverviewTask_fromHomeAllApps()144     public void testLaunchOverviewTask_fromHomeAllApps() {
145         runTest(TestSurface.HOME_ALL_APPS, TestCase.LAUNCH_OVERVIEW);
146     }
147 
148     @Test
testLaunchOverviewTask_fromWidgets()149     public void testLaunchOverviewTask_fromWidgets() {
150         runTest(TestSurface.WIDGETS, TestCase.LAUNCH_OVERVIEW);
151     }
152 
153     @Test
testLaunchSingleRecentTask()154     public void testLaunchSingleRecentTask() {
155         mLauncher.getLaunchedAppState().switchToOverview().dismissAllTasks();
156         startAppFast(CALCULATOR_APP_PACKAGE);
157         mLauncher.goHome().showQuickSwitchView().launchFocusedAppTask(CALCULATOR_APP_PACKAGE);
158     }
159 
160     @Test
testDismissedWhenGoingHome()161     public void testDismissedWhenGoingHome() {
162         runTest(TestSurface.LAUNCHED_APP, TestCase.DISMISS_WHEN_GOING_HOME);
163     }
164 
runTest(@onNull TestSurface testSurface, @NonNull TestCase testCase)165     private void runTest(@NonNull TestSurface testSurface, @NonNull TestCase testCase) {
166         for (int i = 0; i < testCase.mNumAdditionalRunningTasks; i++) {
167             startTestActivity(3 + i);
168         }
169 
170         KeyboardQuickSwitch kqs;
171         switch (testSurface) {
172             case HOME:
173                 kqs = mLauncher.goHome().showQuickSwitchView();
174                 break;
175             case LAUNCHED_APP:
176                 mLauncher.setIgnoreTaskbarVisibility(true);
177                 kqs = mLauncher.getLaunchedAppState().showQuickSwitchView();
178                 break;
179             case HOME_ALL_APPS:
180                 kqs = mLauncher.goHome().switchToAllApps().showQuickSwitchView();
181                 break;
182             case WIDGETS:
183                 kqs = mLauncher.goHome().openAllWidgets().showQuickSwitchView();
184                 break;
185             default:
186                 throw new IllegalStateException(
187                         "KeyboardQuickSwitch could not be initialized for test surface: "
188                             + testSurface);
189         }
190 
191         switch (testCase) {
192             case DISMISS:
193                 kqs.dismiss();
194                 break;
195             case LAUNCH_LAST_APP:
196                 kqs.launchFocusedAppTask(testSurface.mInitialFocusAtZero
197                         ? getAppPackageName() : CALCULATOR_APP_PACKAGE);
198                 break;
199             case LAUNCH_SELECTED_APP:
200                 kqs.moveFocusForward();
201                 if (testSurface.mInitialFocusAtZero) {
202                     kqs.moveFocusForward();
203                 }
204                 kqs.launchFocusedAppTask(CALCULATOR_APP_PACKAGE);
205                 break;
206             case DISMISS_WHEN_GOING_HOME:
207                 kqs.dismissByGoingHome();
208                 break;
209             case LAUNCH_OVERVIEW:
210                 kqs.moveFocusBackward();
211                 if (!testSurface.mInitialFocusAtZero) {
212                     kqs.moveFocusBackward();
213                 }
214                 kqs.launchFocusedOverviewTask()
215                         // Check that the correct task was focused
216                         .launchFocusedTaskByEnterKey(CALCULATOR_APP_PACKAGE);
217                 break;
218             default:
219                 throw new IllegalStateException("Cannot run test case: " + testCase);
220         }
221     }
222 }
223