blob: a27ed1eba7260ad4820d312153cd0badb008f20b [file] [log] [blame]
Jason Monk6eb906e2017-03-29 15:04:25 -04001/*
2 * Copyright (C) 2017 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.statusbar.phone;
16
Evan Lairde1d13c92018-03-20 16:58:01 -040017import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON;
18import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE;
19import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI;
Jason Monk6eb906e2017-03-29 15:04:25 -040020
Beverly1be62f42018-12-19 17:17:48 -050021import static junit.framework.Assert.assertTrue;
22
23import static org.mockito.Mockito.mock;
24
Jason Monk6eb906e2017-03-29 15:04:25 -040025import android.testing.AndroidTestingRunner;
26import android.testing.TestableLooper.RunWithLooper;
27import android.view.ViewGroup;
28import android.widget.LinearLayout;
29
Brett Chabot84151d92019-02-27 15:37:59 -080030import androidx.test.filters.SmallTest;
31
Jason Monk6eb906e2017-03-29 15:04:25 -040032import com.android.internal.statusbar.StatusBarIcon;
Beverly1be62f42018-12-19 17:17:48 -050033import com.android.systemui.plugins.DarkIconDispatcher;
Jason Monk6eb906e2017-03-29 15:04:25 -040034import com.android.systemui.statusbar.StatusBarIconView;
Evan Lairde1d13c92018-03-20 16:58:01 -040035import com.android.systemui.statusbar.StatusBarMobileView;
36import com.android.systemui.statusbar.StatusBarWifiView;
Beverly1be62f42018-12-19 17:17:48 -050037import com.android.systemui.statusbar.StatusIconDisplayable;
Jason Monk6eb906e2017-03-29 15:04:25 -040038import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
39import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;
Evan Lairde1d13c92018-03-20 16:58:01 -040040import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
41import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
Jason Monk6eb906e2017-03-29 15:04:25 -040042import com.android.systemui.utils.leaks.LeakCheckedTest;
43
44import org.junit.Before;
45import org.junit.Test;
46import org.junit.runner.RunWith;
47
48@RunWith(AndroidTestingRunner.class)
49@RunWithLooper
Jason Monkfba8faf2017-05-23 10:42:59 -040050@SmallTest
Jason Monk6eb906e2017-03-29 15:04:25 -040051public class StatusBarIconControllerTest extends LeakCheckedTest {
52
53 @Before
54 public void setup() {
55 injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
56 mDependency.injectMockDependency(DarkIconDispatcher.class);
57 }
58
59 @Test
60 public void testSetCalledOnAdd_IconManager() {
61 LinearLayout layout = new LinearLayout(mContext);
62 TestIconManager manager = new TestIconManager(layout);
Evan Lairde1d13c92018-03-20 16:58:01 -040063 testCallOnAdd_forManager(manager);
Jason Monk6eb906e2017-03-29 15:04:25 -040064 }
65
66 @Test
67 public void testSetCalledOnAdd_DarkIconManager() {
68 LinearLayout layout = new LinearLayout(mContext);
69 TestDarkIconManager manager = new TestDarkIconManager(layout);
Evan Lairde1d13c92018-03-20 16:58:01 -040070 testCallOnAdd_forManager(manager);
Jason Monk6eb906e2017-03-29 15:04:25 -040071 }
72
Jason Monk6eb906e2017-03-29 15:04:25 -040073
Evan Lairde1d13c92018-03-20 16:58:01 -040074 private <T extends IconManager & TestableIconManager> void testCallOnAdd_forManager(T manager) {
75 StatusBarIconHolder holder = holderForType(TYPE_ICON);
76 manager.onIconAdded(0, "test_slot", false, holder);
77 assertTrue("Expected StatusBarIconView",
78 (manager.getViewAt(0) instanceof StatusBarIconView));
79
80 holder = holderForType(TYPE_WIFI);
81 manager.onIconAdded(1, "test_wifi", false, holder);
82 assertTrue(manager.getViewAt(1) instanceof StatusBarWifiView);
83
84 holder = holderForType(TYPE_MOBILE);
85 manager.onIconAdded(2, "test_mobile", false, holder);
86 assertTrue(manager.getViewAt(2) instanceof StatusBarMobileView);
87 }
88
89 private StatusBarIconHolder holderForType(int type) {
90 switch (type) {
91 case TYPE_MOBILE:
92 return StatusBarIconHolder.fromMobileIconState(mock(MobileIconState.class));
93
94 case TYPE_WIFI:
95 return StatusBarIconHolder.fromWifiIconState(mock(WifiIconState.class));
96
97 case TYPE_ICON:
98 default:
99 return StatusBarIconHolder.fromIcon(mock(StatusBarIcon.class));
100 }
101 }
102
103 private static class TestDarkIconManager extends DarkIconManager
104 implements TestableIconManager {
Jason Monk6eb906e2017-03-29 15:04:25 -0400105
106 public TestDarkIconManager(LinearLayout group) {
107 super(group);
Jason Monk6eb906e2017-03-29 15:04:25 -0400108 }
109
110 @Override
Evan Lairde1d13c92018-03-20 16:58:01 -0400111 public StatusIconDisplayable getViewAt(int index) {
112 return (StatusIconDisplayable) mGroup.getChildAt(index);
113 }
114
115 @Override
116 protected StatusBarIconView addIcon(int index, String slot, boolean blocked,
117 StatusBarIcon icon) {
118 StatusBarIconView mock = mock(StatusBarIconView.class);
119 mGroup.addView(mock, index);
120
121 return mock;
122 }
123
124 @Override
125 protected StatusBarWifiView addSignalIcon(int index, String slot, WifiIconState state) {
126 StatusBarWifiView mock = mock(StatusBarWifiView.class);
127 mGroup.addView(mock, index);
128 return mock;
129 }
130
131 @Override
132 protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) {
133 StatusBarMobileView mock = mock(StatusBarMobileView.class);
134 mGroup.addView(mock, index);
135
136 return mock;
Jason Monk6eb906e2017-03-29 15:04:25 -0400137 }
138 }
139
Evan Lairde1d13c92018-03-20 16:58:01 -0400140 private static class TestIconManager extends IconManager implements TestableIconManager {
Jason Monk6eb906e2017-03-29 15:04:25 -0400141 public TestIconManager(ViewGroup group) {
142 super(group);
Jason Monk6eb906e2017-03-29 15:04:25 -0400143 }
144
145 @Override
Evan Lairde1d13c92018-03-20 16:58:01 -0400146 public StatusIconDisplayable getViewAt(int index) {
147 return (StatusIconDisplayable) mGroup.getChildAt(index);
148 }
149
150 @Override
151 protected StatusBarIconView addIcon(int index, String slot, boolean blocked,
152 StatusBarIcon icon) {
153 StatusBarIconView mock = mock(StatusBarIconView.class);
154 mGroup.addView(mock, index);
155
156 return mock;
157 }
158
159 @Override
160 protected StatusBarWifiView addSignalIcon(int index, String slot, WifiIconState state) {
161 StatusBarWifiView mock = mock(StatusBarWifiView.class);
162 mGroup.addView(mock, index);
163 return mock;
164 }
165
166 @Override
167 protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) {
168 StatusBarMobileView mock = mock(StatusBarMobileView.class);
169 mGroup.addView(mock, index);
170
171 return mock;
Jason Monk6eb906e2017-03-29 15:04:25 -0400172 }
173 }
174
Evan Lairde1d13c92018-03-20 16:58:01 -0400175 private interface TestableIconManager {
176 StatusIconDisplayable getViewAt(int index);
177 }
Jason Monk6eb906e2017-03-29 15:04:25 -0400178}