From 12187ae675145bfde8fb14497ae888449ad119c7 Mon Sep 17 00:00:00 2001 From: Matt Pape Date: Thu, 14 Mar 2019 13:37:32 -0700 Subject: [PATCH] Remove interface for Rollback and Rollback Boot. Per API council feedback, we are making changes to include only the namespace in the system API defined in DeviceConfig.java. Strings which define property names should be defined in code local to the feature instead. Bug: 126411407 Test: atest FrameworksCoreTests:DeviceConfigTest atest FrameworksServicesTests:PackageManagerServiceTest Change-Id: Ie3b0539f51a582fb7583ece88e5d3bde0cc1efd7 --- api/system-current.txt | 9 +-- api/test-current.txt | 10 +--- .../content/rollback/RollbackManager.java | 19 ++++++ core/java/android/provider/DeviceConfig.java | 60 +++++-------------- .../server/pm/PackageManagerService.java | 23 +++++-- .../rollback/RollbackManagerServiceImpl.java | 4 +- .../android/tests/rollback/RollbackTest.java | 16 ++--- 7 files changed, 67 insertions(+), 74 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 27241330f2ff3..6395bb7650f53 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5870,6 +5870,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"; @@ -5901,13 +5903,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 4ccfa1c06745c..9446c3ba4e9b9 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 6d32f8cbe9ca2..0f129baf19751 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -162,6 +162,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. @@ -260,50 +276,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 e5b6397e863d3..a51b531ab95ac 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -160,9 +160,9 @@ import android.content.pm.InstantAppInfo; import android.content.pm.InstantAppRequest; import android.content.pm.InstrumentationInfo; import android.content.pm.IntentFilterVerificationInfo; -import android.content.pm.PackageBackwardCompatibility; import android.content.pm.KeySet; import android.content.pm.ModuleInfo; +import android.content.pm.PackageBackwardCompatibility; import android.content.pm.PackageInfo; import android.content.pm.PackageInfoLite; import android.content.pm.PackageInstaller; @@ -548,11 +548,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. @@ -14716,11 +14727,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(); }