blob: 823485f4624d5a2116e5185708a4c7408d0d04fe [file] [log] [blame]
Jason Monk88529052016-11-04 13:29:58 -04001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui.qs;
16
Jason Monk28d5d222017-02-02 13:08:31 -050017import static org.junit.Assert.assertEquals;
Jason Monk64b214e2017-03-27 13:40:59 -040018import static org.junit.Assert.assertTrue;
Jason Monk88529052016-11-04 13:29:58 -040019import static org.mockito.Mockito.mock;
Jason Monk88529052016-11-04 13:29:58 -040020
Jason Monk48f85be2018-12-19 15:16:44 -050021import android.app.Fragment;
Jason Monka716bac2018-12-05 15:48:21 -050022import android.content.Context;
Jason Monk48f85be2018-12-19 15:16:44 -050023import android.os.Bundle;
Jason Monk5d577202018-12-26 15:43:06 -050024import android.os.Handler;
Jason Monk28d5d222017-02-02 13:08:31 -050025import android.os.Looper;
Jason Monka716bac2018-12-05 15:48:21 -050026import android.support.test.filters.SmallTest;
27import android.testing.AndroidTestingRunner;
28import android.testing.LayoutInflaterBuilder;
29import android.testing.TestableLooper;
30import android.testing.TestableLooper.RunWithLooper;
31import android.view.View;
32import android.widget.FrameLayout;
Jason Monk28d5d222017-02-02 13:08:31 -050033
Jason Monk8c09ac72017-03-16 11:53:40 -040034import com.android.internal.logging.MetricsLogger;
Jason Monke5b770e2017-03-03 21:49:29 -050035import com.android.keyguard.CarrierText;
Jason Monk9c7844c2017-01-18 15:21:53 -050036import com.android.systemui.Dependency;
Jason Monk89377bb2016-12-08 15:29:34 -050037import com.android.systemui.R;
Jason Monkea54e8a2018-12-20 10:01:48 -050038import com.android.systemui.SystemUIFactory;
Jason Monk340b0e52017-03-08 14:57:56 -050039import com.android.systemui.SysuiBaseFragmentTest;
Jason Monk5d577202018-12-26 15:43:06 -050040import com.android.systemui.qs.tileimpl.QSFactoryImpl;
Jason Monk30b64fa2018-12-27 13:19:34 -050041import com.android.systemui.shared.plugins.PluginManager;
Jason Monka26641f2018-12-27 14:20:53 -050042import com.android.systemui.statusbar.phone.AutoTileManager;
Jason Monk88529052016-11-04 13:29:58 -040043import com.android.systemui.statusbar.phone.StatusBarIconController;
Jason Monk1660a272017-04-28 15:53:59 -040044import com.android.systemui.statusbar.policy.Clock;
Jason Monkeeff95b2018-12-21 12:54:37 -050045import com.android.systemui.statusbar.policy.ConfigurationController;
Jason Monk48f85be2018-12-19 15:16:44 -050046import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
Jason Monk88529052016-11-04 13:29:58 -040047import com.android.systemui.statusbar.policy.UserSwitcherController;
Jason Monk30b64fa2018-12-27 13:19:34 -050048import com.android.systemui.tuner.TunerService;
Jason Monkea54e8a2018-12-20 10:01:48 -050049import com.android.systemui.util.InjectionInflationController;
Jason Monk88529052016-11-04 13:29:58 -040050
Jason Monk9c7844c2017-01-18 15:21:53 -050051import org.junit.Before;
Geoffrey Pitsch351a3212017-05-22 15:20:20 -040052import org.junit.Ignore;
Jason Monk88529052016-11-04 13:29:58 -040053import org.junit.Test;
54import org.junit.runner.RunWith;
55
Jason Monk340b0e52017-03-08 14:57:56 -050056@RunWith(AndroidTestingRunner.class)
Jason Monka716bac2018-12-05 15:48:21 -050057@RunWithLooper
Jason Monkfba8faf2017-05-23 10:42:59 -040058@SmallTest
Julien Desprez7e8798c1b2019-02-08 20:12:28 +000059@Ignore
Jason Monk340b0e52017-03-08 14:57:56 -050060public class QSFragmentTest extends SysuiBaseFragmentTest {
Jason Monk88529052016-11-04 13:29:58 -040061
Jason Monk8c09ac72017-03-16 11:53:40 -040062 private MetricsLogger mMockMetricsLogger;
63
Jason Monk88529052016-11-04 13:29:58 -040064 public QSFragmentTest() {
65 super(QSFragment.class);
Jason Monk48f85be2018-12-19 15:16:44 -050066 injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
Jason Monk88529052016-11-04 13:29:58 -040067 }
68
Jason Monk9c7844c2017-01-18 15:21:53 -050069 @Before
Alison Cichowlas5d7d9592018-07-17 15:30:28 -040070 @Ignore("failing")
Jason Monk9c7844c2017-01-18 15:21:53 -050071 public void addLeakCheckDependencies() {
Jason Monk8c09ac72017-03-16 11:53:40 -040072 mMockMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
Jason Monkaa573e92017-01-27 17:00:29 -050073 mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
74 new LayoutInflaterBuilder(mContext)
75 .replace("com.android.systemui.statusbar.policy.SplitClockView",
76 FrameLayout.class)
77 .replace("TextClock", View.class)
Jason Monke5b770e2017-03-03 21:49:29 -050078 .replace(CarrierText.class, View.class)
Jason Monk1660a272017-04-28 15:53:59 -040079 .replace(Clock.class, View.class)
Jason Monkaa573e92017-01-27 17:00:29 -050080 .build());
81
Jason Monk340b0e52017-03-08 14:57:56 -050082 mDependency.injectTestDependency(Dependency.BG_LOOPER,
83 TestableLooper.get(this).getLooper());
84 mDependency.injectMockDependency(UserSwitcherController.class);
Jason Monk9c7844c2017-01-18 15:21:53 -050085 }
86
Jason Monk88529052016-11-04 13:29:58 -040087 @Test
Alison Cichowlas5d7d9592018-07-17 15:30:28 -040088 @Ignore("failing")
Jason Monk88529052016-11-04 13:29:58 -040089 public void testListening() {
Jason Monk28d5d222017-02-02 13:08:31 -050090 assertEquals(Looper.myLooper(), Looper.getMainLooper());
Jason Monk88529052016-11-04 13:29:58 -040091 QSFragment qs = (QSFragment) mFragment;
Jason Monk28d5d222017-02-02 13:08:31 -050092 mFragments.dispatchResume();
93 processAllMessages();
Jason Monk5d577202018-12-26 15:43:06 -050094 QSTileHost host = new QSTileHost(mContext, mock(StatusBarIconController.class),
Jason Monk30b64fa2018-12-27 13:19:34 -050095 mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(),
Jason Monka26641f2018-12-27 14:20:53 -050096 mock(PluginManager.class), mock(TunerService.class),
97 () -> mock(AutoTileManager.class));
Jason Monk88529052016-11-04 13:29:58 -040098 qs.setHost(host);
Jason Monk88529052016-11-04 13:29:58 -040099
100 qs.setListening(true);
Jason Monk28d5d222017-02-02 13:08:31 -0500101 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400102
103 qs.setListening(false);
Jason Monk28d5d222017-02-02 13:08:31 -0500104 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400105
Jason Monk89377bb2016-12-08 15:29:34 -0500106 // Manually push header through detach so it can handle standard cleanup it does on
107 // removed from window.
108 ((QuickStatusBarHeader) qs.getView().findViewById(R.id.header)).onDetachedFromWindow();
109
Jason Monk88529052016-11-04 13:29:58 -0400110 host.destroy();
Jason Monk28d5d222017-02-02 13:08:31 -0500111 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400112 }
Jason Monk64b214e2017-03-27 13:40:59 -0400113
114 @Test
Alison Cichowlas5d7d9592018-07-17 15:30:28 -0400115 @Ignore("failing")
Jason Monk64b214e2017-03-27 13:40:59 -0400116 public void testSaveState() {
117 QSFragment qs = (QSFragment) mFragment;
118
119 mFragments.dispatchResume();
120 processAllMessages();
121
122 qs.setListening(true);
123 qs.setExpanded(true);
124 processAllMessages();
125 recreateFragment();
126 processAllMessages();
127
128 // Get the reference to the new fragment.
129 qs = (QSFragment) mFragment;
130 assertTrue(qs.isListening());
131 assertTrue(qs.isExpanded());
132 }
Jason Monk48f85be2018-12-19 15:16:44 -0500133
134 @Override
135 protected Fragment instantiate(Context context, String className, Bundle arguments) {
Jason Monkeeff95b2018-12-21 12:54:37 -0500136 return new QSFragment(
137 new RemoteInputQuickSettingsDisabler(context, mock(ConfigurationController.class)),
Jason Monk8966d992018-12-20 14:16:29 -0500138 new InjectionInflationController(SystemUIFactory.getInstance().getRootComponent()),
Jason Monk5d577202018-12-26 15:43:06 -0500139 context,
140 mock(QSTileHost.class));
Jason Monk48f85be2018-12-19 15:16:44 -0500141 }
Jason Monk88529052016-11-04 13:29:58 -0400142}