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 17 package com.android.settings.overlay; 18 19 import android.app.AppGlobals; 20 import android.app.admin.DevicePolicyManager; 21 import android.content.Context; 22 import android.net.ConnectivityManager; 23 import android.net.VpnManager; 24 import android.os.UserManager; 25 26 import androidx.annotation.Keep; 27 28 import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; 29 import com.android.settings.accessibility.AccessibilityMetricsFeatureProviderImpl; 30 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; 31 import com.android.settings.accessibility.AccessibilitySearchFeatureProviderImpl; 32 import com.android.settings.accounts.AccountFeatureProvider; 33 import com.android.settings.accounts.AccountFeatureProviderImpl; 34 import com.android.settings.applications.ApplicationFeatureProvider; 35 import com.android.settings.applications.ApplicationFeatureProviderImpl; 36 import com.android.settings.aware.AwareFeatureProvider; 37 import com.android.settings.aware.AwareFeatureProviderImpl; 38 import com.android.settings.biometrics.face.FaceFeatureProvider; 39 import com.android.settings.biometrics.face.FaceFeatureProviderImpl; 40 import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider; 41 import com.android.settings.biometrics2.factory.BiometricsRepositoryProviderImpl; 42 import com.android.settings.bluetooth.BluetoothFeatureProvider; 43 import com.android.settings.bluetooth.BluetoothFeatureProviderImpl; 44 import com.android.settings.connecteddevice.dock.DockUpdaterFeatureProviderImpl; 45 import com.android.settings.connecteddevice.stylus.StylusFeatureProvider; 46 import com.android.settings.connecteddevice.stylus.StylusFeatureProviderImpl; 47 import com.android.settings.core.instrumentation.SettingsMetricsFeatureProvider; 48 import com.android.settings.dashboard.DashboardFeatureProvider; 49 import com.android.settings.dashboard.DashboardFeatureProviderImpl; 50 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; 51 import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; 52 import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider; 53 import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl; 54 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; 55 import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl; 56 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider; 57 import com.android.settings.fuelgauge.BatterySettingsFeatureProviderImpl; 58 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; 59 import com.android.settings.fuelgauge.BatteryStatusFeatureProviderImpl; 60 import com.android.settings.fuelgauge.PowerUsageFeatureProvider; 61 import com.android.settings.fuelgauge.PowerUsageFeatureProviderImpl; 62 import com.android.settings.gestures.AssistGestureFeatureProvider; 63 import com.android.settings.gestures.AssistGestureFeatureProviderImpl; 64 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider; 65 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProviderImpl; 66 import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider; 67 import com.android.settings.inputmethod.KeyboardSettingsFeatureProviderImpl; 68 import com.android.settings.localepicker.LocaleFeatureProvider; 69 import com.android.settings.localepicker.LocaleFeatureProviderImpl; 70 import com.android.settings.panel.PanelFeatureProvider; 71 import com.android.settings.panel.PanelFeatureProviderImpl; 72 import com.android.settings.search.SearchFeatureProvider; 73 import com.android.settings.search.SearchFeatureProviderImpl; 74 import com.android.settings.security.SecurityFeatureProvider; 75 import com.android.settings.security.SecurityFeatureProviderImpl; 76 import com.android.settings.security.SecuritySettingsFeatureProvider; 77 import com.android.settings.security.SecuritySettingsFeatureProviderImpl; 78 import com.android.settings.slices.SlicesFeatureProvider; 79 import com.android.settings.slices.SlicesFeatureProviderImpl; 80 import com.android.settings.users.UserFeatureProvider; 81 import com.android.settings.users.UserFeatureProviderImpl; 82 import com.android.settings.vpn2.AdvancedVpnFeatureProvider; 83 import com.android.settings.vpn2.AdvancedVpnFeatureProviderImpl; 84 import com.android.settings.wifi.WifiTrackerLibProvider; 85 import com.android.settings.wifi.WifiTrackerLibProviderImpl; 86 import com.android.settings.wifi.factory.WifiFeatureProvider; 87 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 88 89 /** 90 * {@link FeatureFactory} implementation for AOSP Settings. 91 */ 92 @Keep 93 public class FeatureFactoryImpl extends FeatureFactory { 94 95 private ApplicationFeatureProvider mApplicationFeatureProvider; 96 private MetricsFeatureProvider mMetricsFeatureProvider; 97 private DashboardFeatureProviderImpl mDashboardFeatureProvider; 98 private DockUpdaterFeatureProvider mDockUpdaterFeatureProvider; 99 private LocaleFeatureProvider mLocaleFeatureProvider; 100 private EnterprisePrivacyFeatureProvider mEnterprisePrivacyFeatureProvider; 101 private SearchFeatureProvider mSearchFeatureProvider; 102 private SecurityFeatureProvider mSecurityFeatureProvider; 103 private SuggestionFeatureProvider mSuggestionFeatureProvider; 104 private PowerUsageFeatureProvider mPowerUsageFeatureProvider; 105 private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider; 106 private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider; 107 private AssistGestureFeatureProvider mAssistGestureFeatureProvider; 108 private UserFeatureProvider mUserFeatureProvider; 109 private SlicesFeatureProvider mSlicesFeatureProvider; 110 private AccountFeatureProvider mAccountFeatureProvider; 111 private PanelFeatureProvider mPanelFeatureProvider; 112 private ContextualCardFeatureProvider mContextualCardFeatureProvider; 113 private BluetoothFeatureProvider mBluetoothFeatureProvider; 114 private AwareFeatureProvider mAwareFeatureProvider; 115 private FaceFeatureProvider mFaceFeatureProvider; 116 private BiometricsRepositoryProvider mBiometricsRepositoryProvider; 117 private WifiTrackerLibProvider mWifiTrackerLibProvider; 118 private SecuritySettingsFeatureProvider mSecuritySettingsFeatureProvider; 119 private AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider; 120 private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider; 121 private AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider; 122 private WifiFeatureProvider mWifiFeatureProvider; 123 private KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider; 124 private StylusFeatureProvider mStylusFeatureProvider; 125 126 @Override getHardwareInfoFeatureProvider()127 public HardwareInfoFeatureProvider getHardwareInfoFeatureProvider() { 128 return HardwareInfoFeatureProviderImpl.INSTANCE; 129 } 130 131 @Override getSupportFeatureProvider(Context context)132 public SupportFeatureProvider getSupportFeatureProvider(Context context) { 133 return null; 134 } 135 136 @Override getMetricsFeatureProvider()137 public MetricsFeatureProvider getMetricsFeatureProvider() { 138 if (mMetricsFeatureProvider == null) { 139 mMetricsFeatureProvider = new SettingsMetricsFeatureProvider(); 140 } 141 return mMetricsFeatureProvider; 142 } 143 144 @Override getPowerUsageFeatureProvider(Context context)145 public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { 146 if (mPowerUsageFeatureProvider == null) { 147 mPowerUsageFeatureProvider = new PowerUsageFeatureProviderImpl( 148 context.getApplicationContext()); 149 } 150 return mPowerUsageFeatureProvider; 151 } 152 153 @Override getBatteryStatusFeatureProvider(Context context)154 public BatteryStatusFeatureProvider getBatteryStatusFeatureProvider(Context context) { 155 if (mBatteryStatusFeatureProvider == null) { 156 mBatteryStatusFeatureProvider = new BatteryStatusFeatureProviderImpl( 157 context.getApplicationContext()); 158 } 159 return mBatteryStatusFeatureProvider; 160 } 161 162 @Override getBatterySettingsFeatureProvider()163 public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider() { 164 if (mBatterySettingsFeatureProvider == null) { 165 mBatterySettingsFeatureProvider = new BatterySettingsFeatureProviderImpl(); 166 } 167 return mBatterySettingsFeatureProvider; 168 } 169 170 @Override getDashboardFeatureProvider(Context context)171 public DashboardFeatureProvider getDashboardFeatureProvider(Context context) { 172 if (mDashboardFeatureProvider == null) { 173 mDashboardFeatureProvider = new DashboardFeatureProviderImpl( 174 context.getApplicationContext()); 175 } 176 return mDashboardFeatureProvider; 177 } 178 179 @Override getDockUpdaterFeatureProvider()180 public DockUpdaterFeatureProvider getDockUpdaterFeatureProvider() { 181 if (mDockUpdaterFeatureProvider == null) { 182 mDockUpdaterFeatureProvider = new DockUpdaterFeatureProviderImpl(); 183 } 184 return mDockUpdaterFeatureProvider; 185 } 186 187 @Override getApplicationFeatureProvider(Context context)188 public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) { 189 if (mApplicationFeatureProvider == null) { 190 final Context appContext = context.getApplicationContext(); 191 mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(appContext, 192 appContext.getPackageManager(), 193 AppGlobals.getPackageManager(), 194 (DevicePolicyManager) appContext 195 .getSystemService(Context.DEVICE_POLICY_SERVICE)); 196 } 197 return mApplicationFeatureProvider; 198 } 199 200 @Override getLocaleFeatureProvider()201 public LocaleFeatureProvider getLocaleFeatureProvider() { 202 if (mLocaleFeatureProvider == null) { 203 mLocaleFeatureProvider = new LocaleFeatureProviderImpl(); 204 } 205 return mLocaleFeatureProvider; 206 } 207 208 @Override getEnterprisePrivacyFeatureProvider(Context context)209 public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) { 210 if (mEnterprisePrivacyFeatureProvider == null) { 211 final Context appContext = context.getApplicationContext(); 212 mEnterprisePrivacyFeatureProvider = new EnterprisePrivacyFeatureProviderImpl(appContext, 213 (DevicePolicyManager) appContext.getSystemService( 214 Context.DEVICE_POLICY_SERVICE), 215 appContext.getPackageManager(), 216 UserManager.get(appContext), 217 appContext.getSystemService(ConnectivityManager.class), 218 appContext.getSystemService(VpnManager.class), 219 appContext.getResources()); 220 } 221 return mEnterprisePrivacyFeatureProvider; 222 } 223 224 @Override getSearchFeatureProvider()225 public SearchFeatureProvider getSearchFeatureProvider() { 226 if (mSearchFeatureProvider == null) { 227 mSearchFeatureProvider = new SearchFeatureProviderImpl(); 228 } 229 return mSearchFeatureProvider; 230 } 231 232 @Override getSurveyFeatureProvider(Context context)233 public SurveyFeatureProvider getSurveyFeatureProvider(Context context) { 234 return null; 235 } 236 237 @Override getSecurityFeatureProvider()238 public SecurityFeatureProvider getSecurityFeatureProvider() { 239 if (mSecurityFeatureProvider == null) { 240 mSecurityFeatureProvider = new SecurityFeatureProviderImpl(); 241 } 242 return mSecurityFeatureProvider; 243 } 244 245 @Override getSuggestionFeatureProvider()246 public SuggestionFeatureProvider getSuggestionFeatureProvider() { 247 if (mSuggestionFeatureProvider == null) { 248 mSuggestionFeatureProvider = new SuggestionFeatureProviderImpl(); 249 } 250 return mSuggestionFeatureProvider; 251 } 252 253 @Override getUserFeatureProvider(Context context)254 public UserFeatureProvider getUserFeatureProvider(Context context) { 255 if (mUserFeatureProvider == null) { 256 mUserFeatureProvider = new UserFeatureProviderImpl(context.getApplicationContext()); 257 } 258 return mUserFeatureProvider; 259 } 260 261 @Override getAssistGestureFeatureProvider()262 public AssistGestureFeatureProvider getAssistGestureFeatureProvider() { 263 if (mAssistGestureFeatureProvider == null) { 264 mAssistGestureFeatureProvider = new AssistGestureFeatureProviderImpl(); 265 } 266 return mAssistGestureFeatureProvider; 267 } 268 269 @Override getSlicesFeatureProvider()270 public SlicesFeatureProvider getSlicesFeatureProvider() { 271 if (mSlicesFeatureProvider == null) { 272 mSlicesFeatureProvider = new SlicesFeatureProviderImpl(); 273 } 274 return mSlicesFeatureProvider; 275 } 276 277 @Override getAccountFeatureProvider()278 public AccountFeatureProvider getAccountFeatureProvider() { 279 if (mAccountFeatureProvider == null) { 280 mAccountFeatureProvider = new AccountFeatureProviderImpl(); 281 } 282 return mAccountFeatureProvider; 283 } 284 285 @Override getPanelFeatureProvider()286 public PanelFeatureProvider getPanelFeatureProvider() { 287 if (mPanelFeatureProvider == null) { 288 mPanelFeatureProvider = new PanelFeatureProviderImpl(); 289 } 290 return mPanelFeatureProvider; 291 } 292 293 @Override getContextualCardFeatureProvider(Context context)294 public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) { 295 if (mContextualCardFeatureProvider == null) { 296 mContextualCardFeatureProvider = new ContextualCardFeatureProviderImpl( 297 context.getApplicationContext()); 298 } 299 return mContextualCardFeatureProvider; 300 } 301 302 @Override getBluetoothFeatureProvider()303 public BluetoothFeatureProvider getBluetoothFeatureProvider() { 304 if (mBluetoothFeatureProvider == null) { 305 mBluetoothFeatureProvider = new BluetoothFeatureProviderImpl(getAppContext()); 306 } 307 return mBluetoothFeatureProvider; 308 } 309 310 @Override getAwareFeatureProvider()311 public AwareFeatureProvider getAwareFeatureProvider() { 312 if (mAwareFeatureProvider == null) { 313 mAwareFeatureProvider = new AwareFeatureProviderImpl(); 314 } 315 return mAwareFeatureProvider; 316 } 317 318 @Override getFaceFeatureProvider()319 public FaceFeatureProvider getFaceFeatureProvider() { 320 if (mFaceFeatureProvider == null) { 321 mFaceFeatureProvider = new FaceFeatureProviderImpl(); 322 } 323 return mFaceFeatureProvider; 324 } 325 326 @Override getBiometricsRepositoryProvider()327 public BiometricsRepositoryProvider getBiometricsRepositoryProvider() { 328 if (mBiometricsRepositoryProvider == null) { 329 mBiometricsRepositoryProvider = new BiometricsRepositoryProviderImpl(); 330 } 331 return mBiometricsRepositoryProvider; 332 } 333 334 @Override getWifiTrackerLibProvider()335 public WifiTrackerLibProvider getWifiTrackerLibProvider() { 336 if (mWifiTrackerLibProvider == null) { 337 mWifiTrackerLibProvider = new WifiTrackerLibProviderImpl(); 338 } 339 return mWifiTrackerLibProvider; 340 } 341 342 @Override getSecuritySettingsFeatureProvider()343 public SecuritySettingsFeatureProvider getSecuritySettingsFeatureProvider() { 344 if (mSecuritySettingsFeatureProvider == null) { 345 mSecuritySettingsFeatureProvider = new SecuritySettingsFeatureProviderImpl(); 346 } 347 return mSecuritySettingsFeatureProvider; 348 } 349 350 @Override getAccessibilitySearchFeatureProvider()351 public AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider() { 352 if (mAccessibilitySearchFeatureProvider == null) { 353 mAccessibilitySearchFeatureProvider = new AccessibilitySearchFeatureProviderImpl(); 354 } 355 return mAccessibilitySearchFeatureProvider; 356 } 357 358 @Override getAccessibilityMetricsFeatureProvider()359 public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() { 360 if (mAccessibilityMetricsFeatureProvider == null) { 361 mAccessibilityMetricsFeatureProvider = new AccessibilityMetricsFeatureProviderImpl(); 362 } 363 return mAccessibilityMetricsFeatureProvider; 364 } 365 366 @Override getAdvancedVpnFeatureProvider()367 public AdvancedVpnFeatureProvider getAdvancedVpnFeatureProvider() { 368 if (mAdvancedVpnFeatureProvider == null) { 369 mAdvancedVpnFeatureProvider = new AdvancedVpnFeatureProviderImpl(); 370 } 371 return mAdvancedVpnFeatureProvider; 372 } 373 374 @Override getWifiFeatureProvider()375 public WifiFeatureProvider getWifiFeatureProvider() { 376 if (mWifiFeatureProvider == null) { 377 mWifiFeatureProvider = new WifiFeatureProvider(getAppContext()); 378 } 379 return mWifiFeatureProvider; 380 } 381 382 @Override getKeyboardSettingsFeatureProvider()383 public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() { 384 if (mKeyboardSettingsFeatureProvider == null) { 385 mKeyboardSettingsFeatureProvider = new KeyboardSettingsFeatureProviderImpl(); 386 } 387 return mKeyboardSettingsFeatureProvider; 388 } 389 390 @Override getStylusFeatureProvider()391 public StylusFeatureProvider getStylusFeatureProvider() { 392 if (mStylusFeatureProvider == null) { 393 mStylusFeatureProvider = new StylusFeatureProviderImpl(); 394 } 395 return mStylusFeatureProvider; 396 } 397 } 398