blob: ca30bed3892c17f881aa975112d2b4b217b0ffdc [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.testing.AndroidTestingRunner;
27import android.testing.LayoutInflaterBuilder;
28import android.testing.TestableLooper;
29import android.testing.TestableLooper.RunWithLooper;
30import android.view.View;
31import android.widget.FrameLayout;
Jason Monk28d5d222017-02-02 13:08:31 -050032
Brett Chabot84151d92019-02-27 15:37:59 -080033import androidx.test.filters.SmallTest;
34
Jason Monk8c09ac72017-03-16 11:53:40 -040035import com.android.internal.logging.MetricsLogger;
Jason Monke5b770e2017-03-03 21:49:29 -050036import com.android.keyguard.CarrierText;
Jason Monk9c7844c2017-01-18 15:21:53 -050037import com.android.systemui.Dependency;
Fabian Kozynski00d494d2019-04-04 09:53:50 -040038import com.android.systemui.DumpController;
Jason Monk89377bb2016-12-08 15:29:34 -050039import com.android.systemui.R;
Jason Monkea54e8a2018-12-20 10:01:48 -050040import com.android.systemui.SystemUIFactory;
Jason Monk340b0e52017-03-08 14:57:56 -050041import com.android.systemui.SysuiBaseFragmentTest;
Selim Cinekb0fada62019-06-17 19:03:59 -070042import com.android.systemui.plugins.statusbar.StatusBarStateController;
Jason Monk5d577202018-12-26 15:43:06 -050043import com.android.systemui.qs.tileimpl.QSFactoryImpl;
Jason Monk30b64fa2018-12-27 13:19:34 -050044import com.android.systemui.shared.plugins.PluginManager;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040045import com.android.systemui.statusbar.CommandQueue;
Jason Monka26641f2018-12-27 14:20:53 -050046import com.android.systemui.statusbar.phone.AutoTileManager;
Jason Monk88529052016-11-04 13:29:58 -040047import com.android.systemui.statusbar.phone.StatusBarIconController;
Jason Monk1660a272017-04-28 15:53:59 -040048import com.android.systemui.statusbar.policy.Clock;
Jason Monkeeff95b2018-12-21 12:54:37 -050049import com.android.systemui.statusbar.policy.ConfigurationController;
Jason Monk48f85be2018-12-19 15:16:44 -050050import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
Jason Monk88529052016-11-04 13:29:58 -040051import com.android.systemui.statusbar.policy.UserSwitcherController;
Jason Monk30b64fa2018-12-27 13:19:34 -050052import com.android.systemui.tuner.TunerService;
Jason Monkea54e8a2018-12-20 10:01:48 -050053import com.android.systemui.util.InjectionInflationController;
Jason Monk88529052016-11-04 13:29:58 -040054
Jason Monk9c7844c2017-01-18 15:21:53 -050055import org.junit.Before;
Geoffrey Pitsch351a3212017-05-22 15:20:20 -040056import org.junit.Ignore;
Jason Monk88529052016-11-04 13:29:58 -040057import org.junit.Test;
58import org.junit.runner.RunWith;
59
Jason Monk340b0e52017-03-08 14:57:56 -050060@RunWith(AndroidTestingRunner.class)
Jason Monka716bac2018-12-05 15:48:21 -050061@RunWithLooper
Jason Monkfba8faf2017-05-23 10:42:59 -040062@SmallTest
Julien Desprez7e8798c1b2019-02-08 20:12:28 +000063@Ignore
Jason Monk340b0e52017-03-08 14:57:56 -050064public class QSFragmentTest extends SysuiBaseFragmentTest {
Jason Monk88529052016-11-04 13:29:58 -040065
Jason Monk8c09ac72017-03-16 11:53:40 -040066 private MetricsLogger mMockMetricsLogger;
67
Jason Monk88529052016-11-04 13:29:58 -040068 public QSFragmentTest() {
69 super(QSFragment.class);
Jason Monk48f85be2018-12-19 15:16:44 -050070 injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
Jason Monk88529052016-11-04 13:29:58 -040071 }
72
Jason Monk9c7844c2017-01-18 15:21:53 -050073 @Before
Alison Cichowlas5d7d9592018-07-17 15:30:28 -040074 @Ignore("failing")
Jason Monk9c7844c2017-01-18 15:21:53 -050075 public void addLeakCheckDependencies() {
Jason Monk8c09ac72017-03-16 11:53:40 -040076 mMockMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
Jason Monkaa573e92017-01-27 17:00:29 -050077 mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
78 new LayoutInflaterBuilder(mContext)
79 .replace("com.android.systemui.statusbar.policy.SplitClockView",
80 FrameLayout.class)
81 .replace("TextClock", View.class)
Jason Monke5b770e2017-03-03 21:49:29 -050082 .replace(CarrierText.class, View.class)
Jason Monk1660a272017-04-28 15:53:59 -040083 .replace(Clock.class, View.class)
Jason Monkaa573e92017-01-27 17:00:29 -050084 .build());
85
Jason Monk340b0e52017-03-08 14:57:56 -050086 mDependency.injectTestDependency(Dependency.BG_LOOPER,
87 TestableLooper.get(this).getLooper());
88 mDependency.injectMockDependency(UserSwitcherController.class);
Jason Monk9c7844c2017-01-18 15:21:53 -050089 }
90
Jason Monk88529052016-11-04 13:29:58 -040091 @Test
Alison Cichowlas5d7d9592018-07-17 15:30:28 -040092 @Ignore("failing")
Jason Monk88529052016-11-04 13:29:58 -040093 public void testListening() {
Jason Monk28d5d222017-02-02 13:08:31 -050094 assertEquals(Looper.myLooper(), Looper.getMainLooper());
Jason Monk88529052016-11-04 13:29:58 -040095 QSFragment qs = (QSFragment) mFragment;
Jason Monk28d5d222017-02-02 13:08:31 -050096 mFragments.dispatchResume();
97 processAllMessages();
Jason Monk5d577202018-12-26 15:43:06 -050098 QSTileHost host = new QSTileHost(mContext, mock(StatusBarIconController.class),
Jason Monk30b64fa2018-12-27 13:19:34 -050099 mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(),
Jason Monka26641f2018-12-27 14:20:53 -0500100 mock(PluginManager.class), mock(TunerService.class),
Fabian Kozynski00d494d2019-04-04 09:53:50 -0400101 () -> mock(AutoTileManager.class), mock(DumpController.class));
Jason Monk88529052016-11-04 13:29:58 -0400102 qs.setHost(host);
Jason Monk88529052016-11-04 13:29:58 -0400103
104 qs.setListening(true);
Jason Monk28d5d222017-02-02 13:08:31 -0500105 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400106
107 qs.setListening(false);
Jason Monk28d5d222017-02-02 13:08:31 -0500108 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400109
Jason Monk89377bb2016-12-08 15:29:34 -0500110 // Manually push header through detach so it can handle standard cleanup it does on
111 // removed from window.
112 ((QuickStatusBarHeader) qs.getView().findViewById(R.id.header)).onDetachedFromWindow();
113
Jason Monk88529052016-11-04 13:29:58 -0400114 host.destroy();
Jason Monk28d5d222017-02-02 13:08:31 -0500115 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400116 }
Jason Monk64b214e2017-03-27 13:40:59 -0400117
118 @Test
Alison Cichowlas5d7d9592018-07-17 15:30:28 -0400119 @Ignore("failing")
Jason Monk64b214e2017-03-27 13:40:59 -0400120 public void testSaveState() {
121 QSFragment qs = (QSFragment) mFragment;
122
123 mFragments.dispatchResume();
124 processAllMessages();
125
126 qs.setListening(true);
127 qs.setExpanded(true);
128 processAllMessages();
129 recreateFragment();
130 processAllMessages();
131
132 // Get the reference to the new fragment.
133 qs = (QSFragment) mFragment;
134 assertTrue(qs.isListening());
135 assertTrue(qs.isExpanded());
136 }
Jason Monk48f85be2018-12-19 15:16:44 -0500137
138 @Override
139 protected Fragment instantiate(Context context, String className, Bundle arguments) {
Dave Mankoffbcaca8a2019-10-31 18:04:08 -0400140 CommandQueue commandQueue = new CommandQueue(context);
Jason Monkeeff95b2018-12-21 12:54:37 -0500141 return new QSFragment(
Dave Mankoffbcaca8a2019-10-31 18:04:08 -0400142 new RemoteInputQuickSettingsDisabler(context, mock(ConfigurationController.class),
143 commandQueue),
Jason Monk8966d992018-12-20 14:16:29 -0500144 new InjectionInflationController(SystemUIFactory.getInstance().getRootComponent()),
Jason Monk5d577202018-12-26 15:43:06 -0500145 context,
Selim Cinekb0fada62019-06-17 19:03:59 -0700146 mock(QSTileHost.class),
Dave Mankoffbcaca8a2019-10-31 18:04:08 -0400147 mock(StatusBarStateController.class),
148 commandQueue);
Jason Monk48f85be2018-12-19 15:16:44 -0500149 }
Jason Monk88529052016-11-04 13:29:58 -0400150}