1 /* 2 * Copyright (C) 2024 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.server.healthconnect.injector; 18 19 import android.health.HealthFitnessStatsLog; 20 import android.health.connect.internal.datatypes.utils.HealthConnectMappings; 21 22 import androidx.annotation.Nullable; 23 import androidx.annotation.VisibleForTesting; 24 25 import com.android.server.appop.AppOpsManagerLocal; 26 import com.android.server.healthconnect.HealthConnectThreadScheduler; 27 import com.android.server.healthconnect.backuprestore.BackupRestore; 28 import com.android.server.healthconnect.exportimport.ExportManager; 29 import com.android.server.healthconnect.fitness.FitnessRecordDeleteHelper; 30 import com.android.server.healthconnect.fitness.FitnessRecordReadHelper; 31 import com.android.server.healthconnect.fitness.FitnessRecordUpsertHelper; 32 import com.android.server.healthconnect.fitness.aggregation.FitnessRecordAggregateHelper; 33 import com.android.server.healthconnect.logging.BackupRestoreLogger; 34 import com.android.server.healthconnect.logging.ExportImportLogger; 35 import com.android.server.healthconnect.logging.UsageStatsCollector; 36 import com.android.server.healthconnect.migration.MigrationBroadcastScheduler; 37 import com.android.server.healthconnect.migration.MigrationCleaner; 38 import com.android.server.healthconnect.migration.MigrationStateManager; 39 import com.android.server.healthconnect.migration.MigrationUiStateManager; 40 import com.android.server.healthconnect.migration.PriorityMigrationHelper; 41 import com.android.server.healthconnect.notifications.HealthConnectNotificationSender; 42 import com.android.server.healthconnect.permission.FirstGrantTimeManager; 43 import com.android.server.healthconnect.permission.HealthConnectPermissionHelper; 44 import com.android.server.healthconnect.permission.HealthPermissionIntentAppsTracker; 45 import com.android.server.healthconnect.permission.PackageInfoUtils; 46 import com.android.server.healthconnect.permission.PermissionPackageChangesOrchestrator; 47 import com.android.server.healthconnect.storage.DailyCleanupJob; 48 import com.android.server.healthconnect.storage.ExportImportSettingsStorage; 49 import com.android.server.healthconnect.storage.HealthConnectContext; 50 import com.android.server.healthconnect.storage.TransactionManager; 51 import com.android.server.healthconnect.storage.datatypehelpers.AccessLogsHelper; 52 import com.android.server.healthconnect.storage.datatypehelpers.ActivityDateHelper; 53 import com.android.server.healthconnect.storage.datatypehelpers.AppInfoHelper; 54 import com.android.server.healthconnect.storage.datatypehelpers.ChangeLogsHelper; 55 import com.android.server.healthconnect.storage.datatypehelpers.ChangeLogsRequestHelper; 56 import com.android.server.healthconnect.storage.datatypehelpers.DatabaseHelper.DatabaseHelpers; 57 import com.android.server.healthconnect.storage.datatypehelpers.DatabaseStatsCollector; 58 import com.android.server.healthconnect.storage.datatypehelpers.DeviceInfoHelper; 59 import com.android.server.healthconnect.storage.datatypehelpers.HealthDataCategoryPriorityHelper; 60 import com.android.server.healthconnect.storage.datatypehelpers.MedicalDataSourceHelper; 61 import com.android.server.healthconnect.storage.datatypehelpers.MedicalResourceHelper; 62 import com.android.server.healthconnect.storage.datatypehelpers.MigrationEntityHelper; 63 import com.android.server.healthconnect.storage.datatypehelpers.PreferenceHelper; 64 import com.android.server.healthconnect.storage.datatypehelpers.ReadAccessLogsHelper; 65 import com.android.server.healthconnect.storage.utils.InternalHealthConnectMappings; 66 import com.android.server.healthconnect.storage.utils.PreferencesManager; 67 import com.android.server.healthconnect.tracker.TrackerManager; 68 import com.android.server.healthconnect.utils.TimeSource; 69 70 import java.io.File; 71 72 /** 73 * Interface for Health Connect Dependency Injector. 74 * 75 * @hide 76 */ 77 public abstract class HealthConnectInjector { 78 79 @Nullable private static HealthConnectInjector sHealthConnectInjector; 80 81 /** Getter for {@link PackageInfoUtils} instance initialised by the Health Connect Injector. */ getPackageInfoUtils()82 public abstract PackageInfoUtils getPackageInfoUtils(); 83 84 /** 85 * Getter for {@link TransactionManager} instance initialised by the Health Connect Injector. 86 */ getTransactionManager()87 public abstract TransactionManager getTransactionManager(); 88 89 /** 90 * Getter for {@link HealthDataCategoryPriorityHelper} instance initialised by the Health 91 * Connect Injector. 92 */ getHealthDataCategoryPriorityHelper()93 public abstract HealthDataCategoryPriorityHelper getHealthDataCategoryPriorityHelper(); 94 95 /** 96 * Getter for {@link PriorityMigrationHelper} instance initialised by the Health Connect 97 * Injector. 98 */ getPriorityMigrationHelper()99 public abstract PriorityMigrationHelper getPriorityMigrationHelper(); 100 101 /** Getter for {@link PreferenceHelper} instance initialised by the Health Connect Injector. */ getPreferenceHelper()102 public abstract PreferenceHelper getPreferenceHelper(); 103 104 /** 105 * Getter for {@link ExportImportSettingsStorage} instance initialised by the Health Connect 106 * Injector. 107 */ getExportImportSettingsStorage()108 public abstract ExportImportSettingsStorage getExportImportSettingsStorage(); 109 110 /** Getter for {@link ExportManager} instance initialised by the Health Connect Injector. */ getExportManager()111 public abstract ExportManager getExportManager(); 112 113 /** 114 * Getter for {@link MigrationStateManager} instance initialised by the Health Connect Injector. 115 */ getMigrationStateManager()116 public abstract MigrationStateManager getMigrationStateManager(); 117 118 /** Getter for {@link DeviceInfoHelper} instance initialised by the Health Connect Injector. */ getDeviceInfoHelper()119 public abstract DeviceInfoHelper getDeviceInfoHelper(); 120 121 /** Getter for {@link AppInfoHelper} instance initialised by the Health Connect Injector. */ getAppInfoHelper()122 public abstract AppInfoHelper getAppInfoHelper(); 123 124 /** Getter for {@link AccessLogsHelper} instance initialised by the Health Connect Injector. */ getAccessLogsHelper()125 public abstract AccessLogsHelper getAccessLogsHelper(); 126 127 /** 128 * Getter for {@link ActivityDateHelper} instance initialised by the Health Connect Injector. 129 */ getActivityDateHelper()130 public abstract ActivityDateHelper getActivityDateHelper(); 131 132 /** Getter for {@link ChangeLogsHelper} instance initialised by the Health Connect Injector. */ getChangeLogsHelper()133 public abstract ChangeLogsHelper getChangeLogsHelper(); 134 135 /** 136 * Getter for {@link ChangeLogsRequestHelper} instance initialised by the Health Connect 137 * Injector. 138 */ getChangeLogsRequestHelper()139 public abstract ChangeLogsRequestHelper getChangeLogsRequestHelper(); 140 141 /** 142 * Returns an instance of {@link HealthConnectMappings} initialised by the Health Connect 143 * Injector. 144 */ getHealthConnectMappings()145 public abstract HealthConnectMappings getHealthConnectMappings(); 146 147 /** 148 * Returns an instance of {@link InternalHealthConnectMappings} initialised by the Health 149 * Connect Injector. 150 */ getInternalHealthConnectMappings()151 public abstract InternalHealthConnectMappings getInternalHealthConnectMappings(); 152 153 /** 154 * Getter for {@link FirstGrantTimeManager} instance initialised by the Health Connect Injector. 155 */ getFirstGrantTimeManager()156 public abstract FirstGrantTimeManager getFirstGrantTimeManager(); 157 158 /** 159 * Getter for {@link HealthPermissionIntentAppsTracker} instance initialised by the Health 160 * Connect Injector. 161 */ getHealthPermissionIntentAppsTracker()162 public abstract HealthPermissionIntentAppsTracker getHealthPermissionIntentAppsTracker(); 163 164 /** 165 * Getter for {@link PermissionPackageChangesOrchestrator} instance initialised by the Health 166 * Connect Injector. 167 */ getPermissionPackageChangesOrchestrator()168 public abstract PermissionPackageChangesOrchestrator getPermissionPackageChangesOrchestrator(); 169 170 /** 171 * Getter for {@link HealthConnectPermissionHelper} instance initialised by the Health Connect 172 * Injector. 173 */ getHealthConnectPermissionHelper()174 public abstract HealthConnectPermissionHelper getHealthConnectPermissionHelper(); 175 176 /** Getter for {@link MigrationCleaner} instance initialised by the Health Connect Injector. */ getMigrationCleaner()177 public abstract MigrationCleaner getMigrationCleaner(); 178 179 /** 180 * Getter for {@link FitnessRecordUpsertHelper} instance initialised by the Health Connect 181 * Injector. 182 */ getFitnessRecordUpsertHelper()183 public abstract FitnessRecordUpsertHelper getFitnessRecordUpsertHelper(); 184 185 /** 186 * Getter for {@link FitnessRecordReadHelper} instance initialised by the Health Connect 187 * Injector. 188 */ getFitnessRecordReadHelper()189 public abstract FitnessRecordReadHelper getFitnessRecordReadHelper(); 190 191 /** 192 * Getter for {@link FitnessRecordDeleteHelper} instance initialised by the Health Connect 193 * Injector. 194 */ getFitnessRecordDeleteHelper()195 public abstract FitnessRecordDeleteHelper getFitnessRecordDeleteHelper(); 196 197 /** 198 * Getter for {@link FitnessRecordAggregateHelper} instance initialised by the Health Connect 199 * Injector. 200 */ getFitnessRecordAggregateHelper()201 public abstract FitnessRecordAggregateHelper getFitnessRecordAggregateHelper(); 202 203 /** 204 * Getter for {@link MedicalResourceHelper} instance initialised by the Health Connect Injector. 205 */ getMedicalResourceHelper()206 public abstract MedicalResourceHelper getMedicalResourceHelper(); 207 208 /** 209 * Getter for {@link MedicalDataSourceHelper} instance initialised by the Health Connect 210 * Injector. 211 */ getMedicalDataSourceHelper()212 public abstract MedicalDataSourceHelper getMedicalDataSourceHelper(); 213 214 /** Getter for {@link TimeSource} instance initialised by the Health Connect Injector. */ getTimeSource()215 public abstract TimeSource getTimeSource(); 216 217 /** 218 * Getter for {@link MigrationBroadcastScheduler} instance initialised by the Health Connect 219 * Injector. 220 */ getMigrationBroadcastScheduler()221 public abstract MigrationBroadcastScheduler getMigrationBroadcastScheduler(); 222 223 /** 224 * Getter for {@link MigrationUiStateManager} instance initialised by the Health Connect 225 * Injector. 226 */ getMigrationUiStateManager()227 public abstract MigrationUiStateManager getMigrationUiStateManager(); 228 229 /** Getter for {@link DatabaseHelpers} instance initialised by the Health Connect Injector. */ getDatabaseHelpers()230 public abstract DatabaseHelpers getDatabaseHelpers(); 231 232 /** 233 * Getter for {@link MigrationEntityHelper} instance initialised by the Health Connect Injector. 234 */ getMigrationEntityHelper()235 public abstract MigrationEntityHelper getMigrationEntityHelper(); 236 237 /** Getter for {@link BackupRestore} instance initialised by the Health Connect Injector. */ getBackupRestore()238 public abstract BackupRestore getBackupRestore(); 239 240 /** 241 * Getter for {@link PreferencesManager} instance initialised by the Health Connect Injector. 242 */ getPreferencesManager()243 public abstract PreferencesManager getPreferencesManager(); 244 245 /** Getter for {@link DailyCleanupJob} instance initialised by the Health Connect Injector. */ getDailyCleanupJob()246 public abstract DailyCleanupJob getDailyCleanupJob(); 247 248 /** 249 * Getter for {@link DatabaseStatsCollector} instance initialised by the Health Connect 250 * Injector. 251 */ getDatabaseStatsCollector()252 public abstract DatabaseStatsCollector getDatabaseStatsCollector(); 253 254 /** 255 * Getter for {@link UsageStatsCollector} instance initialised by the Health Connect Injector. 256 */ getUsageStatsCollector(HealthConnectContext hcContext)257 public abstract UsageStatsCollector getUsageStatsCollector(HealthConnectContext hcContext); 258 259 /** 260 * Getter for {@link ReadAccessLogsHelper} instance initialised by the Health Connect Injector. 261 */ getReadAccessLogsHelper()262 public abstract ReadAccessLogsHelper getReadAccessLogsHelper(); 263 264 /** 265 * Getter for {@link HealthConnectNotificationSender} instance for export or import initialised 266 * by the Health Connect Injector. 267 */ getExportImportNotificationSender()268 public abstract HealthConnectNotificationSender getExportImportNotificationSender(); 269 270 /** 271 * Getter for {@link AppOpsManagerLocal} instance initialised by the Health Connect Injector. 272 */ getAppOpsManagerLocal()273 public abstract AppOpsManagerLocal getAppOpsManagerLocal(); 274 275 /** 276 * Getter for {@link HealthConnectThreadScheduler} instance initialised by the Health Connect 277 * Injector. 278 */ getThreadScheduler()279 public abstract HealthConnectThreadScheduler getThreadScheduler(); 280 281 /** 282 * Getter for {@link File} instance representing root directory where Health Connect data should 283 * be stored. Use this instead of {@link Environment#getDataDirectory}. 284 */ getEnvironmentDataDirectory()285 public abstract File getEnvironmentDataDirectory(); 286 287 /** 288 * Getter for {@link HealthFitnessStatsLog} instance initialised by the Health Connect Injector. 289 */ getHealthFitnessStatsLog()290 public abstract HealthFitnessStatsLog getHealthFitnessStatsLog(); 291 292 /** 293 * Getter for {@link ExportImportLogger} instance initialised by the Health Connect Injector. 294 */ getExportImportLogger()295 public abstract ExportImportLogger getExportImportLogger(); 296 297 /** 298 * Getter for {@link BackupRestoreLogger} instance initialised by the Health Connect Injector. 299 */ getBackupRestoreLogger()300 public abstract BackupRestoreLogger getBackupRestoreLogger(); 301 302 /** Getter for {@link TrackerManager} instance initialised by the Health Connect Injector. */ getTrackerManager()303 public abstract TrackerManager getTrackerManager(); 304 305 /** Used to initialize the Injector. */ setInstance(HealthConnectInjector healthConnectInjector)306 public static void setInstance(HealthConnectInjector healthConnectInjector) { 307 if (sHealthConnectInjector != null) { 308 throw new IllegalStateException( 309 "An instance of injector has already been initialized."); 310 } 311 sHealthConnectInjector = healthConnectInjector; 312 } 313 314 /** 315 * Used to getInstance of the Injector so that it can be used statically by other base services. 316 */ getInstance()317 public static HealthConnectInjector getInstance() { 318 if (sHealthConnectInjector == null) { 319 throw new IllegalStateException( 320 "Please initialize an instance of injector and call setInstance."); 321 } 322 return sHealthConnectInjector; 323 } 324 325 /** Used to reset instance of the Injector for testing. */ 326 @VisibleForTesting resetInstanceForTest()327 public static void resetInstanceForTest() { 328 sHealthConnectInjector = null; 329 } 330 } 331