UnknownAppVisibilityControllerTest.java revision 46a26a84af520cf9f13874b6c2646f15b38be683
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
17package com.android.server.wm;
18
19import static junit.framework.Assert.assertTrue;
20import static org.mockito.Mockito.any;
21import static org.mockito.Mockito.doAnswer;
22import static org.mockito.Mockito.mock;
23
24import android.app.ActivityManagerInternal;
25import android.content.Context;
26import android.platform.test.annotations.Presubmit;
27import android.support.test.InstrumentationRegistry;
28import android.support.test.filters.SmallTest;
29import android.support.test.runner.AndroidJUnit4;
30import android.view.IApplicationToken;
31
32import com.android.server.LocalServices;
33
34import org.junit.After;
35import org.junit.Before;
36import org.junit.Test;
37import org.junit.runner.RunWith;
38import org.mockito.Mock;
39import org.mockito.MockitoAnnotations;
40import org.mockito.invocation.InvocationOnMock;
41
42/**
43 * Test class for {@link AppTransition}.
44 *
45 * runtest frameworks-services -c com.android.server.wm.UnknownAppVisibilityControllerTest
46 */
47@SmallTest
48@Presubmit
49@RunWith(AndroidJUnit4.class)
50public class UnknownAppVisibilityControllerTest {
51
52    private WindowManagerService mWm;
53    private @Mock ActivityManagerInternal mAm;
54
55    @Before
56    public void setUp() throws Exception {
57        MockitoAnnotations.initMocks(this);
58        final Context context = InstrumentationRegistry.getTargetContext();
59        LocalServices.addService(ActivityManagerInternal.class, mAm);
60        doAnswer((InvocationOnMock invocationOnMock) -> {
61            invocationOnMock.getArgumentAt(0, Runnable.class).run();
62            return null;
63        }).when(mAm).notifyKeyguardFlagsChanged(any());
64        mWm = TestWindowManagerPolicy.getWindowManagerService(context);
65    }
66
67    @After
68    public void tearDown() throws Exception {
69        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
70    }
71
72    @Test
73    public void testFlow() throws Exception {
74        AppWindowToken token = createAppToken();
75        mWm.mUnknownAppVisibilityController.notifyLaunched(token);
76        mWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token);
77        mWm.mUnknownAppVisibilityController.notifyRelayouted(token);
78
79        // Make sure our handler processed the message.
80        Thread.sleep(100);
81        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
82    }
83
84    @Test
85    public void testMultiple() throws Exception {
86        AppWindowToken token1 = createAppToken();
87        AppWindowToken token2 = createAppToken();
88        mWm.mUnknownAppVisibilityController.notifyLaunched(token1);
89        mWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token1);
90        mWm.mUnknownAppVisibilityController.notifyLaunched(token2);
91        mWm.mUnknownAppVisibilityController.notifyRelayouted(token1);
92        mWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token2);
93        mWm.mUnknownAppVisibilityController.notifyRelayouted(token2);
94
95        // Make sure our handler processed the message.
96        Thread.sleep(100);
97        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
98    }
99
100    @Test
101    public void testClear() throws Exception {
102        AppWindowToken token = createAppToken();
103        mWm.mUnknownAppVisibilityController.notifyLaunched(token);
104        mWm.mUnknownAppVisibilityController.clear();;
105        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
106    }
107
108    @Test
109    public void testAppRemoved() throws Exception {
110        AppWindowToken token = createAppToken();
111        mWm.mUnknownAppVisibilityController.notifyLaunched(token);
112        mWm.mUnknownAppVisibilityController.appRemoved(token);
113        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
114    }
115
116    private AppWindowToken createAppToken() {
117        return new AppWindowToken(mWm, mock(IApplicationToken.class), false,
118                mWm.getDefaultDisplayContentLocked());
119    }
120}
121