IMountService.java revision 6dceb88f1c7c42c6ab43834af2c993d599895d82
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; 232f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.Parcelable; 24be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.RemoteException; 252f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwoodimport android.os.storage.StorageVolume; 26be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 27be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/** 28be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WARNING! Update IMountService.h and IMountService.cpp if you change this 29be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * file. In particular, the ordering of the methods below must match the 30be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * _TRANSACTION enum in IMountService.cpp 31f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * 32be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * @hide - Applications should use android.os.storage.StorageManager to access 33be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * storage functions. 34be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 35be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpublic interface IMountService extends IInterface { 36be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Local-side IPC implementation stub class. */ 37be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static abstract class Stub extends Binder implements IMountService { 38be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static class Proxy implements IMountService { 39444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo private final IBinder mRemote; 40be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 41be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Proxy(IBinder remote) { 42be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote = remote; 43be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 44be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 45be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 46be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return mRemote; 47be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 48be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 49be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getInterfaceDescriptor() { 50be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return DESCRIPTOR; 51be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 52be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 53be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 54be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async 55be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * notifications. 56be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 57be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException { 58be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 59be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 60be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 61be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 62be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 63be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_registerListener, _data, _reply, 0); 64be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 65be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 66be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 67be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 68be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 69be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 70be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 71be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 72be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 73be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 74be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException { 75be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 76be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 77be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 78be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 79be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 80be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unregisterListener, _data, _reply, 0); 81be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 82be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 83be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 84be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 85be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 86be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 87be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 88be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 89be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 90be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 91be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException { 92be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 93be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 94be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 95be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 96be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 97be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageConnected, _data, _reply, 0); 98be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 99be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check 109be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * actual status of enabling/disabling USB mass storage via 110be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener. 111be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 112be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException { 113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((enable ? 1 : 0)); 118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_setUsbMassStorageEnabled, _data, _reply, 0); 119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is 128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * shared) 129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException { 131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageEnabled, _data, _reply, 0); 137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 141be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 145be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 146be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 147be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int 148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException { 151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountVolume, _data, _reply, 0); 158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 165be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 166be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount 169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * is an asynchronous operation. Applications should register 170be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener for storage related status changes. 171be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 17213c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) 17313c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo throws RemoteException { 174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 178be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 179be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 18013c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo _data.writeInt((removeEncryption ? 1 : 0)); 181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountVolume, _data, _reply, 0); 182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int 191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException { 194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_formatVolume, _data, _reply, 0); 201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException { 214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] _result; 217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(path); 220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getStorageUsers, _data, _reply, 0); 221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createIntArray(); 223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException { 234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getVolumeState, _data, _reply, 0); 241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns 252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * an int consistent with MountServiceResultCode 253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 2556dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int ownerUid, boolean external) throws RemoteException { 256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(sizeMb); 263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(fstype); 264be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 265be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 2666dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInt(external ? 1 : 0); 267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_createSecureContainer, _data, _reply, 0); 268be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 269be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 270be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 271be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 272be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 273be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 274be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 275be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 276be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 277be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 278be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated 279be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with it. NOTE: Ensure all references are released prior to 280be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * deleting. Returns an int consistent with MountServiceResultCode 281be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 282be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException { 283be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 284be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 285be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 286be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 287be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 288be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 289be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 290be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_destroySecureContainer, _data, _reply, 0); 291be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 292be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 293be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 294be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 295be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 296be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 297be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 298be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 299be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 300be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 301be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. 302be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * After finalization, the container is immutable. Returns an int 303be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 304be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 305be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException { 306be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 307be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 308be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 309be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 310be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 311be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 312be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finalizeSecureContainer, _data, _reply, 0); 313be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 314be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 315be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 316be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 317be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 318be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 319be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 320be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 321be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 322be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 323be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. 324be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an int consistent with MountServiceResultCode 325be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 326be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountSecureContainer(String id, String key, int ownerUid) 327be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 328be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 329be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 330be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 331be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 332be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 333be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 334be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 335be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 336be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountSecureContainer, _data, _reply, 0); 337be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 338be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 339be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 340be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 341be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 342be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 343be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 344be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 345be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 346be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 347be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 348be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 349be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 350be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException { 351be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 352be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 353be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 354be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 355be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 356be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 357be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 358be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountSecureContainer, _data, _reply, 0); 359be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 360be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 361be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 362be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 363be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 364be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 365be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 366be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 367be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 368be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 369be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 370be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 371be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException { 372be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 373be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 374be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 375be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 376be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 377be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 378be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isSecureContainerMounted, _data, _reply, 0); 379be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 380be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 381be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 382be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 383be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 384be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 385be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 386be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 387be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 388be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 389be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent 390be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 391be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 392be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException { 393be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 394be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 395be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 396be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 397be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 398be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(oldId); 399be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(newId); 400be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_renameSecureContainer, _data, _reply, 0); 401be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 402be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 403be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 404be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 405be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 406be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 407be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 408be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 409be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 410be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 411be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 412be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 413be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException { 414be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 415be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 416be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 417be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 418be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 419be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 420be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getSecureContainerPath, _data, _reply, 0); 421be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 422be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 423be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 424be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 425be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 426be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 427be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 428be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 429be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 430be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 431be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 432be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 433be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException { 434be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 435be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 436be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] _result; 437be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 438be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 439be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getSecureContainerList, _data, _reply, 0); 440be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 441be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createStringArray(); 442be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 443be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 444be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 445be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 446be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 447be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 448be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 449be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 450be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external 451be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * media. Invokes call back once the shutdown is complete. 452be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 453be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) 454be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 455be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 456be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 457be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 458be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 459be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((observer != null ? observer.asBinder() : null)); 460be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_shutdown, _data, _reply, 0); 461be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 462be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 463be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 464be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 465be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 466be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 467be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 468be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 469be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 470be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 471be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 472be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException { 473be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 474be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 475be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 476be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 477be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finishMediaUpdate, _data, _reply, 0); 478be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 479be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 480be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 481be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 482be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 483be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 484be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 485be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 486be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption 487be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * key and only allows the calling process's UID access to the 488be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * contents. MountService will call back to the supplied 489be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 490be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 491be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 492af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void mountObb(String filename, String key, IObbActionListener token, int nonce) 493be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 496be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 497be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 498be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 499be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 501af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 502be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountObb, _data, _reply, 0); 503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is 512be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * specified, any program using it will be forcibly killed to 513be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * unmount the image. MountService will call back to the supplied 514be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 515be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 516be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 517af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void unmountObb(String filename, boolean force, IObbActionListener token, 518af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce) throws RemoteException { 519be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 520be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 521be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 522be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 523be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 524be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 525be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 526af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 527be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountObb, _data, _reply, 0); 528be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 529be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 530be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 531be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 532be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 533be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 534be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 535be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 536be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 537be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 538be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 539be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isObbMounted(String filename) throws RemoteException { 540be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 541be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 542be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 543be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 544be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 545be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 546be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isObbMounted, _data, _reply, 0); 547be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 548be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 549be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 550be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 551be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 552be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 553be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 554be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 555be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 556be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 557be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 558be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 559be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getMountedObbPath(String filename) throws RemoteException { 560be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 561be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 562be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 563be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 564be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 565be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(filename); 566be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getMountedObbPath, _data, _reply, 0); 567be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 568be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 569be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 570be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 571be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 572be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 573be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 574be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 575e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 576e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 577e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether the external storage is emulated. 578e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 579e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException { 580e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _data = Parcel.obtain(); 581e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _reply = Parcel.obtain(); 582e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean _result; 583e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root try { 584e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 585e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root mRemote.transact(Stub.TRANSACTION_isExternalStorageEmulated, _data, _reply, 0); 586e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.readException(); 587e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _result = 0 != _reply.readInt(); 588e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } finally { 589e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.recycle(); 590e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.recycle(); 591e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 592e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return _result; 593e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 5945af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 595444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo public int getEncryptionState() throws RemoteException { 596444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo Parcel _data = Parcel.obtain(); 597444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo Parcel _reply = Parcel.obtain(); 598444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo int _result; 599444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo try { 600444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _data.writeInterfaceToken(DESCRIPTOR); 601444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo mRemote.transact(Stub.TRANSACTION_getEncryptionState, _data, _reply, 0); 602444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _reply.readException(); 603444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _result = _reply.readInt(); 604444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } finally { 605444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _reply.recycle(); 606444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _data.recycle(); 607444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 608444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo return _result; 609444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 610444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 6115af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException { 6125af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _data = Parcel.obtain(); 6135af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _reply = Parcel.obtain(); 6145af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int _result; 6155af0b916f850486cff4797355bf9e7dc3352fe00Jason parks try { 6165af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeInterfaceToken(DESCRIPTOR); 6175af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeString(password); 6185af0b916f850486cff4797355bf9e7dc3352fe00Jason parks mRemote.transact(Stub.TRANSACTION_decryptStorage, _data, _reply, 0); 6195af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.readException(); 6205af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _result = _reply.readInt(); 6215af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } finally { 6225af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.recycle(); 6235af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.recycle(); 6245af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 6255af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return _result; 6265af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 62756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 62856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks public int encryptStorage(String password) throws RemoteException { 62956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _data = Parcel.obtain(); 63056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _reply = Parcel.obtain(); 63156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks int _result; 63256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks try { 63356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeInterfaceToken(DESCRIPTOR); 63456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeString(password); 63556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0); 63656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.readException(); 63756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _result = _reply.readInt(); 63856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } finally { 63956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.recycle(); 64056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.recycle(); 64156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 64256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return _result; 64356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 644f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 645f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks public int changeEncryptionPassword(String password) throws RemoteException { 646f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _data = Parcel.obtain(); 647f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _reply = Parcel.obtain(); 648f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks int _result; 649f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks try { 650f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeInterfaceToken(DESCRIPTOR); 651f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeString(password); 652f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0); 653f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.readException(); 654f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _result = _reply.readInt(); 655f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } finally { 656f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.recycle(); 657f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.recycle(); 658f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 659f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return _result; 660f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 661d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood 66232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate @Override 66332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate public int verifyEncryptionPassword(String password) throws RemoteException { 66432418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate Parcel _data = Parcel.obtain(); 66532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate Parcel _reply = Parcel.obtain(); 66632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate int _result; 66732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate try { 66832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.writeInterfaceToken(DESCRIPTOR); 66932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.writeString(password); 67032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate mRemote.transact(Stub.TRANSACTION_verifyEncryptionPassword, _data, _reply, 0); 67132418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _reply.readException(); 67232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _result = _reply.readInt(); 67332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } finally { 67432418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _reply.recycle(); 67532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.recycle(); 67632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } 67732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate return _result; 67832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } 67932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 6802f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public Parcelable[] getVolumeList() throws RemoteException { 681d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood Parcel _data = Parcel.obtain(); 682d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood Parcel _reply = Parcel.obtain(); 6832f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood Parcelable[] _result; 684d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood try { 685d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _data.writeInterfaceToken(DESCRIPTOR); 686d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood mRemote.transact(Stub.TRANSACTION_getVolumeList, _data, _reply, 0); 687d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _reply.readException(); 6882f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood _result = _reply.readParcelableArray(StorageVolume.class.getClassLoader()); 689d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } finally { 690d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _reply.recycle(); 691d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _data.recycle(); 692d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 693d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood return _result; 694d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 695292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 696292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn /* 697292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn * Returns the filesystem path of a mounted secure container. 698292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn */ 699292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn public String getSecureContainerFilesystemPath(String id) throws RemoteException { 700292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn Parcel _data = Parcel.obtain(); 701292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn Parcel _reply = Parcel.obtain(); 702292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String _result; 703292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn try { 704292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.writeInterfaceToken(DESCRIPTOR); 705292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.writeString(id); 706292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn mRemote.transact(Stub.TRANSACTION_getSecureContainerFilesystemPath, _data, _reply, 0); 707292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _reply.readException(); 708292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _result = _reply.readString(); 709292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } finally { 710292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _reply.recycle(); 711292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.recycle(); 712292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 713292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn return _result; 714292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 7156dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 7166dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root /** 7176dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Fix permissions in a container which has just been created and 7186dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * populated. Returns an int consistent with MountServiceResultCode 7196dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root */ 7206dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int fixPermissionsSecureContainer(String id, int gid, String filename) 7216dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root throws RemoteException { 7226dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root Parcel _data = Parcel.obtain(); 7236dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root Parcel _reply = Parcel.obtain(); 7246dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int _result; 7256dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root try { 7266dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 7276dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeString(id); 7286dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInt(gid); 7296dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeString(filename); 7306dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root mRemote.transact(Stub.TRANSACTION_fixPermissionsSecureContainer, _data, _reply, 0); 7316dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _reply.readException(); 7326dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _result = _reply.readInt(); 7336dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } finally { 7346dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _reply.recycle(); 7356dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.recycle(); 7366dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 7376dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root return _result; 7386dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 7396dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 740be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 741be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 742be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static final String DESCRIPTOR = "IMountService"; 743be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 744be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_registerListener = IBinder.FIRST_CALL_TRANSACTION + 0; 745be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 746be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unregisterListener = IBinder.FIRST_CALL_TRANSACTION + 1; 747be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 748be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageConnected = IBinder.FIRST_CALL_TRANSACTION + 2; 749be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 750be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_setUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 3; 751be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 752be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 4; 753be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 754be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountVolume = IBinder.FIRST_CALL_TRANSACTION + 5; 755be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 756be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountVolume = IBinder.FIRST_CALL_TRANSACTION + 6; 757be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 758be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_formatVolume = IBinder.FIRST_CALL_TRANSACTION + 7; 759be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 760be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getStorageUsers = IBinder.FIRST_CALL_TRANSACTION + 8; 761be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 762be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getVolumeState = IBinder.FIRST_CALL_TRANSACTION + 9; 763be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 764be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_createSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 10; 765be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 766be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finalizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 11; 767be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 768be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_destroySecureContainer = IBinder.FIRST_CALL_TRANSACTION + 12; 769be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 770be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 13; 771be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 772be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 14; 773be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 774be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isSecureContainerMounted = IBinder.FIRST_CALL_TRANSACTION + 15; 775be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 776be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_renameSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 16; 777be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 778be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerPath = IBinder.FIRST_CALL_TRANSACTION + 17; 779be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 780be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerList = IBinder.FIRST_CALL_TRANSACTION + 18; 781be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 782be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_shutdown = IBinder.FIRST_CALL_TRANSACTION + 19; 783be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 784be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finishMediaUpdate = IBinder.FIRST_CALL_TRANSACTION + 20; 785be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 786be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountObb = IBinder.FIRST_CALL_TRANSACTION + 21; 787be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 788be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountObb = IBinder.FIRST_CALL_TRANSACTION + 22; 789be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 790be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isObbMounted = IBinder.FIRST_CALL_TRANSACTION + 23; 791be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 792be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getMountedObbPath = IBinder.FIRST_CALL_TRANSACTION + 24; 793be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 794e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root static final int TRANSACTION_isExternalStorageEmulated = IBinder.FIRST_CALL_TRANSACTION + 25; 795e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 7965af0b916f850486cff4797355bf9e7dc3352fe00Jason parks static final int TRANSACTION_decryptStorage = IBinder.FIRST_CALL_TRANSACTION + 26; 7975af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 79856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks static final int TRANSACTION_encryptStorage = IBinder.FIRST_CALL_TRANSACTION + 27; 79956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 800f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks static final int TRANSACTION_changeEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 28; 801f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 802d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood static final int TRANSACTION_getVolumeList = IBinder.FIRST_CALL_TRANSACTION + 29; 803d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood 804292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn static final int TRANSACTION_getSecureContainerFilesystemPath = IBinder.FIRST_CALL_TRANSACTION + 30; 805292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 806444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int TRANSACTION_getEncryptionState = IBinder.FIRST_CALL_TRANSACTION + 31; 807444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 80832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate static final int TRANSACTION_verifyEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 32; 80932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 8106dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root static final int TRANSACTION_fixPermissionsSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 33; 8116dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 812be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 813be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Cast an IBinder object into an IMountService interface, generating a 814be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * proxy if needed. 815be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 816be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static IMountService asInterface(IBinder obj) { 817be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (obj == null) { 818be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return null; 819be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 820be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IInterface iin = obj.queryLocalInterface(DESCRIPTOR); 821be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (iin != null && iin instanceof IMountService) { 822be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return (IMountService) iin; 823be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 824be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return new IMountService.Stub.Proxy(obj); 825be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 826be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 827be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Construct the stub at attach it to the interface. */ 828be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public Stub() { 829be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root attachInterface(this, DESCRIPTOR); 830be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 831be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 832be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 833be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return this; 834be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 835be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 836be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root @Override 837be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean onTransact(int code, Parcel data, Parcel reply, 838be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int flags) throws RemoteException { 839be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root switch (code) { 840be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case INTERFACE_TRANSACTION: { 841be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(DESCRIPTOR); 842be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 843be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 844be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_registerListener: { 845be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 846be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 847be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 848be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root registerListener(listener); 849be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 850be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 851be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 852be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unregisterListener: { 853be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 854be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 855be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 856be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root unregisterListener(listener); 857be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 858be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 859be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 860be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageConnected: { 861be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 862be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageConnected(); 863be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 864be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 865be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 866be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 867be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_setUsbMassStorageEnabled: { 868be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 869be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean enable; 870be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root enable = 0 != data.readInt(); 871be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root setUsbMassStorageEnabled(enable); 872be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 873be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 874be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 875be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageEnabled: { 876be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 877be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageEnabled(); 878be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 879be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 880be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 881be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 882be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountVolume: { 883be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 884be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 885be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 886be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = mountVolume(mountPoint); 887be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 888be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 889be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 890be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 891be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountVolume: { 892be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 893be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 894be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 89513c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo boolean force = 0 != data.readInt(); 89613c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo boolean removeEncrypt = 0 != data.readInt(); 89713c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo unmountVolume(mountPoint, force, removeEncrypt); 898be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 899be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 900be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 901be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_formatVolume: { 902be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 903be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 904be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 905be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int result = formatVolume(mountPoint); 906be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 907be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(result); 908be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 909be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 910be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getStorageUsers: { 911be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 912be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path; 913be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root path = data.readString(); 914be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] pids = getStorageUsers(path); 915be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 916be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeIntArray(pids); 917be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 918be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 919be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getVolumeState: { 920be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 921be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 922be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 923be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String state = getVolumeState(mountPoint); 924be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 925be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(state); 926be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 927be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 928be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_createSecureContainer: { 929be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 930be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 931be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 932be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int sizeMb; 933be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root sizeMb = data.readInt(); 934be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String fstype; 935be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root fstype = data.readString(); 936be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 937be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 938be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 939be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 9406dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root boolean external; 9416dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root external = 0 != data.readInt(); 9426dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int resultCode = createSecureContainer(id, sizeMb, fstype, key, ownerUid, 9436dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root external); 944be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 945be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 946be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 947be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 948be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finalizeSecureContainer: { 949be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 950be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 951be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 952be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = finalizeSecureContainer(id); 953be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 954be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 955be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 956be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 957be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_destroySecureContainer: { 958be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 959be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 960be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 961be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 962be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 963be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = destroySecureContainer(id, force); 964be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 965be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 966be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 967be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 968be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountSecureContainer: { 969be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 970be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 971be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 972be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 973be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 974be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 975be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 976be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = mountSecureContainer(id, key, ownerUid); 977be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 978be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 979be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 980be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 981be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountSecureContainer: { 982be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 983be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 984be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 985be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 986be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 987be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = unmountSecureContainer(id, force); 988be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 989be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 990be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 991be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 992be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isSecureContainerMounted: { 993be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 994be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 995be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 996be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isSecureContainerMounted(id); 997be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 998be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 999be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1000be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1001be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_renameSecureContainer: { 1002be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1003be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String oldId; 1004be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root oldId = data.readString(); 1005be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String newId; 1006be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root newId = data.readString(); 1007be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = renameSecureContainer(oldId, newId); 1008be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1009be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1010be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1011be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1012be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerPath: { 1013be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1014be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1015be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1016be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path = getSecureContainerPath(id); 1017be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1018be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(path); 1019be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1020be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1021be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerList: { 1022be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1023be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] ids = getSecureContainerList(); 1024be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1025be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeStringArray(ids); 1026be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1027be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1028be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_shutdown: { 1029be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1030be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountShutdownObserver observer; 1031be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IMountShutdownObserver.Stub.asInterface(data 1032be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root .readStrongBinder()); 1033be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root shutdown(observer); 1034be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1035be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1036be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1037be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finishMediaUpdate: { 1038be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1039be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root finishMediaUpdate(); 1040be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1041be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1042be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1043be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountObb: { 1044be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1045be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1046be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1047be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 1048be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 1049be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 1050be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 1051af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 1052af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 1053af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root mountObb(filename, key, observer, nonce); 1054be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1055be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1056be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1057be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountObb: { 1058be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1059be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1060be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1061be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1062be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1063be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 1064be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 1065af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 1066af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 1067af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root unmountObb(filename, force, observer, nonce); 1068be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1069be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1070be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1071be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isObbMounted: { 1072be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1073be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1074be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1075be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isObbMounted(filename); 1076be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1077be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 1078be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1079be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1080be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getMountedObbPath: { 1081be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1082be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1083be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1084be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountedPath = getMountedObbPath(filename); 1085be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1086be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(mountedPath); 1087be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1088be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1089e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root case TRANSACTION_isExternalStorageEmulated: { 1090e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root data.enforceInterface(DESCRIPTOR); 1091e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean emulated = isExternalStorageEmulated(); 1092e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeNoException(); 1093e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeInt(emulated ? 1 : 0); 1094e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return true; 1095e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 10965af0b916f850486cff4797355bf9e7dc3352fe00Jason parks case TRANSACTION_decryptStorage: { 10975af0b916f850486cff4797355bf9e7dc3352fe00Jason parks data.enforceInterface(DESCRIPTOR); 10985af0b916f850486cff4797355bf9e7dc3352fe00Jason parks String password = data.readString(); 10995af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int result = decryptStorage(password); 11005af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeNoException(); 11015af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeInt(result); 11025af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return true; 11035af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 110456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks case TRANSACTION_encryptStorage: { 110556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks data.enforceInterface(DESCRIPTOR); 110656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks String password = data.readString(); 110756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks int result = encryptStorage(password); 110856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeNoException(); 110956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeInt(result); 111056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return true; 111156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 1112f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks case TRANSACTION_changeEncryptionPassword: { 1113f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks data.enforceInterface(DESCRIPTOR); 1114f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks String password = data.readString(); 1115f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks int result = changeEncryptionPassword(password); 1116f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeNoException(); 1117f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeInt(result); 1118f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return true; 1119f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 1120d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood case TRANSACTION_getVolumeList: { 1121d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood data.enforceInterface(DESCRIPTOR); 11222f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood Parcelable[] result = getVolumeList(); 1123d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood reply.writeNoException(); 11242f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood reply.writeParcelableArray(result, 0); 1125d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood return true; 1126d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 1127292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn case TRANSACTION_getSecureContainerFilesystemPath: { 1128292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn data.enforceInterface(DESCRIPTOR); 1129292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String id; 1130292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn id = data.readString(); 1131292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String path = getSecureContainerFilesystemPath(id); 1132292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn reply.writeNoException(); 1133292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn reply.writeString(path); 1134292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn return true; 1135292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 1136444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo case TRANSACTION_getEncryptionState: { 1137444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo data.enforceInterface(DESCRIPTOR); 1138444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo int result = getEncryptionState(); 1139444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo reply.writeNoException(); 1140444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo reply.writeInt(result); 1141444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo return true; 1142444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 11436dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root case TRANSACTION_fixPermissionsSecureContainer: { 11446dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root data.enforceInterface(DESCRIPTOR); 11456dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root String id; 11466dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root id = data.readString(); 11476dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int gid; 11486dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root gid = data.readInt(); 11496dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root String filename; 11506dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root filename = data.readString(); 11516dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int resultCode = fixPermissionsSecureContainer(id, gid, filename); 11526dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root reply.writeNoException(); 11536dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root reply.writeInt(resultCode); 11546dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root return true; 11556dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 1156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return super.onTransact(code, data, reply, flags); 1158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns an int 1163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 1164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 11656dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 11666dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int ownerUid, boolean external) throws RemoteException; 1167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated with it. 1170be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * NOTE: Ensure all references are released prior to deleting. Returns an 1171be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1172be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1173be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException; 1174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. After 1177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * finalization, the container is immutable. Returns an int consistent with 1178be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1179be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1180be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException; 1181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 1184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 1185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException; 1187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int consistent 1190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException; 1193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 1196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getMountedObbPath(String filename) throws RemoteException; 1198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 1201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException; 1203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 1206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException; 1208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 1211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException; 1213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 1216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException; 1218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 1221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 1222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isObbMounted(String filename) throws RemoteException; 1224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 1227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException; 1229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 1232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException; 1234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is shared) 1237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException; 1239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and 1242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * only allows the calling process's UID access to the contents. 1243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1246af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void mountObb(String filename, String key, IObbActionListener token, int nonce) 1247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 1248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. Returns an 1251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountSecureContainer(String id, String key, int ownerUid) throws RemoteException; 1254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int consistent 1257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException; 1260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async notifications. 1263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1264be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException; 1265be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1266be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent with 1268be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1269be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1270be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException; 1271be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1272be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1273be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check actual 1274be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * status of enabling/disabling USB mass storage via StorageEventListener. 1275be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1276be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException; 1277be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1278be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1279be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external media. 1280be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Invokes call back once the shutdown is complete. 1281be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1282be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) throws RemoteException; 1283be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1284be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1285be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified, 1286be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * any program using it will be forcibly killed to unmount the image. 1287be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1288be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1289be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1290af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root public void unmountObb(String filename, boolean force, IObbActionListener token, int nonce) 1291be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 1292be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1293be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1294be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 1295be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1296be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1297be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException; 1298be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1299be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1300be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount is an 1301be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * asynchronous operation. Applications should register StorageEventListener 1302be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * for storage related status changes. 130313c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param mountPoint the mount point 130413c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param force whether or not to forcefully unmount it (e.g. even if programs are using this 130513c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * data currently) 130613c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param removeEncryption whether or not encryption mapping should be removed from the volume. 130713c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * This value implies {@code force}. 1308be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 130913c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) 131013c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo throws RemoteException; 1311be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1312be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1313be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 1314be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1315be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException; 1316e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 1317e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 1318e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether or not the external storage is emulated. 1319e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 1320e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException; 13215af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 1322444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume is not encrypted. */ 1323444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_NONE = 1; 1324444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume has been encrypted succesfully. */ 1325444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_OK = 0; 1326444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume is in a bad state. */ 1327444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_ERROR_UNKNOWN = -1; 1328444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume is in a bad state - partially encrypted. Data is likely irrecoverable. */ 1329444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_ERROR_INCOMPLETE = -2; 1330444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 1331444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** 1332444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo * Determines the encryption state of the volume. 1333444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo * @return a numerical value. See {@code ENCRYPTION_STATE_*} for possible values. 1334444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo */ 1335444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo public int getEncryptionState() throws RemoteException; 1336444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 13375af0b916f850486cff4797355bf9e7dc3352fe00Jason parks /** 13385af0b916f850486cff4797355bf9e7dc3352fe00Jason parks * Decrypts any encrypted volumes. 13395af0b916f850486cff4797355bf9e7dc3352fe00Jason parks */ 13405af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException; 134156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 134256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks /** 134356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks * Encrypts storage. 134456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks */ 134556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks public int encryptStorage(String password) throws RemoteException; 1346f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1347f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks /** 1348f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * Changes the encryption password. 1349f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks */ 1350f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks public int changeEncryptionPassword(String password) throws RemoteException; 1351f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1352d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood /** 135332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate * Verify the encryption password against the stored volume. This method 135432418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate * may only be called by the system process. 135532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate */ 135632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate public int verifyEncryptionPassword(String password) throws RemoteException; 135732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 135832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate /** 1359d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood * Returns list of all mountable volumes. 1360d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood */ 13612f6a3885533a52758c2cd4f81f6123a712be8ae6Mike Lockwood public Parcelable[] getVolumeList() throws RemoteException; 1362292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 1363292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn public String getSecureContainerFilesystemPath(String id) throws RemoteException; 13646dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 13656dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root /* 13666dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Fix permissions in a container which has just been created and populated. 13676dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Returns an int consistent with MountServiceResultCode 13686dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root */ 13696dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int fixPermissionsSecureContainer(String id, int gid, String filename) 13706dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root throws RemoteException; 1371be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root} 1372