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 19275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkeyimport android.content.pm.IPackageMoveObserver; 20be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.Binder; 21be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.IBinder; 22be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.IInterface; 23be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.Parcel; 24be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.RemoteException; 25be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 26be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/** 27be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WARNING! Update IMountService.h and IMountService.cpp if you change this 28be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * file. In particular, the ordering of the methods below must match the 29be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * _TRANSACTION enum in IMountService.cpp 30f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * 31be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * @hide - Applications should use android.os.storage.StorageManager to access 32be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * storage functions. 33be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 34be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpublic interface IMountService extends IInterface { 35be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Local-side IPC implementation stub class. */ 36be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static abstract class Stub extends Binder implements IMountService { 37be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static class Proxy implements IMountService { 38444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo private final IBinder mRemote; 39be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 40be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Proxy(IBinder remote) { 41be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote = remote; 42be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 43be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 44be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 45be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return mRemote; 46be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 47be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 48be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getInterfaceDescriptor() { 49be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return DESCRIPTOR; 50be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 51be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 52be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 53be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async 54be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * notifications. 55be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 56be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException { 57be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 58be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 59be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 60be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 61be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 62be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_registerListener, _data, _reply, 0); 63be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 64be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 65be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 66be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 67be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 68be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 69be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 70be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 71be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 72be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 73be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException { 74be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 75be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 76be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 77be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 78be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 79be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unregisterListener, _data, _reply, 0); 80be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 81be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 82be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 83be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 84be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 85be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 86be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 87be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 88be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 89be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 90be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException { 91be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 92be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 93be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 94be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 95be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 96be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageConnected, _data, _reply, 0); 97be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 98be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 99be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check 108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * actual status of enabling/disabling USB mass storage via 109be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener. 110be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 111be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException { 112be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((enable ? 1 : 0)); 117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_setUsbMassStorageEnabled, _data, _reply, 0); 118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is 127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * shared) 128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException { 130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageEnabled, _data, _reply, 0); 136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 141be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 145be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 146be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int 147be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException { 150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountVolume, _data, _reply, 0); 157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 165be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 166be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount 168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * is an asynchronous operation. Applications should register 169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener for storage related status changes. 170be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 17113c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) 17213c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo throws RemoteException { 173be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 178be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 17913c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo _data.writeInt((removeEncryption ? 1 : 0)); 180be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountVolume, _data, _reply, 0); 181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int 190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException { 193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_formatVolume, _data, _reply, 0); 200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException { 213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] _result; 216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(path); 219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getStorageUsers, _data, _reply, 0); 220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createIntArray(); 222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException { 233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getVolumeState, _data, _reply, 0); 240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns 251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * an int consistent with MountServiceResultCode 252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 2546dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int ownerUid, boolean external) throws RemoteException { 255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(sizeMb); 262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(fstype); 263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 264be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 2656dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInt(external ? 1 : 0); 266be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_createSecureContainer, _data, _reply, 0); 267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 268be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 269be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 270be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 271be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 272be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 273be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 274be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 275be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 276be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 277be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated 278be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with it. NOTE: Ensure all references are released prior to 279be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * deleting. Returns an int consistent with MountServiceResultCode 280be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 281be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException { 282be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 283be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 284be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 285be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 286be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 287be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 288be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 289be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_destroySecureContainer, _data, _reply, 0); 290be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 291be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 292be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 293be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 294be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 295be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 296be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 297be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 298be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 299be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 300be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. 301be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * After finalization, the container is immutable. Returns an int 302be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 303be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 304be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException { 305be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 306be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 307be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 308be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 309be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 310be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 311be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finalizeSecureContainer, _data, _reply, 0); 312be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 313be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 314be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 315be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 316be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 317be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 318be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 319be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 320be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 321be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 322be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. 323be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an int consistent with MountServiceResultCode 324be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 325941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly) 326be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 327be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 328be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 329be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 330be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 331be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 332be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 333be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 334be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 335941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeInt(readOnly ? 1 : 0); 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 */ 4924fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void mountObb(String rawPath, String canonicalPath, String key, 4934fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey IObbActionListener token, int nonce) throws RemoteException { 494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 496be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 497be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 4984fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 4994fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(canonicalPath); 500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 501be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 502af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountObb, _data, _reply, 0); 504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 512be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is 513be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * specified, any program using it will be forcibly killed to 514be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * unmount the image. MountService will call back to the supplied 515be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 516be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 517be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 5184fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void unmountObb( 5194fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey String rawPath, boolean force, IObbActionListener token, int nonce) 5204fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey throws RemoteException { 521be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 522be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 523be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 524be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 5254fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 526be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 527be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 528af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 529be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountObb, _data, _reply, 0); 530be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 531be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 532be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 533be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 534be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 535be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 536be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 537be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 538be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 539be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 540be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 5414fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public boolean isObbMounted(String rawPath) throws RemoteException { 542be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 543be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 544be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 545be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 546be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 5474fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 548be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isObbMounted, _data, _reply, 0); 549be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 550be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 551be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 552be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 553be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 554be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 555be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 556be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 557be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 558be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 559be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 560be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 5614fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public String getMountedObbPath(String rawPath) throws RemoteException { 562be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 563be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 564be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 565be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 566be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 5674fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 568be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getMountedObbPath, _data, _reply, 0); 569be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 570be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 571be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 572be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 573be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 574be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 575be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 576be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 577e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 578e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 579e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether the external storage is emulated. 580e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 581e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException { 582e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _data = Parcel.obtain(); 583e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _reply = Parcel.obtain(); 584e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean _result; 585e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root try { 586e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 587e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root mRemote.transact(Stub.TRANSACTION_isExternalStorageEmulated, _data, _reply, 0); 588e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.readException(); 589e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _result = 0 != _reply.readInt(); 590e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } finally { 591e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.recycle(); 592e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.recycle(); 593e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 594e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return _result; 595e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 5965af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 597444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo public int getEncryptionState() throws RemoteException { 598444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo Parcel _data = Parcel.obtain(); 599444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo Parcel _reply = Parcel.obtain(); 600444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo int _result; 601444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo try { 602444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _data.writeInterfaceToken(DESCRIPTOR); 603444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo mRemote.transact(Stub.TRANSACTION_getEncryptionState, _data, _reply, 0); 604444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _reply.readException(); 605444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _result = _reply.readInt(); 606444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } finally { 607444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _reply.recycle(); 608444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _data.recycle(); 609444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 610444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo return _result; 611444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 612444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 6135af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException { 6145af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _data = Parcel.obtain(); 6155af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _reply = Parcel.obtain(); 6165af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int _result; 6175af0b916f850486cff4797355bf9e7dc3352fe00Jason parks try { 6185af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeInterfaceToken(DESCRIPTOR); 6195af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeString(password); 6205af0b916f850486cff4797355bf9e7dc3352fe00Jason parks mRemote.transact(Stub.TRANSACTION_decryptStorage, _data, _reply, 0); 6215af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.readException(); 6225af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _result = _reply.readInt(); 6235af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } finally { 6245af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.recycle(); 6255af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.recycle(); 6265af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 6275af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return _result; 6285af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 62956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 63046791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence public int encryptStorage(int type, String password) throws RemoteException { 63156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _data = Parcel.obtain(); 63256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _reply = Parcel.obtain(); 63356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks int _result; 63456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks try { 63556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeInterfaceToken(DESCRIPTOR); 63646791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence _data.writeInt(type); 63756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeString(password); 63856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0); 63956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.readException(); 64056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _result = _reply.readInt(); 64156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } finally { 64256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.recycle(); 64356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.recycle(); 64456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 64556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return _result; 64656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 647f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 6488e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int changeEncryptionPassword(int type, String password) throws RemoteException { 649f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _data = Parcel.obtain(); 650f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _reply = Parcel.obtain(); 651f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks int _result; 652f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks try { 653f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeInterfaceToken(DESCRIPTOR); 6548e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _data.writeInt(type); 655f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeString(password); 656f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0); 657f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.readException(); 658f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _result = _reply.readInt(); 659f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } finally { 660f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.recycle(); 661f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.recycle(); 662f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 663f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return _result; 664f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 665d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood 66632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate @Override 66732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate public int verifyEncryptionPassword(String password) throws RemoteException { 66832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate Parcel _data = Parcel.obtain(); 66932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate Parcel _reply = Parcel.obtain(); 67032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate int _result; 67132418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate try { 67232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.writeInterfaceToken(DESCRIPTOR); 67332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.writeString(password); 67432418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate mRemote.transact(Stub.TRANSACTION_verifyEncryptionPassword, _data, _reply, 0); 67532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _reply.readException(); 67632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _result = _reply.readInt(); 67732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } finally { 67832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _reply.recycle(); 67932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.recycle(); 68032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } 68132418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate return _result; 68232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } 68332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 6848e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int getPasswordType() throws RemoteException { 6858e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence Parcel _data = Parcel.obtain(); 6868e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence Parcel _reply = Parcel.obtain(); 6878e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int _result; 6888e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence try { 6898e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 6908e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence mRemote.transact(Stub.TRANSACTION_getPasswordType, _data, _reply, 0); 6918e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _reply.readException(); 6928e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _result = _reply.readInt(); 6938e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } finally { 6948e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _reply.recycle(); 6958e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _data.recycle(); 6968e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } 6978e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence return _result; 6988e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } 6998e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence 700945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public String getPassword() throws RemoteException { 701945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _data = Parcel.obtain(); 702945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _reply = Parcel.obtain(); 703945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence String _result; 704945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence try { 705945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 706945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence mRemote.transact(Stub.TRANSACTION_getPassword, _data, _reply, 0); 707945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.readException(); 708945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _result = _reply.readString(); 709945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } finally { 710945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.recycle(); 711945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.recycle(); 712945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 713945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence return _result; 714945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 715945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 716945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public void clearPassword() throws RemoteException { 717945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _data = Parcel.obtain(); 718945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _reply = Parcel.obtain(); 719e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence try { 720e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 721e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence mRemote.transact(Stub.TRANSACTION_clearPassword, _data, _reply, IBinder.FLAG_ONEWAY); 722e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.readException(); 723e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } finally { 724e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.recycle(); 725e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.recycle(); 726e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 727e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 728e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 729e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public void setField(String field, String data) throws RemoteException { 730e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _data = Parcel.obtain(); 731e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _reply = Parcel.obtain(); 732e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence try { 733e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 734e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeString(field); 735e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeString(data); 736e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence mRemote.transact(Stub.TRANSACTION_setField, _data, _reply, IBinder.FLAG_ONEWAY); 737e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.readException(); 738e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } finally { 739e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.recycle(); 740e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.recycle(); 741e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 742e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 743e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 744e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public String getField(String field) throws RemoteException { 745e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _data = Parcel.obtain(); 746e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _reply = Parcel.obtain(); 747945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence String _result; 748945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence try { 749945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 750e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeString(field); 751e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence mRemote.transact(Stub.TRANSACTION_getField, _data, _reply, 0); 752945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.readException(); 753e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _result = _reply.readString(); 754945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } finally { 755945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.recycle(); 756945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.recycle(); 757945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 758e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence return _result; 759945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 760945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 7614634987668eb7e1fa1434bddbde969ef43de6b40Jeff Sharkey public StorageVolume[] getVolumeList(int uid, String packageName, int flags) 7626ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov throws RemoteException { 763d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood Parcel _data = Parcel.obtain(); 764d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood Parcel _reply = Parcel.obtain(); 765b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey StorageVolume[] _result; 766d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood try { 767d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _data.writeInterfaceToken(DESCRIPTOR); 7686ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov _data.writeInt(uid); 7696ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov _data.writeString(packageName); 7704634987668eb7e1fa1434bddbde969ef43de6b40Jeff Sharkey _data.writeInt(flags); 771d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood mRemote.transact(Stub.TRANSACTION_getVolumeList, _data, _reply, 0); 772d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _reply.readException(); 773b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey _result = _reply.createTypedArray(StorageVolume.CREATOR); 774d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } finally { 775d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _reply.recycle(); 776d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _data.recycle(); 777d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 778d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood return _result; 779d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 780292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 781292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn /* 782292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn * Returns the filesystem path of a mounted secure container. 783292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn */ 784292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn public String getSecureContainerFilesystemPath(String id) throws RemoteException { 785292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn Parcel _data = Parcel.obtain(); 786292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn Parcel _reply = Parcel.obtain(); 787292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String _result; 788292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn try { 789292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.writeInterfaceToken(DESCRIPTOR); 790292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.writeString(id); 791292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn mRemote.transact(Stub.TRANSACTION_getSecureContainerFilesystemPath, _data, _reply, 0); 792292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _reply.readException(); 793292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _result = _reply.readString(); 794292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } finally { 795292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _reply.recycle(); 796292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.recycle(); 797292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 798292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn return _result; 799292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 8006dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 8016dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root /** 8026dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Fix permissions in a container which has just been created and 8036dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * populated. Returns an int consistent with MountServiceResultCode 8046dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root */ 8056dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int fixPermissionsSecureContainer(String id, int gid, String filename) 8066dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root throws RemoteException { 8076dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root Parcel _data = Parcel.obtain(); 8086dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root Parcel _reply = Parcel.obtain(); 8096dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int _result; 8106dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root try { 8116dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 8126dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeString(id); 8136dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInt(gid); 8146dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeString(filename); 8156dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root mRemote.transact(Stub.TRANSACTION_fixPermissionsSecureContainer, _data, _reply, 0); 8166dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _reply.readException(); 8176dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _result = _reply.readInt(); 8186dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } finally { 8196dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _reply.recycle(); 8206dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.recycle(); 8216dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 8226dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root return _result; 8232d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } 8246dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 8252d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey @Override 8262d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey public int mkdirs(String callingPkg, String path) throws RemoteException { 8272d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey Parcel _data = Parcel.obtain(); 8282d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey Parcel _reply = Parcel.obtain(); 8292d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey int _result; 8302d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey try { 8312d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 8322d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.writeString(callingPkg); 8332d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.writeString(path); 8342d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey mRemote.transact(Stub.TRANSACTION_mkdirs, _data, _reply, 0); 8352d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _reply.readException(); 8362d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _result = _reply.readInt(); 8372d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } finally { 8382d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _reply.recycle(); 8392d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.recycle(); 8402d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } 8412d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey return _result; 8426dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 843941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey 844941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey @Override 845941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int resizeSecureContainer(String id, int sizeMb, String key) 846941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey throws RemoteException { 847941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey Parcel _data = Parcel.obtain(); 848941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey Parcel _reply = Parcel.obtain(); 849941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int _result; 850941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey try { 851941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 852941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeString(id); 853941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeInt(sizeMb); 854941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeString(key); 855941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey mRemote.transact(Stub.TRANSACTION_resizeSecureContainer, _data, _reply, 0); 856941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _reply.readException(); 857941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _result = _reply.readInt(); 858941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } finally { 859941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _reply.recycle(); 860941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.recycle(); 861941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } 862941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey return _result; 863941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } 8647265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 8657265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate @Override 8667265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public long lastMaintenance() throws RemoteException { 8677265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _data = Parcel.obtain(); 8687265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _reply = Parcel.obtain(); 8697265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate long _result; 8707265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate try { 8717265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.writeInterfaceToken(DESCRIPTOR); 8727265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate mRemote.transact(Stub.TRANSACTION_lastMaintenance, _data, _reply, 0); 8737265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.readException(); 8747265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _result = _reply.readLong(); 8757265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } finally { 8767265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.recycle(); 8777265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.recycle(); 8787265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 8797265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return _result; 8807265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 8817265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 8827265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate @Override 8837265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public void runMaintenance() throws RemoteException { 8847265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _data = Parcel.obtain(); 8857265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _reply = Parcel.obtain(); 8867265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate try { 8877265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.writeInterfaceToken(DESCRIPTOR); 8887265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate mRemote.transact(Stub.TRANSACTION_runMaintenance, _data, _reply, 0); 8897265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.readException(); 8907265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } finally { 8917265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.recycle(); 8927265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.recycle(); 8937265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 8947265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return; 8957265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 89656e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey 89756e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey @Override 89856e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey public void waitForAsecScan() throws RemoteException { 89956e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey Parcel _data = Parcel.obtain(); 90056e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey Parcel _reply = Parcel.obtain(); 90156e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey try { 90256e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 90356e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey mRemote.transact(Stub.TRANSACTION_waitForAsecScan, _data, _reply, 0); 90456e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey _reply.readException(); 90556e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey } finally { 90656e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey _reply.recycle(); 90756e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey _data.recycle(); 90856e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey } 90956e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey return; 91056e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey } 9111b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey 9121b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey @Override 9131b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey public DiskInfo[] getDisks() throws RemoteException { 9141b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey Parcel _data = Parcel.obtain(); 9151b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey Parcel _reply = Parcel.obtain(); 9161b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey DiskInfo[] _result; 9171b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey try { 9181b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 9191b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey mRemote.transact(Stub.TRANSACTION_getDisks, _data, _reply, 0); 9201b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _reply.readException(); 9211b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _result = _reply.createTypedArray(DiskInfo.CREATOR); 9221b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } finally { 9231b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _reply.recycle(); 9241b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _data.recycle(); 9251b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } 9261b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey return _result; 9271b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } 9281b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey 9291b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey @Override 930d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey public VolumeInfo[] getVolumes(int _flags) throws RemoteException { 9311b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey Parcel _data = Parcel.obtain(); 9321b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey Parcel _reply = Parcel.obtain(); 9331b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey VolumeInfo[] _result; 9341b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey try { 9351b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 936d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.writeInt(_flags); 9377151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_getVolumes, _data, _reply, 0); 9381b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _reply.readException(); 9391b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _result = _reply.createTypedArray(VolumeInfo.CREATOR); 9401b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } finally { 9411b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _reply.recycle(); 9421b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey _data.recycle(); 9431b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } 9441b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey return _result; 9451b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } 9467151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 9477151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey @Override 948b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord[] getVolumeRecords(int _flags) throws RemoteException { 949b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey Parcel _data = Parcel.obtain(); 950b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey Parcel _reply = Parcel.obtain(); 951b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey VolumeRecord[] _result; 952b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey try { 953b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 954b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.writeInt(_flags); 955b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey mRemote.transact(Stub.TRANSACTION_getVolumeRecords, _data, _reply, 0); 956b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _reply.readException(); 957b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _result = _reply.createTypedArray(VolumeRecord.CREATOR); 958b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } finally { 959b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _reply.recycle(); 960b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.recycle(); 961b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 962b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return _result; 963b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 964b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 965b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 9667151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void mount(String volId) throws RemoteException { 9677151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _data = Parcel.obtain(); 9687151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _reply = Parcel.obtain(); 9697151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey try { 9707151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 9717151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeString(volId); 9727151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_mount, _data, _reply, 0); 9737151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.readException(); 9747151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } finally { 9757151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.recycle(); 9767151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.recycle(); 9777151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 9787151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 9797151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 9807151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey @Override 9817151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void unmount(String volId) throws RemoteException { 9827151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _data = Parcel.obtain(); 9837151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _reply = Parcel.obtain(); 9847151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey try { 9857151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 9867151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeString(volId); 9877151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_unmount, _data, _reply, 0); 9887151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.readException(); 9897151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } finally { 9907151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.recycle(); 9917151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.recycle(); 9927151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 9937151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 9947151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 9957151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey @Override 9967151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void format(String volId) throws RemoteException { 9977151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _data = Parcel.obtain(); 9987151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _reply = Parcel.obtain(); 9997151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey try { 10007151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 10017151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeString(volId); 10027151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_format, _data, _reply, 0); 10037151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.readException(); 10047151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } finally { 10057151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.recycle(); 10067151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.recycle(); 10077151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10087151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10097151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 10107151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey @Override 10119756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey public long benchmark(String volId) throws RemoteException { 10129756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey Parcel _data = Parcel.obtain(); 10139756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey Parcel _reply = Parcel.obtain(); 10149756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey try { 10159756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 10169756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey _data.writeString(volId); 10179756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey mRemote.transact(Stub.TRANSACTION_benchmark, _data, _reply, 0); 10189756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey _reply.readException(); 10199756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey return _reply.readLong(); 10209756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey } finally { 10219756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey _reply.recycle(); 10229756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey _data.recycle(); 10239756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey } 10249756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey } 10259756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey 10269756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey @Override 10277151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void partitionPublic(String diskId) throws RemoteException { 10287151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _data = Parcel.obtain(); 10297151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _reply = Parcel.obtain(); 10307151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey try { 10317151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 10327151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeString(diskId); 10337151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_partitionPublic, _data, _reply, 0); 10347151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.readException(); 10357151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } finally { 10367151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.recycle(); 10377151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.recycle(); 10387151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10397151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10407151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 10417151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey @Override 10427151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void partitionPrivate(String diskId) throws RemoteException { 10437151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _data = Parcel.obtain(); 10447151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _reply = Parcel.obtain(); 10457151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey try { 10467151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 10477151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeString(diskId); 10487151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_partitionPrivate, _data, _reply, 0); 10497151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.readException(); 10507151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } finally { 10517151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.recycle(); 10527151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.recycle(); 10537151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10547151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10557151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 10567151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey @Override 10577151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void partitionMixed(String diskId, int ratio) throws RemoteException { 10587151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _data = Parcel.obtain(); 10597151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey Parcel _reply = Parcel.obtain(); 10607151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey try { 10617151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 10627151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeString(diskId); 10637151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.writeInt(ratio); 10647151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mRemote.transact(Stub.TRANSACTION_partitionMixed, _data, _reply, 0); 10657151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.readException(); 10667151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } finally { 10677151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _reply.recycle(); 10687151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey _data.recycle(); 10697151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 10707151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 1071d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey 1072d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey @Override 1073b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void setVolumeNickname(String fsUuid, String nickname) throws RemoteException { 1074d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey Parcel _data = Parcel.obtain(); 1075d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey Parcel _reply = Parcel.obtain(); 1076d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey try { 1077d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 1078b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.writeString(fsUuid); 1079d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.writeString(nickname); 1080d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey mRemote.transact(Stub.TRANSACTION_setVolumeNickname, _data, _reply, 0); 1081d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _reply.readException(); 1082d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } finally { 1083d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _reply.recycle(); 1084d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.recycle(); 1085d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } 1086d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } 1087d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey 1088d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey @Override 1089b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void setVolumeUserFlags(String fsUuid, int flags, int mask) throws RemoteException { 1090d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey Parcel _data = Parcel.obtain(); 1091d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey Parcel _reply = Parcel.obtain(); 1092d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey try { 1093d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 1094b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.writeString(fsUuid); 1095d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.writeInt(flags); 1096d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.writeInt(mask); 1097d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey mRemote.transact(Stub.TRANSACTION_setVolumeUserFlags, _data, _reply, 0); 1098d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _reply.readException(); 1099d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } finally { 1100d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _reply.recycle(); 1101d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey _data.recycle(); 1102d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } 1103d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } 1104620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1105620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 1106b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void forgetVolume(String fsUuid) throws RemoteException { 1107b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey Parcel _data = Parcel.obtain(); 1108b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey Parcel _reply = Parcel.obtain(); 1109b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey try { 1110b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 1111b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.writeString(fsUuid); 1112b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey mRemote.transact(Stub.TRANSACTION_forgetVolume, _data, _reply, 0); 1113b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _reply.readException(); 1114b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } finally { 1115b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _reply.recycle(); 1116b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey _data.recycle(); 1117b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 1118b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 1119b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 1120b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 11217d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void forgetAllVolumes() throws RemoteException { 11227d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey Parcel _data = Parcel.obtain(); 11237d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey Parcel _reply = Parcel.obtain(); 11247d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey try { 11257d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 11267d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mRemote.transact(Stub.TRANSACTION_forgetAllVolumes, _data, _reply, 0); 11277d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey _reply.readException(); 11287d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } finally { 11297d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey _reply.recycle(); 11307d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey _data.recycle(); 11317d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 11327d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 11337d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 11347d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey @Override 11354c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey public void setDebugFlags(int _flags, int _mask) throws RemoteException { 11364c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey Parcel _data = Parcel.obtain(); 11374c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey Parcel _reply = Parcel.obtain(); 11384c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey try { 11394c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 11404c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey _data.writeInt(_flags); 11414c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey _data.writeInt(_mask); 11424c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey mRemote.transact(Stub.TRANSACTION_setDebugFlags, _data, _reply, 0); 11434c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey _reply.readException(); 11444c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey } finally { 11454c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey _reply.recycle(); 11464c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey _data.recycle(); 11474c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey } 11484c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey } 11494c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey 11504c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey @Override 1151620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public String getPrimaryStorageUuid() throws RemoteException { 1152620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey Parcel _data = Parcel.obtain(); 1153620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey Parcel _reply = Parcel.obtain(); 1154620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey String _result; 1155620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey try { 1156620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 1157620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mRemote.transact(Stub.TRANSACTION_getPrimaryStorageUuid, _data, _reply, 0); 1158620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _reply.readException(); 1159620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _result = _reply.readString(); 1160620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } finally { 1161620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _reply.recycle(); 1162620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _data.recycle(); 1163620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1164620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return _result; 1165620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1166620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1167620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 1168275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback) 1169275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey throws RemoteException { 1170620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey Parcel _data = Parcel.obtain(); 1171620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey Parcel _reply = Parcel.obtain(); 1172620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey try { 1173620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 1174620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _data.writeString(volumeUuid); 1175275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey _data.writeStrongBinder((callback != null ? callback.asBinder() : null)); 1176620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mRemote.transact(Stub.TRANSACTION_setPrimaryStorageUuid, _data, _reply, 0); 1177620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _reply.readException(); 1178620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } finally { 1179620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _reply.recycle(); 1180620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey _data.recycle(); 1181620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1182620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 11839527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey 11849527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey @Override 1185bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley public void createNewUserDir(int userHandle, String path) throws RemoteException { 1186bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley Parcel _data = Parcel.obtain(); 1187bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley Parcel _reply = Parcel.obtain(); 1188bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley try { 1189bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley _data.writeInterfaceToken(DESCRIPTOR); 1190bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley _data.writeInt(userHandle); 1191bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley _data.writeString(path); 1192bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley mRemote.transact(Stub.TRANSACTION_createNewUserDir, _data, _reply, 0); 1193bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley _reply.readException(); 1194bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley } finally { 1195bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley _reply.recycle(); 1196bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley _data.recycle(); 1197bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley } 1198bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley } 11997ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley 12007ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley @Override 12017ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley public void deleteUserKey(int userHandle) throws RemoteException { 12027ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley Parcel _data = Parcel.obtain(); 12037ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley Parcel _reply = Parcel.obtain(); 12047ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley try { 12057ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley _data.writeInterfaceToken(DESCRIPTOR); 12067ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley _data.writeInt(userHandle); 12077ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley mRemote.transact(Stub.TRANSACTION_deleteUserKey, _data, _reply, 0); 12087ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley _reply.readException(); 12097ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley } finally { 12107ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley _reply.recycle(); 12117ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley _data.recycle(); 12127ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley } 12137ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley } 1214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static final String DESCRIPTOR = "IMountService"; 1217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_registerListener = IBinder.FIRST_CALL_TRANSACTION + 0; 1219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unregisterListener = IBinder.FIRST_CALL_TRANSACTION + 1; 1221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageConnected = IBinder.FIRST_CALL_TRANSACTION + 2; 1223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_setUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 3; 1225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 4; 1227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountVolume = IBinder.FIRST_CALL_TRANSACTION + 5; 1229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountVolume = IBinder.FIRST_CALL_TRANSACTION + 6; 1231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_formatVolume = IBinder.FIRST_CALL_TRANSACTION + 7; 1233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getStorageUsers = IBinder.FIRST_CALL_TRANSACTION + 8; 1235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getVolumeState = IBinder.FIRST_CALL_TRANSACTION + 9; 1237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_createSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 10; 1239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finalizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 11; 1241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_destroySecureContainer = IBinder.FIRST_CALL_TRANSACTION + 12; 1243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 13; 1245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 14; 1247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isSecureContainerMounted = IBinder.FIRST_CALL_TRANSACTION + 15; 1249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_renameSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 16; 1251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerPath = IBinder.FIRST_CALL_TRANSACTION + 17; 1253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerList = IBinder.FIRST_CALL_TRANSACTION + 18; 1255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_shutdown = IBinder.FIRST_CALL_TRANSACTION + 19; 1257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finishMediaUpdate = IBinder.FIRST_CALL_TRANSACTION + 20; 1259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountObb = IBinder.FIRST_CALL_TRANSACTION + 21; 1261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountObb = IBinder.FIRST_CALL_TRANSACTION + 22; 1263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1264be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isObbMounted = IBinder.FIRST_CALL_TRANSACTION + 23; 1265be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1266be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getMountedObbPath = IBinder.FIRST_CALL_TRANSACTION + 24; 1267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1268e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root static final int TRANSACTION_isExternalStorageEmulated = IBinder.FIRST_CALL_TRANSACTION + 25; 1269e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 12705af0b916f850486cff4797355bf9e7dc3352fe00Jason parks static final int TRANSACTION_decryptStorage = IBinder.FIRST_CALL_TRANSACTION + 26; 12715af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 127256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks static final int TRANSACTION_encryptStorage = IBinder.FIRST_CALL_TRANSACTION + 27; 127356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 1274f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks static final int TRANSACTION_changeEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 28; 1275f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1276d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood static final int TRANSACTION_getVolumeList = IBinder.FIRST_CALL_TRANSACTION + 29; 1277d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood 1278292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn static final int TRANSACTION_getSecureContainerFilesystemPath = IBinder.FIRST_CALL_TRANSACTION + 30; 1279292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 1280444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int TRANSACTION_getEncryptionState = IBinder.FIRST_CALL_TRANSACTION + 31; 1281444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 128232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate static final int TRANSACTION_verifyEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 32; 128332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 12846dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root static final int TRANSACTION_fixPermissionsSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 33; 12856dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 12862d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey static final int TRANSACTION_mkdirs = IBinder.FIRST_CALL_TRANSACTION + 34; 12872d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey 1288945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence static final int TRANSACTION_getPasswordType = IBinder.FIRST_CALL_TRANSACTION + 35; 1289945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 1290945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence static final int TRANSACTION_getPassword = IBinder.FIRST_CALL_TRANSACTION + 36; 1291945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 1292945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence static final int TRANSACTION_clearPassword = IBinder.FIRST_CALL_TRANSACTION + 37; 12938e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence 1294e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence static final int TRANSACTION_setField = IBinder.FIRST_CALL_TRANSACTION + 38; 1295e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 1296e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence static final int TRANSACTION_getField = IBinder.FIRST_CALL_TRANSACTION + 39; 1297e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 1298941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey static final int TRANSACTION_resizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 40; 1299941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey 13007265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate static final int TRANSACTION_lastMaintenance = IBinder.FIRST_CALL_TRANSACTION + 41; 13017265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 13027265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate static final int TRANSACTION_runMaintenance = IBinder.FIRST_CALL_TRANSACTION + 42; 13037265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 130456e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey static final int TRANSACTION_waitForAsecScan = IBinder.FIRST_CALL_TRANSACTION + 43; 130556e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey 13061b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey static final int TRANSACTION_getDisks = IBinder.FIRST_CALL_TRANSACTION + 44; 13071b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey static final int TRANSACTION_getVolumes = IBinder.FIRST_CALL_TRANSACTION + 45; 1308b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_getVolumeRecords = IBinder.FIRST_CALL_TRANSACTION + 46; 13091b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey 1310b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_mount = IBinder.FIRST_CALL_TRANSACTION + 47; 1311b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_unmount = IBinder.FIRST_CALL_TRANSACTION + 48; 1312b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_format = IBinder.FIRST_CALL_TRANSACTION + 49; 13137151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 1314b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_partitionPublic = IBinder.FIRST_CALL_TRANSACTION + 50; 1315b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_partitionPrivate = IBinder.FIRST_CALL_TRANSACTION + 51; 1316b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_partitionMixed = IBinder.FIRST_CALL_TRANSACTION + 52; 13177151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 1318b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_setVolumeNickname = IBinder.FIRST_CALL_TRANSACTION + 53; 1319b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_setVolumeUserFlags = IBinder.FIRST_CALL_TRANSACTION + 54; 1320b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey static final int TRANSACTION_forgetVolume = IBinder.FIRST_CALL_TRANSACTION + 55; 13217d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey static final int TRANSACTION_forgetAllVolumes = IBinder.FIRST_CALL_TRANSACTION + 56; 1322d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey 13237d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey static final int TRANSACTION_getPrimaryStorageUuid = IBinder.FIRST_CALL_TRANSACTION + 57; 13247d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey static final int TRANSACTION_setPrimaryStorageUuid = IBinder.FIRST_CALL_TRANSACTION + 58; 1325620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 13269756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey static final int TRANSACTION_benchmark = IBinder.FIRST_CALL_TRANSACTION + 59; 13274c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey static final int TRANSACTION_setDebugFlags = IBinder.FIRST_CALL_TRANSACTION + 60; 13289756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey 1329bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley static final int TRANSACTION_createNewUserDir = IBinder.FIRST_CALL_TRANSACTION + 62; 13307ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley static final int TRANSACTION_deleteUserKey = IBinder.FIRST_CALL_TRANSACTION + 63; 1331bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley 1332be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1333be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Cast an IBinder object into an IMountService interface, generating a 1334be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * proxy if needed. 1335be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1336be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static IMountService asInterface(IBinder obj) { 1337be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (obj == null) { 1338be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return null; 1339be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1340be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IInterface iin = obj.queryLocalInterface(DESCRIPTOR); 1341be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (iin != null && iin instanceof IMountService) { 1342be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return (IMountService) iin; 1343be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1344be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return new IMountService.Stub.Proxy(obj); 1345be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1346be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1347be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Construct the stub at attach it to the interface. */ 1348be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public Stub() { 1349be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root attachInterface(this, DESCRIPTOR); 1350be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1351be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1352be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 1353be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return this; 1354be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1355be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1356be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root @Override 1357be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean onTransact(int code, Parcel data, Parcel reply, 1358be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int flags) throws RemoteException { 1359be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root switch (code) { 1360be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case INTERFACE_TRANSACTION: { 1361be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(DESCRIPTOR); 1362be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1363be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1364be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_registerListener: { 1365be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1366be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 1367be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 1368be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root registerListener(listener); 1369be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1370be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1371be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1372be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unregisterListener: { 1373be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1374be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 1375be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 1376be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root unregisterListener(listener); 1377be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1378be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1379be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1380be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageConnected: { 1381be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1382be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageConnected(); 1383be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1384be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 1385be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1386be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1387be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_setUsbMassStorageEnabled: { 1388be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1389be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean enable; 1390be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root enable = 0 != data.readInt(); 1391be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root setUsbMassStorageEnabled(enable); 1392be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1393be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1394be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1395be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageEnabled: { 1396be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1397be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageEnabled(); 1398be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1399be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 1400be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1401be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1402be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountVolume: { 1403be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1404be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1405be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 1406be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = mountVolume(mountPoint); 1407be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1408be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1409be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1410be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1411be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountVolume: { 1412be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1413be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1414be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 141513c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo boolean force = 0 != data.readInt(); 141613c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo boolean removeEncrypt = 0 != data.readInt(); 141713c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo unmountVolume(mountPoint, force, removeEncrypt); 1418be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1419be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1420be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1421be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_formatVolume: { 1422be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1423be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1424be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 1425be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int result = formatVolume(mountPoint); 1426be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1427be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(result); 1428be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1429be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1430be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getStorageUsers: { 1431be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1432be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path; 1433be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root path = data.readString(); 1434be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] pids = getStorageUsers(path); 1435be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1436be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeIntArray(pids); 1437be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1438be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1439be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getVolumeState: { 1440be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1441be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1442be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 1443be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String state = getVolumeState(mountPoint); 1444be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1445be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(state); 1446be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1447be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1448be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_createSecureContainer: { 1449be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1450be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1451be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1452be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int sizeMb; 1453be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root sizeMb = data.readInt(); 1454be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String fstype; 1455be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root fstype = data.readString(); 1456be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 1457be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 1458be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 1459be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 14606dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root boolean external; 14616dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root external = 0 != data.readInt(); 14626dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int resultCode = createSecureContainer(id, sizeMb, fstype, key, ownerUid, 14636dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root external); 1464be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1465be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1466be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1467be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1468be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finalizeSecureContainer: { 1469be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1470be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1471be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1472be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = finalizeSecureContainer(id); 1473be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1474be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1475be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1476be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1477be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_destroySecureContainer: { 1478be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1479be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1480be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1481be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1482be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1483be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = destroySecureContainer(id, force); 1484be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1485be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1486be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1487be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1488be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountSecureContainer: { 1489be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1490be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1491be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1492be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 1493be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 1494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 1495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 1496941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey boolean readOnly; 1497941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey readOnly = data.readInt() != 0; 1498941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int resultCode = mountSecureContainer(id, key, ownerUid, readOnly); 1499be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1501be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1502be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountSecureContainer: { 1504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = unmountSecureContainer(id, force); 1510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1512be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1513be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1514be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isSecureContainerMounted: { 1515be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1516be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1517be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1518be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isSecureContainerMounted(id); 1519be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1520be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 1521be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1522be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1523be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_renameSecureContainer: { 1524be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1525be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String oldId; 1526be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root oldId = data.readString(); 1527be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String newId; 1528be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root newId = data.readString(); 1529be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = renameSecureContainer(oldId, newId); 1530be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1531be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1532be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1533be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1534be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerPath: { 1535be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1536be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1537be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1538be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path = getSecureContainerPath(id); 1539be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1540be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(path); 1541be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1542be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1543be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerList: { 1544be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1545be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] ids = getSecureContainerList(); 1546be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1547be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeStringArray(ids); 1548be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1549be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1550be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_shutdown: { 1551be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1552be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountShutdownObserver observer; 1553be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IMountShutdownObserver.Stub.asInterface(data 1554be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root .readStrongBinder()); 1555be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root shutdown(observer); 1556be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1557be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1558be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1559be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finishMediaUpdate: { 1560be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1561be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root finishMediaUpdate(); 1562be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1563be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1564be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1565be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountObb: { 1566be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 15674fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey final String rawPath = data.readString(); 15684fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey final String canonicalPath = data.readString(); 15694fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey final String key = data.readString(); 1570be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 1571be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 1572af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 1573af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 15744fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey mountObb(rawPath, canonicalPath, key, observer, nonce); 1575be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1576be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1577be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1578be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountObb: { 1579be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1580be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1581be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1582be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1583be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1584be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 1585be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 1586af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 1587af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 1588af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root unmountObb(filename, force, observer, nonce); 1589be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1590be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1591be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1592be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isObbMounted: { 1593be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1594be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1595be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1596be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isObbMounted(filename); 1597be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1598be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 1599be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1600be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1601be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getMountedObbPath: { 1602be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1603be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1604be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1605be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountedPath = getMountedObbPath(filename); 1606be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1607be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(mountedPath); 1608be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1609be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1610e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root case TRANSACTION_isExternalStorageEmulated: { 1611e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root data.enforceInterface(DESCRIPTOR); 1612e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean emulated = isExternalStorageEmulated(); 1613e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeNoException(); 1614e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeInt(emulated ? 1 : 0); 1615e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return true; 1616e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 16175af0b916f850486cff4797355bf9e7dc3352fe00Jason parks case TRANSACTION_decryptStorage: { 16185af0b916f850486cff4797355bf9e7dc3352fe00Jason parks data.enforceInterface(DESCRIPTOR); 16195af0b916f850486cff4797355bf9e7dc3352fe00Jason parks String password = data.readString(); 16205af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int result = decryptStorage(password); 16215af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeNoException(); 16225af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeInt(result); 16235af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return true; 16245af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 162556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks case TRANSACTION_encryptStorage: { 162656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks data.enforceInterface(DESCRIPTOR); 162746791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence int type = data.readInt(); 162856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks String password = data.readString(); 162946791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence int result = encryptStorage(type, password); 163056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeNoException(); 163156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeInt(result); 163256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return true; 163356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 1634f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks case TRANSACTION_changeEncryptionPassword: { 1635f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks data.enforceInterface(DESCRIPTOR); 16368e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int type = data.readInt(); 1637f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks String password = data.readString(); 16388e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int result = changeEncryptionPassword(type, password); 1639f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeNoException(); 1640f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeInt(result); 1641f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return true; 1642f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 1643d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood case TRANSACTION_getVolumeList: { 1644d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood data.enforceInterface(DESCRIPTOR); 16456ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov int uid = data.readInt(); 16466ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov String packageName = data.readString(); 16474634987668eb7e1fa1434bddbde969ef43de6b40Jeff Sharkey int _flags = data.readInt(); 16484634987668eb7e1fa1434bddbde969ef43de6b40Jeff Sharkey StorageVolume[] result = getVolumeList(uid, packageName, _flags); 1649d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood reply.writeNoException(); 1650b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey reply.writeTypedArray(result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 1651d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood return true; 1652d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 1653292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn case TRANSACTION_getSecureContainerFilesystemPath: { 1654292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn data.enforceInterface(DESCRIPTOR); 1655292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String id; 1656292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn id = data.readString(); 1657292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String path = getSecureContainerFilesystemPath(id); 1658292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn reply.writeNoException(); 1659292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn reply.writeString(path); 1660292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn return true; 1661292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 1662444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo case TRANSACTION_getEncryptionState: { 1663444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo data.enforceInterface(DESCRIPTOR); 1664444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo int result = getEncryptionState(); 1665444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo reply.writeNoException(); 1666444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo reply.writeInt(result); 1667444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo return true; 1668444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 16696dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root case TRANSACTION_fixPermissionsSecureContainer: { 16706dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root data.enforceInterface(DESCRIPTOR); 16716dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root String id; 16726dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root id = data.readString(); 16736dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int gid; 16746dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root gid = data.readInt(); 16756dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root String filename; 16766dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root filename = data.readString(); 16776dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int resultCode = fixPermissionsSecureContainer(id, gid, filename); 16786dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root reply.writeNoException(); 16796dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root reply.writeInt(resultCode); 16806dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root return true; 16816dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 16822d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey case TRANSACTION_mkdirs: { 16832d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey data.enforceInterface(DESCRIPTOR); 16842d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey String callingPkg = data.readString(); 16852d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey String path = data.readString(); 16862d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey int result = mkdirs(callingPkg, path); 16872d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey reply.writeNoException(); 16882d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey reply.writeInt(result); 16892d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey return true; 16902d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } 16918e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence case TRANSACTION_getPasswordType: { 16928e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence data.enforceInterface(DESCRIPTOR); 16938e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int result = getPasswordType(); 16948e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence reply.writeNoException(); 16958e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence reply.writeInt(result); 16968e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence return true; 16978e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } 1698945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence case TRANSACTION_getPassword: { 1699945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence data.enforceInterface(DESCRIPTOR); 1700945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence String result = getPassword(); 1701945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence reply.writeNoException(); 1702945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence reply.writeString(result); 1703945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence return true; 1704945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 1705945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence case TRANSACTION_clearPassword: { 1706945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence data.enforceInterface(DESCRIPTOR); 1707945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence clearPassword(); 1708945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence reply.writeNoException(); 1709945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence return true; 1710945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 1711e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence case TRANSACTION_setField: { 1712e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence data.enforceInterface(DESCRIPTOR); 1713e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String field = data.readString(); 1714e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String contents = data.readString(); 1715e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence setField(field, contents); 1716e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence reply.writeNoException(); 1717e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence return true; 1718e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 1719e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence case TRANSACTION_getField: { 1720e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence data.enforceInterface(DESCRIPTOR); 1721e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String field = data.readString(); 1722e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String contents = getField(field); 1723e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence reply.writeNoException(); 1724e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence reply.writeString(contents); 1725e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence return true; 1726e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 1727941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey case TRANSACTION_resizeSecureContainer: { 1728941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1729941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey String id; 1730941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey id = data.readString(); 1731941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int sizeMb; 1732941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey sizeMb = data.readInt(); 1733941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey String key; 1734941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey key = data.readString(); 1735941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int resultCode = resizeSecureContainer(id, sizeMb, key); 1736941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey reply.writeNoException(); 1737941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey reply.writeInt(resultCode); 1738941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey return true; 1739941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } 17407265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate case TRANSACTION_lastMaintenance: { 17417265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate data.enforceInterface(DESCRIPTOR); 17427265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate long lastMaintenance = lastMaintenance(); 17437265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate reply.writeNoException(); 17447265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate reply.writeLong(lastMaintenance); 17457265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return true; 17467265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 17477265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate case TRANSACTION_runMaintenance: { 17487265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate data.enforceInterface(DESCRIPTOR); 17497265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate runMaintenance(); 17507265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate reply.writeNoException(); 17517265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return true; 17527265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 175356e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey case TRANSACTION_waitForAsecScan: { 175456e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey data.enforceInterface(DESCRIPTOR); 175556e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey waitForAsecScan(); 175656e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey reply.writeNoException(); 175756e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey return true; 175856e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey } 17591b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey case TRANSACTION_getDisks: { 17601b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey data.enforceInterface(DESCRIPTOR); 17611b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey DiskInfo[] disks = getDisks(); 17621b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey reply.writeNoException(); 17631b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey reply.writeTypedArray(disks, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 17641b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey return true; 17651b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } 17661b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey case TRANSACTION_getVolumes: { 17671b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1768d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey int _flags = data.readInt(); 1769d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey VolumeInfo[] volumes = getVolumes(_flags); 17701b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey reply.writeNoException(); 17711b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey reply.writeTypedArray(volumes, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 17721b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey return true; 17731b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey } 1774b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey case TRANSACTION_getVolumeRecords: { 1775b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1776b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey int _flags = data.readInt(); 1777b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey VolumeRecord[] volumes = getVolumeRecords(_flags); 1778b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey reply.writeNoException(); 1779b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey reply.writeTypedArray(volumes, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 1780b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return true; 1781b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 17827151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey case TRANSACTION_mount: { 17837151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey data.enforceInterface(DESCRIPTOR); 17847151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey String volId = data.readString(); 17857151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey mount(volId); 17867151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey reply.writeNoException(); 17877151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey return true; 17887151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 17897151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey case TRANSACTION_unmount: { 17907151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey data.enforceInterface(DESCRIPTOR); 17917151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey String volId = data.readString(); 17927151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey unmount(volId); 17937151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey reply.writeNoException(); 17947151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey return true; 17957151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 17967151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey case TRANSACTION_format: { 17977151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey data.enforceInterface(DESCRIPTOR); 17987151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey String volId = data.readString(); 17997151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey format(volId); 18007151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey reply.writeNoException(); 18017151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey return true; 18027151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 18039756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey case TRANSACTION_benchmark: { 18049756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey data.enforceInterface(DESCRIPTOR); 18059756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey String volId = data.readString(); 18069756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey long res = benchmark(volId); 18079756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey reply.writeNoException(); 18089756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey reply.writeLong(res); 18099756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey return true; 18109756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey } 18117151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey case TRANSACTION_partitionPublic: { 18127151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey data.enforceInterface(DESCRIPTOR); 18137151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey String diskId = data.readString(); 18147151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey partitionPublic(diskId); 18157151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey reply.writeNoException(); 18167151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey return true; 18177151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 18187151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey case TRANSACTION_partitionPrivate: { 18197151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey data.enforceInterface(DESCRIPTOR); 18207151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey String diskId = data.readString(); 18217151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey partitionPrivate(diskId); 18227151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey reply.writeNoException(); 18237151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey return true; 18247151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 18257151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey case TRANSACTION_partitionMixed: { 18267151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey data.enforceInterface(DESCRIPTOR); 18277151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey String diskId = data.readString(); 18287151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey int ratio = data.readInt(); 18297151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey partitionMixed(diskId, ratio); 18307151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey reply.writeNoException(); 18317151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey return true; 18327151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey } 1833d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey case TRANSACTION_setVolumeNickname: { 1834d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1835d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey String volId = data.readString(); 1836d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey String nickname = data.readString(); 1837d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey setVolumeNickname(volId, nickname); 1838d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey reply.writeNoException(); 1839d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey return true; 1840d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } 1841d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey case TRANSACTION_setVolumeUserFlags: { 1842d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1843d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey String volId = data.readString(); 1844d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey int _flags = data.readInt(); 1845d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey int _mask = data.readInt(); 1846d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey setVolumeUserFlags(volId, _flags, _mask); 1847d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey reply.writeNoException(); 1848d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey return true; 1849d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey } 1850b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey case TRANSACTION_forgetVolume: { 1851b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1852b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey String fsUuid = data.readString(); 1853b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey forgetVolume(fsUuid); 1854b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey reply.writeNoException(); 1855b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return true; 1856b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 18577d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey case TRANSACTION_forgetAllVolumes: { 18587d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey data.enforceInterface(DESCRIPTOR); 18597d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey forgetAllVolumes(); 18607d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey reply.writeNoException(); 18617d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey return true; 18627d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 18634c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey case TRANSACTION_setDebugFlags: { 18644c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey data.enforceInterface(DESCRIPTOR); 18654c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey int _flags = data.readInt(); 18664c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey int _mask = data.readInt(); 18674c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey setDebugFlags(_flags, _mask); 18684c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey reply.writeNoException(); 18694c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey return true; 18704c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey } 1871620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey case TRANSACTION_getPrimaryStorageUuid: { 1872620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey data.enforceInterface(DESCRIPTOR); 1873620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey String volumeUuid = getPrimaryStorageUuid(); 1874620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey reply.writeNoException(); 1875620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey reply.writeString(volumeUuid); 1876620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return true; 1877620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1878620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey case TRANSACTION_setPrimaryStorageUuid: { 1879620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey data.enforceInterface(DESCRIPTOR); 1880620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey String volumeUuid = data.readString(); 1881275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey IPackageMoveObserver listener = IPackageMoveObserver.Stub.asInterface( 1882275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey data.readStrongBinder()); 1883275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey setPrimaryStorageUuid(volumeUuid, listener); 1884620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey reply.writeNoException(); 1885620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return true; 1886620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1887bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley case TRANSACTION_createNewUserDir: { 1888bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley data.enforceInterface(DESCRIPTOR); 1889bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley int userHandle = data.readInt(); 1890bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley String path = data.readString(); 1891bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley createNewUserDir(userHandle, path); 1892bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley reply.writeNoException(); 1893bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley return true; 1894bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley } 18957ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley case TRANSACTION_deleteUserKey: { 18967ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley data.enforceInterface(DESCRIPTOR); 18977ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley int userHandle = data.readInt(); 18987ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley deleteUserKey(userHandle); 18997ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley reply.writeNoException(); 19007ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley return true; 19017ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley } 1902be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1903be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return super.onTransact(code, data, reply, flags); 1904be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1905be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1906be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1907be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1908be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns an int 1909be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 1910be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 19116dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 19126dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int ownerUid, boolean external) throws RemoteException; 1913be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1914be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1915be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated with it. 1916be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * NOTE: Ensure all references are released prior to deleting. Returns an 1917be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1918be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1919be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException; 1920be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1921be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1922be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. After 1923be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * finalization, the container is immutable. Returns an int consistent with 1924be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1925be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1926be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException; 1927be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1928be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1929be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 1930be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 1931be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1932be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException; 1933be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1934be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1935be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int consistent 1936be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1937be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1938be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException; 1939be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1940be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1941be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 1942be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 19434fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public String getMountedObbPath(String rawPath) throws RemoteException; 1944be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1945be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1946be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 1947be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1948be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException; 1949be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1950be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1951be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 1952be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1953be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException; 1954be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1955be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1956be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 1957be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1958be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException; 1959be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1960be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1961be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 1962be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1963be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException; 1964be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1965be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1966be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 1967be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 1968be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 19694fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public boolean isObbMounted(String rawPath) throws RemoteException; 1970be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1971be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1972be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 1973be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1974be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException; 1975be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1976be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1977be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 1978be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1979be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException; 1980be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1981be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1982be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is shared) 1983be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1984be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException; 1985be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1986be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1987be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and 1988be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * only allows the calling process's UID access to the contents. 1989be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1990be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1991be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 19924fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void mountObb(String rawPath, String canonicalPath, String key, 19934fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey IObbActionListener token, int nonce) throws RemoteException; 1994be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1995be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1996be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. Returns an 1997be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1998be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1999941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly) 2000941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey throws RemoteException; 2001be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2002be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2003be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int consistent 2004be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 2005be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2006be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException; 2007be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2008be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2009be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async notifications. 2010be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2011be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException; 2012be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2013be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 2014be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent with 2015be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 2016be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2017be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException; 2018be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2019be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2020be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check actual 2021be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * status of enabling/disabling USB mass storage via StorageEventListener. 2022be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2023be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException; 2024be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2025be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2026be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external media. 2027be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Invokes call back once the shutdown is complete. 2028be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2029be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) throws RemoteException; 2030be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2031be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2032be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified, 2033be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * any program using it will be forcibly killed to unmount the image. 2034be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 2035be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 2036be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 20374fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void unmountObb(String rawPath, boolean force, IObbActionListener token, int nonce) 2038be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 2039be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2040be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 2041be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 2042be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 2043be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2044be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException; 2045be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2046be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2047be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount is an 2048be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * asynchronous operation. Applications should register StorageEventListener 2049be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * for storage related status changes. 205013c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param mountPoint the mount point 205113c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param force whether or not to forcefully unmount it (e.g. even if programs are using this 205213c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * data currently) 205313c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param removeEncryption whether or not encryption mapping should be removed from the volume. 205413c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * This value implies {@code force}. 2055be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 205613c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) 205713c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo throws RemoteException; 2058be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 2059be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 2060be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 2061be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 2062be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException; 2063e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 2064e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 2065e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether or not the external storage is emulated. 2066e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 2067e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException; 20685af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 2069444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume is not encrypted. */ 2070444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_NONE = 1; 2071444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume has been encrypted succesfully. */ 2072444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_OK = 0; 2073e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** The volume is in a bad state.*/ 2074444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_ERROR_UNKNOWN = -1; 2075e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** Encryption is incomplete */ 2076444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_ERROR_INCOMPLETE = -2; 2077e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** Encryption is incomplete and irrecoverable */ 2078e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence static final int ENCRYPTION_STATE_ERROR_INCONSISTENT = -3; 2079e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** Underlying data is corrupt */ 2080e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence static final int ENCRYPTION_STATE_ERROR_CORRUPT = -4; 2081444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 2082444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** 2083444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo * Determines the encryption state of the volume. 2084444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo * @return a numerical value. See {@code ENCRYPTION_STATE_*} for possible values. 2085444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo */ 2086444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo public int getEncryptionState() throws RemoteException; 2087444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 20885af0b916f850486cff4797355bf9e7dc3352fe00Jason parks /** 20895af0b916f850486cff4797355bf9e7dc3352fe00Jason parks * Decrypts any encrypted volumes. 20905af0b916f850486cff4797355bf9e7dc3352fe00Jason parks */ 20915af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException; 209256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 209356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks /** 209456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks * Encrypts storage. 209556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks */ 209646791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence public int encryptStorage(int type, String password) throws RemoteException; 2097f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 2098f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks /** 2099f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * Changes the encryption password. 2100f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks */ 21018e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int changeEncryptionPassword(int type, String password) 21028e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence throws RemoteException; 2103f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 2104d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood /** 210532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate * Verify the encryption password against the stored volume. This method 210632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate * may only be called by the system process. 210732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate */ 210832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate public int verifyEncryptionPassword(String password) throws RemoteException; 210932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 211032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate /** 2111d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood * Returns list of all mountable volumes. 2112d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood */ 21134634987668eb7e1fa1434bddbde969ef43de6b40Jeff Sharkey public StorageVolume[] getVolumeList(int uid, String packageName, int flags) throws RemoteException; 2114292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 211551a573c76737733638c475f52e441c814e6645ccKenny Root /** 211651a573c76737733638c475f52e441c814e6645ccKenny Root * Gets the path on the filesystem for the ASEC container itself. 21176ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * 211851a573c76737733638c475f52e441c814e6645ccKenny Root * @param cid ASEC container ID 211951a573c76737733638c475f52e441c814e6645ccKenny Root * @return path to filesystem or {@code null} if it's not found 212051a573c76737733638c475f52e441c814e6645ccKenny Root * @throws RemoteException 212151a573c76737733638c475f52e441c814e6645ccKenny Root */ 212251a573c76737733638c475f52e441c814e6645ccKenny Root public String getSecureContainerFilesystemPath(String cid) throws RemoteException; 21236dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 21246dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root /* 21256dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Fix permissions in a container which has just been created and populated. 21266dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Returns an int consistent with MountServiceResultCode 21276dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root */ 21286dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int fixPermissionsSecureContainer(String id, int gid, String filename) 21296dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root throws RemoteException; 21302d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey 21312d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey /** 21322d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * Ensure that all directories along given path exist, creating parent 21332d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * directories as needed. Validates that given path is absolute and that it 21342d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * contains no relative "." or ".." paths or symlinks. Also ensures that 21352d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * path belongs to a volume managed by vold, and that path is either 21362d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * external storage data or OBB directory belonging to calling app. 21372d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey */ 21382d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey public int mkdirs(String callingPkg, String path) throws RemoteException; 21398e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence 21408e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence /** 21418e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence * Determines the type of the encryption password 21428e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence * @return PasswordType 21438e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence */ 21448e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int getPasswordType() throws RemoteException; 2145945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 2146945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence /** 2147945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence * Get password from vold 2148945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence * @return password or empty string 2149945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence */ 2150945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public String getPassword() throws RemoteException; 2151945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 2152945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence /** 2153945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence * Securely clear password from vold 2154945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence */ 2155945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public void clearPassword() throws RemoteException; 2156e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 2157e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence /** 2158e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * Set a field in the crypto header. 2159e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @param field field to set 2160e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @param contents contents to set in field 2161e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence */ 2162e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public void setField(String field, String contents) throws RemoteException; 2163e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 2164e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence /** 2165e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * Gets a field from the crypto header. 2166e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @param field field to get 2167e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @return contents of field 2168e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence */ 2169e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public String getField(String field) throws RemoteException; 2170941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey 2171941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int resizeSecureContainer(String id, int sizeMb, String key) throws RemoteException; 21727265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 21737265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate /** 21747265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * Report the time of the last maintenance operation such as fstrim. 21757265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * @return Timestamp of the last maintenance operation, in the 21767265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * System.currentTimeMillis() time base 21777265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * @throws RemoteException 21787265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate */ 21797265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public long lastMaintenance() throws RemoteException; 21807265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 21817265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate /** 21827265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * Kick off an immediate maintenance operation 21837265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * @throws RemoteException 21847265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate */ 21857265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public void runMaintenance() throws RemoteException; 218656e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey 218756e629322f0739a04c8ff48915226ecf36a13b44Jeff Sharkey public void waitForAsecScan() throws RemoteException; 21881b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey 21891b8ef7e3165ff9aa52a4905dafc8d0f83e7403f9Jeff Sharkey public DiskInfo[] getDisks() throws RemoteException; 2190d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey public VolumeInfo[] getVolumes(int flags) throws RemoteException; 2191b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord[] getVolumeRecords(int flags) throws RemoteException; 21927151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 21937151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void mount(String volId) throws RemoteException; 21947151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void unmount(String volId) throws RemoteException; 21957151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void format(String volId) throws RemoteException; 21969756d75ec28844f5ca30fda786a117c1a0ee88daJeff Sharkey public long benchmark(String volId) throws RemoteException; 21977151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey 21987151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void partitionPublic(String diskId) throws RemoteException; 21997151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void partitionPrivate(String diskId) throws RemoteException; 22007151a9a887051542c6da9f380376f3b306184e5cJeff Sharkey public void partitionMixed(String diskId, int ratio) throws RemoteException; 2201d95d3bfb2b28a4f21f3fdcd740160c9a61eb0363Jeff Sharkey 2202b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void setVolumeNickname(String fsUuid, String nickname) throws RemoteException; 2203b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void setVolumeUserFlags(String fsUuid, int flags, int mask) throws RemoteException; 2204b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void forgetVolume(String fsUuid) throws RemoteException; 22057d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void forgetAllVolumes() throws RemoteException; 22064c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey public void setDebugFlags(int flags, int mask) throws RemoteException; 2207620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 2208620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public String getPrimaryStorageUuid() throws RemoteException; 2209275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback) 2210275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey throws RemoteException; 22119527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey 2212bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley /** 2213bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley * Creates the user data directory, possibly encrypted 2214bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley * @param userHandle Handle of the user whose directory we are creating 2215bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley * @param path Path at which to create the directory. 2216bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley */ 2217bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley public void createNewUserDir(int userHandle, String path) 2218bcf48ed2262d655ebf59153dea645ca761b73db5Paul Crowley throws RemoteException; 22197ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley 22207ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley /** 22217ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley * Securely delete the user's encryption key 22227ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley * @param userHandle Handle of the user whose key we are deleting 22237ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley */ 22247ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley public void deleteUserKey(int userHandle) 22257ec733fad39ff9e439a67c9cf51b88bc84cdfda0Paul Crowley throws RemoteException; 2226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root} 2227