diff options
author | Jeff Sharkey <jsharkey@android.com> | 2018-01-04 16:46:48 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2018-01-04 18:50:14 -0700 |
commit | 8eb783b21e38b15e41a8268d6b08f24bc62bc21f (patch) | |
tree | 6c5e0a5de3a9e10ed610b682e23b042a9c8677ce | |
parent | f262c7f2e00b9239e0c333b81f1ccb1953713ab1 (diff) |
FBE devices now fully support adoptable storage.
We've finished all the underlying work to support adoptable storage
on FBE devices, so remove the code that was disabling it by default.
Introduce feature flag to make it easier to detect devices that
support adoptable storage.
Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest
Bug: 29923055, 25861755, 33252673, 37289651
Change-Id: I3630d690c9e66c7e41e316a4263ea2eb1e752ad3
-rw-r--r-- | api/test-current.txt | 2 | ||||
-rw-r--r-- | cmds/sm/src/com/android/commands/sm/Sm.java | 16 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 7 | ||||
-rw-r--r-- | core/java/android/os/storage/StorageManager.java | 7 | ||||
-rw-r--r-- | core/java/com/android/server/SystemConfig.java | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 11 |
6 files changed, 20 insertions, 28 deletions
diff --git a/api/test-current.txt b/api/test-current.txt index 008832c09dcf..9be538b2194d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -165,6 +165,8 @@ package android.content.pm { method public abstract int getInstallReason(java.lang.String, android.os.UserHandle); method public abstract java.lang.String getPermissionControllerPackageName(); method public abstract boolean isPermissionReviewModeEnabled(); + field public static final java.lang.String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage"; + field public static final java.lang.String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption"; } public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index 77e8efafa2a0..2bb7edcc7467 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -16,16 +16,10 @@ package com.android.commands.sm; -import static android.os.storage.StorageManager.PROP_ADOPTABLE_FBE; -import static android.os.storage.StorageManager.PROP_HAS_ADOPTABLE; -import static android.os.storage.StorageManager.PROP_VIRTUAL_DISK; - -import android.os.IBinder; import android.os.IVoldTaskListener; import android.os.PersistableBundle; import android.os.RemoteException; import android.os.ServiceManager; -import android.os.SystemProperties; import android.os.storage.DiskInfo; import android.os.storage.IStorageManager; import android.os.storage.StorageManager; @@ -145,15 +139,7 @@ public final class Sm { } public void runHasAdoptable() { - final boolean hasHardware = SystemProperties.getBoolean(PROP_HAS_ADOPTABLE, false) - || SystemProperties.getBoolean(PROP_VIRTUAL_DISK, false); - final boolean hasSoftware; - if (StorageManager.isFileEncryptedNativeOnly()) { - hasSoftware = SystemProperties.getBoolean(PROP_ADOPTABLE_FBE, false); - } else { - hasSoftware = true; - } - System.out.println(hasHardware && hasSoftware); + System.out.println(StorageManager.hasAdoptable()); } public void runGetPrimaryStorageUuid() throws RemoteException { diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 2d7263293f08..793886266f75 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2480,10 +2480,17 @@ public abstract class PackageManager { = "android.software.securely_removes_users"; /** {@hide} */ + @TestApi @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption"; + /** {@hide} */ + @TestApi + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_ADOPTABLE_STORAGE + = "android.software.adoptable_storage"; + /** * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: * The device has a full implementation of the android.webkit.* APIs. Devices diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 4c587a836de8..68c242d9cd66 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -123,8 +123,6 @@ public class StorageManager { public static final String PROP_SDCARDFS = "persist.sys.sdcardfs"; /** {@hide} */ public static final String PROP_VIRTUAL_DISK = "persist.sys.virtual_disk"; - /** {@hide} */ - public static final String PROP_ADOPTABLE_FBE = "persist.sys.adoptable_fbe"; /** {@hide} */ public static final String UUID_PRIVATE_INTERNAL = null; @@ -1476,6 +1474,11 @@ public class StorageManager { } /** {@hide} */ + public static boolean hasAdoptable() { + return SystemProperties.getBoolean(PROP_HAS_ADOPTABLE, false); + } + + /** {@hide} */ public static File maybeTranslateEmulatedPathToInternal(File path) { // Disabled now that FUSE has been replaced by sdcardfs return path; diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index b7a67192f01f..c5af89727575 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -633,6 +633,11 @@ public class SystemConfig { addFeature(PackageManager.FEATURE_SECURELY_REMOVES_USERS, 0); } + // Help legacy devices that may not have updated their static config + if (StorageManager.hasAdoptable()) { + addFeature(PackageManager.FEATURE_ADOPTABLE_STORAGE, 0); + } + if (ActivityManager.isLowRamDeviceStatic()) { addFeature(PackageManager.FEATURE_RAM_LOW, 0); } else { diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 6a0d3ff92db8..90822d1aaef1 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -968,11 +968,6 @@ class StorageManagerService extends IStorageManager.Stub || mForceAdoptable) { flags |= DiskInfo.FLAG_ADOPTABLE; } - // Adoptable storage isn't currently supported on FBE devices - if (StorageManager.isFileEncryptedNativeOnly() - && !SystemProperties.getBoolean(StorageManager.PROP_ADOPTABLE_FBE, false)) { - flags &= ~DiskInfo.FLAG_ADOPTABLE; - } mDisks.put(diskId, new DiskInfo(diskId, flags)); } } @@ -1910,12 +1905,6 @@ class StorageManagerService extends IStorageManager.Stub } if ((mask & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0) { - if (StorageManager.isFileEncryptedNativeOnly() - && !SystemProperties.getBoolean(StorageManager.PROP_ADOPTABLE_FBE, false)) { - throw new IllegalStateException( - "Adoptable storage not available on device with native FBE"); - } - synchronized (mLock) { mForceAdoptable = (flags & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0; |