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