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