From f73411428046e1a380d242274d7191ce602a38be Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 18 Oct 2016 17:15:18 -0700 Subject: [PATCH] Move IMountService to aidl. Bug: 30977067 Test: Existing tests passing. Change-Id: Icadfdcbc79708d3826b4e11afe35f5963aabcd4c --- Android.mk | 4 + core/java/android/os/storage/IMountService.aidl | 291 +++ core/java/android/os/storage/IMountService.java | 2491 -------------------- .../android/os/storage/IMountServiceListener.aidl | 64 + .../android/os/storage/IMountServiceListener.java | 309 --- .../android/os/storage/IMountShutdownObserver.aidl | 39 + .../android/os/storage/IMountShutdownObserver.java | 124 - .../android/os/storage/IObbActionListener.aidl | 42 + .../android/os/storage/IObbActionListener.java | 136 -- .../android/os/storage/MountServiceListener.java | 44 - core/java/android/os/storage/StorageManager.java | 18 + core/java/android/os/storage/VolumeRecord.aidl | 20 + .../backupconfirm/BackupRestoreConfirmation.java | 2 +- .../server/backup/BackupManagerService.java | 2 +- .../core/java/com/android/server/MountService.java | 4 +- 15 files changed, 482 insertions(+), 3108 deletions(-) create mode 100644 core/java/android/os/storage/IMountService.aidl delete mode 100644 core/java/android/os/storage/IMountService.java create mode 100644 core/java/android/os/storage/IMountServiceListener.aidl delete mode 100644 core/java/android/os/storage/IMountServiceListener.java create mode 100644 core/java/android/os/storage/IMountShutdownObserver.aidl delete mode 100644 core/java/android/os/storage/IMountShutdownObserver.java create mode 100644 core/java/android/os/storage/IObbActionListener.aidl delete mode 100644 core/java/android/os/storage/IObbActionListener.java delete mode 100644 core/java/android/os/storage/MountServiceListener.java create mode 100644 core/java/android/os/storage/VolumeRecord.aidl diff --git a/Android.mk b/Android.mk index 561d2200c38c..b549ddef467e 100644 --- a/Android.mk +++ b/Android.mk @@ -241,6 +241,10 @@ LOCAL_SRC_FILES += \ core/java/android/os/IUpdateLock.aidl \ core/java/android/os/IUserManager.aidl \ core/java/android/os/IVibratorService.aidl \ + core/java/android/os/storage/IMountService.aidl \ + core/java/android/os/storage/IMountServiceListener.aidl \ + core/java/android/os/storage/IMountShutdownObserver.aidl \ + core/java/android/os/storage/IObbActionListener.aidl \ core/java/android/security/IKeystoreService.aidl \ core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl \ core/java/android/service/carrier/ICarrierService.aidl \ diff --git a/core/java/android/os/storage/IMountService.aidl b/core/java/android/os/storage/IMountService.aidl new file mode 100644 index 000000000000..af0d7b76749b --- /dev/null +++ b/core/java/android/os/storage/IMountService.aidl @@ -0,0 +1,291 @@ +/** + * Copyright (c) 2016, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os.storage; + +import android.content.pm.IPackageMoveObserver; +import android.os.ParcelFileDescriptor; +import android.os.storage.DiskInfo; +import android.os.storage.IMountServiceListener; +import android.os.storage.IMountShutdownObserver; +import android.os.storage.IObbActionListener; +import android.os.storage.StorageVolume; +import android.os.storage.VolumeInfo; +import android.os.storage.VolumeRecord; + +/** + * WARNING! Update IMountService.h and IMountService.cpp if you change this + * file. In particular, the transaction ids below must match the + * _TRANSACTION enum in IMountService.cpp + * + * @hide - Applications should use android.os.storage.StorageManager to access + * storage functions. + */ +interface IMountService { + /** + * Registers an IMountServiceListener for receiving async notifications. + */ + void registerListener(IMountServiceListener listener) = 1; + /** + * Unregisters an IMountServiceListener + */ + void unregisterListener(IMountServiceListener listener) = 2; + /** + * Returns true if a USB mass storage host is connected + */ + boolean isUsbMassStorageConnected() = 3; + /** + * Enables / disables USB mass storage. The caller should check actual + * status of enabling/disabling USB mass storage via StorageEventListener. + */ + void setUsbMassStorageEnabled(boolean enable) = 4; + /** + * Returns true if a USB mass storage host is enabled (media is shared) + */ + boolean isUsbMassStorageEnabled() = 5; + /** + * Mount external storage at given mount point. Returns an int consistent + * with MountServiceResultCode + */ + int mountVolume(in String mountPoint) = 6; + /** + * Safely unmount external storage at given mount point. The unmount is an + * asynchronous operation. Applications should register StorageEventListener + * for storage related status changes. + * @param mountPoint the mount point + * @param force whether or not to forcefully unmount it (e.g. even if programs are using this + * data currently) + * @param removeEncryption whether or not encryption mapping should be removed from the volume. + * This value implies {@code force}. + */ + void unmountVolume(in String mountPoint, boolean force, boolean removeEncryption) = 7; + /** + * Format external storage given a mount point. Returns an int consistent + * with MountServiceResultCode + */ + int formatVolume(in String mountPoint) = 8; + /** + * Returns an array of pids with open files on the specified path. + */ + int[] getStorageUsers(in String path) = 9; + /** + * Gets the state of a volume via its mountpoint. + */ + String getVolumeState(in String mountPoint) = 10; + /* + * Creates a secure container with the specified parameters. Returns an int + * consistent with MountServiceResultCode + */ + int createSecureContainer(in String id, int sizeMb, in String fstype, in String key, + int ownerUid, boolean external) = 11; + /* + * Finalize a container which has just been created and populated. After + * finalization, the container is immutable. Returns an int consistent with + * MountServiceResultCode + */ + int finalizeSecureContainer(in String id) = 12; + /* + * Destroy a secure container, and free up all resources associated with it. + * NOTE: Ensure all references are released prior to deleting. Returns an + * int consistent with MountServiceResultCode + */ + int destroySecureContainer(in String id, boolean force) = 13; + /* + * Mount a secure container with the specified key and owner UID. Returns an + * int consistent with MountServiceResultCode + */ + int mountSecureContainer(in String id, in String key, int ownerUid, boolean readOnly) = 14; + /* + * Unount a secure container. Returns an int consistent with + * MountServiceResultCode + */ + int unmountSecureContainer(in String id, boolean force) = 15; + /* + * Returns true if the specified container is mounted + */ + boolean isSecureContainerMounted(in String id) = 16; + /* + * Rename an unmounted secure container. Returns an int consistent with + * MountServiceResultCode + */ + int renameSecureContainer(in String oldId, in String newId) = 17; + /* + * Returns the filesystem path of a mounted secure container. + */ + String getSecureContainerPath(in String id) = 18; + /** + * Gets an Array of currently known secure container IDs + */ + String[] getSecureContainerList() = 19; + /** + * Shuts down the MountService and gracefully unmounts all external media. + * Invokes call back once the shutdown is complete. + */ + void shutdown(IMountShutdownObserver observer) = 20; + /** + * Call into MountService by PackageManager to notify that its done + * processing the media status update request. + */ + void finishMediaUpdate() = 21; + /** + * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and + * only allows the calling process's UID access to the contents. + * MountService will call back to the supplied IObbActionListener to inform + * it of the terminal state of the call. + */ + void mountObb(in String rawPath, in String canonicalPath, in String key, + IObbActionListener token, int nonce) = 22; + /** + * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified, + * any program using it will be forcibly killed to unmount the image. + * MountService will call back to the supplied IObbActionListener to inform + * it of the terminal state of the call. + */ + void unmountObb(in String rawPath, boolean force, IObbActionListener token, int nonce) = 23; + /** + * Checks whether the specified Opaque Binary Blob (OBB) is mounted + * somewhere. + */ + boolean isObbMounted(in String rawPath) = 24; + /** + * Gets the path to the mounted Opaque Binary Blob (OBB). + */ + String getMountedObbPath(in String rawPath) = 25; + /** + * Returns whether or not the external storage is emulated. + */ + boolean isExternalStorageEmulated() = 26; + /** + * Decrypts any encrypted volumes. + */ + int decryptStorage(in String password) = 27; + /** + * Encrypts storage. + */ + int encryptStorage(int type, in String password) = 28; + /** + * Changes the encryption password. + */ + int changeEncryptionPassword(int type, in String password) = 29; + /** + * Returns list of all mountable volumes. + */ + StorageVolume[] getVolumeList(int uid, in String packageName, int flags) = 30; + /** + * Gets the path on the filesystem for the ASEC container itself. + * + * @param cid ASEC container ID + * @return path to filesystem or {@code null} if it's not found + * @throws RemoteException + */ + String getSecureContainerFilesystemPath(in String cid) = 31; + /** + * Determines the encryption state of the volume. + * @return a numerical value. See {@code ENCRYPTION_STATE_*} for possible + * values. + * Note that this has been replaced in most cases by the APIs in + * StorageManager (see isEncryptable and below) + * This is still useful to get the error state when encryption has failed + * and CryptKeeper needs to throw up a screen advising the user what to do + */ + int getEncryptionState() = 32; + /** + * Verify the encryption password against the stored volume. This method + * may only be called by the system process. + */ + int verifyEncryptionPassword(in String password) = 33; + /* + * Fix permissions in a container which has just been created and populated. + * Returns an int consistent with MountServiceResultCode + */ + int fixPermissionsSecureContainer(in String id, int gid, in String filename) = 34; + /** + * Ensure that all directories along given path exist, creating parent + * directories as needed. Validates that given path is absolute and that it + * contains no relative "." or ".." paths or symlinks. Also ensures that + * path belongs to a volume managed by vold, and that path is either + * external storage data or OBB directory belonging to calling app. + */ + int mkdirs(in String callingPkg, in String path) = 35; + /** + * Determines the type of the encryption password + * @return PasswordType + */ + int getPasswordType() = 36; + /** + * Get password from vold + * @return password or empty string + */ + String getPassword() = 37; + /** + * Securely clear password from vold + */ + oneway void clearPassword() = 38; + /** + * Set a field in the crypto header. + * @param field field to set + * @param contents contents to set in field + */ + oneway void setField(in String field, in String contents) = 39; + /** + * Gets a field from the crypto header. + * @param field field to get + * @return contents of field + */ + String getField(in String field) = 40; + int resizeSecureContainer(in String id, int sizeMb, in String key) = 41; + /** + * Report the time of the last maintenance operation such as fstrim. + * @return Timestamp of the last maintenance operation, in the + * System.currentTimeMillis() time base + * @throws RemoteException + */ + long lastMaintenance() = 42; + /** + * Kick off an immediate maintenance operation + * @throws RemoteException + */ + void runMaintenance() = 43; + void waitForAsecScan() = 44; + DiskInfo[] getDisks() = 45; + VolumeInfo[] getVolumes(int flags) = 46; + VolumeRecord[] getVolumeRecords(int flags) = 47; + void mount(in String volId) = 48; + void unmount(in String volId) = 49; + void format(in String volId) = 50; + void partitionPublic(in String diskId) = 51; + void partitionPrivate(in String diskId) = 52; + void partitionMixed(in String diskId, int ratio) = 53; + void setVolumeNickname(in String fsUuid, in String nickname) = 54; + void setVolumeUserFlags(in String fsUuid, int flags, int mask) = 55; + void forgetVolume(in String fsUuid) = 56; + void forgetAllVolumes() = 57; + String getPrimaryStorageUuid() = 58; + void setPrimaryStorageUuid(in String volumeUuid, IPackageMoveObserver callback) = 59; + long benchmark(in String volId) = 60; + void setDebugFlags(int flags, int mask) = 61; + void createUserKey(int userId, int serialNumber, boolean ephemeral) = 62; + void destroyUserKey(int userId) = 63; + void unlockUserKey(int userId, int serialNumber, in byte[] token, in byte[] secret) = 64; + void lockUserKey(int userId) = 65; + boolean isUserKeyUnlocked(int userId) = 66; + void prepareUserStorage(in String volumeUuid, int userId, int serialNumber, int flags) = 67; + void destroyUserStorage(in String volumeUuid, int userId, int flags) = 68; + boolean isConvertibleToFBE() = 69; + ParcelFileDescriptor mountAppFuse(in String name) = 70; + void addUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 71; + void fixateNewestUserKeyAuth(int userId) = 72; +} \ No newline at end of file diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java deleted file mode 100644 index b9bcd1c190a4..000000000000 --- a/core/java/android/os/storage/IMountService.java +++ /dev/null @@ -1,2491 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os.storage; - -import android.content.pm.IPackageMoveObserver; -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; -import android.os.Parcel; -import android.os.ParcelFileDescriptor; -import android.os.Parcelable; -import android.os.RemoteException; - -/** - * WARNING! Update IMountService.h and IMountService.cpp if you change this - * file. In particular, the ordering of the methods below must match the - * _TRANSACTION enum in IMountService.cpp - * - * @hide - Applications should use android.os.storage.StorageManager to access - * storage functions. - */ -public interface IMountService extends IInterface { - /** Local-side IPC implementation stub class. */ - public static abstract class Stub extends Binder implements IMountService { - private static class Proxy implements IMountService { - private final IBinder mRemote; - - Proxy(IBinder remote) { - mRemote = remote; - } - - public IBinder asBinder() { - return mRemote; - } - - public String getInterfaceDescriptor() { - return DESCRIPTOR; - } - - /** - * Registers an IMountServiceListener for receiving async - * notifications. - */ - public void registerListener(IMountServiceListener listener) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); - mRemote.transact(Stub.TRANSACTION_registerListener, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Unregisters an IMountServiceListener - */ - public void unregisterListener(IMountServiceListener listener) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); - mRemote.transact(Stub.TRANSACTION_unregisterListener, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Returns true if a USB mass storage host is connected - */ - public boolean isUsbMassStorageConnected() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_isUsbMassStorageConnected, _data, _reply, 0); - _reply.readException(); - _result = 0 != _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Enables / disables USB mass storage. The caller should check - * actual status of enabling/disabling USB mass storage via - * StorageEventListener. - */ - public void setUsbMassStorageEnabled(boolean enable) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt((enable ? 1 : 0)); - mRemote.transact(Stub.TRANSACTION_setUsbMassStorageEnabled, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Returns true if a USB mass storage host is enabled (media is - * shared) - */ - public boolean isUsbMassStorageEnabled() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_isUsbMassStorageEnabled, _data, _reply, 0); - _reply.readException(); - _result = 0 != _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Mount external storage at given mount point. Returns an int - * consistent with MountServiceResultCode - */ - public int mountVolume(String mountPoint) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(mountPoint); - mRemote.transact(Stub.TRANSACTION_mountVolume, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Safely unmount external storage at given mount point. The unmount - * is an asynchronous operation. Applications should register - * StorageEventListener for storage related status changes. - */ - public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(mountPoint); - _data.writeInt((force ? 1 : 0)); - _data.writeInt((removeEncryption ? 1 : 0)); - mRemote.transact(Stub.TRANSACTION_unmountVolume, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Format external storage given a mount point. Returns an int - * consistent with MountServiceResultCode - */ - public int formatVolume(String mountPoint) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(mountPoint); - mRemote.transact(Stub.TRANSACTION_formatVolume, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Returns an array of pids with open files on the specified path. - */ - public int[] getStorageUsers(String path) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int[] _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(path); - mRemote.transact(Stub.TRANSACTION_getStorageUsers, _data, _reply, 0); - _reply.readException(); - _result = _reply.createIntArray(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Gets the state of a volume via its mountpoint. - */ - public String getVolumeState(String mountPoint) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(mountPoint); - mRemote.transact(Stub.TRANSACTION_getVolumeState, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Creates a secure container with the specified parameters. Returns - * an int consistent with MountServiceResultCode - */ - public int createSecureContainer(String id, int sizeMb, String fstype, String key, - int ownerUid, boolean external) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - _data.writeInt(sizeMb); - _data.writeString(fstype); - _data.writeString(key); - _data.writeInt(ownerUid); - _data.writeInt(external ? 1 : 0); - mRemote.transact(Stub.TRANSACTION_createSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Destroy a secure container, and free up all resources associated - * with it. NOTE: Ensure all references are released prior to - * deleting. Returns an int consistent with MountServiceResultCode - */ - public int destroySecureContainer(String id, boolean force) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - _data.writeInt((force ? 1 : 0)); - mRemote.transact(Stub.TRANSACTION_destroySecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Finalize a container which has just been created and populated. - * After finalization, the container is immutable. Returns an int - * consistent with MountServiceResultCode - */ - public int finalizeSecureContainer(String id) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - mRemote.transact(Stub.TRANSACTION_finalizeSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Mount a secure container with the specified key and owner UID. - * Returns an int consistent with MountServiceResultCode - */ - public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - _data.writeString(key); - _data.writeInt(ownerUid); - _data.writeInt(readOnly ? 1 : 0); - mRemote.transact(Stub.TRANSACTION_mountSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Unount a secure container. Returns an int consistent with - * MountServiceResultCode - */ - public int unmountSecureContainer(String id, boolean force) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - _data.writeInt((force ? 1 : 0)); - mRemote.transact(Stub.TRANSACTION_unmountSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Returns true if the specified container is mounted - */ - public boolean isSecureContainerMounted(String id) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - mRemote.transact(Stub.TRANSACTION_isSecureContainerMounted, _data, _reply, 0); - _reply.readException(); - _result = 0 != _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Rename an unmounted secure container. Returns an int consistent - * with MountServiceResultCode - */ - public int renameSecureContainer(String oldId, String newId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(oldId); - _data.writeString(newId); - mRemote.transact(Stub.TRANSACTION_renameSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Returns the filesystem path of a mounted secure container. - */ - public String getSecureContainerPath(String id) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - mRemote.transact(Stub.TRANSACTION_getSecureContainerPath, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Gets an Array of currently known secure container IDs - */ - public String[] getSecureContainerList() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String[] _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_getSecureContainerList, _data, _reply, 0); - _reply.readException(); - _result = _reply.createStringArray(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Shuts down the MountService and gracefully unmounts all external - * media. Invokes call back once the shutdown is complete. - */ - public void shutdown(IMountShutdownObserver observer) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeStrongBinder((observer != null ? observer.asBinder() : null)); - mRemote.transact(Stub.TRANSACTION_shutdown, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Call into MountService by PackageManager to notify that its done - * processing the media status update request. - */ - public void finishMediaUpdate() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_finishMediaUpdate, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Mounts an Opaque Binary Blob (OBB) with the specified decryption - * key and only allows the calling process's UID access to the - * contents. MountService will call back to the supplied - * IObbActionListener to inform it of the terminal state of the - * call. - */ - public void mountObb(String rawPath, String canonicalPath, String key, - IObbActionListener token, int nonce) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(rawPath); - _data.writeString(canonicalPath); - _data.writeString(key); - _data.writeStrongBinder((token != null ? token.asBinder() : null)); - _data.writeInt(nonce); - mRemote.transact(Stub.TRANSACTION_mountObb, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Unmounts an Opaque Binary Blob (OBB). When the force flag is - * specified, any program using it will be forcibly killed to - * unmount the image. MountService will call back to the supplied - * IObbActionListener to inform it of the terminal state of the - * call. - */ - public void unmountObb( - String rawPath, boolean force, IObbActionListener token, int nonce) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(rawPath); - _data.writeInt((force ? 1 : 0)); - _data.writeStrongBinder((token != null ? token.asBinder() : null)); - _data.writeInt(nonce); - mRemote.transact(Stub.TRANSACTION_unmountObb, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Checks whether the specified Opaque Binary Blob (OBB) is mounted - * somewhere. - */ - public boolean isObbMounted(String rawPath) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(rawPath); - mRemote.transact(Stub.TRANSACTION_isObbMounted, _data, _reply, 0); - _reply.readException(); - _result = 0 != _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Gets the path to the mounted Opaque Binary Blob (OBB). - */ - public String getMountedObbPath(String rawPath) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(rawPath); - mRemote.transact(Stub.TRANSACTION_getMountedObbPath, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Returns whether the external storage is emulated. - */ - public boolean isExternalStorageEmulated() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_isExternalStorageEmulated, _data, _reply, 0); - _reply.readException(); - _result = 0 != _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public int getEncryptionState() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_getEncryptionState, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public int decryptStorage(String password) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(password); - mRemote.transact(Stub.TRANSACTION_decryptStorage, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public int encryptStorage(int type, String password) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(type); - _data.writeString(password); - mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public int changeEncryptionPassword(int type, String password) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(type); - _data.writeString(password); - mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public int verifyEncryptionPassword(String password) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(password); - mRemote.transact(Stub.TRANSACTION_verifyEncryptionPassword, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public int getPasswordType() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_getPasswordType, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public String getPassword() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_getPassword, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public void clearPassword() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_clearPassword, _data, _reply, IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - public void setField(String field, String data) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(field); - _data.writeString(data); - mRemote.transact(Stub.TRANSACTION_setField, _data, _reply, IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - public String getField(String field) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(field); - mRemote.transact(Stub.TRANSACTION_getField, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public boolean isConvertibleToFBE() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_isConvertibleToFBE, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt() != 0; - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - public StorageVolume[] getVolumeList(int uid, String packageName, int flags) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - StorageVolume[] _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(uid); - _data.writeString(packageName); - _data.writeInt(flags); - mRemote.transact(Stub.TRANSACTION_getVolumeList, _data, _reply, 0); - _reply.readException(); - _result = _reply.createTypedArray(StorageVolume.CREATOR); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /* - * Returns the filesystem path of a mounted secure container. - */ - public String getSecureContainerFilesystemPath(String id) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - mRemote.transact(Stub.TRANSACTION_getSecureContainerFilesystemPath, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - /** - * Fix permissions in a container which has just been created and - * populated. Returns an int consistent with MountServiceResultCode - */ - public int fixPermissionsSecureContainer(String id, int gid, String filename) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - _data.writeInt(gid); - _data.writeString(filename); - mRemote.transact(Stub.TRANSACTION_fixPermissionsSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public int mkdirs(String callingPkg, String path) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(callingPkg); - _data.writeString(path); - mRemote.transact(Stub.TRANSACTION_mkdirs, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public int resizeSecureContainer(String id, int sizeMb, String key) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - int _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(id); - _data.writeInt(sizeMb); - _data.writeString(key); - mRemote.transact(Stub.TRANSACTION_resizeSecureContainer, _data, _reply, 0); - _reply.readException(); - _result = _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public long lastMaintenance() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - long _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_lastMaintenance, _data, _reply, 0); - _reply.readException(); - _result = _reply.readLong(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public void runMaintenance() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_runMaintenance, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return; - } - - @Override - public void waitForAsecScan() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_waitForAsecScan, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return; - } - - @Override - public DiskInfo[] getDisks() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - DiskInfo[] _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_getDisks, _data, _reply, 0); - _reply.readException(); - _result = _reply.createTypedArray(DiskInfo.CREATOR); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public VolumeInfo[] getVolumes(int _flags) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - VolumeInfo[] _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(_flags); - mRemote.transact(Stub.TRANSACTION_getVolumes, _data, _reply, 0); - _reply.readException(); - _result = _reply.createTypedArray(VolumeInfo.CREATOR); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public VolumeRecord[] getVolumeRecords(int _flags) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - VolumeRecord[] _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(_flags); - mRemote.transact(Stub.TRANSACTION_getVolumeRecords, _data, _reply, 0); - _reply.readException(); - _result = _reply.createTypedArray(VolumeRecord.CREATOR); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public void mount(String volId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volId); - mRemote.transact(Stub.TRANSACTION_mount, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void unmount(String volId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volId); - mRemote.transact(Stub.TRANSACTION_unmount, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void format(String volId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volId); - mRemote.transact(Stub.TRANSACTION_format, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public long benchmark(String volId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volId); - mRemote.transact(Stub.TRANSACTION_benchmark, _data, _reply, 0); - _reply.readException(); - return _reply.readLong(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void partitionPublic(String diskId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(diskId); - mRemote.transact(Stub.TRANSACTION_partitionPublic, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void partitionPrivate(String diskId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(diskId); - mRemote.transact(Stub.TRANSACTION_partitionPrivate, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void partitionMixed(String diskId, int ratio) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(diskId); - _data.writeInt(ratio); - mRemote.transact(Stub.TRANSACTION_partitionMixed, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void setVolumeNickname(String fsUuid, String nickname) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(fsUuid); - _data.writeString(nickname); - mRemote.transact(Stub.TRANSACTION_setVolumeNickname, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void setVolumeUserFlags(String fsUuid, int flags, int mask) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(fsUuid); - _data.writeInt(flags); - _data.writeInt(mask); - mRemote.transact(Stub.TRANSACTION_setVolumeUserFlags, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void forgetVolume(String fsUuid) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(fsUuid); - mRemote.transact(Stub.TRANSACTION_forgetVolume, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void forgetAllVolumes() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_forgetAllVolumes, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void setDebugFlags(int _flags, int _mask) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(_flags); - _data.writeInt(_mask); - mRemote.transact(Stub.TRANSACTION_setDebugFlags, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public String getPrimaryStorageUuid() throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - String _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - mRemote.transact(Stub.TRANSACTION_getPrimaryStorageUuid, _data, _reply, 0); - _reply.readException(); - _result = _reply.readString(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volumeUuid); - _data.writeStrongBinder((callback != null ? callback.asBinder() : null)); - mRemote.transact(Stub.TRANSACTION_setPrimaryStorageUuid, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void createUserKey(int userId, int serialNumber, boolean ephemeral) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - _data.writeInt(serialNumber); - _data.writeInt(ephemeral ? 1 : 0); - mRemote.transact(Stub.TRANSACTION_createUserKey, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void destroyUserKey(int userId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - mRemote.transact(Stub.TRANSACTION_destroyUserKey, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void addUserKeyAuth(int userId, int serialNumber, - byte[] token, byte[] secret) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - _data.writeInt(serialNumber); - _data.writeByteArray(token); - _data.writeByteArray(secret); - mRemote.transact(Stub.TRANSACTION_addUserKeyAuth, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void fixateNewestUserKeyAuth(int userId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - mRemote.transact(Stub.TRANSACTION_fixateNewestUserKeyAuth, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void unlockUserKey(int userId, int serialNumber, - byte[] token, byte[] secret) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - _data.writeInt(serialNumber); - _data.writeByteArray(token); - _data.writeByteArray(secret); - mRemote.transact(Stub.TRANSACTION_unlockUserKey, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void lockUserKey(int userId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - mRemote.transact(Stub.TRANSACTION_lockUserKey, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public boolean isUserKeyUnlocked(int userId) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - boolean _result; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(userId); - mRemote.transact(Stub.TRANSACTION_isUserKeyUnlocked, _data, _reply, 0); - _reply.readException(); - _result = 0 != _reply.readInt(); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - - @Override - public void prepareUserStorage( - String volumeUuid, int userId, int serialNumber, int flags) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volumeUuid); - _data.writeInt(userId); - _data.writeInt(serialNumber); - _data.writeInt(flags); - mRemote.transact(Stub.TRANSACTION_prepareUserStorage, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void destroyUserStorage(String volumeUuid, int userId, int flags) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(volumeUuid); - _data.writeInt(userId); - _data.writeInt(flags); - mRemote.transact(Stub.TRANSACTION_destroyUserStorage, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public ParcelFileDescriptor mountAppFuse(String name) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - ParcelFileDescriptor _result = null; - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(name); - mRemote.transact(Stub.TRANSACTION_mountAppFuse, _data, _reply, 0); - _reply.readException(); - _result = _reply.readParcelable( - ClassLoader.getSystemClassLoader()); - } finally { - _reply.recycle(); - _data.recycle(); - } - return _result; - } - } - - private static final String DESCRIPTOR = "IMountService"; - - static final int TRANSACTION_registerListener = IBinder.FIRST_CALL_TRANSACTION + 0; - - static final int TRANSACTION_unregisterListener = IBinder.FIRST_CALL_TRANSACTION + 1; - - static final int TRANSACTION_isUsbMassStorageConnected = IBinder.FIRST_CALL_TRANSACTION + 2; - - static final int TRANSACTION_setUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 3; - - static final int TRANSACTION_isUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 4; - - static final int TRANSACTION_mountVolume = IBinder.FIRST_CALL_TRANSACTION + 5; - - static final int TRANSACTION_unmountVolume = IBinder.FIRST_CALL_TRANSACTION + 6; - - static final int TRANSACTION_formatVolume = IBinder.FIRST_CALL_TRANSACTION + 7; - - static final int TRANSACTION_getStorageUsers = IBinder.FIRST_CALL_TRANSACTION + 8; - - static final int TRANSACTION_getVolumeState = IBinder.FIRST_CALL_TRANSACTION + 9; - - static final int TRANSACTION_createSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 10; - - static final int TRANSACTION_finalizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 11; - - static final int TRANSACTION_destroySecureContainer = IBinder.FIRST_CALL_TRANSACTION + 12; - - static final int TRANSACTION_mountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 13; - - static final int TRANSACTION_unmountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 14; - - static final int TRANSACTION_isSecureContainerMounted = IBinder.FIRST_CALL_TRANSACTION + 15; - - static final int TRANSACTION_renameSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 16; - - static final int TRANSACTION_getSecureContainerPath = IBinder.FIRST_CALL_TRANSACTION + 17; - - static final int TRANSACTION_getSecureContainerList = IBinder.FIRST_CALL_TRANSACTION + 18; - - static final int TRANSACTION_shutdown = IBinder.FIRST_CALL_TRANSACTION + 19; - - static final int TRANSACTION_finishMediaUpdate = IBinder.FIRST_CALL_TRANSACTION + 20; - - static final int TRANSACTION_mountObb = IBinder.FIRST_CALL_TRANSACTION + 21; - - static final int TRANSACTION_unmountObb = IBinder.FIRST_CALL_TRANSACTION + 22; - - static final int TRANSACTION_isObbMounted = IBinder.FIRST_CALL_TRANSACTION + 23; - - static final int TRANSACTION_getMountedObbPath = IBinder.FIRST_CALL_TRANSACTION + 24; - - static final int TRANSACTION_isExternalStorageEmulated = IBinder.FIRST_CALL_TRANSACTION + 25; - - static final int TRANSACTION_decryptStorage = IBinder.FIRST_CALL_TRANSACTION + 26; - - static final int TRANSACTION_encryptStorage = IBinder.FIRST_CALL_TRANSACTION + 27; - - static final int TRANSACTION_changeEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 28; - - static final int TRANSACTION_getVolumeList = IBinder.FIRST_CALL_TRANSACTION + 29; - - static final int TRANSACTION_getSecureContainerFilesystemPath = IBinder.FIRST_CALL_TRANSACTION + 30; - - static final int TRANSACTION_getEncryptionState = IBinder.FIRST_CALL_TRANSACTION + 31; - - static final int TRANSACTION_verifyEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 32; - - static final int TRANSACTION_fixPermissionsSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 33; - - static final int TRANSACTION_mkdirs = IBinder.FIRST_CALL_TRANSACTION + 34; - - static final int TRANSACTION_getPasswordType = IBinder.FIRST_CALL_TRANSACTION + 35; - - static final int TRANSACTION_getPassword = IBinder.FIRST_CALL_TRANSACTION + 36; - - static final int TRANSACTION_clearPassword = IBinder.FIRST_CALL_TRANSACTION + 37; - - static final int TRANSACTION_setField = IBinder.FIRST_CALL_TRANSACTION + 38; - - static final int TRANSACTION_getField = IBinder.FIRST_CALL_TRANSACTION + 39; - - static final int TRANSACTION_resizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 40; - - static final int TRANSACTION_lastMaintenance = IBinder.FIRST_CALL_TRANSACTION + 41; - - static final int TRANSACTION_runMaintenance = IBinder.FIRST_CALL_TRANSACTION + 42; - - static final int TRANSACTION_waitForAsecScan = IBinder.FIRST_CALL_TRANSACTION + 43; - - static final int TRANSACTION_getDisks = IBinder.FIRST_CALL_TRANSACTION + 44; - static final int TRANSACTION_getVolumes = IBinder.FIRST_CALL_TRANSACTION + 45; - static final int TRANSACTION_getVolumeRecords = IBinder.FIRST_CALL_TRANSACTION + 46; - - static final int TRANSACTION_mount = IBinder.FIRST_CALL_TRANSACTION + 47; - static final int TRANSACTION_unmount = IBinder.FIRST_CALL_TRANSACTION + 48; - static final int TRANSACTION_format = IBinder.FIRST_CALL_TRANSACTION + 49; - - static final int TRANSACTION_partitionPublic = IBinder.FIRST_CALL_TRANSACTION + 50; - static final int TRANSACTION_partitionPrivate = IBinder.FIRST_CALL_TRANSACTION + 51; - static final int TRANSACTION_partitionMixed = IBinder.FIRST_CALL_TRANSACTION + 52; - - static final int TRANSACTION_setVolumeNickname = IBinder.FIRST_CALL_TRANSACTION + 53; - static final int TRANSACTION_setVolumeUserFlags = IBinder.FIRST_CALL_TRANSACTION + 54; - static final int TRANSACTION_forgetVolume = IBinder.FIRST_CALL_TRANSACTION + 55; - static final int TRANSACTION_forgetAllVolumes = IBinder.FIRST_CALL_TRANSACTION + 56; - - static final int TRANSACTION_getPrimaryStorageUuid = IBinder.FIRST_CALL_TRANSACTION + 57; - static final int TRANSACTION_setPrimaryStorageUuid = IBinder.FIRST_CALL_TRANSACTION + 58; - - static final int TRANSACTION_benchmark = IBinder.FIRST_CALL_TRANSACTION + 59; - static final int TRANSACTION_setDebugFlags = IBinder.FIRST_CALL_TRANSACTION + 60; - - static final int TRANSACTION_createUserKey = IBinder.FIRST_CALL_TRANSACTION + 61; - static final int TRANSACTION_destroyUserKey = IBinder.FIRST_CALL_TRANSACTION + 62; - - static final int TRANSACTION_unlockUserKey = IBinder.FIRST_CALL_TRANSACTION + 63; - static final int TRANSACTION_lockUserKey = IBinder.FIRST_CALL_TRANSACTION + 64; - static final int TRANSACTION_isUserKeyUnlocked = IBinder.FIRST_CALL_TRANSACTION + 65; - - static final int TRANSACTION_prepareUserStorage = IBinder.FIRST_CALL_TRANSACTION + 66; - static final int TRANSACTION_destroyUserStorage = IBinder.FIRST_CALL_TRANSACTION + 67; - - static final int TRANSACTION_isConvertibleToFBE = IBinder.FIRST_CALL_TRANSACTION + 68; - - static final int TRANSACTION_mountAppFuse = IBinder.FIRST_CALL_TRANSACTION + 69; - - static final int TRANSACTION_addUserKeyAuth = IBinder.FIRST_CALL_TRANSACTION + 70; - - static final int TRANSACTION_fixateNewestUserKeyAuth = IBinder.FIRST_CALL_TRANSACTION + 71; - - /** - * Cast an IBinder object into an IMountService interface, generating a - * proxy if needed. - */ - public static IMountService asInterface(IBinder obj) { - if (obj == null) { - return null; - } - IInterface iin = obj.queryLocalInterface(DESCRIPTOR); - if (iin != null && iin instanceof IMountService) { - return (IMountService) iin; - } - return new IMountService.Stub.Proxy(obj); - } - - /** Construct the stub at attach it to the interface. */ - public Stub() { - attachInterface(this, DESCRIPTOR); - } - - public IBinder asBinder() { - return this; - } - - @Override - public boolean onTransact(int code, Parcel data, Parcel reply, - int flags) throws RemoteException { - switch (code) { - case INTERFACE_TRANSACTION: { - reply.writeString(DESCRIPTOR); - return true; - } - case TRANSACTION_registerListener: { - data.enforceInterface(DESCRIPTOR); - IMountServiceListener listener; - listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); - registerListener(listener); - reply.writeNoException(); - return true; - } - case TRANSACTION_unregisterListener: { - data.enforceInterface(DESCRIPTOR); - IMountServiceListener listener; - listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); - unregisterListener(listener); - reply.writeNoException(); - return true; - } - case TRANSACTION_isUsbMassStorageConnected: { - data.enforceInterface(DESCRIPTOR); - boolean result = isUsbMassStorageConnected(); - reply.writeNoException(); - reply.writeInt((result ? 1 : 0)); - return true; - } - case TRANSACTION_setUsbMassStorageEnabled: { - data.enforceInterface(DESCRIPTOR); - boolean enable; - enable = 0 != data.readInt(); - setUsbMassStorageEnabled(enable); - reply.writeNoException(); - return true; - } - case TRANSACTION_isUsbMassStorageEnabled: { - data.enforceInterface(DESCRIPTOR); - boolean result = isUsbMassStorageEnabled(); - reply.writeNoException(); - reply.writeInt((result ? 1 : 0)); - return true; - } - case TRANSACTION_mountVolume: { - data.enforceInterface(DESCRIPTOR); - String mountPoint; - mountPoint = data.readString(); - int resultCode = mountVolume(mountPoint); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_unmountVolume: { - data.enforceInterface(DESCRIPTOR); - String mountPoint; - mountPoint = data.readString(); - boolean force = 0 != data.readInt(); - boolean removeEncrypt = 0 != data.readInt(); - unmountVolume(mountPoint, force, removeEncrypt); - reply.writeNoException(); - return true; - } - case TRANSACTION_formatVolume: { - data.enforceInterface(DESCRIPTOR); - String mountPoint; - mountPoint = data.readString(); - int result = formatVolume(mountPoint); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_getStorageUsers: { - data.enforceInterface(DESCRIPTOR); - String path; - path = data.readString(); - int[] pids = getStorageUsers(path); - reply.writeNoException(); - reply.writeIntArray(pids); - return true; - } - case TRANSACTION_getVolumeState: { - data.enforceInterface(DESCRIPTOR); - String mountPoint; - mountPoint = data.readString(); - String state = getVolumeState(mountPoint); - reply.writeNoException(); - reply.writeString(state); - return true; - } - case TRANSACTION_createSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - int sizeMb; - sizeMb = data.readInt(); - String fstype; - fstype = data.readString(); - String key; - key = data.readString(); - int ownerUid; - ownerUid = data.readInt(); - boolean external; - external = 0 != data.readInt(); - int resultCode = createSecureContainer(id, sizeMb, fstype, key, ownerUid, - external); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_finalizeSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - int resultCode = finalizeSecureContainer(id); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_destroySecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - boolean force; - force = 0 != data.readInt(); - int resultCode = destroySecureContainer(id, force); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_mountSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - String key; - key = data.readString(); - int ownerUid; - ownerUid = data.readInt(); - boolean readOnly; - readOnly = data.readInt() != 0; - int resultCode = mountSecureContainer(id, key, ownerUid, readOnly); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_unmountSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - boolean force; - force = 0 != data.readInt(); - int resultCode = unmountSecureContainer(id, force); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_isSecureContainerMounted: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - boolean status = isSecureContainerMounted(id); - reply.writeNoException(); - reply.writeInt((status ? 1 : 0)); - return true; - } - case TRANSACTION_renameSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String oldId; - oldId = data.readString(); - String newId; - newId = data.readString(); - int resultCode = renameSecureContainer(oldId, newId); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_getSecureContainerPath: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - String path = getSecureContainerPath(id); - reply.writeNoException(); - reply.writeString(path); - return true; - } - case TRANSACTION_getSecureContainerList: { - data.enforceInterface(DESCRIPTOR); - String[] ids = getSecureContainerList(); - reply.writeNoException(); - reply.writeStringArray(ids); - return true; - } - case TRANSACTION_shutdown: { - data.enforceInterface(DESCRIPTOR); - IMountShutdownObserver observer; - observer = IMountShutdownObserver.Stub.asInterface(data - .readStrongBinder()); - shutdown(observer); - reply.writeNoException(); - return true; - } - case TRANSACTION_finishMediaUpdate: { - data.enforceInterface(DESCRIPTOR); - finishMediaUpdate(); - reply.writeNoException(); - return true; - } - case TRANSACTION_mountObb: { - data.enforceInterface(DESCRIPTOR); - final String rawPath = data.readString(); - final String canonicalPath = data.readString(); - final String key = data.readString(); - IObbActionListener observer; - observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); - int nonce; - nonce = data.readInt(); - mountObb(rawPath, canonicalPath, key, observer, nonce); - reply.writeNoException(); - return true; - } - case TRANSACTION_unmountObb: { - data.enforceInterface(DESCRIPTOR); - String filename; - filename = data.readString(); - boolean force; - force = 0 != data.readInt(); - IObbActionListener observer; - observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); - int nonce; - nonce = data.readInt(); - unmountObb(filename, force, observer, nonce); - reply.writeNoException(); - return true; - } - case TRANSACTION_isObbMounted: { - data.enforceInterface(DESCRIPTOR); - String filename; - filename = data.readString(); - boolean status = isObbMounted(filename); - reply.writeNoException(); - reply.writeInt((status ? 1 : 0)); - return true; - } - case TRANSACTION_getMountedObbPath: { - data.enforceInterface(DESCRIPTOR); - String filename; - filename = data.readString(); - String mountedPath = getMountedObbPath(filename); - reply.writeNoException(); - reply.writeString(mountedPath); - return true; - } - case TRANSACTION_isExternalStorageEmulated: { - data.enforceInterface(DESCRIPTOR); - boolean emulated = isExternalStorageEmulated(); - reply.writeNoException(); - reply.writeInt(emulated ? 1 : 0); - return true; - } - case TRANSACTION_decryptStorage: { - data.enforceInterface(DESCRIPTOR); - String password = data.readString(); - int result = decryptStorage(password); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_encryptStorage: { - data.enforceInterface(DESCRIPTOR); - int type = data.readInt(); - String password = data.readString(); - int result = encryptStorage(type, password); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_changeEncryptionPassword: { - data.enforceInterface(DESCRIPTOR); - int type = data.readInt(); - String password = data.readString(); - int result = changeEncryptionPassword(type, password); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_getVolumeList: { - data.enforceInterface(DESCRIPTOR); - int uid = data.readInt(); - String packageName = data.readString(); - int _flags = data.readInt(); - StorageVolume[] result = getVolumeList(uid, packageName, _flags); - reply.writeNoException(); - reply.writeTypedArray(result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; - } - case TRANSACTION_getSecureContainerFilesystemPath: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - String path = getSecureContainerFilesystemPath(id); - reply.writeNoException(); - reply.writeString(path); - return true; - } - case TRANSACTION_getEncryptionState: { - data.enforceInterface(DESCRIPTOR); - int result = getEncryptionState(); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_fixPermissionsSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - int gid; - gid = data.readInt(); - String filename; - filename = data.readString(); - int resultCode = fixPermissionsSecureContainer(id, gid, filename); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_mkdirs: { - data.enforceInterface(DESCRIPTOR); - String callingPkg = data.readString(); - String path = data.readString(); - int result = mkdirs(callingPkg, path); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_getPasswordType: { - data.enforceInterface(DESCRIPTOR); - int result = getPasswordType(); - reply.writeNoException(); - reply.writeInt(result); - return true; - } - case TRANSACTION_getPassword: { - data.enforceInterface(DESCRIPTOR); - String result = getPassword(); - reply.writeNoException(); - reply.writeString(result); - return true; - } - case TRANSACTION_clearPassword: { - data.enforceInterface(DESCRIPTOR); - clearPassword(); - reply.writeNoException(); - return true; - } - case TRANSACTION_setField: { - data.enforceInterface(DESCRIPTOR); - String field = data.readString(); - String contents = data.readString(); - setField(field, contents); - reply.writeNoException(); - return true; - } - case TRANSACTION_getField: { - data.enforceInterface(DESCRIPTOR); - String field = data.readString(); - String contents = getField(field); - reply.writeNoException(); - reply.writeString(contents); - return true; - } - case TRANSACTION_isConvertibleToFBE: { - data.enforceInterface(DESCRIPTOR); - int resultCode = isConvertibleToFBE() ? 1 : 0; - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_resizeSecureContainer: { - data.enforceInterface(DESCRIPTOR); - String id; - id = data.readString(); - int sizeMb; - sizeMb = data.readInt(); - String key; - key = data.readString(); - int resultCode = resizeSecureContainer(id, sizeMb, key); - reply.writeNoException(); - reply.writeInt(resultCode); - return true; - } - case TRANSACTION_lastMaintenance: { - data.enforceInterface(DESCRIPTOR); - long lastMaintenance = lastMaintenance(); - reply.writeNoException(); - reply.writeLong(lastMaintenance); - return true; - } - case TRANSACTION_runMaintenance: { - data.enforceInterface(DESCRIPTOR); - runMaintenance(); - reply.writeNoException(); - return true; - } - case TRANSACTION_waitForAsecScan: { - data.enforceInterface(DESCRIPTOR); - waitForAsecScan(); - reply.writeNoException(); - return true; - } - case TRANSACTION_getDisks: { - data.enforceInterface(DESCRIPTOR); - DiskInfo[] disks = getDisks(); - reply.writeNoException(); - reply.writeTypedArray(disks, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; - } - case TRANSACTION_getVolumes: { - data.enforceInterface(DESCRIPTOR); - int _flags = data.readInt(); - VolumeInfo[] volumes = getVolumes(_flags); - reply.writeNoException(); - reply.writeTypedArray(volumes, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; - } - case TRANSACTION_getVolumeRecords: { - data.enforceInterface(DESCRIPTOR); - int _flags = data.readInt(); - VolumeRecord[] volumes = getVolumeRecords(_flags); - reply.writeNoException(); - reply.writeTypedArray(volumes, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; - } - case TRANSACTION_mount: { - data.enforceInterface(DESCRIPTOR); - String volId = data.readString(); - mount(volId); - reply.writeNoException(); - return true; - } - case TRANSACTION_unmount: { - data.enforceInterface(DESCRIPTOR); - String volId = data.readString(); - unmount(volId); - reply.writeNoException(); - return true; - } - case TRANSACTION_format: { - data.enforceInterface(DESCRIPTOR); - String volId = data.readString(); - format(volId); - reply.writeNoException(); - return true; - } - case TRANSACTION_benchmark: { - data.enforceInterface(DESCRIPTOR); - String volId = data.readString(); - long res = benchmark(volId); - reply.writeNoException(); - reply.writeLong(res); - return true; - } - case TRANSACTION_partitionPublic: { - data.enforceInterface(DESCRIPTOR); - String diskId = data.readString(); - partitionPublic(diskId); - reply.writeNoException(); - return true; - } - case TRANSACTION_partitionPrivate: { - data.enforceInterface(DESCRIPTOR); - String diskId = data.readString(); - partitionPrivate(diskId); - reply.writeNoException(); - return true; - } - case TRANSACTION_partitionMixed: { - data.enforceInterface(DESCRIPTOR); - String diskId = data.readString(); - int ratio = data.readInt(); - partitionMixed(diskId, ratio); - reply.writeNoException(); - return true; - } - case TRANSACTION_setVolumeNickname: { - data.enforceInterface(DESCRIPTOR); - String volId = data.readString(); - String nickname = data.readString(); - setVolumeNickname(volId, nickname); - reply.writeNoException(); - return true; - } - case TRANSACTION_setVolumeUserFlags: { - data.enforceInterface(DESCRIPTOR); - String volId = data.readString(); - int _flags = data.readInt(); - int _mask = data.readInt(); - setVolumeUserFlags(volId, _flags, _mask); - reply.writeNoException(); - return true; - } - case TRANSACTION_forgetVolume: { - data.enforceInterface(DESCRIPTOR); - String fsUuid = data.readString(); - forgetVolume(fsUuid); - reply.writeNoException(); - return true; - } - case TRANSACTION_forgetAllVolumes: { - data.enforceInterface(DESCRIPTOR); - forgetAllVolumes(); - reply.writeNoException(); - return true; - } - case TRANSACTION_setDebugFlags: { - data.enforceInterface(DESCRIPTOR); - int _flags = data.readInt(); - int _mask = data.readInt(); - setDebugFlags(_flags, _mask); - reply.writeNoException(); - return true; - } - case TRANSACTION_getPrimaryStorageUuid: { - data.enforceInterface(DESCRIPTOR); - String volumeUuid = getPrimaryStorageUuid(); - reply.writeNoException(); - reply.writeString(volumeUuid); - return true; - } - case TRANSACTION_setPrimaryStorageUuid: { - data.enforceInterface(DESCRIPTOR); - String volumeUuid = data.readString(); - IPackageMoveObserver listener = IPackageMoveObserver.Stub.asInterface( - data.readStrongBinder()); - setPrimaryStorageUuid(volumeUuid, listener); - reply.writeNoException(); - return true; - } - case TRANSACTION_createUserKey: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - int serialNumber = data.readInt(); - boolean ephemeral = data.readInt() != 0; - createUserKey(userId, serialNumber, ephemeral); - reply.writeNoException(); - return true; - } - case TRANSACTION_destroyUserKey: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - destroyUserKey(userId); - reply.writeNoException(); - return true; - } - case TRANSACTION_addUserKeyAuth: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - int serialNumber = data.readInt(); - byte[] token = data.createByteArray(); - byte[] secret = data.createByteArray(); - addUserKeyAuth(userId, serialNumber, token, secret); - reply.writeNoException(); - return true; - } - case TRANSACTION_fixateNewestUserKeyAuth: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - fixateNewestUserKeyAuth(userId); - reply.writeNoException(); - return true; - } - case TRANSACTION_unlockUserKey: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - int serialNumber = data.readInt(); - byte[] token = data.createByteArray(); - byte[] secret = data.createByteArray(); - unlockUserKey(userId, serialNumber, token, secret); - reply.writeNoException(); - return true; - } - case TRANSACTION_lockUserKey: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - lockUserKey(userId); - reply.writeNoException(); - return true; - } - case TRANSACTION_isUserKeyUnlocked: { - data.enforceInterface(DESCRIPTOR); - int userId = data.readInt(); - boolean result = isUserKeyUnlocked(userId); - reply.writeNoException(); - reply.writeInt(result ? 1 : 0); - return true; - } - case TRANSACTION_prepareUserStorage: { - data.enforceInterface(DESCRIPTOR); - String volumeUuid = data.readString(); - int userId = data.readInt(); - int serialNumber = data.readInt(); - int _flags = data.readInt(); - prepareUserStorage(volumeUuid, userId, serialNumber, _flags); - reply.writeNoException(); - return true; - } - case TRANSACTION_destroyUserStorage: { - data.enforceInterface(DESCRIPTOR); - String volumeUuid = data.readString(); - int userId = data.readInt(); - int _flags = data.readInt(); - destroyUserStorage(volumeUuid, userId, _flags); - reply.writeNoException(); - return true; - } - case TRANSACTION_mountAppFuse: { - data.enforceInterface(DESCRIPTOR); - String name = data.readString(); - ParcelFileDescriptor fd = mountAppFuse(name); - reply.writeNoException(); - reply.writeParcelable(fd, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); - return true; - } - } - return super.onTransact(code, data, reply, flags); - } - } - - /* - * Creates a secure container with the specified parameters. Returns an int - * consistent with MountServiceResultCode - */ - public int createSecureContainer(String id, int sizeMb, String fstype, String key, - int ownerUid, boolean external) throws RemoteException; - - /* - * Destroy a secure container, and free up all resources associated with it. - * NOTE: Ensure all references are released prior to deleting. Returns an - * int consistent with MountServiceResultCode - */ - public int destroySecureContainer(String id, boolean force) throws RemoteException; - - /* - * Finalize a container which has just been created and populated. After - * finalization, the container is immutable. Returns an int consistent with - * MountServiceResultCode - */ - public int finalizeSecureContainer(String id) throws RemoteException; - - /** - * Call into MountService by PackageManager to notify that its done - * processing the media status update request. - */ - public void finishMediaUpdate() throws RemoteException; - - /** - * Format external storage given a mount point. Returns an int consistent - * with MountServiceResultCode - */ - public int formatVolume(String mountPoint) throws RemoteException; - - /** - * Gets the path to the mounted Opaque Binary Blob (OBB). - */ - public String getMountedObbPath(String rawPath) throws RemoteException; - - /** - * Gets an Array of currently known secure container IDs - */ - public String[] getSecureContainerList() throws RemoteException; - - /* - * Returns the filesystem path of a mounted secure container. - */ - public String getSecureContainerPath(String id) throws RemoteException; - - /** - * Returns an array of pids with open files on the specified path. - */ - public int[] getStorageUsers(String path) throws RemoteException; - - /** - * Gets the state of a volume via its mountpoint. - */ - public String getVolumeState(String mountPoint) throws RemoteException; - - /** - * Checks whether the specified Opaque Binary Blob (OBB) is mounted - * somewhere. - */ - public boolean isObbMounted(String rawPath) throws RemoteException; - - /* - * Returns true if the specified container is mounted - */ - public boolean isSecureContainerMounted(String id) throws RemoteException; - - /** - * Returns true if a USB mass storage host is connected - */ - public boolean isUsbMassStorageConnected() throws RemoteException; - - /** - * Returns true if a USB mass storage host is enabled (media is shared) - */ - public boolean isUsbMassStorageEnabled() throws RemoteException; - - /** - * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and - * only allows the calling process's UID access to the contents. - * MountService will call back to the supplied IObbActionListener to inform - * it of the terminal state of the call. - */ - public void mountObb(String rawPath, String canonicalPath, String key, - IObbActionListener token, int nonce) throws RemoteException; - - /* - * Mount a secure container with the specified key and owner UID. Returns an - * int consistent with MountServiceResultCode - */ - public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly) - throws RemoteException; - - /** - * Mount external storage at given mount point. Returns an int consistent - * with MountServiceResultCode - */ - public int mountVolume(String mountPoint) throws RemoteException; - - /** - * Registers an IMountServiceListener for receiving async notifications. - */ - public void registerListener(IMountServiceListener listener) throws RemoteException; - - /* - * Rename an unmounted secure container. Returns an int consistent with - * MountServiceResultCode - */ - public int renameSecureContainer(String oldId, String newId) throws RemoteException; - - /** - * Enables / disables USB mass storage. The caller should check actual - * status of enabling/disabling USB mass storage via StorageEventListener. - */ - public void setUsbMassStorageEnabled(boolean enable) throws RemoteException; - - /** - * Shuts down the MountService and gracefully unmounts all external media. - * Invokes call back once the shutdown is complete. - */ - public void shutdown(IMountShutdownObserver observer) throws RemoteException; - - /** - * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified, - * any program using it will be forcibly killed to unmount the image. - * MountService will call back to the supplied IObbActionListener to inform - * it of the terminal state of the call. - */ - public void unmountObb(String rawPath, boolean force, IObbActionListener token, int nonce) - throws RemoteException; - - /* - * Unount a secure container. Returns an int consistent with - * MountServiceResultCode - */ - public int unmountSecureContainer(String id, boolean force) throws RemoteException; - - /** - * Safely unmount external storage at given mount point. The unmount is an - * asynchronous operation. Applications should register StorageEventListener - * for storage related status changes. - * @param mountPoint the mount point - * @param force whether or not to forcefully unmount it (e.g. even if programs are using this - * data currently) - * @param removeEncryption whether or not encryption mapping should be removed from the volume. - * This value implies {@code force}. - */ - public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) - throws RemoteException; - - /** - * Unregisters an IMountServiceListener - */ - public void unregisterListener(IMountServiceListener listener) throws RemoteException; - - /** - * Returns whether or not the external storage is emulated. - */ - public boolean isExternalStorageEmulated() throws RemoteException; - - /** The volume is not encrypted. */ - static final int ENCRYPTION_STATE_NONE = 1; - /** The volume has been encrypted succesfully. */ - static final int ENCRYPTION_STATE_OK = 0; - /** The volume is in a bad state.*/ - static final int ENCRYPTION_STATE_ERROR_UNKNOWN = -1; - /** Encryption is incomplete */ - static final int ENCRYPTION_STATE_ERROR_INCOMPLETE = -2; - /** Encryption is incomplete and irrecoverable */ - static final int ENCRYPTION_STATE_ERROR_INCONSISTENT = -3; - /** Underlying data is corrupt */ - static final int ENCRYPTION_STATE_ERROR_CORRUPT = -4; - - /** - * Determines the encryption state of the volume. - * @return a numerical value. See {@code ENCRYPTION_STATE_*} for possible - * values. - * Note that this has been replaced in most cases by the APIs in - * StorageManager (see isEncryptable and below) - * This is still useful to get the error state when encryption has failed - * and CryptKeeper needs to throw up a screen advising the user what to do - */ - public int getEncryptionState() throws RemoteException; - - /** - * Decrypts any encrypted volumes. - */ - public int decryptStorage(String password) throws RemoteException; - - /** - * Encrypts storage. - */ - public int encryptStorage(int type, String password) throws RemoteException; - - /** - * Changes the encryption password. - */ - public int changeEncryptionPassword(int type, String password) - throws RemoteException; - - /** - * Verify the encryption password against the stored volume. This method - * may only be called by the system process. - */ - public int verifyEncryptionPassword(String password) throws RemoteException; - - /** - * Returns list of all mountable volumes. - */ - public StorageVolume[] getVolumeList(int uid, String packageName, int flags) throws RemoteException; - - /** - * Gets the path on the filesystem for the ASEC container itself. - * - * @param cid ASEC container ID - * @return path to filesystem or {@code null} if it's not found - * @throws RemoteException - */ - public String getSecureContainerFilesystemPath(String cid) throws RemoteException; - - /* - * Fix permissions in a container which has just been created and populated. - * Returns an int consistent with MountServiceResultCode - */ - public int fixPermissionsSecureContainer(String id, int gid, String filename) - throws RemoteException; - - /** - * Ensure that all directories along given path exist, creating parent - * directories as needed. Validates that given path is absolute and that it - * contains no relative "." or ".." paths or symlinks. Also ensures that - * path belongs to a volume managed by vold, and that path is either - * external storage data or OBB directory belonging to calling app. - */ - public int mkdirs(String callingPkg, String path) throws RemoteException; - - /** - * Determines the type of the encryption password - * @return PasswordType - */ - public int getPasswordType() throws RemoteException; - - /** - * Get password from vold - * @return password or empty string - */ - public String getPassword() throws RemoteException; - - /** - * Securely clear password from vold - */ - public void clearPassword() throws RemoteException; - - /** - * Set a field in the crypto header. - * @param field field to set - * @param contents contents to set in field - */ - public void setField(String field, String contents) throws RemoteException; - - /** - * Gets a field from the crypto header. - * @param field field to get - * @return contents of field - */ - public String getField(String field) throws RemoteException; - - public boolean isConvertibleToFBE() throws RemoteException; - - public int resizeSecureContainer(String id, int sizeMb, String key) throws RemoteException; - - /** - * Report the time of the last maintenance operation such as fstrim. - * @return Timestamp of the last maintenance operation, in the - * System.currentTimeMillis() time base - * @throws RemoteException - */ - public long lastMaintenance() throws RemoteException; - - /** - * Kick off an immediate maintenance operation - * @throws RemoteException - */ - public void runMaintenance() throws RemoteException; - - public void waitForAsecScan() throws RemoteException; - - public DiskInfo[] getDisks() throws RemoteException; - public VolumeInfo[] getVolumes(int flags) throws RemoteException; - public VolumeRecord[] getVolumeRecords(int flags) throws RemoteException; - - public void mount(String volId) throws RemoteException; - public void unmount(String volId) throws RemoteException; - public void format(String volId) throws RemoteException; - public long benchmark(String volId) throws RemoteException; - - public void partitionPublic(String diskId) throws RemoteException; - public void partitionPrivate(String diskId) throws RemoteException; - public void partitionMixed(String diskId, int ratio) throws RemoteException; - - public void setVolumeNickname(String fsUuid, String nickname) throws RemoteException; - public void setVolumeUserFlags(String fsUuid, int flags, int mask) throws RemoteException; - public void forgetVolume(String fsUuid) throws RemoteException; - public void forgetAllVolumes() throws RemoteException; - public void setDebugFlags(int flags, int mask) throws RemoteException; - - public String getPrimaryStorageUuid() throws RemoteException; - public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback) - throws RemoteException; - - public void createUserKey(int userId, int serialNumber, boolean ephemeral) - throws RemoteException; - public void destroyUserKey(int userId) throws RemoteException; - public void addUserKeyAuth(int userId, int serialNumber, - byte[] token, byte[] secret) throws RemoteException; - public void fixateNewestUserKeyAuth(int userId) throws RemoteException; - - public void unlockUserKey(int userId, int serialNumber, - byte[] token, byte[] secret) throws RemoteException; - public void lockUserKey(int userId) throws RemoteException; - public boolean isUserKeyUnlocked(int userId) throws RemoteException; - - public void prepareUserStorage(String volumeUuid, int userId, int serialNumber, - int flags) throws RemoteException; - public void destroyUserStorage(String volumeUuid, int userId, int flags) throws RemoteException; - - public ParcelFileDescriptor mountAppFuse(String name) throws RemoteException; -} diff --git a/core/java/android/os/storage/IMountServiceListener.aidl b/core/java/android/os/storage/IMountServiceListener.aidl new file mode 100644 index 000000000000..e1499781b652 --- /dev/null +++ b/core/java/android/os/storage/IMountServiceListener.aidl @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2016, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os.storage; + +import android.os.storage.DiskInfo; +import android.os.storage.VolumeInfo; +import android.os.storage.VolumeRecord; + +/** + * Callback class for receiving events from MountService. + * + * Don't change the existing transaction Ids as they could be used in the native code. + * When adding a new method, assign the next available transaction id. + * + * @hide - Applications should use IStorageEventListener for storage event + * callbacks. + */ +oneway interface IMountServiceListener { + /** + * Detection state of USB Mass Storage has changed + * + * @param available true if a UMS host is connected. + */ + void onUsbMassStorageConnectionChanged(boolean connected) = 1; + + /** + * Storage state has changed. + * + * @param path The volume mount path. + * @param oldState The old state of the volume. + * @param newState The new state of the volume. Note: State is one of the + * values returned by Environment.getExternalStorageState() + */ + void onStorageStateChanged(in String path, in String oldState, in String newState) = 2; + + void onVolumeStateChanged(in VolumeInfo vol, int oldState, int newState) = 3; + + void onVolumeRecordChanged(in VolumeRecord rec) = 4; + + void onVolumeForgotten(in String fsUuid) = 5; + + void onDiskScanned(in DiskInfo disk, int volumeCount) = 6; + + void onDiskDestroyed(in DiskInfo disk) = 7; + + /** + * Don't change the existing transaction Ids as they could be used in the native code. + * When adding a new method, assign the next available transaction id. + */ +} \ No newline at end of file diff --git a/core/java/android/os/storage/IMountServiceListener.java b/core/java/android/os/storage/IMountServiceListener.java deleted file mode 100644 index cade9d77fba6..000000000000 --- a/core/java/android/os/storage/IMountServiceListener.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os.storage; - -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; -import android.os.Parcel; -import android.os.RemoteException; - -/** - * Callback class for receiving events from MountService. - * - * @hide - Applications should use IStorageEventListener for storage event - * callbacks. - */ -public interface IMountServiceListener extends IInterface { - /** Local-side IPC implementation stub class. */ - public static abstract class Stub extends Binder implements IMountServiceListener { - private static final String DESCRIPTOR = "IMountServiceListener"; - - /** Construct the stub at attach it to the interface. */ - public Stub() { - this.attachInterface(this, DESCRIPTOR); - } - - /** - * Cast an IBinder object into an IMountServiceListener interface, - * generating a proxy if needed. - */ - public static IMountServiceListener asInterface(IBinder obj) { - if ((obj == null)) { - return null; - } - IInterface iin = (IInterface) obj.queryLocalInterface(DESCRIPTOR); - if (((iin != null) && (iin instanceof IMountServiceListener))) { - return ((IMountServiceListener) iin); - } - return new IMountServiceListener.Stub.Proxy(obj); - } - - public IBinder asBinder() { - return this; - } - - @Override - public boolean onTransact(int code, Parcel data, Parcel reply, int flags) - throws RemoteException { - switch (code) { - case INTERFACE_TRANSACTION: { - reply.writeString(DESCRIPTOR); - return true; - } - case TRANSACTION_onUsbMassStorageConnectionChanged: { - data.enforceInterface(DESCRIPTOR); - boolean connected; - connected = (0 != data.readInt()); - this.onUsbMassStorageConnectionChanged(connected); - reply.writeNoException(); - return true; - } - case TRANSACTION_onStorageStateChanged: { - data.enforceInterface(DESCRIPTOR); - final String path = data.readString(); - final String oldState = data.readString(); - final String newState = data.readString(); - this.onStorageStateChanged(path, oldState, newState); - reply.writeNoException(); - return true; - } - case TRANSACTION_onVolumeStateChanged: { - data.enforceInterface(DESCRIPTOR); - final VolumeInfo vol = (VolumeInfo) data.readParcelable(null); - final int oldState = data.readInt(); - final int newState = data.readInt(); - onVolumeStateChanged(vol, oldState, newState); - reply.writeNoException(); - return true; - } - case TRANSACTION_onVolumeRecordChanged: { - data.enforceInterface(DESCRIPTOR); - final VolumeRecord rec = (VolumeRecord) data.readParcelable(null); - onVolumeRecordChanged(rec); - reply.writeNoException(); - return true; - } - case TRANSACTION_onVolumeForgotten: { - data.enforceInterface(DESCRIPTOR); - final String fsUuid = data.readString(); - onVolumeForgotten(fsUuid); - reply.writeNoException(); - return true; - } - case TRANSACTION_onDiskScanned: { - data.enforceInterface(DESCRIPTOR); - final DiskInfo disk = (DiskInfo) data.readParcelable(null); - final int volumeCount = data.readInt(); - onDiskScanned(disk, volumeCount); - reply.writeNoException(); - return true; - } - case TRANSACTION_onDiskDestroyed: { - data.enforceInterface(DESCRIPTOR); - final DiskInfo disk = (DiskInfo) data.readParcelable(null); - onDiskDestroyed(disk); - reply.writeNoException(); - return true; - } - } - return super.onTransact(code, data, reply, flags); - } - - private static class Proxy implements IMountServiceListener { - private IBinder mRemote; - - Proxy(IBinder remote) { - mRemote = remote; - } - - public IBinder asBinder() { - return mRemote; - } - - public String getInterfaceDescriptor() { - return DESCRIPTOR; - } - - /** - * Detection state of USB Mass Storage has changed - * - * @param available true if a UMS host is connected. - */ - public void onUsbMassStorageConnectionChanged(boolean connected) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(((connected) ? (1) : (0))); - mRemote.transact(Stub.TRANSACTION_onUsbMassStorageConnectionChanged, _data, - _reply, android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - /** - * Storage state has changed. - * - * @param path The volume mount path. - * @param oldState The old state of the volume. - * @param newState The new state of the volume. Note: State is one - * of the values returned by - * Environment.getExternalStorageState() - */ - public void onStorageStateChanged(String path, String oldState, String newState) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(path); - _data.writeString(oldState); - _data.writeString(newState); - mRemote.transact(Stub.TRANSACTION_onStorageStateChanged, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeParcelable(vol, 0); - _data.writeInt(oldState); - _data.writeInt(newState); - mRemote.transact(Stub.TRANSACTION_onVolumeStateChanged, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void onVolumeRecordChanged(VolumeRecord rec) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeParcelable(rec, 0); - mRemote.transact(Stub.TRANSACTION_onVolumeRecordChanged, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void onVolumeForgotten(String fsUuid) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(fsUuid); - mRemote.transact(Stub.TRANSACTION_onVolumeForgotten, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void onDiskScanned(DiskInfo disk, int volumeCount) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeParcelable(disk, 0); - _data.writeInt(volumeCount); - mRemote.transact(Stub.TRANSACTION_onDiskScanned, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - - @Override - public void onDiskDestroyed(DiskInfo disk) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeParcelable(disk, 0); - mRemote.transact(Stub.TRANSACTION_onDiskDestroyed, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - } - - static final int TRANSACTION_onUsbMassStorageConnectionChanged = (IBinder.FIRST_CALL_TRANSACTION + 0); - static final int TRANSACTION_onStorageStateChanged = (IBinder.FIRST_CALL_TRANSACTION + 1); - static final int TRANSACTION_onVolumeStateChanged = (IBinder.FIRST_CALL_TRANSACTION + 2); - static final int TRANSACTION_onVolumeRecordChanged = (IBinder.FIRST_CALL_TRANSACTION + 3); - static final int TRANSACTION_onVolumeForgotten = (IBinder.FIRST_CALL_TRANSACTION + 4); - static final int TRANSACTION_onDiskScanned = (IBinder.FIRST_CALL_TRANSACTION + 5); - static final int TRANSACTION_onDiskDestroyed = (IBinder.FIRST_CALL_TRANSACTION + 6); - } - - /** - * Detection state of USB Mass Storage has changed - * - * @param available true if a UMS host is connected. - */ - public void onUsbMassStorageConnectionChanged(boolean connected) throws RemoteException; - - /** - * Storage state has changed. - * - * @param path The volume mount path. - * @param oldState The old state of the volume. - * @param newState The new state of the volume. Note: State is one of the - * values returned by Environment.getExternalStorageState() - */ - public void onStorageStateChanged(String path, String oldState, String newState) - throws RemoteException; - - public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) - throws RemoteException; - public void onVolumeRecordChanged(VolumeRecord rec) throws RemoteException; - public void onVolumeForgotten(String fsUuid) throws RemoteException; - - public void onDiskScanned(DiskInfo disk, int volumeCount) throws RemoteException; - - public void onDiskDestroyed(DiskInfo disk) throws RemoteException; -} diff --git a/core/java/android/os/storage/IMountShutdownObserver.aidl b/core/java/android/os/storage/IMountShutdownObserver.aidl new file mode 100644 index 000000000000..3353bc5cb1c8 --- /dev/null +++ b/core/java/android/os/storage/IMountShutdownObserver.aidl @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2016, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os.storage; + +/** + * Callback class for receiving events related to shutdown. + * + * Don't change the existing transaction Ids as they could be used in the native code. + * When adding a new method, assign the next available transaction id. + * + * @hide - For internal consumption only. + */ +interface IMountShutdownObserver { + /** + * This method is called when the shutdown of MountService completed. + * + * @param statusCode indicates success or failure of the shutdown. + */ + void onShutDownComplete(int statusCode) = 1; + + /** + * Don't change the existing transaction Ids as they could be used in the native code. + * When adding a new method, assign the next available transaction id. + */ +} \ No newline at end of file diff --git a/core/java/android/os/storage/IMountShutdownObserver.java b/core/java/android/os/storage/IMountShutdownObserver.java deleted file mode 100644 index d946e1a7cba5..000000000000 --- a/core/java/android/os/storage/IMountShutdownObserver.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os.storage; - -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; -import android.os.Parcel; -import android.os.RemoteException; - -/** - * Callback class for receiving events related to shutdown. - * - * @hide - For internal consumption only. - */ -public interface IMountShutdownObserver extends IInterface { - /** Local-side IPC implementation stub class. */ - public static abstract class Stub extends Binder implements IMountShutdownObserver { - private static final java.lang.String DESCRIPTOR = "IMountShutdownObserver"; - - /** Construct the stub at attach it to the interface. */ - public Stub() { - this.attachInterface(this, DESCRIPTOR); - } - - /** - * Cast an IBinder object into an IMountShutdownObserver interface, - * generating a proxy if needed. - */ - public static IMountShutdownObserver asInterface(IBinder obj) { - if ((obj == null)) { - return null; - } - IInterface iin = (IInterface) obj.queryLocalInterface(DESCRIPTOR); - if (((iin != null) && (iin instanceof IMountShutdownObserver))) { - return ((IMountShutdownObserver) iin); - } - return new IMountShutdownObserver.Stub.Proxy(obj); - } - - public IBinder asBinder() { - return this; - } - - @Override - public boolean onTransact(int code, Parcel data, Parcel reply, int flags) - throws RemoteException { - switch (code) { - case INTERFACE_TRANSACTION: { - reply.writeString(DESCRIPTOR); - return true; - } - case TRANSACTION_onShutDownComplete: { - data.enforceInterface(DESCRIPTOR); - int statusCode; - statusCode = data.readInt(); - this.onShutDownComplete(statusCode); - reply.writeNoException(); - return true; - } - } - return super.onTransact(code, data, reply, flags); - } - - private static class Proxy implements IMountShutdownObserver { - private IBinder mRemote; - - Proxy(IBinder remote) { - mRemote = remote; - } - - public IBinder asBinder() { - return mRemote; - } - - public java.lang.String getInterfaceDescriptor() { - return DESCRIPTOR; - } - - /** - * This method is called when the shutdown of MountService - * completed. - * - * @param statusCode indicates success or failure of the shutdown. - */ - public void onShutDownComplete(int statusCode) throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeInt(statusCode); - mRemote.transact(Stub.TRANSACTION_onShutDownComplete, _data, _reply, 0); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - } - - static final int TRANSACTION_onShutDownComplete = (IBinder.FIRST_CALL_TRANSACTION + 0); - } - - /** - * This method is called when the shutdown of MountService completed. - * - * @param statusCode indicates success or failure of the shutdown. - */ - public void onShutDownComplete(int statusCode) throws RemoteException; -} diff --git a/core/java/android/os/storage/IObbActionListener.aidl b/core/java/android/os/storage/IObbActionListener.aidl new file mode 100644 index 000000000000..71e6aafe1995 --- /dev/null +++ b/core/java/android/os/storage/IObbActionListener.aidl @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2016, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os.storage; + +/** + * Callback class for receiving events from MountService about Opaque Binary + * Blobs (OBBs). + * + * Don't change the existing transaction Ids as they could be used in the native code. + * When adding a new method, assign the next available transaction id. + * + * @hide - Applications should use StorageManager to interact with OBBs. + */ +oneway interface IObbActionListener { + /** + * Return from an OBB action result. + * + * @param filename the path to the OBB the operation was performed on + * @param nonce identifier that is meaningful to the receiver + * @param status status code as defined in {@link OnObbStateChangeListener} + */ + void onObbResult(in String filename, int nonce, int status) = 1; + + /** + * Don't change the existing transaction Ids as they could be used in the native code. + * When adding a new method, assign the next available transaction id. + */ +} \ No newline at end of file diff --git a/core/java/android/os/storage/IObbActionListener.java b/core/java/android/os/storage/IObbActionListener.java deleted file mode 100644 index 35da4b097ee5..000000000000 --- a/core/java/android/os/storage/IObbActionListener.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os.storage; - -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; -import android.os.Parcel; -import android.os.RemoteException; - -/** - * Callback class for receiving events from MountService about Opaque Binary - * Blobs (OBBs). - * - * @hide - Applications should use StorageManager to interact with OBBs. - */ -public interface IObbActionListener extends IInterface { - /** Local-side IPC implementation stub class. */ - public static abstract class Stub extends Binder implements IObbActionListener { - private static final String DESCRIPTOR = "IObbActionListener"; - - /** Construct the stub at attach it to the interface. */ - public Stub() { - this.attachInterface(this, DESCRIPTOR); - } - - /** - * Cast an IBinder object into an IObbActionListener interface, - * generating a proxy if needed. - */ - public static IObbActionListener asInterface(IBinder obj) { - if ((obj == null)) { - return null; - } - IInterface iin = (IInterface) obj.queryLocalInterface(DESCRIPTOR); - if (((iin != null) && (iin instanceof IObbActionListener))) { - return ((IObbActionListener) iin); - } - return new IObbActionListener.Stub.Proxy(obj); - } - - public IBinder asBinder() { - return this; - } - - @Override - public boolean onTransact(int code, Parcel data, Parcel reply, int flags) - throws RemoteException { - switch (code) { - case INTERFACE_TRANSACTION: { - reply.writeString(DESCRIPTOR); - return true; - } - case TRANSACTION_onObbResult: { - data.enforceInterface(DESCRIPTOR); - String filename; - filename = data.readString(); - int nonce; - nonce = data.readInt(); - int status; - status = data.readInt(); - this.onObbResult(filename, nonce, status); - reply.writeNoException(); - return true; - } - } - return super.onTransact(code, data, reply, flags); - } - - private static class Proxy implements IObbActionListener { - private IBinder mRemote; - - Proxy(IBinder remote) { - mRemote = remote; - } - - public IBinder asBinder() { - return mRemote; - } - - public String getInterfaceDescriptor() { - return DESCRIPTOR; - } - - /** - * Return from an OBB action result. - * - * @param filename the path to the OBB the operation was performed - * on - * @param returnCode status of the operation - */ - public void onObbResult(String filename, int nonce, int status) - throws RemoteException { - Parcel _data = Parcel.obtain(); - Parcel _reply = Parcel.obtain(); - try { - _data.writeInterfaceToken(DESCRIPTOR); - _data.writeString(filename); - _data.writeInt(nonce); - _data.writeInt(status); - mRemote.transact(Stub.TRANSACTION_onObbResult, _data, _reply, - android.os.IBinder.FLAG_ONEWAY); - _reply.readException(); - } finally { - _reply.recycle(); - _data.recycle(); - } - } - } - - static final int TRANSACTION_onObbResult = (IBinder.FIRST_CALL_TRANSACTION + 0); - } - - /** - * Return from an OBB action result. - * - * @param filename the path to the OBB the operation was performed on - * @param nonce identifier that is meaningful to the receiver - * @param status status code as defined in {@link OnObbStateChangeListener} - */ - public void onObbResult(String filename, int nonce, int status) throws RemoteException; -} diff --git a/core/java/android/os/storage/MountServiceListener.java b/core/java/android/os/storage/MountServiceListener.java deleted file mode 100644 index bebb3f6c97d7..000000000000 --- a/core/java/android/os/storage/MountServiceListener.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os.storage; - -/** - * Callback class for receiving progress reports during a restore operation. These - * methods will all be called on your application's main thread. - * @hide - */ -public abstract class MountServiceListener { - /** - * USB Mass storage connection state has changed. - * - * @param connected True if UMS is connected. - */ - void onUsbMassStorageConnectionChanged(boolean connected) { - } - - /** - * Storage state has changed. - * - * @param path The volume mount path. - * @param oldState The old state of the volume. - * @param newState The new state of the volume. - * - * @Note: State is one of the values returned by Environment.getExternalStorageState() - */ - void onStorageStateChange(String path, String oldState, String newState) { - } -} diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 1a78fe7bd5ba..f97811541dca 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -133,6 +133,24 @@ public class StorageManager { /** {@hide} */ public static final int FLAG_INCLUDE_INVISIBLE = 1 << 10; + /** @hide The volume is not encrypted. */ + public static final int ENCRYPTION_STATE_NONE = 1; + + /** @hide The volume has been encrypted succesfully. */ + public static final int ENCRYPTION_STATE_OK = 0; + + /** @hide The volume is in a bad state.*/ + public static final int ENCRYPTION_STATE_ERROR_UNKNOWN = -1; + + /** @hide Encryption is incomplete */ + public static final int ENCRYPTION_STATE_ERROR_INCOMPLETE = -2; + + /** @hide Encryption is incomplete and irrecoverable */ + public static final int ENCRYPTION_STATE_ERROR_INCONSISTENT = -3; + + /** @hide Underlying data is corrupt */ + public static final int ENCRYPTION_STATE_ERROR_CORRUPT = -4; + private static volatile IMountService sMountService = null; // TODO: the location of the primary storage block varies from device to device, so we need to diff --git a/core/java/android/os/storage/VolumeRecord.aidl b/core/java/android/os/storage/VolumeRecord.aidl new file mode 100644 index 000000000000..27c4010941c4 --- /dev/null +++ b/core/java/android/os/storage/VolumeRecord.aidl @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2016, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os.storage; + +/** @hide */ +parcelable VolumeRecord; \ No newline at end of file diff --git a/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java b/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java index 0b7b99f4b150..bfc9ff30b5a3 100644 --- a/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java +++ b/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java @@ -272,7 +272,7 @@ public class BackupRestoreConfirmation extends Activity { boolean deviceIsEncrypted() { try { return mMountService.getEncryptionState() - != IMountService.ENCRYPTION_STATE_NONE + != StorageManager.ENCRYPTION_STATE_NONE && mMountService.getPasswordType() != StorageManager.CRYPT_TYPE_DEFAULT; } catch (Exception e) { diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 9d3035aee8a3..6375e9a39dae 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -3983,7 +3983,7 @@ public class BackupManagerService { boolean deviceIsEncrypted() { try { return mMountService.getEncryptionState() - != IMountService.ENCRYPTION_STATE_NONE + != StorageManager.ENCRYPTION_STATE_NONE && mMountService.getPasswordType() != StorageManager.CRYPT_TYPE_DEFAULT; } catch (Exception e) { diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index b9a483138520..c2d05b96b5aa 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -2535,11 +2535,11 @@ class MountService extends IMountService.Stub } catch (NumberFormatException e) { // Bad result - unexpected. Slog.w(TAG, "Unable to parse result from cryptfs cryptocomplete"); - return ENCRYPTION_STATE_ERROR_UNKNOWN; + return StorageManager.ENCRYPTION_STATE_ERROR_UNKNOWN; } catch (NativeDaemonConnectorException e) { // Something bad happened. Slog.w(TAG, "Error in communicating with cryptfs in validating"); - return ENCRYPTION_STATE_ERROR_UNKNOWN; + return StorageManager.ENCRYPTION_STATE_ERROR_UNKNOWN; } } -- 2.11.0