• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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