blob: 10d1572ca621851b2cd3d1e3a2665dd624720304 [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;
Jason Monk89377bb2016-12-08 15:29:34 -050038import com.android.systemui.R;
Jason Monkea54e8a2018-12-20 10:01:48 -050039import com.android.systemui.SystemUIFactory;
Jason Monk340b0e52017-03-08 14:57:56 -050040import com.android.systemui.SysuiBaseFragmentTest;
Jason Monk5d577202018-12-26 15:43:06 -050041import com.android.systemui.qs.tileimpl.QSFactoryImpl;
Jason Monk30b64fa2018-12-27 13:19:34 -050042import com.android.systemui.shared.plugins.PluginManager;
Jason Monka26641f2018-12-27 14:20:53 -050043import com.android.systemui.statusbar.phone.AutoTileManager;
Jason Monk88529052016-11-04 13:29:58 -040044import com.android.systemui.statusbar.phone.StatusBarIconController;
Jason Monk1660a272017-04-28 15:53:59 -040045import com.android.systemui.statusbar.policy.Clock;
Jason Monkeeff95b2018-12-21 12:54:37 -050046import com.android.systemui.statusbar.policy.ConfigurationController;
Jason Monk48f85be2018-12-19 15:16:44 -050047import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
Jason Monk88529052016-11-04 13:29:58 -040048import com.android.systemui.statusbar.policy.UserSwitcherController;
Jason Monk30b64fa2018-12-27 13:19:34 -050049import com.android.systemui.tuner.TunerService;
Jason Monkea54e8a2018-12-20 10:01:48 -050050import com.android.systemui.util.InjectionInflationController;
Jason Monk88529052016-11-04 13:29:58 -040051
Jason Monk9c7844c2017-01-18 15:21:53 -050052import org.junit.Before;
Geoffrey Pitsch351a3212017-05-22 15:20:20 -040053import org.junit.Ignore;
Jason Monk88529052016-11-04 13:29:58 -040054import org.junit.Test;
55import org.junit.runner.RunWith;
56
Jason Monk340b0e52017-03-08 14:57:56 -050057@RunWith(AndroidTestingRunner.class)
Jason Monka716bac2018-12-05 15:48:21 -050058@RunWithLooper
Jason Monkfba8faf2017-05-23 10:42:59 -040059@SmallTest
Julien Desprez7e8798c1b2019-02-08 20:12:28 +000060@Ignore
Jason Monk340b0e52017-03-08 14:57:56 -050061public class QSFragmentTest extends SysuiBaseFragmentTest {
Jason Monk88529052016-11-04 13:29:58 -040062
Jason Monk8c09ac72017-03-16 11:53:40 -040063 private MetricsLogger mMockMetricsLogger;
64
Jason Monk88529052016-11-04 13:29:58 -040065 public QSFragmentTest() {
66 super(QSFragment.class);
Jason Monk48f85be2018-12-19 15:16:44 -050067 injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
Jason Monk88529052016-11-04 13:29:58 -040068 }
69
Jason Monk9c7844c2017-01-18 15:21:53 -050070 @Before
Alison Cichowlas5d7d9592018-07-17 15:30:28 -040071 @Ignore("failing")
Jason Monk9c7844c2017-01-18 15:21:53 -050072 public void addLeakCheckDependencies() {
Jason Monk8c09ac72017-03-16 11:53:40 -040073 mMockMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
Jason Monkaa573e92017-01-27 17:00:29 -050074 mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
75 new LayoutInflaterBuilder(mContext)
76 .replace("com.android.systemui.statusbar.policy.SplitClockView",
77 FrameLayout.class)
78 .replace("TextClock", View.class)
Jason Monke5b770e2017-03-03 21:49:29 -050079 .replace(CarrierText.class, View.class)
Jason Monk1660a272017-04-28 15:53:59 -040080 .replace(Clock.class, View.class)
Jason Monkaa573e92017-01-27 17:00:29 -050081 .build());
82
Jason Monk340b0e52017-03-08 14:57:56 -050083 mDependency.injectTestDependency(Dependency.BG_LOOPER,
84 TestableLooper.get(this).getLooper());
85 mDependency.injectMockDependency(UserSwitcherController.class);
Jason Monk9c7844c2017-01-18 15:21:53 -050086 }
87
Jason Monk88529052016-11-04 13:29:58 -040088 @Test
Alison Cichowlas5d7d9592018-07-17 15:30:28 -040089 @Ignore("failing")
Jason Monk88529052016-11-04 13:29:58 -040090 public void testListening() {
Jason Monk28d5d222017-02-02 13:08:31 -050091 assertEquals(Looper.myLooper(), Looper.getMainLooper());
Jason Monk88529052016-11-04 13:29:58 -040092 QSFragment qs = (QSFragment) mFragment;
Jason Monk28d5d222017-02-02 13:08:31 -050093 mFragments.dispatchResume();
94 processAllMessages();
Jason Monk5d577202018-12-26 15:43:06 -050095 QSTileHost host = new QSTileHost(mContext, mock(StatusBarIconController.class),
Jason Monk30b64fa2018-12-27 13:19:34 -050096 mock(QSFactoryImpl.class), new Handler(), Looper.myLooper(),
Jason Monka26641f2018-12-27 14:20:53 -050097 mock(PluginManager.class), mock(TunerService.class),
98 () -> mock(AutoTileManager.class));
Jason Monk88529052016-11-04 13:29:58 -040099 qs.setHost(host);
Jason Monk88529052016-11-04 13:29:58 -0400100
101 qs.setListening(true);
Jason Monk28d5d222017-02-02 13:08:31 -0500102 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400103
104 qs.setListening(false);
Jason Monk28d5d222017-02-02 13:08:31 -0500105 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400106
Jason Monk89377bb2016-12-08 15:29:34 -0500107 // Manually push header through detach so it can handle standard cleanup it does on
108 // removed from window.
109 ((QuickStatusBarHeader) qs.getView().findViewById(R.id.header)).onDetachedFromWindow();
110
Jason Monk88529052016-11-04 13:29:58 -0400111 host.destroy();
Jason Monk28d5d222017-02-02 13:08:31 -0500112 processAllMessages();
Jason Monk88529052016-11-04 13:29:58 -0400113 }
Jason Monk64b214e2017-03-27 13:40:59 -0400114
115 @Test
Alison Cichowlas5d7d9592018-07-17 15:30:28 -0400116 @Ignore("failing")
Jason Monk64b214e2017-03-27 13:40:59 -0400117 public void testSaveState() {
118 QSFragment qs = (QSFragment) mFragment;
119
120 mFragments.dispatchResume();
121 processAllMessages();
122
123 qs.setListening(true);
124 qs.setExpanded(true);
125 processAllMessages();
126 recreateFragment();
127 processAllMessages();
128
129 // Get the reference to the new fragment.
130 qs = (QSFragment) mFragment;
131 assertTrue(qs.isListening());
132 assertTrue(qs.isExpanded());
133 }
Jason Monk48f85be2018-12-19 15:16:44 -0500134
135 @Override
136 protected Fragment instantiate(Context context, String className, Bundle arguments) {
Jason Monkeeff95b2018-12-21 12:54:37 -0500137 return new QSFragment(
138 new RemoteInputQuickSettingsDisabler(context, mock(ConfigurationController.class)),
Jason Monk8966d992018-12-20 14:16:29 -0500139 new InjectionInflationController(SystemUIFactory.getInstance().getRootComponent()),
Jason Monk5d577202018-12-26 15:43:06 -0500140 context,
141 mock(QSTileHost.class));
Jason Monk48f85be2018-12-19 15:16:44 -0500142 }
Jason Monk88529052016-11-04 13:29:58 -0400143}