UnknownAppVisibilityControllerTest.java revision c6dc9b53d80565a2a9d17f84ebf673d310ac70c3
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.UnknownVisibilityControllerTest
46 */
47@SmallTest
48@RunWith(AndroidJUnit4.class)
49public class UnknownAppVisibilityControllerTest {
50
51    private WindowManagerService mWm;
52    private @Mock ActivityManagerInternal mAm;
53
54    @Before
55    public void setUp() throws Exception {
56        MockitoAnnotations.initMocks(this);
57        final Context context = InstrumentationRegistry.getTargetContext();
58        LocalServices.addService(ActivityManagerInternal.class, mAm);
59        doAnswer((InvocationOnMock invocationOnMock) -> {
60            invocationOnMock.getArgumentAt(0, Runnable.class).run();
61            return null;
62        }).when(mAm).notifyKeyguardFlagsChanged(any());
63        mWm = TestWindowManagerPolicy.getWindowManagerService(context);
64    }
65
66    @After
67    public void tearDown() throws Exception {
68        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
69    }
70
71    @Test
72    public void testFlow() throws Exception {
73        AppWindowToken token = createAppToken();
74        mWm.mUnknownAppVisibilityController.notifyLaunched(token);
75        mWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token);
76        mWm.mUnknownAppVisibilityController.notifyRelayouted(token);
77
78        // Make sure our handler processed the message.
79        Thread.sleep(100);
80        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
81    }
82
83    @Test
84    public void testMultiple() throws Exception {
85        AppWindowToken token1 = createAppToken();
86        AppWindowToken token2 = createAppToken();
87        mWm.mUnknownAppVisibilityController.notifyLaunched(token1);
88        mWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token1);
89        mWm.mUnknownAppVisibilityController.notifyLaunched(token2);
90        mWm.mUnknownAppVisibilityController.notifyRelayouted(token1);
91        mWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token2);
92        mWm.mUnknownAppVisibilityController.notifyRelayouted(token2);
93
94        // Make sure our handler processed the message.
95        Thread.sleep(100);
96        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
97    }
98
99    @Test
100    public void testClear() throws Exception {
101        AppWindowToken token = createAppToken();
102        mWm.mUnknownAppVisibilityController.notifyLaunched(token);
103        mWm.mUnknownAppVisibilityController.clear();;
104        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
105    }
106
107    @Test
108    public void testAppRemoved() throws Exception {
109        AppWindowToken token = createAppToken();
110        mWm.mUnknownAppVisibilityController.notifyLaunched(token);
111        mWm.mUnknownAppVisibilityController.appRemoved(token);
112        assertTrue(mWm.mUnknownAppVisibilityController.allResolved());
113    }
114
115    private AppWindowToken createAppToken() {
116        return new AppWindowToken(mWm, mock(IApplicationToken.class), false,
117                mWm.getDefaultDisplayContentLocked());
118    }
119}
120