From d8b25b838f06193cf80164a0879c6965f815129d Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Tue, 4 Feb 2020 11:44:20 -0800 Subject: [PATCH] Incremental Delivery: Add device feature. Feature is present if ro.incremental.enable set to true. Test: builds Bug: b/136132412 b/133435829 Change-Id: I99ad307cbd3428e0b3964a369930658ee1c8ac0f --- api/system-current.txt | 1 + core/java/android/content/pm/PackageManager.java | 13 +++++++++++++ .../android/os/incremental/IncrementalManager.java | 8 ++++++++ core/java/com/android/server/SystemConfig.java | 5 +++++ .../android_os_incremental_IncrementalManager.cpp | 8 ++++++-- 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 7903fbab696ac..7826ae6152a04 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -2202,6 +2202,7 @@ package android.content.pm { field public static final String EXTRA_REQUEST_PERMISSIONS_NAMES = "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES"; field public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS"; field public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio"; + field public static final String FEATURE_INCREMENTAL_DELIVERY = "android.software.incremental_delivery"; field public static final String FEATURE_REBOOT_ESCROW = "android.hardware.reboot_escrow"; field public static final String FEATURE_TELEPHONY_CARRIERLOCK = "android.hardware.telephony.carrierlock"; field public static final int FLAGS_PERMISSION_RESERVED_PERMISSIONCONTROLLER = -268435456; // 0xf0000000 diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 5a0bcf04c87ff..9f7f4821a11e9 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -60,6 +60,7 @@ import android.os.PersistableBundle; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; +import android.os.incremental.IncrementalManager; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.util.AndroidException; @@ -2996,6 +2997,18 @@ public abstract class PackageManager { @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_REBOOT_ESCROW = "android.hardware.reboot_escrow"; + /** + * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device has + * the requisite kernel support to support incremental delivery aka Incremental FileSystem. + * + * @see IncrementalManager#isEnabled + * @hide + */ + @SystemApi + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_INCREMENTAL_DELIVERY = + "android.software.incremental_delivery"; + /** * Extra field name for the URI to a verification file. Passed to a package * verifier. diff --git a/core/java/android/os/incremental/IncrementalManager.java b/core/java/android/os/incremental/IncrementalManager.java index 35fa37a491de2..0024ac7a6b2e3 100644 --- a/core/java/android/os/incremental/IncrementalManager.java +++ b/core/java/android/os/incremental/IncrementalManager.java @@ -260,6 +260,13 @@ public final class IncrementalManager { } } + /** + * Checks if Incremental is enabled + */ + public static boolean isEnabled() { + return nativeIsEnabled(); + } + /** * Checks if path is mounted on Incremental File System. */ @@ -268,5 +275,6 @@ public final class IncrementalManager { } /* Native methods */ + private static native boolean nativeIsEnabled(); private static native boolean nativeIsIncrementalPath(@NonNull String path); } diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index 74b481c938c31..26d2f19b13b6e 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -29,6 +29,7 @@ import android.os.FileUtils; import android.os.Process; import android.os.SystemProperties; import android.os.Trace; +import android.os.incremental.IncrementalManager; import android.os.storage.StorageManager; import android.permission.PermissionManager.SplitPermissionInfo; import android.text.TextUtils; @@ -1156,6 +1157,10 @@ public class SystemConfig { addFeature(PackageManager.FEATURE_RAM_NORMAL, 0); } + if (IncrementalManager.isEnabled()) { + addFeature(PackageManager.FEATURE_INCREMENTAL_DELIVERY, 0); + } + for (String featureName : mUnavailableFeatures) { removeFeature(featureName); } diff --git a/core/jni/android_os_incremental_IncrementalManager.cpp b/core/jni/android_os_incremental_IncrementalManager.cpp index 698062a2651e1..d41e98241b07a 100644 --- a/core/jni/android_os_incremental_IncrementalManager.cpp +++ b/core/jni/android_os_incremental_IncrementalManager.cpp @@ -26,6 +26,10 @@ namespace android { +static jboolean nativeIsEnabled(JNIEnv* env, jobject clazz) { + return IncFs_IsEnabled(); +} + static jboolean nativeIsIncrementalPath(JNIEnv* env, jobject clazz, jstring javaPath) { @@ -34,8 +38,8 @@ static jboolean nativeIsIncrementalPath(JNIEnv* env, } static const JNINativeMethod method_table[] = { - {"nativeIsIncrementalPath", "(Ljava/lang/String;)Z", - (void*)nativeIsIncrementalPath}, + {"nativeIsEnabled", "()Z", (void*)nativeIsEnabled}, + {"nativeIsIncrementalPath", "(Ljava/lang/String;)Z", (void*)nativeIsIncrementalPath}, }; int register_android_os_incremental_IncrementalManager(JNIEnv* env) {