diff options
author | Kenny Root <kroot@google.com> | 2010-08-20 15:07:34 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-08-20 15:07:34 -0700 |
commit | 06c81f29a61ad3568a77f111b6be93e1f437f5bd (patch) | |
tree | 912997ec6ebd0c6da7826a29e1acf3f61c6cc78a /core/java/android/os | |
parent | 300b0b7e2b8f0ab922e4a83755ae999da191894e (diff) | |
parent | 086d084dd9deab4350981da5e48c8bda5e88fb75 (diff) | |
download | frameworks_base-06c81f29a61ad3568a77f111b6be93e1f437f5bd.zip frameworks_base-06c81f29a61ad3568a77f111b6be93e1f437f5bd.tar.gz frameworks_base-06c81f29a61ad3568a77f111b6be93e1f437f5bd.tar.bz2 |
Merge changes I8a257579,I82d16312 into gingerbread
* changes:
Add AStorageManager API to NDK
Reorganize MountService IPC
Diffstat (limited to 'core/java/android/os')
-rw-r--r-- | core/java/android/os/storage/IMountService.aidl | 184 | ||||
-rw-r--r-- | core/java/android/os/storage/IMountService.java | 1046 | ||||
-rw-r--r-- | core/java/android/os/storage/IMountServiceListener.aidl | 43 | ||||
-rw-r--r-- | core/java/android/os/storage/IMountServiceListener.java | 176 | ||||
-rw-r--r-- | core/java/android/os/storage/IMountShutdownObserver.aidl | 33 | ||||
-rw-r--r-- | core/java/android/os/storage/IMountShutdownObserver.java | 124 | ||||
-rw-r--r-- | core/java/android/os/storage/IObbActionListener.aidl | 34 | ||||
-rw-r--r-- | core/java/android/os/storage/IObbActionListener.java | 130 |
8 files changed, 1476 insertions, 294 deletions
diff --git a/core/java/android/os/storage/IMountService.aidl b/core/java/android/os/storage/IMountService.aidl deleted file mode 100644 index 5c69214..0000000 --- a/core/java/android/os/storage/IMountService.aidl +++ /dev/null @@ -1,184 +0,0 @@ -/* //device/java/android/android/os/IUsb.aidl -** -** Copyright 2007, 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.IMountServiceListener; -import android.os.storage.IMountShutdownObserver; -import android.os.storage.IObbActionListener; - -/** 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. - */ -interface IMountService -{ - /** - * Registers an IMountServiceListener for receiving async - * notifications. - */ - void registerListener(IMountServiceListener listener); - - /** - * Unregisters an IMountServiceListener - */ - void unregisterListener(IMountServiceListener listener); - - /** - * Returns true if a USB mass storage host is connected - */ - boolean isUsbMassStorageConnected(); - - /** - * Enables / disables USB mass storage. - * The caller should check actual status of enabling/disabling - * USB mass storage via StorageEventListener. - */ - void setUsbMassStorageEnabled(boolean enable); - - /** - * Returns true if a USB mass storage host is enabled (media is shared) - */ - boolean isUsbMassStorageEnabled(); - - /** - * Mount external storage at given mount point. - * Returns an int consistent with MountServiceResultCode - */ - int mountVolume(String mountPoint); - - /** - * Safely unmount external storage at given mount point. - * The unmount is an asynchronous operation. Applications - * should register StorageEventListener for storage related - * status changes. - * - */ - void unmountVolume(String mountPoint, boolean force); - - /** - * Format external storage given a mount point. - * Returns an int consistent with MountServiceResultCode - */ - int formatVolume(String mountPoint); - - /** - * Returns an array of pids with open files on - * the specified path. - */ - int[] getStorageUsers(String path); - - /** - * Gets the state of a volume via its mountpoint. - */ - String getVolumeState(String mountPoint); - - /* - * Creates a secure container with the specified parameters. - * Returns an int consistent with MountServiceResultCode - */ - int createSecureContainer(String id, int sizeMb, String fstype, String key, int ownerUid); - - /* - * Finalize a container which has just been created and populated. - * After finalization, the container is immutable. - * Returns an int consistent with MountServiceResultCode - */ - int finalizeSecureContainer(String id); - - /* - * 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(String id, boolean force); - - /* - * Mount a secure container with the specified key and owner UID. - * Returns an int consistent with MountServiceResultCode - */ - int mountSecureContainer(String id, String key, int ownerUid); - - /* - * Unount a secure container. - * Returns an int consistent with MountServiceResultCode - */ - int unmountSecureContainer(String id, boolean force); - - /* - * Returns true if the specified container is mounted - */ - boolean isSecureContainerMounted(String id); - - /* - * Rename an unmounted secure container. - * Returns an int consistent with MountServiceResultCode - */ - int renameSecureContainer(String oldId, String newId); - - /* - * Returns the filesystem path of a mounted secure container. - */ - String getSecureContainerPath(String id); - - /** - * Gets an Array of currently known secure container IDs - */ - String[] getSecureContainerList(); - - /** - * Shuts down the MountService and gracefully unmounts all external media. - * Invokes call back once the shutdown is complete. - */ - void shutdown(IMountShutdownObserver observer); - - /** - * Call into MountService by PackageManager to notify that its done - * processing the media status update request. - */ - void finishMediaUpdate(); - - /** - * 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(String filename, String key, IObbActionListener token); - - /** - * 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(String filename, boolean force, IObbActionListener token); - - /** - * Checks whether the specified Opaque Binary Blob (OBB) is mounted somewhere. - */ - boolean isObbMounted(String filename); - - /** - * Gets the path to the mounted Opaque Binary Blob (OBB). - */ - String getMountedObbPath(String filename); -} diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java new file mode 100644 index 0000000..60ea95c --- /dev/null +++ b/core/java/android/os/storage/IMountService.java @@ -0,0 +1,1046 @@ +/* + * 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; + +/** + * 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 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) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(mountPoint); + _data.writeInt((force ? 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) 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); + 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) + 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); + 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 filename, String key, IObbActionListener token) + throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(filename); + _data.writeString(key); + _data.writeStrongBinder((token != null ? token.asBinder() : null)); + 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 filename, boolean force, IObbActionListener token) + throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(filename); + _data.writeInt((force ? 1 : 0)); + _data.writeStrongBinder((token != null ? token.asBinder() : null)); + 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 filename) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + boolean _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(filename); + 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 filename) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + String _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(filename); + mRemote.transact(Stub.TRANSACTION_getMountedObbPath, _data, _reply, 0); + _reply.readException(); + _result = _reply.readString(); + } 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; + + /** + * 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; + force = 0 != data.readInt(); + unmountVolume(mountPoint, force); + 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(); + int resultCode = createSecureContainer(id, sizeMb, fstype, key, ownerUid); + 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(); + int resultCode = mountSecureContainer(id, key, ownerUid); + 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); + String filename; + filename = data.readString(); + String key; + key = data.readString(); + IObbActionListener observer; + observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); + mountObb(filename, key, observer); + 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()); + unmountObb(filename, force, observer); + 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; + } + } + 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) + 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 filename) 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 filename) 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 filename, String key, IObbActionListener token) + 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) 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 filename, boolean force, IObbActionListener token) + 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. + */ + public void unmountVolume(String mountPoint, boolean force) throws RemoteException; + + /** + * Unregisters an IMountServiceListener + */ + public void unregisterListener(IMountServiceListener listener) throws RemoteException; +} diff --git a/core/java/android/os/storage/IMountServiceListener.aidl b/core/java/android/os/storage/IMountServiceListener.aidl deleted file mode 100644 index 883413a..0000000 --- a/core/java/android/os/storage/IMountServiceListener.aidl +++ /dev/null @@ -1,43 +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; - -/** - * Callback class for receiving events from MountService. - * - * @hide - Applications should use android.os.storage.IStorageEventListener - * for storage event callbacks. - */ -interface IMountServiceListener { - /** - * Detection state of USB Mass Storage has changed - * - * @param available true if a UMS host 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 onStorageStateChanged(String path, String oldState, String newState); -} diff --git a/core/java/android/os/storage/IMountServiceListener.java b/core/java/android/os/storage/IMountServiceListener.java new file mode 100644 index 0000000..d5c5fa5 --- /dev/null +++ b/core/java/android/os/storage/IMountServiceListener.java @@ -0,0 +1,176 @@ +/* + * 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); + String path; + path = data.readString(); + String oldState; + oldState = data.readString(); + String newState; + newState = data.readString(); + this.onStorageStateChanged(path, oldState, newState); + 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, 0); + _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, 0); + _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); + } + + /** + * 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; +} diff --git a/core/java/android/os/storage/IMountShutdownObserver.aidl b/core/java/android/os/storage/IMountShutdownObserver.aidl deleted file mode 100644 index 0aa8a45..0000000 --- a/core/java/android/os/storage/IMountShutdownObserver.aidl +++ /dev/null @@ -1,33 +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; - -/** - * Callback class for receiving events related - * to shutdown. - * - * @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); -} diff --git a/core/java/android/os/storage/IMountShutdownObserver.java b/core/java/android/os/storage/IMountShutdownObserver.java new file mode 100644 index 0000000..d946e1a --- /dev/null +++ b/core/java/android/os/storage/IMountShutdownObserver.java @@ -0,0 +1,124 @@ +/* + * 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 deleted file mode 100644 index 78d7a9e..0000000 --- a/core/java/android/os/storage/IObbActionListener.aidl +++ /dev/null @@ -1,34 +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 events from MountService about - * Opaque Binary Blobs (OBBs). - * - * @hide - Applications should use android.os.storage.StorageManager - * to interact with OBBs. - */ -interface IObbActionListener { - /** - * Return from an OBB action result. - * - * @param filename the path to the OBB the operation was performed on - * @param returnCode status of the operation - */ - void onObbResult(String filename, String status); -} diff --git a/core/java/android/os/storage/IObbActionListener.java b/core/java/android/os/storage/IObbActionListener.java new file mode 100644 index 0000000..2c098ac --- /dev/null +++ b/core/java/android/os/storage/IObbActionListener.java @@ -0,0 +1,130 @@ +/* + * 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(); + String status; + status = data.readString(); + this.onObbResult(filename, 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, String status) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(filename); + _data.writeString(status); + mRemote.transact(Stub.TRANSACTION_onObbResult, _data, _reply, 0); + _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 returnCode status of the operation + */ + public void onObbResult(String filename, String status) throws RemoteException; +} |