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.overlay 17 18 import android.content.Context 19 import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider 20 import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider 21 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider 22 import com.android.settings.accounts.AccountFeatureProvider 23 import com.android.settings.applications.ApplicationFeatureProvider 24 import com.android.settings.biometrics.BiometricsFeatureProvider 25 import com.android.settings.biometrics.face.FaceFeatureProvider 26 import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider 27 import com.android.settings.bluetooth.BluetoothFeatureProvider 28 import com.android.settings.connecteddevice.audiosharing.AudioSharingFeatureProvider 29 import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider 30 import com.android.settings.connecteddevice.stylus.StylusFeatureProvider 31 import com.android.settings.dashboard.DashboardFeatureProvider 32 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider 33 import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider 34 import com.android.settings.display.DisplayFeatureProvider 35 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider 36 import com.android.settings.fuelgauge.BatterySettingsFeatureProvider 37 import com.android.settings.fuelgauge.BatteryStatusFeatureProvider 38 import com.android.settings.fuelgauge.PowerUsageFeatureProvider 39 import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider 40 import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider 41 import com.android.settings.localepicker.LocaleFeatureProvider 42 import com.android.settings.notification.syncacrossdevices.SyncAcrossDevicesFeatureProvider 43 import com.android.settings.onboarding.OnboardingFeatureProvider 44 import com.android.settings.overlay.FeatureFactory.Companion.setFactory 45 import com.android.settings.panel.PanelFeatureProvider 46 import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider 47 import com.android.settings.search.SearchFeatureProvider 48 import com.android.settings.security.SecurityFeatureProvider 49 import com.android.settings.security.SecuritySettingsFeatureProvider 50 import com.android.settings.slices.SlicesFeatureProvider 51 import com.android.settings.users.UserFeatureProvider 52 import com.android.settings.vpn2.AdvancedVpnFeatureProvider 53 import com.android.settings.wifi.WifiTrackerLibProvider 54 import com.android.settings.wifi.factory.WifiFeatureProvider 55 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider 56 57 /** 58 * Abstract class for creating feature controllers. 59 * 60 * Allows OEM implementations to define their own factories with their own controllers containing 61 * whatever code is needed to implement the features. 62 * To provide a factory implementation, implementors should call [setFactory] in their Application. 63 */ 64 abstract class FeatureFactory { 65 /** 66 * Gets implementation for the Suggestion Feature provider. 67 */ 68 abstract val suggestionFeatureProvider: SuggestionFeatureProvider 69 70 /** 71 * Retrieves implementation for Hardware Info feature. 72 */ 73 open val hardwareInfoFeatureProvider: HardwareInfoFeatureProvider? = null 74 75 /** Implementation for [SupportFeatureProvider]. */ 76 open val supportFeatureProvider: SupportFeatureProvider? = null 77 78 abstract val metricsFeatureProvider: MetricsFeatureProvider 79 80 abstract val powerUsageFeatureProvider: PowerUsageFeatureProvider 81 82 /** 83 * Retrieves implementation for Battery Status feature. 84 */ 85 abstract val batteryStatusFeatureProvider: BatteryStatusFeatureProvider 86 87 /** 88 * Gets implementation for Battery Settings provider. 89 */ 90 abstract val batterySettingsFeatureProvider: BatterySettingsFeatureProvider 91 92 abstract val dashboardFeatureProvider: DashboardFeatureProvider 93 abstract val dockUpdaterFeatureProvider: DockUpdaterFeatureProvider 94 abstract val applicationFeatureProvider: ApplicationFeatureProvider 95 abstract val localeFeatureProvider: LocaleFeatureProvider 96 97 abstract val enterprisePrivacyFeatureProvider: EnterprisePrivacyFeatureProvider 98 99 abstract val searchFeatureProvider: SearchFeatureProvider getSurveyFeatureProvidernull100 abstract fun getSurveyFeatureProvider(context: Context): SurveyFeatureProvider? 101 abstract val securityFeatureProvider: SecurityFeatureProvider 102 abstract val userFeatureProvider: UserFeatureProvider 103 abstract val slicesFeatureProvider: SlicesFeatureProvider 104 abstract val accountFeatureProvider: AccountFeatureProvider 105 abstract val panelFeatureProvider: PanelFeatureProvider 106 abstract fun getContextualCardFeatureProvider(context: Context): ContextualCardFeatureProvider 107 108 /** 109 * Retrieves implementation for Bluetooth feature. 110 */ 111 abstract val bluetoothFeatureProvider: BluetoothFeatureProvider 112 113 /** 114 * Retrieves implementation for Biometrics feature. 115 */ 116 abstract val biometricsFeatureProvider: BiometricsFeatureProvider 117 118 /** 119 * Retrieves implementation for Face feature. 120 */ 121 abstract val faceFeatureProvider: FaceFeatureProvider 122 123 /** 124 * Retrieves implementation for Fingerprint feature. 125 */ 126 abstract val fingerprintFeatureProvider: FingerprintFeatureProvider 127 128 /** 129 * Gets implementation for the WifiTrackerLib. 130 */ 131 abstract val wifiTrackerLibProvider: WifiTrackerLibProvider 132 133 /** 134 * Retrieves implementation for SecuritySettings feature. 135 */ 136 abstract val securitySettingsFeatureProvider: SecuritySettingsFeatureProvider 137 138 /** 139 * Retrieves implementation for Accessibility feedback category feature. 140 */ 141 abstract val accessibilityFeedbackFeatureProvider: AccessibilityFeedbackFeatureProvider 142 143 /** 144 * Retrieves implementation for Accessibility search index feature. 145 */ 146 abstract val accessibilitySearchFeatureProvider: AccessibilitySearchFeatureProvider 147 148 /** 149 * Retrieves implementation for Accessibility page id category feature. 150 */ 151 abstract val accessibilityPageIdFeatureProvider: AccessibilityPageIdFeatureProvider 152 153 /** 154 * Retrieves implementation for advanced vpn feature. 155 */ 156 abstract val advancedVpnFeatureProvider: AdvancedVpnFeatureProvider 157 158 /** 159 * Retrieves implementation for Wi-Fi feature. 160 */ 161 abstract val wifiFeatureProvider: WifiFeatureProvider 162 163 /** 164 * Retrieves implementation for keyboard settings feature. 165 */ 166 abstract val keyboardSettingsFeatureProvider: KeyboardSettingsFeatureProvider 167 168 /** 169 * Retrieves implementation for stylus feature. 170 */ 171 abstract val stylusFeatureProvider: StylusFeatureProvider 172 173 /** 174 * Retrieves implementation for Onboarding related feature. 175 */ 176 open val onboardingFeatureProvider: OnboardingFeatureProvider? = null 177 178 /** 179 * Gets implementation for Fast Pair device updater provider. 180 */ 181 abstract val fastPairFeatureProvider: FastPairFeatureProvider 182 183 /** 184 * Gets implementation for audio sharing related feature. 185 */ 186 abstract val audioSharingFeatureProvider: AudioSharingFeatureProvider 187 188 /** 189 * Gets implementation for Private Space account login feature. 190 */ 191 abstract val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider 192 193 /** 194 * Gets implementation for Display feature. 195 */ 196 abstract val displayFeatureProvider: DisplayFeatureProvider 197 198 /** 199 * Gets implementation for sync across devices related feature. 200 */ 201 abstract val syncAcrossDevicesFeatureProvider: SyncAcrossDevicesFeatureProvider 202 203 companion object { 204 private var _factory: FeatureFactory? = null 205 206 /** Returns a factory for creating feature controllers. */ 207 @JvmStatic 208 val featureFactory: FeatureFactory 209 get() = _factory ?: throw UnsupportedOperationException("No feature factory configured") 210 211 private var _appContext: Context? = null 212 213 /** Returns an application [Context] used to create this [FeatureFactory]. */ 214 @JvmStatic 215 val appContext: Context 216 get() = _appContext 217 ?: throw UnsupportedOperationException("No feature factory configured") 218 219 @JvmStatic 220 fun setFactory(appContext: Context, factory: FeatureFactory) { 221 _appContext = appContext 222 _factory = factory 223 } 224 } 225 } 226