1 /*
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 
17 package com.android.server.wm;
18 
19 import static org.junit.Assert.assertTrue;
20 
21 import android.platform.test.annotations.Presubmit;
22 
23 import androidx.test.filters.SmallTest;
24 
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 
29 /**
30  * Test class for {@link AppTransition}.
31  *
32  * Build/Install/Run:
33  *  atest WmTests:UnknownAppVisibilityControllerTest
34  */
35 @SmallTest
36 @Presubmit
37 @RunWith(WindowTestRunner.class)
38 public class UnknownAppVisibilityControllerTest extends WindowTestsBase {
39 
40     @Before
setUp()41     public void setUp() throws Exception {
42         mDisplayContent.mUnknownAppVisibilityController.clear();
43     }
44 
45     @Test
testFlow()46     public void testFlow() {
47         final ActivityRecord activity = createNonAttachedActivityRecord(mDisplayContent);
48         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity);
49         mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(activity);
50         mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(activity);
51 
52         // Make sure our handler processed the message.
53         waitHandlerIdle(mWm.mH);
54         assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
55     }
56 
57     @Test
testSkipResume()58     public void testSkipResume() {
59         final ActivityRecord activity = createNonAttachedActivityRecord(mDisplayContent);
60         activity.mLaunchTaskBehind = true;
61         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity);
62         mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(activity);
63 
64         // Make sure our handler processed the message.
65         waitHandlerIdle(mWm.mH);
66         assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
67     }
68 
69     @Test
testMultiple()70     public void testMultiple() {
71         final ActivityRecord activity1 = createNonAttachedActivityRecord(mDisplayContent);
72         final ActivityRecord activity2 = createNonAttachedActivityRecord(mDisplayContent);
73         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity1);
74         mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(activity1);
75         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity2);
76         mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(activity1);
77         mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(activity2);
78         mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(activity2);
79 
80         // Make sure our handler processed the message.
81         waitHandlerIdle(mWm.mH);
82         assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
83     }
84 
85     @Test
testClear()86     public void testClear() {
87         final ActivityRecord activity = createNonAttachedActivityRecord(mDisplayContent);
88         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity);
89         mDisplayContent.mUnknownAppVisibilityController.clear();
90         assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
91     }
92 
93     @Test
testRemoveFinishingInvisibleActivityFromUnknown()94     public void testRemoveFinishingInvisibleActivityFromUnknown() {
95         final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
96         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity);
97         activity.finishing = true;
98         activity.setVisibleRequested(true);
99         activity.setVisibility(false);
100         assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
101     }
102 
103     @Test
testAppRemoved()104     public void testAppRemoved() {
105         final ActivityRecord activity = createNonAttachedActivityRecord(mDisplayContent);
106         mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity);
107         mDisplayContent.mUnknownAppVisibilityController.appRemovedOrHidden(activity);
108         assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved());
109     }
110 }
111