summaryrefslogtreecommitdiffstats
path: root/core/java/android/os
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2010-08-20 15:07:34 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-08-20 15:07:34 -0700
commit06c81f29a61ad3568a77f111b6be93e1f437f5bd (patch)
tree912997ec6ebd0c6da7826a29e1acf3f61c6cc78a /core/java/android/os
parent300b0b7e2b8f0ab922e4a83755ae999da191894e (diff)
parent086d084dd9deab4350981da5e48c8bda5e88fb75 (diff)
downloadframeworks_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.aidl184
-rw-r--r--core/java/android/os/storage/IMountService.java1046
-rw-r--r--core/java/android/os/storage/IMountServiceListener.aidl43
-rw-r--r--core/java/android/os/storage/IMountServiceListener.java176
-rw-r--r--core/java/android/os/storage/IMountShutdownObserver.aidl33
-rw-r--r--core/java/android/os/storage/IMountShutdownObserver.java124
-rw-r--r--core/java/android/os/storage/IObbActionListener.aidl34
-rw-r--r--core/java/android/os/storage/IObbActionListener.java130
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;
+}