blob: 1638ea1ca843dac9f889ae069e4ec46917583395 [file] [log] [blame]
Riddle Hsucf33f1c2019-02-18 21:20:51 +08001/*
2 * Copyright (C) 2019 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.systemui;
18
19import static org.mockito.ArgumentMatchers.eq;
20import static org.mockito.Mockito.doReturn;
21import static org.mockito.Mockito.verify;
22
23import android.content.Context;
24import android.inputmethodservice.InputMethodService;
25import android.os.IBinder;
26import android.testing.AndroidTestingRunner;
27import android.view.View;
28
29import androidx.test.filters.SmallTest;
30
31import com.android.systemui.SizeCompatModeActivityController.RestartActivityButton;
32import com.android.systemui.shared.system.ActivityManagerWrapper;
33import com.android.systemui.shared.system.TaskStackChangeListener;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040034import com.android.systemui.statusbar.CommandQueue;
Riddle Hsucf33f1c2019-02-18 21:20:51 +080035
36import org.junit.Before;
37import org.junit.Test;
38import org.junit.runner.RunWith;
39import org.mockito.ArgumentCaptor;
40import org.mockito.Mock;
41import org.mockito.MockitoAnnotations;
42
43/**
44 * runtest systemui -c com.android.systemui.SizeCompatModeActivityControllerTest
45 */
46@RunWith(AndroidTestingRunner.class)
47@SmallTest
48public class SizeCompatModeActivityControllerTest extends SysuiTestCase {
49 private static final int DISPLAY_ID = 0;
50
51 private SizeCompatModeActivityController mController;
52 private TaskStackChangeListener mTaskStackListener;
53 private @Mock ActivityManagerWrapper mMockAm;
54 private @Mock RestartActivityButton mMockButton;
55 private @Mock IBinder mMockActivityToken;
56
57 @Before
58 public void setUp() {
59 MockitoAnnotations.initMocks(this);
Riddle Hsu74826262019-04-17 14:57:42 +080060 doReturn(true).when(mMockButton).show();
Riddle Hsucf33f1c2019-02-18 21:20:51 +080061
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040062 mController = new SizeCompatModeActivityController(mContext, mMockAm,
63 new CommandQueue(mContext)) {
Riddle Hsucf33f1c2019-02-18 21:20:51 +080064 @Override
65 RestartActivityButton createRestartButton(Context context) {
66 return mMockButton;
67 };
68 };
Riddle Hsucf33f1c2019-02-18 21:20:51 +080069
70 ArgumentCaptor<TaskStackChangeListener> listenerCaptor =
71 ArgumentCaptor.forClass(TaskStackChangeListener.class);
72 verify(mMockAm).registerTaskStackListener(listenerCaptor.capture());
73 mTaskStackListener = listenerCaptor.getValue();
74 }
75
76 @Test
77 public void testOnSizeCompatModeActivityChanged() {
78 // Verifies that the restart button is added with non-null component name.
79 mTaskStackListener.onSizeCompatModeActivityChanged(DISPLAY_ID, mMockActivityToken);
80 verify(mMockButton).show();
81 verify(mMockButton).updateLastTargetActivity(eq(mMockActivityToken));
82
83 // Verifies that the restart button is removed with null component name.
84 mTaskStackListener.onSizeCompatModeActivityChanged(DISPLAY_ID, null /* activityToken */);
85 verify(mMockButton).remove();
86 }
87
88 @Test
89 public void testChangeButtonVisibilityOnImeShowHide() {
90 mTaskStackListener.onSizeCompatModeActivityChanged(DISPLAY_ID, mMockActivityToken);
91
92 // Verifies that the restart button is hidden when IME is visible.
93 doReturn(View.VISIBLE).when(mMockButton).getVisibility();
94 mController.setImeWindowStatus(DISPLAY_ID, null /* token */, InputMethodService.IME_VISIBLE,
95 0 /* backDisposition */, false /* showImeSwitcher */);
96 verify(mMockButton).setVisibility(eq(View.GONE));
97
98 // Verifies that the restart button is visible when IME is hidden.
99 doReturn(View.GONE).when(mMockButton).getVisibility();
100 mController.setImeWindowStatus(DISPLAY_ID, null /* token */, 0 /* vis */,
101 0 /* backDisposition */, false /* showImeSwitcher */);
102 verify(mMockButton).setVisibility(eq(View.VISIBLE));
103 }
104}