• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.ondevicepersonalization.services;
18 
19 import static com.android.ondevicepersonalization.services.FlagsConstants.APP_INSTALL_HISTORY_TTL;
20 import static com.android.ondevicepersonalization.services.FlagsConstants.EXECUTE_BEST_VALUE_NOISE;
21 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS;
22 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_HTTP_RETRY_LIMIT;
23 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_HTTP_TIMEOUT_SECONDS;
24 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS;
25 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_PATH;
26 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_THRESHOLD;
27 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORT_TTL_DAYS;
28 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING;
29 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_APP_REQUEST_FLOW_DEADLINE_SECONDS;
30 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_CALLER_APP_ALLOW_LIST;
31 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_DOWNLOAD_FLOW_DEADLINE_SECONDS;
32 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENABLE_AGGREGATED_ERROR_REPORTING;
33 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENABLE_PERSONALIZATION_STATUS_OVERRIDE;
34 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENCRYPTION_KEY_MAX_AGE_SECONDS;
35 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENCRYPTION_KEY_URL;
36 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_EXAMPLE_STORE_FLOW_DEADLINE_SECONDS;
37 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_GLOBAL_KILL_SWITCH;
38 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ISOLATED_SERVICE_ALLOW_LIST;
39 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ISOLATED_SERVICE_DEADLINE_SECONDS;
40 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ISOLATED_SERVICE_DEBUGGING_ENABLED;
41 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED;
42 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_IS_FEATURE_ENABLED_API_ENABLED;
43 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_LOG_ISOLATED_SERVICE_ERROR_CODE_NON_AGGREGATED_ALLOWLIST;
44 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOB_SAMPLING_LOGGING_RATE;
45 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_ENABLE_CLIENT_ERROR_LOGGING;
46 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_JOB_SCHEDULING_LOGGING_ENABLED;
47 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_JOB_SCHEDULING_LOGGING_SAMPLING_RATE;
48 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_MODULE_JOB_POLICY;
49 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_SPE_PILOT_JOB_ENABLED;
50 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_OUTPUT_DATA_ALLOW_LIST;
51 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_PERSONALIZATION_STATUS_OVERRIDE_VALUE;
52 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_PLATFORM_DATA_FOR_EXECUTE_ALLOWLIST;
53 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_PLATFORM_DATA_FOR_TRAINING_ALLOWLIST;
54 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_PLUGIN_PROCESS_RUNNER_ENABLED;
55 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_RENDER_FLOW_DEADLINE_SECONDS;
56 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_RESET_DATA_DEADLINE_SECONDS;
57 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_RESET_DATA_DELAY_SECONDS;
58 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED;
59 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB;
60 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB;
61 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB;
62 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB;
63 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB;
64 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_TRUSTED_PARTNER_APPS_LIST;
65 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_USER_CONTROL_CACHE_IN_MILLIS;
66 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_WEB_TRIGGER_FLOW_DEADLINE_SECONDS;
67 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_WEB_VIEW_FLOW_DEADLINE_SECONDS;
68 import static com.android.ondevicepersonalization.services.FlagsConstants.MAX_INT_VALUES_LIMIT;
69 
70 import android.annotation.NonNull;
71 import android.provider.DeviceConfig;
72 
73 import com.android.modules.utils.build.SdkLevel;
74 
75 import java.util.HashMap;
76 import java.util.Map;
77 
78 /** Flags Implementation that delegates to DeviceConfig. */
79 public final class PhFlags implements Flags {
80 
81     // OnDevicePersonalization Namespace String from DeviceConfig class
82     public static final String NAMESPACE_ON_DEVICE_PERSONALIZATION = "on_device_personalization";
83 
84     private final Map<String, Object> mStableFlags = new HashMap<>();
85 
PhFlags()86     PhFlags() {}
87 
88     /** Returns the singleton instance of the PhFlags. */
89     @NonNull
getInstance()90     public static PhFlags getInstance() {
91         return PhFlagsLazyInstanceHolder.sSingleton;
92     }
93 
94     private static class PhFlagsLazyInstanceHolder {
95         private static final PhFlags sSingleton = new PhFlags();
96     }
97 
98     // Group of All Killswitches
99     @Override
getGlobalKillSwitch()100     public boolean getGlobalKillSwitch() {
101         // The priority of applying the flag values: PH (DeviceConfig), then hard-coded value.
102         return DeviceConfig.getBoolean(
103                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
104                 /* name= */ KEY_GLOBAL_KILL_SWITCH,
105                 /* defaultValue= */ GLOBAL_KILL_SWITCH);
106     }
107 
108     @Override
isPersonalizationStatusOverrideEnabled()109     public boolean isPersonalizationStatusOverrideEnabled() {
110         if (getGlobalKillSwitch()) {
111             return false;
112         }
113         // The priority of applying the flag values: PH (DeviceConfig), then user hard-coded value.
114         return DeviceConfig.getBoolean(
115                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
116                 /* name= */ KEY_ENABLE_PERSONALIZATION_STATUS_OVERRIDE,
117                 /* defaultValue= */ ENABLE_PERSONALIZATION_STATUS_OVERRIDE);
118     }
119 
120     @Override
getPersonalizationStatusOverrideValue()121     public boolean getPersonalizationStatusOverrideValue() {
122         if (getGlobalKillSwitch()) {
123             return false;
124         }
125         return DeviceConfig.getBoolean(
126                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
127                 /* name= */ KEY_PERSONALIZATION_STATUS_OVERRIDE_VALUE,
128                 /* defaultValue= */ PERSONALIZATION_STATUS_OVERRIDE_VALUE);
129     }
130 
131     @Override
getIsolatedServiceDeadlineSeconds()132     public int getIsolatedServiceDeadlineSeconds() {
133         return DeviceConfig.getInt(
134                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
135                 /* name= */ KEY_ISOLATED_SERVICE_DEADLINE_SECONDS,
136                 /* defaultValue= */ ISOLATED_SERVICE_DEADLINE_SECONDS);
137     }
138 
139     @Override
getAppRequestFlowDeadlineSeconds()140     public int getAppRequestFlowDeadlineSeconds() {
141         return DeviceConfig.getInt(
142                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
143                 /* name= */ KEY_APP_REQUEST_FLOW_DEADLINE_SECONDS,
144                 /* defaultValue= */ APP_REQUEST_FLOW_DEADLINE_SECONDS);
145     }
146 
147     @Override
getRenderFlowDeadlineSeconds()148     public int getRenderFlowDeadlineSeconds() {
149         return DeviceConfig.getInt(
150                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
151                 /* name= */ KEY_RENDER_FLOW_DEADLINE_SECONDS,
152                 /* defaultValue= */ RENDER_FLOW_DEADLINE_SECONDS);
153     }
154 
155     @Override
getWebViewFlowDeadlineSeconds()156     public int getWebViewFlowDeadlineSeconds() {
157         return DeviceConfig.getInt(
158                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
159                 /* name= */ KEY_WEB_VIEW_FLOW_DEADLINE_SECONDS,
160                 /* defaultValue= */ WEB_VIEW_FLOW_DEADLINE_SECONDS);
161     }
162 
163     @Override
getWebTriggerFlowDeadlineSeconds()164     public int getWebTriggerFlowDeadlineSeconds() {
165         return DeviceConfig.getInt(
166                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
167                 /* name= */ KEY_WEB_TRIGGER_FLOW_DEADLINE_SECONDS,
168                 /* defaultValue= */ WEB_TRIGGER_FLOW_DEADLINE_SECONDS);
169     }
170 
171     @Override
getExampleStoreFlowDeadlineSeconds()172     public int getExampleStoreFlowDeadlineSeconds() {
173         return DeviceConfig.getInt(
174                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
175                 /* name= */ KEY_EXAMPLE_STORE_FLOW_DEADLINE_SECONDS,
176                 /* defaultValue= */ EXAMPLE_STORE_FLOW_DEADLINE_SECONDS);
177     }
178 
179     @Override
getDownloadFlowDeadlineSeconds()180     public int getDownloadFlowDeadlineSeconds() {
181         return DeviceConfig.getInt(
182                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
183                 /* name= */ KEY_DOWNLOAD_FLOW_DEADLINE_SECONDS,
184                 /* defaultValue= */ DOWNLOAD_FLOW_DEADLINE_SECONDS);
185     }
186 
187     @Override
getTrustedPartnerAppsList()188     public String getTrustedPartnerAppsList() {
189         return SdkLevel.isAtLeastU()
190                 ? DeviceConfig.getString(
191                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
192                 /* name= */ KEY_TRUSTED_PARTNER_APPS_LIST,
193                 /* defaultValue */ DEFAULT_TRUSTED_PARTNER_APPS_LIST)
194                 : "";
195     }
196 
197     @Override
isSharedIsolatedProcessFeatureEnabled()198     public boolean isSharedIsolatedProcessFeatureEnabled() {
199         return SdkLevel.isAtLeastU() && DeviceConfig.getBoolean(
200                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
201                 /* name= */ KEY_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED,
202                 /* defaultValue= */ DEFAULT_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED);
203     }
204 
205     @Override
isIsolatedServiceDebuggingEnabled()206     public boolean isIsolatedServiceDebuggingEnabled() {
207         return DeviceConfig.getBoolean(
208                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
209                 /* name= */ KEY_ISOLATED_SERVICE_DEBUGGING_ENABLED,
210                 /* defaultValue= */ DEFAULT_ISOLATED_SERVICE_DEBUGGING_ENABLED);
211     }
212 
213     @Override
getCallerAppAllowList()214     public String getCallerAppAllowList() {
215         return DeviceConfig.getString(
216                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
217                 /* name= */ KEY_CALLER_APP_ALLOW_LIST,
218                 /* defaultValue= */ DEFAULT_CALLER_APP_ALLOW_LIST);
219     }
220 
221     @Override
getIsolatedServiceAllowList()222     public String getIsolatedServiceAllowList() {
223         return DeviceConfig.getString(
224                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
225                 /* name= */ KEY_ISOLATED_SERVICE_ALLOW_LIST,
226                 /* defaultValue= */ DEFAULT_ISOLATED_SERVICE_ALLOW_LIST);
227     }
228 
229     @Override
getOutputDataAllowList()230     public String getOutputDataAllowList() {
231         return DeviceConfig.getString(
232                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
233                 /* name */ KEY_OUTPUT_DATA_ALLOW_LIST,
234                 /* defaultValue */ DEFAULT_OUTPUT_DATA_ALLOW_LIST);
235     }
236 
237     @Override
getUserControlCacheInMillis()238     public long getUserControlCacheInMillis() {
239         return DeviceConfig.getLong(
240                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
241                 /* name= */ KEY_USER_CONTROL_CACHE_IN_MILLIS,
242                 /* defaultValue= */ USER_CONTROL_CACHE_IN_MILLIS);
243     }
244 
245     @Override
getEnableClientErrorLogging()246     public boolean getEnableClientErrorLogging() {
247         return DeviceConfig.getBoolean(
248                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
249                 /* name= */ KEY_ODP_ENABLE_CLIENT_ERROR_LOGGING,
250                 /* defaultValue= */ DEFAULT_CLIENT_ERROR_LOGGING_ENABLED);
251     }
252 
253 
254     /**
255      * {@inheritDoc}
256      *
257      * <p>This method always return {@code true} because the underlying flag is fully launched on
258      * {@code OnDevicePersonalization} but the method cannot be removed (as it's defined on {@code
259      * ModuleSharedFlags}).
260      */
261     @Override
getBackgroundJobsLoggingEnabled()262     public boolean getBackgroundJobsLoggingEnabled() {
263         return true;
264     }
265 
266     @Override
getBackgroundJobSamplingLoggingRate()267     public int getBackgroundJobSamplingLoggingRate() {
268         return DeviceConfig.getInt(
269                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
270                 /* name= */ KEY_ODP_BACKGROUND_JOB_SAMPLING_LOGGING_RATE,
271                 /* defaultValue= */ BACKGROUND_JOB_SAMPLING_LOGGING_RATE);
272     }
273 
274     @Override
getJobSchedulingLoggingEnabled()275     public boolean getJobSchedulingLoggingEnabled() {
276         return DeviceConfig.getBoolean(
277                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
278                 /* name= */ KEY_ODP_JOB_SCHEDULING_LOGGING_ENABLED,
279                 /* defaultValue= */ DEFAULT_JOB_SCHEDULING_LOGGING_ENABLED);
280     }
281 
282     @Override
getJobSchedulingLoggingSamplingRate()283     public int getJobSchedulingLoggingSamplingRate() {
284         return DeviceConfig.getInt(
285                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
286                 /* name= */ KEY_ODP_JOB_SCHEDULING_LOGGING_SAMPLING_RATE,
287                 /* defaultValue= */ DEFAULT_JOB_SCHEDULING_LOGGING_SAMPLING_RATE);
288     }
289 
290     @Override
getOdpModuleJobPolicy()291     public String getOdpModuleJobPolicy() {
292         return DeviceConfig.getString(
293                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
294                 /* name */ KEY_ODP_MODULE_JOB_POLICY,
295                 /* defaultValue */ DEFAULT_ODP_MODULE_JOB_POLICY);
296     }
297 
298     @Override
getSpePilotJobEnabled()299     public boolean getSpePilotJobEnabled() {
300         return DeviceConfig.getBoolean(
301                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
302                 /* name= */ KEY_ODP_SPE_PILOT_JOB_ENABLED,
303                 /* defaultValue= */ DEFAULT_SPE_PILOT_JOB_ENABLED);
304     }
305 
306     @Override
getSpeOnAggregateErrorDataReportingJobEnabled()307     public boolean getSpeOnAggregateErrorDataReportingJobEnabled() {
308         return DeviceConfig.getBoolean(
309                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
310                 /* name= */
311                 KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB,
312                 /* defaultValue= */
313                 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB);
314     }
315 
316     @Override
getSpeOnMddJobEnabled()317     public boolean getSpeOnMddJobEnabled() {
318         return DeviceConfig.getBoolean(
319                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
320                 /* name= */ KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB,
321                 /* defaultValue= */ DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB);
322     }
323 
324     @Override
getSpeOnOdpDownloadProcessingJobEnabled()325     public boolean getSpeOnOdpDownloadProcessingJobEnabled() {
326         return DeviceConfig.getBoolean(
327                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
328                 /* name= */ KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB,
329                 /* defaultValue= */
330                 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB);
331     }
332 
333     @Override
getSpeOnResetDataJobEnabled()334     public boolean getSpeOnResetDataJobEnabled() {
335         return DeviceConfig.getBoolean(
336                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
337                 /* name= */ KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB,
338                 /* defaultValue= */ DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB);
339     }
340 
341     @Override
getSpeOnUserDataCollectionJobEnabled()342     public boolean getSpeOnUserDataCollectionJobEnabled() {
343         return DeviceConfig.getBoolean(
344                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
345                 /* name= */ KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB,
346                 /* defaultValue= */
347                 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB);
348     }
349 
350     @Override
isArtImageLoadingOptimizationEnabled()351     public boolean isArtImageLoadingOptimizationEnabled() {
352         return DeviceConfig.getBoolean(
353                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
354                 /* name= */ KEY_IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED,
355                 /* defaultValue= */ IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED);
356     }
357 
358     @Override
getResetDataDelaySeconds()359     public int getResetDataDelaySeconds() {
360         return DeviceConfig.getInt(
361                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
362                 /* name= */ KEY_RESET_DATA_DELAY_SECONDS,
363                 /* defaultValue= */ DEFAULT_RESET_DATA_DELAY_SECONDS);
364     }
365 
366     @Override
getResetDataDeadlineSeconds()367     public int getResetDataDeadlineSeconds() {
368         return DeviceConfig.getInt(
369                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
370                 /* name= */ KEY_RESET_DATA_DEADLINE_SECONDS,
371                 /* defaultValue= */ DEFAULT_RESET_DATA_DEADLINE_SECONDS);
372     }
373 
374     @Override
getAppInstallHistoryTtlInMillis()375     public long getAppInstallHistoryTtlInMillis() {
376         return DeviceConfig.getLong(
377                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
378                 /* name= */ APP_INSTALL_HISTORY_TTL,
379                 /* defaultValue= */ DEFAULT_APP_INSTALL_HISTORY_TTL_MILLIS);
380     }
381 
382     @Override
getNoiseForExecuteBestValue()383     public float getNoiseForExecuteBestValue() {
384         return DeviceConfig.getFloat(
385                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
386                 /* name= */ EXECUTE_BEST_VALUE_NOISE,
387                 /* defaultValue= */ DEFAULT_EXECUTE_BEST_VALUE_NOISE);
388     }
389 
390     @Override
getAggregatedErrorReportingEnabled()391     public boolean getAggregatedErrorReportingEnabled() {
392         return DeviceConfig.getBoolean(
393                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
394                 /* name= */ KEY_ENABLE_AGGREGATED_ERROR_REPORTING,
395                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORTING_ENABLED);
396     }
397 
398     @Override
getAggregatedErrorReportingTtlInDays()399     public int getAggregatedErrorReportingTtlInDays() {
400         return DeviceConfig.getInt(
401                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
402                 /* name= */ KEY_AGGREGATED_ERROR_REPORT_TTL_DAYS,
403                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORT_TTL_DAYS);
404     }
405 
406     @Override
getAggregatedErrorReportingServerPath()407     public String getAggregatedErrorReportingServerPath() {
408         return DeviceConfig.getString(
409                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
410                 /* name= */ KEY_AGGREGATED_ERROR_REPORTING_PATH,
411                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORTING_URL_PATH);
412     }
413 
414     @Override
getAggregatedErrorMinThreshold()415     public int getAggregatedErrorMinThreshold() {
416         return DeviceConfig.getInt(
417                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
418                 /* name= */ KEY_AGGREGATED_ERROR_REPORTING_THRESHOLD,
419                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORTING_THRESHOLD);
420     }
421 
422     @Override
getAggregatedErrorReportingIntervalInHours()423     public int getAggregatedErrorReportingIntervalInHours() {
424         return DeviceConfig.getInt(
425                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
426                 /* name= */ KEY_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS,
427                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS);
428     }
429 
430     @Override
getAllowUnencryptedAggregatedErrorReportingPayload()431     public boolean getAllowUnencryptedAggregatedErrorReportingPayload() {
432         return DeviceConfig.getBoolean(
433                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
434                 /* name= */ KEY_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING,
435                 /* defaultValue= */ DEFAULT_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING_PAYLOAD);
436     }
437 
438     @Override
getAggregatedErrorReportingHttpTimeoutSeconds()439     public int getAggregatedErrorReportingHttpTimeoutSeconds() {
440         return DeviceConfig.getInt(
441                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
442                 /* name= */ KEY_AGGREGATED_ERROR_REPORTING_HTTP_TIMEOUT_SECONDS,
443                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_TIMEOUT_SECONDS);
444     }
445 
446     @Override
getAggregatedErrorReportingHttpRetryLimit()447     public int getAggregatedErrorReportingHttpRetryLimit() {
448         return DeviceConfig.getInt(
449                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
450                 /* name= */ KEY_AGGREGATED_ERROR_REPORTING_HTTP_RETRY_LIMIT,
451                 /* defaultValue= */ DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_RETRY_LIMIT);
452     }
453 
454     @Override
getEncryptionKeyFetchUrl()455     public String getEncryptionKeyFetchUrl() {
456         return DeviceConfig.getString(
457                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
458                 /* name= */ KEY_ENCRYPTION_KEY_URL,
459                 /* defaultValue= */ DEFAULT_ENCRYPTION_KEY_URL);
460     }
461 
462     @Override
getEncryptionKeyMaxAgeSeconds()463     public long getEncryptionKeyMaxAgeSeconds() {
464         return DeviceConfig.getLong(
465                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
466                 /* name= */ KEY_ENCRYPTION_KEY_MAX_AGE_SECONDS,
467                 /* defaultValue= */ DEFAULT_ENCRYPTION_KEY_MAX_AGE_SECONDS);
468     }
469 
470     @Override
getMaxIntValuesLimit()471     public int getMaxIntValuesLimit() {
472         return DeviceConfig.getInt(
473                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
474                 /* name= */ MAX_INT_VALUES_LIMIT,
475                 /* defaultValue= */ DEFAULT_MAX_INT_VALUES);
476     }
477 
478     @Override
getAdservicesIpcCallTimeoutInMillis()479     public long getAdservicesIpcCallTimeoutInMillis() {
480         return DeviceConfig.getLong(
481                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
482                 /* name= */ KEY_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS,
483                 /* defaultValue= */ DEFAULT_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS);
484     }
485 
486     @Override
getPlatformDataForTrainingAllowlist()487     public String getPlatformDataForTrainingAllowlist() {
488         return DeviceConfig.getString(
489                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
490                 /* name= */ KEY_PLATFORM_DATA_FOR_TRAINING_ALLOWLIST,
491                 /* defaultValue= */ DEFAULT_PLATFORM_DATA_FOR_TRAINING_ALLOWLIST);
492     }
493 
494     @Override
getDefaultPlatformDataForExecuteAllowlist()495     public String getDefaultPlatformDataForExecuteAllowlist() {
496         return DeviceConfig.getString(
497                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
498                 /* name= */ KEY_PLATFORM_DATA_FOR_EXECUTE_ALLOWLIST,
499                 /* defaultValue= */ DEFAULT_PLATFORM_DATA_FOR_EXECUTE_ALLOWLIST);
500     }
501 
502     @Override
getLogIsolatedServiceErrorCodeNonAggregatedAllowlist()503     public String getLogIsolatedServiceErrorCodeNonAggregatedAllowlist() {
504         return DeviceConfig.getString(
505                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
506                 /* name= */ KEY_LOG_ISOLATED_SERVICE_ERROR_CODE_NON_AGGREGATED_ALLOWLIST,
507                 /* defaultValue= */
508                 DEFAULT_LOG_ISOLATED_SERVICE_ERROR_CODE_NON_AGGREGATED_ALLOWLIST);
509     }
510 
511     @Override
isPluginProcessRunnerEnabled()512     public boolean isPluginProcessRunnerEnabled() {
513         return DeviceConfig.getBoolean(
514                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
515                 /* name= */ KEY_PLUGIN_PROCESS_RUNNER_ENABLED,
516                 /* defaultValue= */ DEFAULT_PLUGIN_PROCESS_RUNNER_ENABLED);
517     }
518 
519     @Override
isFeatureEnabledApiEnabled()520     public boolean isFeatureEnabledApiEnabled() {
521         return DeviceConfig.getBoolean(
522                 /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
523                 /* name= */ KEY_IS_FEATURE_ENABLED_API_ENABLED,
524                 /* defaultValue= */ DEFAULT_IS_FEATURE_ENABLED_API_ENABLED);
525     }
526 }
527