diff options
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 1 | ||||
-rw-r--r-- | core/java/android/os/Process.java | 11 | ||||
-rw-r--r-- | core/java/android/os/storage/IMountService.java | 26 | ||||
-rw-r--r-- | core/java/android/os/storage/StorageManager.java | 9 | ||||
-rw-r--r-- | core/java/com/android/internal/os/Zygote.java | 6 | ||||
-rw-r--r-- | core/java/com/android/internal/os/ZygoteConnection.java | 4 |
6 files changed, 55 insertions, 2 deletions
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index cb68d74..c9853df 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -504,4 +504,5 @@ interface IPackageManager { void grantDefaultPermissions(int userId); void setCarrierAppPackagesProvider(in IPackagesProvider provider); + int getMountExternalMode(int uid); } diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index f9c50f3..7234e98 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -643,6 +643,10 @@ public class Process { } if (mountExternal == Zygote.MOUNT_EXTERNAL_DEFAULT) { argsForZygote.add("--mount-external-default"); + } else if (mountExternal == Zygote.MOUNT_EXTERNAL_READ) { + argsForZygote.add("--mount-external-read"); + } else if (mountExternal == Zygote.MOUNT_EXTERNAL_WRITE) { + argsForZygote.add("--mount-external-write"); } argsForZygote.add("--target-sdk-version=" + targetSdkVersion); @@ -802,7 +806,12 @@ public class Process { * @hide */ public static final boolean isIsolated() { - int uid = UserHandle.getAppId(myUid()); + return isIsolated(myUid()); + } + + /** {@hide} */ + public static final boolean isIsolated(int uid) { + uid = UserHandle.getAppId(uid); return uid >= FIRST_ISOLATED_UID && uid <= LAST_ISOLATED_UID; } diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java index e55ae99..84a879c 100644 --- a/core/java/android/os/storage/IMountService.java +++ b/core/java/android/os/storage/IMountService.java @@ -1177,6 +1177,21 @@ public interface IMountService extends IInterface { _data.recycle(); } } + + @Override + public void remountUid(int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_remountUid, _data, _reply, 0); + _reply.readException(); + } finally { + _reply.recycle(); + _data.recycle(); + } + } } private static final String DESCRIPTOR = "IMountService"; @@ -1292,6 +1307,8 @@ public interface IMountService extends IInterface { static final int TRANSACTION_benchmark = IBinder.FIRST_CALL_TRANSACTION + 59; static final int TRANSACTION_setDebugFlags = IBinder.FIRST_CALL_TRANSACTION + 60; + static final int TRANSACTION_remountUid = IBinder.FIRST_CALL_TRANSACTION + 61; + /** * Cast an IBinder object into an IMountService interface, generating a * proxy if needed. @@ -1845,6 +1862,13 @@ public interface IMountService extends IInterface { reply.writeNoException(); return true; } + case TRANSACTION_remountUid: { + data.enforceInterface(DESCRIPTOR); + int uid = data.readInt(); + remountUid(uid); + reply.writeNoException(); + return true; + } } return super.onTransact(code, data, reply, flags); } @@ -2154,4 +2178,6 @@ public interface IMountService extends IInterface { public String getPrimaryStorageUuid() throws RemoteException; public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback) throws RemoteException; + + public void remountUid(int uid) throws RemoteException; } diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 9b26f24..aab68e9 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -871,6 +871,15 @@ public class StorageManager { } /** {@hide} */ + public void remountUid(int uid) { + try { + mMountService.remountUid(uid); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } + + /** {@hide} */ private static final int DEFAULT_THRESHOLD_PERCENTAGE = 10; private static final long DEFAULT_THRESHOLD_MAX_BYTES = 500 * MB_IN_BYTES; private static final long DEFAULT_FULL_THRESHOLD_BYTES = MB_IN_BYTES; diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index c97fdf4..197004c 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -46,8 +46,12 @@ public final class Zygote { /** No external storage should be mounted. */ public static final int MOUNT_EXTERNAL_NONE = 0; - /** Default user-specific external storage should be mounted. */ + /** Default external storage should be mounted. */ public static final int MOUNT_EXTERNAL_DEFAULT = 1; + /** Read-only external storage should be mounted. */ + public static final int MOUNT_EXTERNAL_READ = 2; + /** Read-write external storage should be mounted. */ + public static final int MOUNT_EXTERNAL_WRITE = 3; private static final ZygoteHooks VM_HOOKS = new ZygoteHooks(); diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index fa870b9..3e86fac 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -519,6 +519,10 @@ class ZygoteConnection { niceName = arg.substring(arg.indexOf('=') + 1); } else if (arg.equals("--mount-external-default")) { mountExternal = Zygote.MOUNT_EXTERNAL_DEFAULT; + } else if (arg.equals("--mount-external-read")) { + mountExternal = Zygote.MOUNT_EXTERNAL_READ; + } else if (arg.equals("--mount-external-write")) { + mountExternal = Zygote.MOUNT_EXTERNAL_WRITE; } else if (arg.equals("--query-abi-list")) { abiListQuery = true; } else if (arg.startsWith("--instruction-set=")) { |