summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2018-01-04 16:46:48 -0700
committerJeff Sharkey <jsharkey@android.com>2018-01-04 18:50:14 -0700
commit8eb783b21e38b15e41a8268d6b08f24bc62bc21f (patch)
tree6c5e0a5de3a9e10ed610b682e23b042a9c8677ce
parentf262c7f2e00b9239e0c333b81f1ccb1953713ab1 (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.txt2
-rw-r--r--cmds/sm/src/com/android/commands/sm/Sm.java16
-rw-r--r--core/java/android/content/pm/PackageManager.java7
-rw-r--r--core/java/android/os/storage/StorageManager.java7
-rw-r--r--core/java/com/android/server/SystemConfig.java5
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java11
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;