IMountService.java revision f7b3cd4efd40b7631f36ea014407a850f7dc637e
1be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/* 2be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Copyright (C) 2010 The Android Open Source Project 3be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 4be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * you may not use this file except in compliance with the License. 6be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * You may obtain a copy of the License at 7be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 8be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 9be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 10be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unless required by applicable law or agreed to in writing, software 11be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * See the License for the specific language governing permissions and 14be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * limitations under the License. 15be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 16be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 17be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpackage android.os.storage; 18be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 19be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.Binder; 20be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.IBinder; 21be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.IInterface; 22be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.Parcel; 23be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.RemoteException; 24be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 25be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/** 26be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WARNING! Update IMountService.h and IMountService.cpp if you change this 27be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * file. In particular, the ordering of the methods below must match the 28be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * _TRANSACTION enum in IMountService.cpp 29f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * 30be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * @hide - Applications should use android.os.storage.StorageManager to access 31be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * storage functions. 32be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 33be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpublic interface IMountService extends IInterface { 34be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Local-side IPC implementation stub class. */ 35be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static abstract class Stub extends Binder implements IMountService { 36be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static class Proxy implements IMountService { 37be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private IBinder mRemote; 38be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 39be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Proxy(IBinder remote) { 40be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote = remote; 41be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 42be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 43be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 44be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return mRemote; 45be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 46be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 47be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getInterfaceDescriptor() { 48be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return DESCRIPTOR; 49be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 50be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 51be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 52be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async 53be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * notifications. 54be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 55be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException { 56be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 57be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 58be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 59be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 60be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 61be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_registerListener, _data, _reply, 0); 62be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 63be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 64be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 65be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 66be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 67be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 68be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 69be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 70be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 71be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 72be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException { 73be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 74be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 75be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 76be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 77be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 78be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unregisterListener, _data, _reply, 0); 79be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 80be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 81be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 82be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 83be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 84be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 85be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 86be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 87be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 88be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 89be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException { 90be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 91be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 92be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 93be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 94be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 95be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageConnected, _data, _reply, 0); 96be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 97be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 98be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 99be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check 107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * actual status of enabling/disabling USB mass storage via 108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener. 109be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 110be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException { 111be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 112be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((enable ? 1 : 0)); 116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_setUsbMassStorageEnabled, _data, _reply, 0); 117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is 126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * shared) 127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException { 129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageEnabled, _data, _reply, 0); 135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 141be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 145be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int 146be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 147be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException { 149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountVolume, _data, _reply, 0); 156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 165be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 166be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount 167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * is an asynchronous operation. Applications should register 168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener for storage related status changes. 169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 170be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unmountVolume(String mountPoint, boolean force) throws RemoteException { 171be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 172be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 173be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountVolume, _data, _reply, 0); 178be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 179be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 180be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int 187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException { 190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_formatVolume, _data, _reply, 0); 197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException { 210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] _result; 213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(path); 216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getStorageUsers, _data, _reply, 0); 217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createIntArray(); 219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException { 230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getVolumeState, _data, _reply, 0); 237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns 248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * an int consistent with MountServiceResultCode 249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid) throws RemoteException { 252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(sizeMb); 259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(fstype); 260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_createSecureContainer, _data, _reply, 0); 263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 264be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 265be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 266be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 268be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 269be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 270be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 271be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 272be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 273be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated 274be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with it. NOTE: Ensure all references are released prior to 275be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * deleting. Returns an int consistent with MountServiceResultCode 276be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 277be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException { 278be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 279be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 280be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 281be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 282be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 283be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 284be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 285be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_destroySecureContainer, _data, _reply, 0); 286be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 287be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 288be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 289be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 290be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 291be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 292be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 293be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 294be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 295be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 296be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. 297be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * After finalization, the container is immutable. Returns an int 298be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 299be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 300be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException { 301be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 302be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 303be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 304be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 305be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 306be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 307be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finalizeSecureContainer, _data, _reply, 0); 308be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 309be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 310be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 311be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 312be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 313be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 314be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 315be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 316be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 317be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 318be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. 319be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an int consistent with MountServiceResultCode 320be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 321be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountSecureContainer(String id, String key, int ownerUid) 322be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 323be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 324be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 325be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 326be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 327be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 328be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 329be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 330be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 331be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountSecureContainer, _data, _reply, 0); 332be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 333be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 334be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 335be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 336be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 337be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 338be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 339be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 340be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 341be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 342be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 343be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 344be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 345be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException { 346be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 347be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 348be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 349be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 350be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 351be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 352be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 353be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountSecureContainer, _data, _reply, 0); 354be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 355be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 356be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 357be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 358be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 359be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 360be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 361be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 362be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 363be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 364be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 365be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 366be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException { 367be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 368be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 369be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 370be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 371be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 372be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 373be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isSecureContainerMounted, _data, _reply, 0); 374be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 375be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 376be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 377be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 378be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 379be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 380be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 381be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 382be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 383be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 384be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent 385be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 386be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 387be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException { 388be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 389be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 390be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 391be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 392be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 393be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(oldId); 394be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(newId); 395be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_renameSecureContainer, _data, _reply, 0); 396be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 397be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 398be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 399be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 400be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 401be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 402be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 403be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 404be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 405be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 406be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 407be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 408be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException { 409be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 410be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 411be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 412be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 413be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 414be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 415be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getSecureContainerPath, _data, _reply, 0); 416be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 417be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 418be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 419be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 420be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 421be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 422be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 423be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 424be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 425be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 426be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 427be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 428be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException { 429be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 430be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 431be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] _result; 432be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 433be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 434be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getSecureContainerList, _data, _reply, 0); 435be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 436be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createStringArray(); 437be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 438be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 439be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 440be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 441be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 442be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 443be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 444be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 445be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external 446be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * media. Invokes call back once the shutdown is complete. 447be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 448be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) 449be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 450be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 451be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 452be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 453be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 454be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((observer != null ? observer.asBinder() : null)); 455be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_shutdown, _data, _reply, 0); 456be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 457be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 458be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 459be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 460be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 461be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 462be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 463be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 464be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 465be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 466be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 467be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException { 468be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 469be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 470be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 471be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 472be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finishMediaUpdate, _data, _reply, 0); 473be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 474be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 475be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 476be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 477be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 478be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 479be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 480be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 481be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption 482be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * key and only allows the calling process's UID access to the 483be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * contents. MountService will call back to the supplied 484be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 485be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 486be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 487af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void mountObb(String filename, String key, IObbActionListener token, int nonce) 488be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 489be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 490be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 491be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 492be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 493be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 496af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 497be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountObb, _data, _reply, 0); 498be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 499be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 501be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 502be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is 507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * specified, any program using it will be forcibly killed to 508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * unmount the image. MountService will call back to the supplied 509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 512af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void unmountObb(String filename, boolean force, IObbActionListener token, 513af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce) throws RemoteException { 514be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 515be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 516be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 517be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 518be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 519be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 520be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 521af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 522be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountObb, _data, _reply, 0); 523be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 524be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 525be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 526be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 527be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 528be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 529be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 530be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 531be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 532be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 533be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 534be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isObbMounted(String filename) throws RemoteException { 535be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 536be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 537be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 538be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 539be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 540be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 541be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isObbMounted, _data, _reply, 0); 542be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 543be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 544be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 545be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 546be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 547be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 548be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 549be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 550be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 551be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 552be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 553be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 554be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getMountedObbPath(String filename) throws RemoteException { 555be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 556be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 557be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 558be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 559be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 560be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 561be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getMountedObbPath, _data, _reply, 0); 562be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 563be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 564be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 565be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 566be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 567be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 568be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 569be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 570e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 571e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 572e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether the external storage is emulated. 573e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 574e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException { 575e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _data = Parcel.obtain(); 576e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _reply = Parcel.obtain(); 577e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean _result; 578e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root try { 579e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 580e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root mRemote.transact(Stub.TRANSACTION_isExternalStorageEmulated, _data, _reply, 0); 581e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.readException(); 582e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _result = 0 != _reply.readInt(); 583e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } finally { 584e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.recycle(); 585e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.recycle(); 586e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 587e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return _result; 588e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 5895af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 5905af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException { 5915af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _data = Parcel.obtain(); 5925af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _reply = Parcel.obtain(); 5935af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int _result; 5945af0b916f850486cff4797355bf9e7dc3352fe00Jason parks try { 5955af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeInterfaceToken(DESCRIPTOR); 5965af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeString(password); 5975af0b916f850486cff4797355bf9e7dc3352fe00Jason parks mRemote.transact(Stub.TRANSACTION_decryptStorage, _data, _reply, 0); 5985af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.readException(); 5995af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _result = _reply.readInt(); 6005af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } finally { 6015af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.recycle(); 6025af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.recycle(); 6035af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 6045af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return _result; 6055af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 60656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 60756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks public int encryptStorage(String password) throws RemoteException { 60856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _data = Parcel.obtain(); 60956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _reply = Parcel.obtain(); 61056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks int _result; 61156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks try { 61256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeInterfaceToken(DESCRIPTOR); 61356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeString(password); 61456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0); 61556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.readException(); 61656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _result = _reply.readInt(); 61756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } finally { 61856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.recycle(); 61956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.recycle(); 62056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 62156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return _result; 62256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 623f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 624f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks public int changeEncryptionPassword(String password) throws RemoteException { 625f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _data = Parcel.obtain(); 626f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _reply = Parcel.obtain(); 627f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks int _result; 628f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks try { 629f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeInterfaceToken(DESCRIPTOR); 630f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeString(password); 631f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0); 632f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.readException(); 633f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _result = _reply.readInt(); 634f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } finally { 635f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.recycle(); 636f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.recycle(); 637f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 638f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return _result; 639f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 640be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 641be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 642be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static final String DESCRIPTOR = "IMountService"; 643be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 644be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_registerListener = IBinder.FIRST_CALL_TRANSACTION + 0; 645be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 646be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unregisterListener = IBinder.FIRST_CALL_TRANSACTION + 1; 647be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 648be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageConnected = IBinder.FIRST_CALL_TRANSACTION + 2; 649be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 650be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_setUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 3; 651be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 652be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 4; 653be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 654be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountVolume = IBinder.FIRST_CALL_TRANSACTION + 5; 655be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 656be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountVolume = IBinder.FIRST_CALL_TRANSACTION + 6; 657be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 658be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_formatVolume = IBinder.FIRST_CALL_TRANSACTION + 7; 659be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 660be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getStorageUsers = IBinder.FIRST_CALL_TRANSACTION + 8; 661be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 662be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getVolumeState = IBinder.FIRST_CALL_TRANSACTION + 9; 663be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 664be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_createSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 10; 665be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 666be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finalizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 11; 667be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 668be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_destroySecureContainer = IBinder.FIRST_CALL_TRANSACTION + 12; 669be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 670be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 13; 671be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 672be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 14; 673be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 674be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isSecureContainerMounted = IBinder.FIRST_CALL_TRANSACTION + 15; 675be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 676be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_renameSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 16; 677be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 678be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerPath = IBinder.FIRST_CALL_TRANSACTION + 17; 679be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 680be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerList = IBinder.FIRST_CALL_TRANSACTION + 18; 681be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 682be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_shutdown = IBinder.FIRST_CALL_TRANSACTION + 19; 683be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 684be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finishMediaUpdate = IBinder.FIRST_CALL_TRANSACTION + 20; 685be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 686be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountObb = IBinder.FIRST_CALL_TRANSACTION + 21; 687be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 688be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountObb = IBinder.FIRST_CALL_TRANSACTION + 22; 689be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 690be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isObbMounted = IBinder.FIRST_CALL_TRANSACTION + 23; 691be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 692be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getMountedObbPath = IBinder.FIRST_CALL_TRANSACTION + 24; 693be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 694e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root static final int TRANSACTION_isExternalStorageEmulated = IBinder.FIRST_CALL_TRANSACTION + 25; 695e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 6965af0b916f850486cff4797355bf9e7dc3352fe00Jason parks static final int TRANSACTION_decryptStorage = IBinder.FIRST_CALL_TRANSACTION + 26; 6975af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 69856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks static final int TRANSACTION_encryptStorage = IBinder.FIRST_CALL_TRANSACTION + 27; 69956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 700f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks static final int TRANSACTION_changeEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 28; 701f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 702be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 703be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Cast an IBinder object into an IMountService interface, generating a 704be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * proxy if needed. 705be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 706be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static IMountService asInterface(IBinder obj) { 707be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (obj == null) { 708be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return null; 709be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 710be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IInterface iin = obj.queryLocalInterface(DESCRIPTOR); 711be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (iin != null && iin instanceof IMountService) { 712be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return (IMountService) iin; 713be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 714be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return new IMountService.Stub.Proxy(obj); 715be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 716be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 717be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Construct the stub at attach it to the interface. */ 718be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public Stub() { 719be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root attachInterface(this, DESCRIPTOR); 720be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 721be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 722be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 723be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return this; 724be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 725be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 726be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root @Override 727be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean onTransact(int code, Parcel data, Parcel reply, 728be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int flags) throws RemoteException { 729be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root switch (code) { 730be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case INTERFACE_TRANSACTION: { 731be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(DESCRIPTOR); 732be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 733be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 734be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_registerListener: { 735be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 736be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 737be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 738be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root registerListener(listener); 739be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 740be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 741be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 742be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unregisterListener: { 743be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 744be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 745be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 746be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root unregisterListener(listener); 747be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 748be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 749be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 750be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageConnected: { 751be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 752be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageConnected(); 753be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 754be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 755be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 756be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 757be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_setUsbMassStorageEnabled: { 758be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 759be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean enable; 760be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root enable = 0 != data.readInt(); 761be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root setUsbMassStorageEnabled(enable); 762be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 763be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 764be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 765be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageEnabled: { 766be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 767be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageEnabled(); 768be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 769be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 770be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 771be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 772be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountVolume: { 773be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 774be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 775be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 776be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = mountVolume(mountPoint); 777be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 778be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 779be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 780be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 781be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountVolume: { 782be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 783be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 784be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 785be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 786be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 787be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root unmountVolume(mountPoint, force); 788be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 789be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 790be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 791be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_formatVolume: { 792be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 793be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 794be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 795be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int result = formatVolume(mountPoint); 796be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 797be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(result); 798be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 799be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 800be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getStorageUsers: { 801be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 802be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path; 803be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root path = data.readString(); 804be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] pids = getStorageUsers(path); 805be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 806be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeIntArray(pids); 807be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 808be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 809be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getVolumeState: { 810be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 811be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 812be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 813be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String state = getVolumeState(mountPoint); 814be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 815be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(state); 816be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 817be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 818be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_createSecureContainer: { 819be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 820be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 821be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 822be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int sizeMb; 823be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root sizeMb = data.readInt(); 824be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String fstype; 825be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root fstype = data.readString(); 826be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 827be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 828be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 829be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 830be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = createSecureContainer(id, sizeMb, fstype, key, ownerUid); 831be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 832be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 833be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 834be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 835be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finalizeSecureContainer: { 836be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 837be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 838be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 839be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = finalizeSecureContainer(id); 840be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 841be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 842be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 843be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 844be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_destroySecureContainer: { 845be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 846be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 847be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 848be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 849be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 850be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = destroySecureContainer(id, force); 851be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 852be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 853be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 854be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 855be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountSecureContainer: { 856be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 857be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 858be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 859be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 860be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 861be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 862be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 863be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = mountSecureContainer(id, key, ownerUid); 864be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 865be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 866be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 867be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 868be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountSecureContainer: { 869be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 870be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 871be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 872be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 873be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 874be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = unmountSecureContainer(id, force); 875be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 876be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 877be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 878be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 879be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isSecureContainerMounted: { 880be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 881be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 882be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 883be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isSecureContainerMounted(id); 884be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 885be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 886be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 887be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 888be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_renameSecureContainer: { 889be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 890be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String oldId; 891be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root oldId = data.readString(); 892be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String newId; 893be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root newId = data.readString(); 894be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = renameSecureContainer(oldId, newId); 895be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 896be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 897be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 898be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 899be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerPath: { 900be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 901be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 902be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 903be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path = getSecureContainerPath(id); 904be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 905be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(path); 906be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 907be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 908be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerList: { 909be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 910be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] ids = getSecureContainerList(); 911be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 912be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeStringArray(ids); 913be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 914be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 915be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_shutdown: { 916be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 917be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountShutdownObserver observer; 918be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IMountShutdownObserver.Stub.asInterface(data 919be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root .readStrongBinder()); 920be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root shutdown(observer); 921be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 922be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 923be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 924be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finishMediaUpdate: { 925be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 926be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root finishMediaUpdate(); 927be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 928be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 929be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 930be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountObb: { 931be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 932be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 933be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 934be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 935be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 936be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 937be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 938af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 939af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 940af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root mountObb(filename, key, observer, nonce); 941be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 942be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 943be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 944be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountObb: { 945be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 946be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 947be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 948be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 949be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 950be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 951be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 952af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 953af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 954af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root unmountObb(filename, force, observer, nonce); 955be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 956be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 957be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 958be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isObbMounted: { 959be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 960be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 961be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 962be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isObbMounted(filename); 963be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 964be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 965be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 966be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 967be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getMountedObbPath: { 968be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 969be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 970be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 971be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountedPath = getMountedObbPath(filename); 972be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 973be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(mountedPath); 974be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 975be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 976e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root case TRANSACTION_isExternalStorageEmulated: { 977e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root data.enforceInterface(DESCRIPTOR); 978e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean emulated = isExternalStorageEmulated(); 979e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeNoException(); 980e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeInt(emulated ? 1 : 0); 981e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return true; 982e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 9835af0b916f850486cff4797355bf9e7dc3352fe00Jason parks case TRANSACTION_decryptStorage: { 9845af0b916f850486cff4797355bf9e7dc3352fe00Jason parks data.enforceInterface(DESCRIPTOR); 9855af0b916f850486cff4797355bf9e7dc3352fe00Jason parks String password = data.readString(); 9865af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int result = decryptStorage(password); 9875af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeNoException(); 9885af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeInt(result); 9895af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return true; 9905af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 99156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks case TRANSACTION_encryptStorage: { 99256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks data.enforceInterface(DESCRIPTOR); 99356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks String password = data.readString(); 99456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks int result = encryptStorage(password); 99556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeNoException(); 99656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeInt(result); 99756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return true; 99856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 999f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks case TRANSACTION_changeEncryptionPassword: { 1000f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks data.enforceInterface(DESCRIPTOR); 1001f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks String password = data.readString(); 1002f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks int result = changeEncryptionPassword(password); 1003f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeNoException(); 1004f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeInt(result); 1005f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return true; 1006f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 1007be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1008be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return super.onTransact(code, data, reply, flags); 1009be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1010be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1011be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1012be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1013be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns an int 1014be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 1015be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1016be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, int ownerUid) 1017be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 1018be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1019be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1020be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated with it. 1021be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * NOTE: Ensure all references are released prior to deleting. Returns an 1022be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1023be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1024be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException; 1025be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1026be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1027be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. After 1028be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * finalization, the container is immutable. Returns an int consistent with 1029be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1030be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1031be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException; 1032be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1033be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1034be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 1035be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 1036be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1037be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException; 1038be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1039be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1040be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int consistent 1041be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1042be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1043be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException; 1044be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1045be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1046be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 1047be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1048be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getMountedObbPath(String filename) throws RemoteException; 1049be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1050be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1051be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 1052be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1053be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException; 1054be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1055be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1056be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 1057be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1058be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException; 1059be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1060be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1061be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 1062be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1063be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException; 1064be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1065be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1066be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 1067be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1068be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException; 1069be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1070be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1071be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 1072be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 1073be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1074be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isObbMounted(String filename) throws RemoteException; 1075be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1076be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1077be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 1078be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1079be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException; 1080be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1081be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1082be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 1083be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1084be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException; 1085be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1086be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1087be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is shared) 1088be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1089be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException; 1090be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1091be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1092be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and 1093be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * only allows the calling process's UID access to the contents. 1094be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1095be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1096be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1097af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void mountObb(String filename, String key, IObbActionListener token, int nonce) 1098be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 1099be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. Returns an 1102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountSecureContainer(String id, String key, int ownerUid) throws RemoteException; 1105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int consistent 1108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1109be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1110be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException; 1111be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1112be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async notifications. 1114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException; 1116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent with 1119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException; 1122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check actual 1125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * status of enabling/disabling USB mass storage via StorageEventListener. 1126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException; 1128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external media. 1131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Invokes call back once the shutdown is complete. 1132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) throws RemoteException; 1134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified, 1137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * any program using it will be forcibly killed to unmount the image. 1138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1141af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void unmountObb(String filename, boolean force, IObbActionListener token, int nonce) 1142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 1143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1145be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 1146be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1147be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException; 1149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount is an 1152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * asynchronous operation. Applications should register StorageEventListener 1153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * for storage related status changes. 1154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unmountVolume(String mountPoint, boolean force) throws RemoteException; 1156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 1159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException; 1161e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 1162e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 1163e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether or not the external storage is emulated. 1164e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 1165e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException; 11665af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 11675af0b916f850486cff4797355bf9e7dc3352fe00Jason parks /** 11685af0b916f850486cff4797355bf9e7dc3352fe00Jason parks * Decrypts any encrypted volumes. 11695af0b916f850486cff4797355bf9e7dc3352fe00Jason parks */ 11705af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException; 117156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 117256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks /** 117356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks * Encrypts storage. 117456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks */ 117556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks public int encryptStorage(String password) throws RemoteException; 1176f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1177f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks /** 1178f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * Changes the encryption password. 1179f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks */ 1180f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks public int changeEncryptionPassword(String password) throws RemoteException; 1181f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root} 1183