diff options
52 files changed, 330 insertions, 24 deletions
diff --git a/MEMORY_OWNERS b/MEMORY_OWNERS new file mode 100644 index 000000000000..89ce5140d8ea --- /dev/null +++ b/MEMORY_OWNERS @@ -0,0 +1,6 @@ +surenb@google.com +tjmercier@google.com +kaleshsingh@google.com +jyescas@google.com +carlosgalo@google.com +jji@google.com diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index 2940ca10e55b..76bc01676ba8 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -376,7 +376,9 @@ package android.nfc { package android.os { public class ArtModuleServiceManager { + method @FlaggedApi("android.content.pm.use_art_service_v2") @NonNull public android.os.ArtModuleServiceManager.ServiceRegisterer getArtdPreRebootServiceRegisterer(); method @NonNull public android.os.ArtModuleServiceManager.ServiceRegisterer getArtdServiceRegisterer(); + method @FlaggedApi("android.content.pm.use_art_service_v2") @NonNull public android.os.ArtModuleServiceManager.ServiceRegisterer getDexoptChrootSetupServiceRegisterer(); } public static final class ArtModuleServiceManager.ServiceRegisterer { diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 34c620f4a13c..cdeddfbba467 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -3860,6 +3860,7 @@ package android.content.pm { method public void setInstallAsInstantApp(boolean); method public void setInstallAsVirtualPreload(); method public void setRequestDowngrade(boolean); + method @FlaggedApi("android.content.pm.rollback_lifetime") @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void setRollbackLifetimeMillis(long); method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged(); } diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 462df072f333..920cc57a8575 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -34,6 +34,7 @@ import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CurrentTimeMillisLong; import android.annotation.DurationMillisLong; +import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -2370,6 +2371,8 @@ public class PackageInstaller { public DataLoaderParams dataLoaderParams; /** {@hide} */ public int rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; + /** @hide */ + public long rollbackLifetimeMillis = 0; /** {@hide} */ public boolean forceQueryableOverride; /** {@hide} */ @@ -2424,6 +2427,7 @@ public class PackageInstaller { dataLoaderParams = new DataLoaderParams(dataLoaderParamsParcel); } rollbackDataPolicy = source.readInt(); + rollbackLifetimeMillis = source.readLong(); requireUserAction = source.readInt(); packageSource = source.readInt(); applicationEnabledSettingPersistent = source.readBoolean(); @@ -2456,6 +2460,7 @@ public class PackageInstaller { ret.requiredInstalledVersionCode = requiredInstalledVersionCode; ret.dataLoaderParams = dataLoaderParams; ret.rollbackDataPolicy = rollbackDataPolicy; + ret.rollbackLifetimeMillis = rollbackLifetimeMillis; ret.requireUserAction = requireUserAction; ret.packageSource = packageSource; ret.applicationEnabledSettingPersistent = applicationEnabledSettingPersistent; @@ -2737,12 +2742,7 @@ public class PackageInstaller { */ @SystemApi public void setEnableRollback(boolean enable) { - if (enable) { - installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK; - } else { - installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; - } - rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; + setEnableRollback(enable, PackageManager.ROLLBACK_DATA_POLICY_RESTORE); } /** @@ -2766,10 +2766,36 @@ public class PackageInstaller { installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK; } else { installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; + rollbackLifetimeMillis = 0; } rollbackDataPolicy = dataPolicy; } + /** + * If rollback enabled for this session (via {@link #setEnableRollback}, set time + * after which rollback will no longer be possible + * + * <p>For multi-package installs, this value must be set on the parent session. + * Child session rollback lifetime will be ignored. + * + * @param lifetimeMillis time after which rollback expires + * @throws IllegalArgumentException if lifetimeMillis is negative or rollback is not + * enabled via setEnableRollback. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) + @FlaggedApi(Flags.FLAG_ROLLBACK_LIFETIME) + public void setRollbackLifetimeMillis(@DurationMillisLong long lifetimeMillis) { + if (lifetimeMillis < 0) { + throw new IllegalArgumentException("rollbackLifetimeMillis can't be negative."); + } + if ((installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) { + throw new IllegalArgumentException( + "Can't set rollbackLifetimeMillis when rollback is not enabled"); + } + rollbackLifetimeMillis = lifetimeMillis; + } /** * @deprecated use {@link #setRequestDowngrade(boolean)}. @@ -3124,6 +3150,7 @@ public class PackageInstaller { pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode); pw.printPair("dataLoaderParams", dataLoaderParams); pw.printPair("rollbackDataPolicy", rollbackDataPolicy); + pw.printPair("rollbackLifetimeMillis", rollbackLifetimeMillis); pw.printPair("applicationEnabledSettingPersistent", applicationEnabledSettingPersistent); pw.printHexPair("developmentInstallFlags", developmentInstallFlags); @@ -3165,6 +3192,7 @@ public class PackageInstaller { dest.writeParcelable(null, flags); } dest.writeInt(rollbackDataPolicy); + dest.writeLong(rollbackLifetimeMillis); dest.writeInt(requireUserAction); dest.writeInt(packageSource); dest.writeBoolean(applicationEnabledSettingPersistent); @@ -3358,6 +3386,9 @@ public class PackageInstaller { /** {@hide} */ public int rollbackDataPolicy; + /** @hide */ + public long rollbackLifetimeMillis; + /** {@hide} */ public int requireUserAction; @@ -3425,6 +3456,7 @@ public class PackageInstaller { isCommitted = source.readBoolean(); isPreapprovalRequested = source.readBoolean(); rollbackDataPolicy = source.readInt(); + rollbackLifetimeMillis = source.readLong(); createdMillis = source.readLong(); requireUserAction = source.readInt(); installerUid = source.readInt(); @@ -4048,6 +4080,7 @@ public class PackageInstaller { dest.writeBoolean(isCommitted); dest.writeBoolean(isPreapprovalRequested); dest.writeInt(rollbackDataPolicy); + dest.writeLong(rollbackLifetimeMillis); dest.writeLong(createdMillis); dest.writeInt(requireUserAction); dest.writeInt(installerUid); diff --git a/core/java/android/content/pm/flags.aconfig b/core/java/android/content/pm/flags.aconfig index 524253371e49..d07de72d6cf5 100644 --- a/core/java/android/content/pm/flags.aconfig +++ b/core/java/android/content/pm/flags.aconfig @@ -6,3 +6,11 @@ flag { description: "Feature flag to enable the features that rely on new ART Service APIs that are in the VIC version of the ART module." bug: "304741685" } + +flag { + name: "rollback_lifetime" + namespace: "package_manager_service" + description: "Feature flag to enable custom rollback lifetime during install." + bug: "299670324" + is_fixed_read_only: true +} diff --git a/core/java/android/os/ArtModuleServiceManager.java b/core/java/android/os/ArtModuleServiceManager.java index 0009e61f3a6f..e0b631d69ca8 100644 --- a/core/java/android/os/ArtModuleServiceManager.java +++ b/core/java/android/os/ArtModuleServiceManager.java @@ -15,9 +15,11 @@ */ package android.os; +import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.content.pm.Flags; /** * Provides a way to register and obtain the system service binder objects managed by the ART @@ -60,4 +62,18 @@ public class ArtModuleServiceManager { public ServiceRegisterer getArtdServiceRegisterer() { return new ServiceRegisterer("artd"); } + + /** Returns {@link ServiceRegisterer} for the "artd_pre_reboot" service. */ + @NonNull + @FlaggedApi(Flags.FLAG_USE_ART_SERVICE_V2) + public ServiceRegisterer getArtdPreRebootServiceRegisterer() { + return new ServiceRegisterer("artd_pre_reboot"); + } + + /** Returns {@link ServiceRegisterer} for the "dexopt_chroot_setup" service. */ + @NonNull + @FlaggedApi(Flags.FLAG_USE_ART_SERVICE_V2) + public ServiceRegisterer getDexoptChrootSetupServiceRegisterer() { + return new ServiceRegisterer("dexopt_chroot_setup"); + } } diff --git a/packages/CompanionDeviceManager/Android.bp b/packages/CompanionDeviceManager/Android.bp index f6458c26f309..ce32ec4321dc 100644 --- a/packages/CompanionDeviceManager/Android.bp +++ b/packages/CompanionDeviceManager/Android.bp @@ -46,4 +46,6 @@ android_app { ], platform_apis: true, + + generate_product_characteristics_rro: true, } diff --git a/packages/CrashRecovery/framework/Android.bp b/packages/CrashRecovery/framework/Android.bp index b2af315ef2c9..c0d93531a1e6 100644 --- a/packages/CrashRecovery/framework/Android.bp +++ b/packages/CrashRecovery/framework/Android.bp @@ -1,9 +1,55 @@ -filegroup { +soong_config_module_type { + name: "platform_filegroup", + module_type: "filegroup", + config_namespace: "ANDROID", + bool_variables: [ + "move_crashrecovery_files", + ], + properties: [ + "srcs", + ], +} + +platform_filegroup { name: "framework-crashrecovery-sources", srcs: [ "java/**/*.java", "java/**/*.aidl", ], + soong_config_variables: { + // if the flag is enabled, then files would be moved to module + move_crashrecovery_files: { + srcs: [], + }, + }, path: "java", visibility: ["//frameworks/base:__subpackages__"], } + +soong_config_module_type { + name: "module_filegroup", + module_type: "filegroup", + config_namespace: "ANDROID", + bool_variables: [ + "move_crashrecovery_files", + ], + properties: [ + "srcs", + ], +} + +module_filegroup { + name: "framework-crashrecovery-module-sources", + srcs: [], + soong_config_variables: { + // if the flag is enabled, then files would be moved to module + move_crashrecovery_files: { + srcs: [ + "java/**/*.java", + "java/**/*.aidl", + ], + }, + }, + path: "java", + visibility: ["//packages/modules/CrashRecovery/framework"], +} diff --git a/packages/CrashRecovery/services/Android.bp b/packages/CrashRecovery/services/Android.bp index 63e6c5083376..ab10b5a23676 100644 --- a/packages/CrashRecovery/services/Android.bp +++ b/packages/CrashRecovery/services/Android.bp @@ -1,13 +1,59 @@ -filegroup { +soong_config_module_type { + name: "platform_filegroup", + module_type: "filegroup", + config_namespace: "ANDROID", + bool_variables: [ + "move_crashrecovery_files", + ], + properties: [ + "srcs", + ], +} + +platform_filegroup { name: "services-crashrecovery-sources", srcs: [ "java/**/*.java", "java/**/*.aidl", ":statslog-crashrecovery-java-gen", ], + soong_config_variables: { + // if the flag is enabled, then files would be moved to module + move_crashrecovery_files: { + srcs: [], + }, + }, visibility: ["//frameworks/base:__subpackages__"], } +soong_config_module_type { + name: "module_filegroup", + module_type: "filegroup", + config_namespace: "ANDROID", + bool_variables: [ + "move_crashrecovery_files", + ], + properties: [ + "srcs", + ], +} + +module_filegroup { + name: "services-crashrecovery-module-sources", + srcs: [], + soong_config_variables: { + // if the flag is enabled, then files would be moved to module + move_crashrecovery_files: { + srcs: [ + "java/**/*.java", + "java/**/*.aidl", + ":statslog-crashrecovery-java-gen", + ], + }, + }, + visibility: ["//packages/modules/CrashRecovery/service"], +} + genrule { name: "statslog-crashrecovery-java-gen", tools: ["stats-log-api-gen"], diff --git a/packages/CrashRecovery/services/java/com/android/server/RescueParty.java b/packages/CrashRecovery/services/java/com/android/server/RescueParty.java index dffe4e239ec9..5d03ef578995 100644 --- a/packages/CrashRecovery/services/java/com/android/server/RescueParty.java +++ b/packages/CrashRecovery/services/java/com/android/server/RescueParty.java @@ -390,7 +390,8 @@ public class RescueParty { return; } - CrashRecoveryStatsLog.write(CrashRecoveryStatsLog.RESCUE_PARTY_RESET_REPORTED, level); + CrashRecoveryStatsLog.write(CrashRecoveryStatsLog.RESCUE_PARTY_RESET_REPORTED, + level, levelToString(level)); // Try our best to reset all settings possible, and once finished // rethrow any exception that we encountered Exception res = null; diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index ad08c515b57b..99383d9b1604 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -15,6 +15,7 @@ // package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"], } diff --git a/packages/SystemUI/accessibility/accessibilitymenu/Android.bp b/packages/SystemUI/accessibility/accessibilitymenu/Android.bp index f358417e6bea..1568d59f3ad3 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/Android.bp +++ b/packages/SystemUI/accessibility/accessibilitymenu/Android.bp @@ -15,6 +15,7 @@ // package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", default_applicable_licenses: ["Android-Apache-2.0"], } diff --git a/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp b/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp index 17db1ace63ed..06ace37d8bd1 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp +++ b/packages/SystemUI/accessibility/accessibilitymenu/tests/Android.bp @@ -15,6 +15,7 @@ // package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", default_applicable_licenses: ["Android-Apache-2.0"], } diff --git a/packages/SystemUI/animation/Android.bp b/packages/SystemUI/animation/Android.bp index 6f53b42371c6..d700f8777f31 100644 --- a/packages/SystemUI/animation/Android.bp +++ b/packages/SystemUI/animation/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/checks/Android.bp b/packages/SystemUI/checks/Android.bp index d3f66e333e96..4cbc18c3a295 100644 --- a/packages/SystemUI/checks/Android.bp +++ b/packages/SystemUI/checks/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/packages/SystemUI/common/Android.bp b/packages/SystemUI/common/Android.bp index e36ada89b207..53bdf38ec258 100644 --- a/packages/SystemUI/common/Android.bp +++ b/packages/SystemUI/common/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/compose/core/Android.bp b/packages/SystemUI/compose/core/Android.bp index ab3efb886182..ce9445e3f399 100644 --- a/packages/SystemUI/compose/core/Android.bp +++ b/packages/SystemUI/compose/core/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/compose/core/tests/Android.bp b/packages/SystemUI/compose/core/tests/Android.bp index c008bb13aecf..ce2ba0349be8 100644 --- a/packages/SystemUI/compose/core/tests/Android.bp +++ b/packages/SystemUI/compose/core/tests/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/compose/features/Android.bp b/packages/SystemUI/compose/features/Android.bp index c6438c9ef955..0fc91c840162 100644 --- a/packages/SystemUI/compose/features/Android.bp +++ b/packages/SystemUI/compose/features/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/compose/features/tests/Android.bp b/packages/SystemUI/compose/features/tests/Android.bp index c7c9140b53ed..77a60b81ec4f 100644 --- a/packages/SystemUI/compose/features/tests/Android.bp +++ b/packages/SystemUI/compose/features/tests/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/customization/Android.bp b/packages/SystemUI/customization/Android.bp index fc37b355494f..7fbcb0d5ed4f 100644 --- a/packages/SystemUI/customization/Android.bp +++ b/packages/SystemUI/customization/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/log/Android.bp b/packages/SystemUI/log/Android.bp index 627ac4b7c381..36d5c2fbcf2f 100644 --- a/packages/SystemUI/log/Android.bp +++ b/packages/SystemUI/log/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/monet/Android.bp b/packages/SystemUI/monet/Android.bp index 507ea25083e1..98f7aced7522 100644 --- a/packages/SystemUI/monet/Android.bp +++ b/packages/SystemUI/monet/Android.bp @@ -14,6 +14,7 @@ // limitations under the License. // package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", default_applicable_licenses: ["Android-Apache-2.0"], } diff --git a/packages/SystemUI/plugin/Android.bp b/packages/SystemUI/plugin/Android.bp index bb47a2f4726e..cb8ec9ad54c6 100644 --- a/packages/SystemUI/plugin/Android.bp +++ b/packages/SystemUI/plugin/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/plugin/ExamplePlugin/Android.bp b/packages/SystemUI/plugin/ExamplePlugin/Android.bp index 3f0fdedb57da..cbfa3f8625d7 100644 --- a/packages/SystemUI/plugin/ExamplePlugin/Android.bp +++ b/packages/SystemUI/plugin/ExamplePlugin/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/plugin_core/Android.bp b/packages/SystemUI/plugin_core/Android.bp index 4e39f1ac9545..e8e54c3702e7 100644 --- a/packages/SystemUI/plugin_core/Android.bp +++ b/packages/SystemUI/plugin_core/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp index e2d27f15b78a..ffa398ba4783 100644 --- a/packages/SystemUI/shared/Android.bp +++ b/packages/SystemUI/shared/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/packages/SystemUI/tests/Android.bp b/packages/SystemUI/tests/Android.bp index 3c418ed49adc..1594ec53b770 100644 --- a/packages/SystemUI/tests/Android.bp +++ b/packages/SystemUI/tests/Android.bp @@ -15,6 +15,7 @@ // package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"], } diff --git a/packages/SystemUI/unfold/Android.bp b/packages/SystemUI/unfold/Android.bp index a1617a6ccc28..c8109e60e40e 100644 --- a/packages/SystemUI/unfold/Android.bp +++ b/packages/SystemUI/unfold/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_system_ui_please_use_a_more_specific_subteam_if_possible_", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 178719f3c4ec..7c307bd536dc 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -42,6 +42,7 @@ import android.content.Intent; import android.content.IntentSender; import android.content.IntentSender.SendIntentException; import android.content.pm.ApplicationInfo; +import android.content.pm.Flags; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageInstallerCallback; import android.content.pm.IPackageInstallerSession; @@ -745,6 +746,22 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements params.installFlags &= ~PackageManager.INSTALL_DISABLE_VERIFICATION; } + if (Flags.rollbackLifetime()) { + if (params.rollbackLifetimeMillis > 0) { + if ((params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) { + throw new IllegalArgumentException( + "Can't set rollbackLifetimeMillis when rollback is not enabled"); + } + if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_ROLLBACKS) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException( + "Setting rollback lifetime requires the MANAGE_ROLLBACKS permission"); + } + } else if (params.rollbackLifetimeMillis < 0) { + throw new IllegalArgumentException("rollbackLifetimeMillis can't be negative."); + } + } + boolean isApex = (params.installFlags & PackageManager.INSTALL_APEX) != 0; if (isApex) { if (mContext.checkCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGE_UPDATES) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 2372fd3dc9e9..94c6b8b2016c 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1206,6 +1206,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { info.whitelistedRestrictedPermissions = params.whitelistedRestrictedPermissions; info.autoRevokePermissionsMode = params.autoRevokePermissionsMode; info.installFlags = params.installFlags; + info.rollbackLifetimeMillis = params.rollbackLifetimeMillis; info.isMultiPackage = params.isMultiPackage; info.isStaged = params.isStaged; info.rollbackDataPolicy = params.rollbackDataPolicy; diff --git a/services/core/java/com/android/server/rollback/Rollback.java b/services/core/java/com/android/server/rollback/Rollback.java index 85d93f4f76c4..a5b90f12a5cc 100644 --- a/services/core/java/com/android/server/rollback/Rollback.java +++ b/services/core/java/com/android/server/rollback/Rollback.java @@ -174,6 +174,11 @@ class Rollback { @Nullable private final String mInstallerPackageName; /** + * Time after which rollback expires. + */ + private long mRollbackLifetimeMillis = 0; + + /** * Session ids for all packages in the install. For multi-package sessions, this is the list * of child session ids. For normal sessions, this list is a single element with the normal * session id. @@ -286,6 +291,24 @@ class Rollback { } /** + * Sets rollback lifetime in milliseconds, for purposes of expiring rollback data. + */ + @WorkerThread + void setRollbackLifetimeMillis(long lifetimeMillis) { + assertInWorkerThread(); + mRollbackLifetimeMillis = lifetimeMillis; + } + + /** + * Returns rollback lifetime in milliseconds, for purposes of expiring rollback data. + */ + @WorkerThread + long getRollbackLifetimeMillis() { + assertInWorkerThread(); + return mRollbackLifetimeMillis; + } + + /** * Returns the session ID associated with this rollback, or {@code -1} if unknown. */ @AnyThread @@ -930,6 +953,7 @@ class Rollback { ipw.println("-state: " + getStateAsString()); ipw.println("-stateDescription: " + mStateDescription); ipw.println("-timestamp: " + getTimestamp()); + ipw.println("-rollbackLifetimeMillis: " + getRollbackLifetimeMillis()); ipw.println("-isStaged: " + isStaged()); ipw.println("-originalSessionId: " + getOriginalSessionId()); ipw.println("-packages:"); diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index deff3d793854..b38d6c7f1146 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -28,6 +28,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; import android.content.pm.ApplicationInfo; +import android.content.pm.Flags; import android.content.pm.ModuleInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; @@ -702,6 +703,15 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba // Schedules future expiration as appropriate. @WorkerThread private void runExpiration() { + if (Flags.rollbackLifetime()) { + runExpirationCustomRollbackLifetime(); + } else { + runExpirationDefaultRollbackLifetime(); + } + } + + @WorkerThread + private void runExpirationDefaultRollbackLifetime() { getHandler().removeCallbacks(mRunExpiration); assertInWorkerThread(); Instant now = Instant.now(); @@ -729,6 +739,44 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba } } + @WorkerThread + private void runExpirationCustomRollbackLifetime() { + getHandler().removeCallbacks(mRunExpiration); + assertInWorkerThread(); + Instant now = Instant.now(); + long minDelay = 0; + Iterator<Rollback> iter = mRollbacks.iterator(); + while (iter.hasNext()) { + Rollback rollback = iter.next(); + if (!rollback.isAvailable() && !rollback.isCommitted()) { + continue; + } + long rollbackLifetimeMillis = rollback.getRollbackLifetimeMillis(); + if (rollbackLifetimeMillis <= 0) { + rollbackLifetimeMillis = mRollbackLifetimeDurationInMillis; + } + + Instant rollbackExpiryTimestamp = rollback.getTimestamp() + .plusMillis(rollbackLifetimeMillis); + if (!now.isBefore(rollbackExpiryTimestamp)) { + Slog.i(TAG, "runExpiration id=" + rollback.info.getRollbackId()); + iter.remove(); + deleteRollback(rollback, "Expired by timeout"); + continue; + } + + long delay = now.until( + rollbackExpiryTimestamp, ChronoUnit.MILLIS); + if (minDelay == 0 || delay < minDelay) { + minDelay = delay; + } + } + + if (minDelay != 0) { + getHandler().postDelayed(mRunExpiration, minDelay); + } + } + @AnyThread private Handler getHandler() { return mHandler; @@ -1277,6 +1325,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba } final Rollback rollback; + if (parentSession.isStaged()) { rollback = mRollbackStore.createStagedRollback(rollbackId, parentSessionId, userId, installerPackageName, packageSessionIds, getExtensionVersions()); @@ -1285,6 +1334,10 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba installerPackageName, packageSessionIds, getExtensionVersions()); } + if (Flags.rollbackLifetime()) { + rollback.setRollbackLifetimeMillis(parentSession.rollbackLifetimeMillis); + } + mRollbacks.add(rollback); return rollback; } diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java index 8068c6f46733..0af137faf5b4 100644 --- a/services/core/java/com/android/server/rollback/RollbackStore.java +++ b/services/core/java/com/android/server/rollback/RollbackStore.java @@ -19,6 +19,7 @@ package com.android.server.rollback; import static com.android.server.rollback.Rollback.rollbackStateFromString; import android.annotation.NonNull; +import android.content.pm.Flags; import android.content.pm.PackageManager; import android.content.pm.VersionedPackage; import android.content.rollback.PackageRollbackInfo; @@ -312,6 +313,9 @@ class RollbackStore { JSONObject dataJson = new JSONObject(); dataJson.put("info", rollbackInfoToJson(rollback.info)); dataJson.put("timestamp", rollback.getTimestamp().toString()); + if (Flags.rollbackLifetime()) { + dataJson.put("rollbackLifetimeMillis", rollback.getRollbackLifetimeMillis()); + } dataJson.put("originalSessionId", rollback.getOriginalSessionId()); dataJson.put("state", rollback.getStateAsString()); dataJson.put("stateDescription", rollback.getStateDescription()); @@ -375,7 +379,7 @@ class RollbackStore { @VisibleForTesting static Rollback rollbackFromJson(JSONObject dataJson, File backupDir) throws JSONException, ParseException { - return new Rollback( + Rollback rollback = new Rollback( rollbackInfoFromJson(dataJson.getJSONObject("info")), backupDir, Instant.parse(dataJson.getString("timestamp")), @@ -388,6 +392,10 @@ class RollbackStore { dataJson.optInt("userId", UserHandle.SYSTEM.getIdentifier()), dataJson.optString("installerPackageName", ""), extensionVersionsFromJson(dataJson.optJSONArray("extensionVersions"))); + if (Flags.rollbackLifetime()) { + rollback.setRollbackLifetimeMillis(dataJson.optLong("rollbackLifetimeMillis")); + } + return rollback; } private static JSONObject toJson(VersionedPackage pkg) throws JSONException { diff --git a/services/core/jni/OWNERS b/services/core/jni/OWNERS index d4f6312d19d9..e37d9a1270de 100644 --- a/services/core/jni/OWNERS +++ b/services/core/jni/OWNERS @@ -30,5 +30,8 @@ per-file com_android_server_vibrator_* = file:/services/core/java/com/android/se per-file com_android_server_am_CachedAppOptimizer.cpp = timmurray@google.com, edgararriaga@google.com, dualli@google.com, carmenjackson@google.com, philipcuadra@google.com per-file com_android_server_companion_virtual_InputController.cpp = file:/services/companion/java/com/android/server/companion/virtual/OWNERS +# Memory +per-file com_android_server_am_OomConnection.cpp = file:/MEMORY_OWNERS + # Bug component : 158088 = per-file *AnrTimer* per-file *AnrTimer* = file:/PERFORMANCE_OWNERS diff --git a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java index 823267c67cc0..68038fa87ae0 100644 --- a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java +++ b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java @@ -326,7 +326,7 @@ public final class ProfcollectForwardingService extends SystemService { // Sample for a fraction of dex2oat runs. final int traceFrequency = DeviceConfig.getInt(DeviceConfig.NAMESPACE_PROFCOLLECT_NATIVE_BOOT, - "dex2oat_trace_freq", 10); + "dex2oat_trace_freq", 25); int randomNum = ThreadLocalRandom.current().nextInt(100); if (randomNum < traceFrequency) { if (DEBUG) { diff --git a/services/tests/InputMethodSystemServerTests/Android.bp b/services/tests/InputMethodSystemServerTests/Android.bp index 528fda294050..0af45ecf2ff7 100644 --- a/services/tests/InputMethodSystemServerTests/Android.bp +++ b/services/tests/InputMethodSystemServerTests/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_input_method_framework", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/Android.bp b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/Android.bp index e1fd2b34d881..8a12dcd0add4 100644 --- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/Android.bp +++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_input_method_framework", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/services/tests/PackageManagerComponentOverrideTests/Android.bp b/services/tests/PackageManagerComponentOverrideTests/Android.bp index 81fd90d9e6a9..1227b0c1047d 100644 --- a/services/tests/PackageManagerComponentOverrideTests/Android.bp +++ b/services/tests/PackageManagerComponentOverrideTests/Android.bp @@ -18,6 +18,7 @@ // and this is more representative of a real caller. It also uses Mockito extended, and this // prevents converting the entire services test module. package { + default_team: "trendy_team_framework_android_packages", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/services/tests/PackageManagerServiceTests/appenumeration/Android.bp b/services/tests/PackageManagerServiceTests/appenumeration/Android.bp index ad7af44d4089..f15e533fee2b 100644 --- a/services/tests/PackageManagerServiceTests/appenumeration/Android.bp +++ b/services/tests/PackageManagerServiceTests/appenumeration/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_framework_android_packages", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/services/tests/PackageManagerServiceTests/appenumeration/test-apps/target/Android.bp b/services/tests/PackageManagerServiceTests/appenumeration/test-apps/target/Android.bp index 99211062964e..6da503d5df45 100644 --- a/services/tests/PackageManagerServiceTests/appenumeration/test-apps/target/Android.bp +++ b/services/tests/PackageManagerServiceTests/appenumeration/test-apps/target/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_framework_android_packages", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/services/tests/PackageManagerServiceTests/server/Android.bp b/services/tests/PackageManagerServiceTests/server/Android.bp index 47d242235c47..84ff891a3778 100644 --- a/services/tests/PackageManagerServiceTests/server/Android.bp +++ b/services/tests/PackageManagerServiceTests/server/Android.bp @@ -3,6 +3,7 @@ //######################################################################## package { + default_team: "trendy_team_framework_android_packages", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/services/tests/PackageManagerServiceTests/unit/Android.bp b/services/tests/PackageManagerServiceTests/unit/Android.bp index 8505983894a8..c93f48225e48 100644 --- a/services/tests/PackageManagerServiceTests/unit/Android.bp +++ b/services/tests/PackageManagerServiceTests/unit/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_framework_android_packages", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/tests/Input/Android.bp b/tests/Input/Android.bp index 292fbcb0031e..d996ee679208 100644 --- a/tests/Input/Android.bp +++ b/tests/Input/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_input_framework", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/tests/InputMethodStressTest/Android.bp b/tests/InputMethodStressTest/Android.bp index 58ceb3f3edf4..5ed8d8d528c4 100644 --- a/tests/InputMethodStressTest/Android.bp +++ b/tests/InputMethodStressTest/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_input_method_framework", default_applicable_licenses: ["frameworks_base_license"], } diff --git a/tests/StagedInstallTest/Android.bp b/tests/StagedInstallTest/Android.bp index 23efe548c82a..27511411c97e 100644 --- a/tests/StagedInstallTest/Android.bp +++ b/tests/StagedInstallTest/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_framework_android_packages", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/tests/UpdatableSystemFontTest/Android.bp b/tests/UpdatableSystemFontTest/Android.bp index ddb3649a8320..12d43383a6e2 100644 --- a/tests/UpdatableSystemFontTest/Android.bp +++ b/tests/UpdatableSystemFontTest/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_android_gpu", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/tests/UpdatableSystemFontTest/EmojiRenderingTestApp/Android.bp b/tests/UpdatableSystemFontTest/EmojiRenderingTestApp/Android.bp index ed34fa9fc1d0..0f21035b3cf8 100644 --- a/tests/UpdatableSystemFontTest/EmojiRenderingTestApp/Android.bp +++ b/tests/UpdatableSystemFontTest/EmojiRenderingTestApp/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_android_gpu", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/tests/UpdatableSystemFontTest/testdata/Android.bp b/tests/UpdatableSystemFontTest/testdata/Android.bp index 0bdb3a8c6b14..38355530b8c4 100644 --- a/tests/UpdatableSystemFontTest/testdata/Android.bp +++ b/tests/UpdatableSystemFontTest/testdata/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_android_gpu", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "frameworks_base_license" diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp index bca77978c502..dbac6cabd987 100644 --- a/tools/aapt2/Android.bp +++ b/tools/aapt2/Android.bp @@ -266,6 +266,23 @@ cc_genrule { "$(genDir)/aapt2_tests " + "--gtest_output=xml:$(out) " + ">/dev/null 2>&1 ; true", + dist: { + targets: ["aapt2_run_host_unit_tests"], + dir: "gtest", + dest: "aapt2_host_unit_tests_result.xml", + }, + arch: { + x86: { + dist: { + suffix: "_x86", + }, + }, + x86_64: { + dist: { + suffix: "_x86_64", + }, + }, + }, } phony_rule { diff --git a/tools/codegen/src/com/android/codegen/FileInfo.kt b/tools/codegen/src/com/android/codegen/FileInfo.kt index a1d0389b0041..cc3a15654956 100644 --- a/tools/codegen/src/com/android/codegen/FileInfo.kt +++ b/tools/codegen/src/com/android/codegen/FileInfo.kt @@ -238,7 +238,7 @@ class FileInfo( } else if (classBounds.isDataclass) { // Insert placeholder for generated code to be inserted for the 1st time - chunks.last = (chunks.last as Code) + chunks[chunks.lastIndex] = (chunks.last() as Code) .lines .dropLastWhile { it.isBlank() } .run { @@ -286,4 +286,4 @@ class FileInfo( .let { addAll(it) } } } -}
\ No newline at end of file +} diff --git a/tools/codegen/src/com/android/codegen/Utils.kt b/tools/codegen/src/com/android/codegen/Utils.kt index 9ceb2042d74e..a40bdd7ba8e1 100644 --- a/tools/codegen/src/com/android/codegen/Utils.kt +++ b/tools/codegen/src/com/android/codegen/Utils.kt @@ -137,14 +137,4 @@ private fun parseFailed(source: String, cause: Throwable? = null, desc: String = cause) } -var <T> MutableList<T>.last - get() = last() - set(value) { - if (isEmpty()) { - add(value) - } else { - this[size - 1] = value - } - } - -inline fun <T> buildList(init: MutableList<T>.() -> Unit) = mutableListOf<T>().apply(init)
\ No newline at end of file +inline fun <T> buildList(init: MutableList<T>.() -> Unit) = mutableListOf<T>().apply(init) |