1 /* 2 * Copyright (C) 2016 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 package com.android.settings.testutils; 17 18 import static org.mockito.ArgumentMatchers.anyString; 19 import static org.mockito.Mockito.mock; 20 import static org.mockito.Mockito.when; 21 22 import android.content.Context; 23 24 import com.android.settings.accounts.AccountFeatureProvider; 25 import com.android.settings.applications.ApplicationFeatureProvider; 26 import com.android.settings.aware.AwareFeatureProvider; 27 import com.android.settings.bluetooth.BluetoothFeatureProvider; 28 import com.android.settings.dashboard.DashboardFeatureProvider; 29 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; 30 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; 31 import com.android.settings.fuelgauge.PowerUsageFeatureProvider; 32 import com.android.settings.gestures.AssistGestureFeatureProvider; 33 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider; 34 import com.android.settings.localepicker.LocaleFeatureProvider; 35 import com.android.settings.overlay.DockUpdaterFeatureProvider; 36 import com.android.settings.overlay.FeatureFactory; 37 import com.android.settings.overlay.SupportFeatureProvider; 38 import com.android.settings.overlay.SurveyFeatureProvider; 39 import com.android.settings.panel.PanelFeatureProvider; 40 import com.android.settings.search.SearchFeatureProvider; 41 import com.android.settings.security.SecurityFeatureProvider; 42 import com.android.settings.slices.SlicesFeatureProvider; 43 import com.android.settings.users.UserFeatureProvider; 44 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 45 46 import org.mockito.Answers; 47 48 /** 49 * Test util to provide fake FeatureFactory. To use this factory, call {@code setupForTest} in 50 * {@code @Before} method of the test class. 51 */ 52 public class FakeFeatureFactory extends FeatureFactory { 53 54 public final SupportFeatureProvider supportFeatureProvider; 55 public final MetricsFeatureProvider metricsFeatureProvider; 56 public final PowerUsageFeatureProvider powerUsageFeatureProvider; 57 public final DashboardFeatureProvider dashboardFeatureProvider; 58 public final DockUpdaterFeatureProvider dockUpdaterFeatureProvider; 59 public final LocaleFeatureProvider localeFeatureProvider; 60 public final ApplicationFeatureProvider applicationFeatureProvider; 61 public final EnterprisePrivacyFeatureProvider enterprisePrivacyFeatureProvider; 62 public final SurveyFeatureProvider surveyFeatureProvider; 63 public final SecurityFeatureProvider securityFeatureProvider; 64 public final SuggestionFeatureProvider suggestionsFeatureProvider; 65 public final UserFeatureProvider userFeatureProvider; 66 public final AssistGestureFeatureProvider assistGestureFeatureProvider; 67 public final AccountFeatureProvider mAccountFeatureProvider; 68 public final ContextualCardFeatureProvider mContextualCardFeatureProvider; 69 public final BluetoothFeatureProvider mBluetoothFeatureProvider; 70 public final AwareFeatureProvider mAwareFeatureProvider; 71 72 public PanelFeatureProvider panelFeatureProvider; 73 public SlicesFeatureProvider slicesFeatureProvider; 74 public SearchFeatureProvider searchFeatureProvider; 75 76 /** 77 * Call this in {@code @Before} method of the test class to use fake factory. 78 */ setupForTest()79 public static FakeFeatureFactory setupForTest() { 80 final Context context = mock(Context.class, Answers.RETURNS_DEEP_STUBS); 81 sFactory = null; 82 when(context.getString(com.android.settings.R.string.config_featureFactory)) 83 .thenReturn(FakeFeatureFactory.class.getName()); 84 try { 85 Class c = FakeFeatureFactory.class; 86 when(context.getClassLoader().loadClass(anyString())).thenReturn(c); 87 } catch (ClassNotFoundException e) { 88 // Ignore. 89 } 90 return (FakeFeatureFactory) FakeFeatureFactory.getFactory(context); 91 } 92 93 /** 94 * Used by reflection. Do not call directly. 95 */ FakeFeatureFactory()96 public FakeFeatureFactory() { 97 supportFeatureProvider = mock(SupportFeatureProvider.class); 98 metricsFeatureProvider = mock(MetricsFeatureProvider.class); 99 powerUsageFeatureProvider = mock(PowerUsageFeatureProvider.class); 100 dashboardFeatureProvider = mock(DashboardFeatureProvider.class); 101 dockUpdaterFeatureProvider = mock(DockUpdaterFeatureProvider.class); 102 localeFeatureProvider = mock(LocaleFeatureProvider.class); 103 applicationFeatureProvider = mock(ApplicationFeatureProvider.class); 104 enterprisePrivacyFeatureProvider = mock(EnterprisePrivacyFeatureProvider.class); 105 searchFeatureProvider = mock(SearchFeatureProvider.class); 106 surveyFeatureProvider = mock(SurveyFeatureProvider.class); 107 securityFeatureProvider = mock(SecurityFeatureProvider.class); 108 suggestionsFeatureProvider = mock(SuggestionFeatureProvider.class); 109 userFeatureProvider = mock(UserFeatureProvider.class); 110 assistGestureFeatureProvider = mock(AssistGestureFeatureProvider.class); 111 slicesFeatureProvider = mock(SlicesFeatureProvider.class); 112 mAccountFeatureProvider = mock(AccountFeatureProvider.class); 113 mContextualCardFeatureProvider = mock(ContextualCardFeatureProvider.class); 114 panelFeatureProvider = mock(PanelFeatureProvider.class); 115 mBluetoothFeatureProvider = mock(BluetoothFeatureProvider.class); 116 mAwareFeatureProvider = mock(AwareFeatureProvider.class); 117 } 118 119 @Override getSuggestionFeatureProvider(Context context)120 public SuggestionFeatureProvider getSuggestionFeatureProvider(Context context) { 121 return suggestionsFeatureProvider; 122 } 123 124 @Override getSupportFeatureProvider(Context context)125 public SupportFeatureProvider getSupportFeatureProvider(Context context) { 126 return supportFeatureProvider; 127 } 128 129 @Override getMetricsFeatureProvider()130 public MetricsFeatureProvider getMetricsFeatureProvider() { 131 return metricsFeatureProvider; 132 } 133 134 @Override getPowerUsageFeatureProvider(Context context)135 public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { 136 return powerUsageFeatureProvider; 137 } 138 139 @Override getDashboardFeatureProvider(Context context)140 public DashboardFeatureProvider getDashboardFeatureProvider(Context context) { 141 return dashboardFeatureProvider; 142 } 143 144 @Override getDockUpdaterFeatureProvider()145 public DockUpdaterFeatureProvider getDockUpdaterFeatureProvider() { 146 return dockUpdaterFeatureProvider; 147 } 148 149 @Override getApplicationFeatureProvider(Context context)150 public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) { 151 return applicationFeatureProvider; 152 } 153 154 @Override getLocaleFeatureProvider()155 public LocaleFeatureProvider getLocaleFeatureProvider() { 156 return localeFeatureProvider; 157 } 158 159 @Override getEnterprisePrivacyFeatureProvider(Context context)160 public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) { 161 return enterprisePrivacyFeatureProvider; 162 } 163 164 @Override getSearchFeatureProvider()165 public SearchFeatureProvider getSearchFeatureProvider() { 166 return searchFeatureProvider; 167 } 168 169 @Override getSurveyFeatureProvider(Context context)170 public SurveyFeatureProvider getSurveyFeatureProvider(Context context) { 171 return surveyFeatureProvider; 172 } 173 174 @Override getSecurityFeatureProvider()175 public SecurityFeatureProvider getSecurityFeatureProvider() { 176 return securityFeatureProvider; 177 } 178 179 @Override getUserFeatureProvider(Context context)180 public UserFeatureProvider getUserFeatureProvider(Context context) { 181 return userFeatureProvider; 182 } 183 184 @Override getAssistGestureFeatureProvider()185 public AssistGestureFeatureProvider getAssistGestureFeatureProvider() { 186 return assistGestureFeatureProvider; 187 } 188 189 @Override getSlicesFeatureProvider()190 public SlicesFeatureProvider getSlicesFeatureProvider() { 191 return slicesFeatureProvider; 192 } 193 194 @Override getAccountFeatureProvider()195 public AccountFeatureProvider getAccountFeatureProvider() { 196 return mAccountFeatureProvider; 197 } 198 199 @Override getPanelFeatureProvider()200 public PanelFeatureProvider getPanelFeatureProvider() { 201 return panelFeatureProvider; 202 } 203 204 @Override getContextualCardFeatureProvider(Context context)205 public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) { 206 return mContextualCardFeatureProvider; 207 } 208 209 @Override getBluetoothFeatureProvider(Context context)210 public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) { 211 return mBluetoothFeatureProvider; 212 } 213 214 @Override getAwareFeatureProvider()215 public AwareFeatureProvider getAwareFeatureProvider() { 216 return mAwareFeatureProvider; 217 } 218 } 219