diff --git a/api/system-current.txt b/api/system-current.txt index 79aca0b534f66..a28c21d7cd535 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5871,6 +5871,8 @@ package android.provider { field public static final String NAMESPACE_INTELLIGENCE_ATTENTION = "intelligence_attention"; field public static final String NAMESPACE_MEDIA_NATIVE = "media_native"; field public static final String NAMESPACE_NETD_NATIVE = "netd_native"; + field public static final String NAMESPACE_ROLLBACK = "rollback"; + field public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot"; field public static final String NAMESPACE_RUNTIME = "runtime"; field public static final String NAMESPACE_RUNTIME_NATIVE = "runtime_native"; field public static final String NAMESPACE_RUNTIME_NATIVE_BOOT = "runtime_native_boot"; @@ -5902,13 +5904,6 @@ package android.provider { method @Nullable public String getString(@NonNull String, @Nullable String); } - public static interface DeviceConfig.Rollback { - field public static final String BOOT_NAMESPACE = "rollback_boot"; - field public static final String ENABLE_ROLLBACK_TIMEOUT = "enable_rollback_timeout"; - field public static final String NAMESPACE = "rollback"; - field public static final String ROLLBACK_LIFETIME_IN_MILLIS = "rollback_lifetime_in_millis"; - } - public static interface DeviceConfig.Scheduler { field public static final String ENABLE_FAST_METRICS_COLLECTION = "enable_fast_metrics_collection"; field public static final String NAMESPACE = "scheduler"; diff --git a/api/test-current.txt b/api/test-current.txt index 8b540b1945826..74944153586a0 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -727,6 +727,7 @@ package android.content.rollback { method @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void reloadPersistedData(); field public static final String EXTRA_STATUS = "android.content.rollback.extra.STATUS"; field public static final String EXTRA_STATUS_MESSAGE = "android.content.rollback.extra.STATUS_MESSAGE"; + field public static final String PROPERTY_ROLLBACK_LIFETIME_MILLIS = "rollback_lifetime_in_millis"; field public static final int STATUS_FAILURE = 1; // 0x1 field public static final int STATUS_FAILURE_INSTALL = 3; // 0x3 field public static final int STATUS_FAILURE_ROLLBACK_UNAVAILABLE = 2; // 0x2 @@ -2067,6 +2068,8 @@ package android.provider { method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(@NonNull String, @NonNull String, @Nullable String, boolean); field public static final String NAMESPACE_AUTOFILL = "autofill"; field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture"; + field public static final String NAMESPACE_ROLLBACK = "rollback"; + field public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot"; } public static interface DeviceConfig.OnPropertiesChangedListener { @@ -2092,13 +2095,6 @@ package android.provider { method @Nullable public String getString(@NonNull String, @Nullable String); } - public static interface DeviceConfig.Rollback { - field public static final String BOOT_NAMESPACE = "rollback_boot"; - field public static final String ENABLE_ROLLBACK_TIMEOUT = "enable_rollback_timeout"; - field public static final String NAMESPACE = "rollback"; - field public static final String ROLLBACK_LIFETIME_IN_MILLIS = "rollback_lifetime_in_millis"; - } - public final class MediaStore { method @RequiresPermission(android.Manifest.permission.CLEAR_APP_USER_DATA) public static void deleteContributedMedia(android.content.Context, String, android.os.UserHandle) throws java.io.IOException; method @RequiresPermission(android.Manifest.permission.CLEAR_APP_USER_DATA) public static long getContributedMediaSize(android.content.Context, String, android.os.UserHandle) throws java.io.IOException; diff --git a/core/java/android/content/rollback/RollbackManager.java b/core/java/android/content/rollback/RollbackManager.java index 9038b033c3c0d..293c1e43086bb 100644 --- a/core/java/android/content/rollback/RollbackManager.java +++ b/core/java/android/content/rollback/RollbackManager.java @@ -24,6 +24,7 @@ import android.annotation.SystemService; import android.annotation.TestApi; import android.content.Context; import android.content.IntentSender; +import android.content.pm.PackageInstaller; import android.content.pm.ParceledListSlice; import android.content.pm.VersionedPackage; import android.os.RemoteException; @@ -48,6 +49,24 @@ public final class RollbackManager { private final String mCallerPackageName; private final IRollbackManager mBinder; + /** + * Lifetime duration of rollback packages in millis. A rollback will be available for + * at most that duration of time after a package is installed with + * {@link PackageInstaller.SessionParams#setEnableRollback()}. + * + *
If flag value is negative, the default value will be assigned. + * + * @see RollbackManager + * + * Flag type: {@code long} + * Namespace: NAMESPACE_ROLLBACK_BOOT + * + * @hide + */ + @TestApi + public static final String PROPERTY_ROLLBACK_LIFETIME_MILLIS = + "rollback_lifetime_in_millis"; + /** {@hide} */ public RollbackManager(Context context, IRollbackManager binder) { mCallerPackageName = context.getPackageName(); diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index b1c85e177d55f..cc73786bf838b 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -171,6 +171,22 @@ public final class DeviceConfig { @SystemApi public static final String NAMESPACE_NETD_NATIVE = "netd_native"; + /** + * Namespace for Rollback flags that are applied immediately. + * + * @hide + */ + @SystemApi @TestApi + public static final String NAMESPACE_ROLLBACK = "rollback"; + + /** + * Namespace for Rollback flags that are applied after a reboot. + * + * @hide + */ + @SystemApi @TestApi + public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot"; + /** * Namespace for all runtime related features that don't require a reboot to become active. * There are no feature flags using NAMESPACE_RUNTIME. @@ -269,50 +285,6 @@ public final class DeviceConfig { String RAMPING_RINGER_VIBRATION_DURATION = "ramping_ringer_vibration_duration"; } - /** - * Namespace for Rollback. - * - * @hide - */ - @SystemApi @TestApi - public interface Rollback { - - /** - * Namespace for flags that can be changed immediately after becoming available on device. - */ - String NAMESPACE = "rollback"; - - /** - * Namespace for flags that can be changed only after reboot. - */ - String BOOT_NAMESPACE = "rollback_boot"; - - /** - * Timeout duration in milliseconds for enabling package rollback. If we fail to enable - * rollback within that period, the install will proceed without rollback enabled. - * - *
If flag value is negative, the default value will be assigned. - * - * Flag type: {@code long} - * Namespace: Rollback.NAMESPACE - */ - String ENABLE_ROLLBACK_TIMEOUT = "enable_rollback_timeout"; - - /** - * Lifetime duration of rollback packages in millis. A rollback will be available for - * at most that duration of time after a package is installed with - * {@link PackageInstaller.SessionParams#setEnableRollback()}. - * - *
If flag value is negative, the default value will be assigned. - * - * @see RollbackManager - * - * Flag type: {@code long} - * Namespace: Rollback.BOOT_NAMESPACE - */ - String ROLLBACK_LIFETIME_IN_MILLIS = "rollback_lifetime_in_millis"; - } - /** * Namespace for storage-related features. * diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 4e8ef71004666..a679601bb3064 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -551,11 +551,22 @@ public class PackageManagerService extends IPackageManager.Stub */ private static final long DEFAULT_VERIFICATION_TIMEOUT = 10 * 1000; + /** + * Timeout duration in milliseconds for enabling package rollback. If we fail to enable + * rollback within that period, the install will proceed without rollback enabled. + * + *
If flag value is negative, the default value will be assigned. + * + * Flag type: {@code long} + * Namespace: NAMESPACE_ROLLBACK + */ + private static final String PROPERTY_ENABLE_ROLLBACK_TIMEOUT_MILLIS = "enable_rollback_timeout"; + /** * The default duration to wait for rollback to be enabled in * milliseconds. */ - private static final long DEFAULT_ENABLE_ROLLBACK_TIMEOUT = 10 * 1000; + private static final long DEFAULT_ENABLE_ROLLBACK_TIMEOUT_MILLIS = 10 * 1000; /** * The default response for package verification timeout. @@ -14754,11 +14765,11 @@ public class PackageManagerService extends IPackageManager.Stub public void onReceive(Context context, Intent intent) { // the duration to wait for rollback to be enabled, in millis long rollbackTimeout = DeviceConfig.getLong( - DeviceConfig.Rollback.NAMESPACE, - DeviceConfig.Rollback.ENABLE_ROLLBACK_TIMEOUT, - DEFAULT_ENABLE_ROLLBACK_TIMEOUT); + DeviceConfig.NAMESPACE_ROLLBACK, + PROPERTY_ENABLE_ROLLBACK_TIMEOUT_MILLIS, + DEFAULT_ENABLE_ROLLBACK_TIMEOUT_MILLIS); if (rollbackTimeout < 0) { - rollbackTimeout = DEFAULT_ENABLE_ROLLBACK_TIMEOUT; + rollbackTimeout = DEFAULT_ENABLE_ROLLBACK_TIMEOUT_MILLIS; } final Message msg = mHandler.obtainMessage( ENABLE_ROLLBACK_TIMEOUT); diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index 83d18a6a5e15d..c3582ea8fc7b5 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -535,8 +535,8 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { private void updateRollbackLifetimeDurationInMillis() { mRollbackLifetimeDurationInMillis = DeviceConfig.getLong( - DeviceConfig.Rollback.BOOT_NAMESPACE, - DeviceConfig.Rollback.ROLLBACK_LIFETIME_IN_MILLIS, + DeviceConfig.NAMESPACE_ROLLBACK_BOOT, + RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, DEFAULT_ROLLBACK_LIFETIME_DURATION_MILLIS); if (mRollbackLifetimeDurationInMillis < 0) { mRollbackLifetimeDurationInMillis = DEFAULT_ROLLBACK_LIFETIME_DURATION_MILLIS; diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java index 7505230e69c62..48bc9e87eebb2 100644 --- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java +++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java @@ -346,8 +346,8 @@ public class RollbackTest { Manifest.permission.MANAGE_ROLLBACKS, Manifest.permission.WRITE_DEVICE_CONFIG); - DeviceConfig.setProperty(DeviceConfig.Rollback.BOOT_NAMESPACE, - DeviceConfig.Rollback.ROLLBACK_LIFETIME_IN_MILLIS, + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK_BOOT, + RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, Long.toString(expirationTime), false /* makeDefault*/); // Pull the new expiration time from DeviceConfig @@ -382,8 +382,8 @@ public class RollbackTest { assertNull(getUniqueRollbackInfoForPackage(rm.getAvailableRollbacks(), TEST_APP_A)); } finally { - DeviceConfig.setProperty(DeviceConfig.Rollback.BOOT_NAMESPACE, - DeviceConfig.Rollback.ROLLBACK_LIFETIME_IN_MILLIS, + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK_BOOT, + RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, Long.toString(defaultExpirationTime), false /* makeDefault*/); RollbackTestUtils.dropShellPermissionIdentity(); } @@ -407,8 +407,8 @@ public class RollbackTest { Manifest.permission.WRITE_DEVICE_CONFIG, Manifest.permission.SET_TIME); - DeviceConfig.setProperty(DeviceConfig.Rollback.BOOT_NAMESPACE, - DeviceConfig.Rollback.ROLLBACK_LIFETIME_IN_MILLIS, + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK_BOOT, + RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, Long.toString(expirationTime), false /* makeDefault*/); // Pull the new expiration time from DeviceConfig @@ -458,8 +458,8 @@ public class RollbackTest { RollbackTestUtils.forwardTimeBy(-expirationTime); } } finally { - DeviceConfig.setProperty(DeviceConfig.Rollback.BOOT_NAMESPACE, - DeviceConfig.Rollback.ROLLBACK_LIFETIME_IN_MILLIS, + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ROLLBACK_BOOT, + RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, Long.toString(defaultExpirationTime), false /* makeDefault*/); RollbackTestUtils.dropShellPermissionIdentity(); }