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