1be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/* 2be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Copyright (C) 2010 The Android Open Source Project 3be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 4be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * you may not use this file except in compliance with the License. 6be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * You may obtain a copy of the License at 7be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 8be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 9be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 10be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unless required by applicable law or agreed to in writing, software 11be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * See the License for the specific language governing permissions and 14be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * limitations under the License. 15be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 16be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 17be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpackage android.os.storage; 18be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 19be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.Binder; 20be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.IBinder; 21be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.IInterface; 22be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.Parcel; 23be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootimport android.os.RemoteException; 24be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 25be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/** 26be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WARNING! Update IMountService.h and IMountService.cpp if you change this 27be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * file. In particular, the ordering of the methods below must match the 28be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * _TRANSACTION enum in IMountService.cpp 29f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * 30be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * @hide - Applications should use android.os.storage.StorageManager to access 31be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * storage functions. 32be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 33be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpublic interface IMountService extends IInterface { 34be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Local-side IPC implementation stub class. */ 35be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static abstract class Stub extends Binder implements IMountService { 36be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static class Proxy implements IMountService { 37444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo private final IBinder mRemote; 38be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 39be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Proxy(IBinder remote) { 40be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote = remote; 41be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 42be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 43be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 44be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return mRemote; 45be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 46be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 47be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getInterfaceDescriptor() { 48be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return DESCRIPTOR; 49be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 50be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 51be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 52be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async 53be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * notifications. 54be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 55be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException { 56be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 57be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 58be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 59be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 60be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 61be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_registerListener, _data, _reply, 0); 62be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 63be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 64be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 65be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 66be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 67be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 68be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 69be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 70be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 71be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 72be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException { 73be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 74be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 75be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 76be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 77be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((listener != null ? listener.asBinder() : null)); 78be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unregisterListener, _data, _reply, 0); 79be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 80be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 81be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 82be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 83be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 84be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 85be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 86be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 87be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 88be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 89be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException { 90be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 91be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 92be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 93be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 94be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 95be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageConnected, _data, _reply, 0); 96be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 97be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 98be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 99be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check 107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * actual status of enabling/disabling USB mass storage via 108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener. 109be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 110be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException { 111be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 112be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((enable ? 1 : 0)); 116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_setUsbMassStorageEnabled, _data, _reply, 0); 117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is 126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * shared) 127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException { 129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isUsbMassStorageEnabled, _data, _reply, 0); 135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 141be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 145be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int 146be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 147be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException { 149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountVolume, _data, _reply, 0); 156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 165be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 166be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount 167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * is an asynchronous operation. Applications should register 168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * StorageEventListener for storage related status changes. 169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 17013c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) 17113c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo throws RemoteException { 172be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 173be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 17813c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo _data.writeInt((removeEncryption ? 1 : 0)); 179be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountVolume, _data, _reply, 0); 180be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int 189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException { 192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_formatVolume, _data, _reply, 0); 199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException { 212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] _result; 215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(path); 218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getStorageUsers, _data, _reply, 0); 219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createIntArray(); 221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException { 232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(mountPoint); 238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getVolumeState, _data, _reply, 0); 239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns 250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * an int consistent with MountServiceResultCode 251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 2536dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int ownerUid, boolean external) throws RemoteException { 254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(sizeMb); 261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(fstype); 262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 2646dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInt(external ? 1 : 0); 265be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_createSecureContainer, _data, _reply, 0); 266be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 268be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 269be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 270be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 271be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 272be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 273be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 274be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 275be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 276be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated 277be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with it. NOTE: Ensure all references are released prior to 278be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * deleting. Returns an int consistent with MountServiceResultCode 279be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 280be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException { 281be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 282be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 283be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 284be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 285be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 286be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 287be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 288be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_destroySecureContainer, _data, _reply, 0); 289be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 290be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 291be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 292be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 293be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 294be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 295be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 296be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 297be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 298be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 299be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. 300be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * After finalization, the container is immutable. Returns an int 301be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 302be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 303be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException { 304be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 305be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 306be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 307be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 308be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 309be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 310be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finalizeSecureContainer, _data, _reply, 0); 311be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 312be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 313be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 314be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 315be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 316be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 317be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 318be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 319be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 320be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 321be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. 322be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an int consistent with MountServiceResultCode 323be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 324941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly) 325be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 326be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 327be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 328be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 329be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 330be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 331be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 332be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 333be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt(ownerUid); 334941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeInt(readOnly ? 1 : 0); 335be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountSecureContainer, _data, _reply, 0); 336be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 337be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 338be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 339be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 340be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 341be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 342be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 343be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 344be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 345be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 346be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 347be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 348be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 349be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException { 350be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 351be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 352be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 353be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 354be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 355be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 356be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 357be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountSecureContainer, _data, _reply, 0); 358be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 359be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 360be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 361be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 362be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 363be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 364be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 365be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 366be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 367be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 368be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 369be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 370be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException { 371be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 372be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 373be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 374be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 375be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 376be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 377be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isSecureContainerMounted, _data, _reply, 0); 378be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 379be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 380be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 381be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 382be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 383be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 384be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 385be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 386be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 387be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 388be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent 389be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 390be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 391be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException { 392be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 393be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 394be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int _result; 395be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 396be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 397be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(oldId); 398be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(newId); 399be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_renameSecureContainer, _data, _reply, 0); 400be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 401be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readInt(); 402be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 403be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 404be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 405be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 406be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 407be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 408be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 409be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 410be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 411be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 412be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException { 413be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 414be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 415be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 416be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 417be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 418be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(id); 419be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getSecureContainerPath, _data, _reply, 0); 420be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 421be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 422be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 423be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 424be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 425be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 426be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 427be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 428be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 429be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 430be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 431be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 432be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException { 433be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 434be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 435be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] _result; 436be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 437be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 438be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getSecureContainerList, _data, _reply, 0); 439be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 440be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.createStringArray(); 441be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 442be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 443be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 444be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 445be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 446be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 447be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 448be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 449be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external 450be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * media. Invokes call back once the shutdown is complete. 451be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 452be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) 453be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException { 454be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 455be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 456be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 457be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 458be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((observer != null ? observer.asBinder() : null)); 459be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_shutdown, _data, _reply, 0); 460be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 461be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 462be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 463be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 464be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 465be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 466be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 467be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 468be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 469be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 470be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 471be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException { 472be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 473be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 474be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 475be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 476be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_finishMediaUpdate, _data, _reply, 0); 477be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 478be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 479be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 480be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 481be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 482be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 483be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 484be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 485be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption 486be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * key and only allows the calling process's UID access to the 487be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * contents. MountService will call back to the supplied 488be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 489be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 490be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 4914fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void mountObb(String rawPath, String canonicalPath, String key, 4924fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey IObbActionListener token, int nonce) throws RemoteException { 493be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 496be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 4974fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 4984fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(canonicalPath); 499be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeString(key); 500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 501af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 502be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_mountObb, _data, _reply, 0); 503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is 512be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * specified, any program using it will be forcibly killed to 513be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * unmount the image. MountService will call back to the supplied 514be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * IObbActionListener to inform it of the terminal state of the 515be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * call. 516be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 5174fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void unmountObb( 5184fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey String rawPath, boolean force, IObbActionListener token, int nonce) 5194fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey throws RemoteException { 520be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 521be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 522be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 523be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 5244fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 525be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInt((force ? 1 : 0)); 526be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeStrongBinder((token != null ? token.asBinder() : null)); 527af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root _data.writeInt(nonce); 528be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_unmountObb, _data, _reply, 0); 529be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 530be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 531be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 532be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 533be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 534be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 535be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 536be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 537be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 538be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 539be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 5404fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public boolean isObbMounted(String rawPath) throws RemoteException { 541be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 542be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 543be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean _result; 544be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 545be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 5464fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 547be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_isObbMounted, _data, _reply, 0); 548be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 549be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = 0 != _reply.readInt(); 550be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 551be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 552be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 553be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 554be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 555be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 556be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 557be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 558be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 559be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 5604fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public String getMountedObbPath(String rawPath) throws RemoteException { 561be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _data = Parcel.obtain(); 562be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel _reply = Parcel.obtain(); 563be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String _result; 564be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root try { 565be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 5664fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey _data.writeString(rawPath); 567be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mRemote.transact(Stub.TRANSACTION_getMountedObbPath, _data, _reply, 0); 568be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.readException(); 569be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _result = _reply.readString(); 570be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } finally { 571be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _reply.recycle(); 572be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root _data.recycle(); 573be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 574be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return _result; 575be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 576e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 577e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 578e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether the external storage is emulated. 579e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 580e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException { 581e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _data = Parcel.obtain(); 582e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root Parcel _reply = Parcel.obtain(); 583e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean _result; 584e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root try { 585e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 586e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root mRemote.transact(Stub.TRANSACTION_isExternalStorageEmulated, _data, _reply, 0); 587e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.readException(); 588e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _result = 0 != _reply.readInt(); 589e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } finally { 590e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _reply.recycle(); 591e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root _data.recycle(); 592e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 593e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return _result; 594e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 5955af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 596444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo public int getEncryptionState() throws RemoteException { 597444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo Parcel _data = Parcel.obtain(); 598444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo Parcel _reply = Parcel.obtain(); 599444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo int _result; 600444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo try { 601444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _data.writeInterfaceToken(DESCRIPTOR); 602444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo mRemote.transact(Stub.TRANSACTION_getEncryptionState, _data, _reply, 0); 603444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _reply.readException(); 604444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _result = _reply.readInt(); 605444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } finally { 606444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _reply.recycle(); 607444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo _data.recycle(); 608444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 609444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo return _result; 610444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 611444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 6125af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException { 6135af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _data = Parcel.obtain(); 6145af0b916f850486cff4797355bf9e7dc3352fe00Jason parks Parcel _reply = Parcel.obtain(); 6155af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int _result; 6165af0b916f850486cff4797355bf9e7dc3352fe00Jason parks try { 6175af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeInterfaceToken(DESCRIPTOR); 6185af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.writeString(password); 6195af0b916f850486cff4797355bf9e7dc3352fe00Jason parks mRemote.transact(Stub.TRANSACTION_decryptStorage, _data, _reply, 0); 6205af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.readException(); 6215af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _result = _reply.readInt(); 6225af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } finally { 6235af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _reply.recycle(); 6245af0b916f850486cff4797355bf9e7dc3352fe00Jason parks _data.recycle(); 6255af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 6265af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return _result; 6275af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 62856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 62946791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence public int encryptStorage(int type, String password) throws RemoteException { 63056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _data = Parcel.obtain(); 63156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks Parcel _reply = Parcel.obtain(); 63256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks int _result; 63356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks try { 63456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeInterfaceToken(DESCRIPTOR); 63546791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence _data.writeInt(type); 63656aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.writeString(password); 63756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0); 63856aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.readException(); 63956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _result = _reply.readInt(); 64056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } finally { 64156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _reply.recycle(); 64256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks _data.recycle(); 64356aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 64456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return _result; 64556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 646f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 6478e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int changeEncryptionPassword(int type, String password) throws RemoteException { 648f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _data = Parcel.obtain(); 649f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks Parcel _reply = Parcel.obtain(); 650f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks int _result; 651f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks try { 652f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeInterfaceToken(DESCRIPTOR); 6538e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _data.writeInt(type); 654f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.writeString(password); 655f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0); 656f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.readException(); 657f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _result = _reply.readInt(); 658f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } finally { 659f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _reply.recycle(); 660f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks _data.recycle(); 661f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 662f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return _result; 663f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 664d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood 66532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate @Override 66632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate public int verifyEncryptionPassword(String password) throws RemoteException { 66732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate Parcel _data = Parcel.obtain(); 66832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate Parcel _reply = Parcel.obtain(); 66932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate int _result; 67032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate try { 67132418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.writeInterfaceToken(DESCRIPTOR); 67232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.writeString(password); 67332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate mRemote.transact(Stub.TRANSACTION_verifyEncryptionPassword, _data, _reply, 0); 67432418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _reply.readException(); 67532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _result = _reply.readInt(); 67632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } finally { 67732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _reply.recycle(); 67832418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate _data.recycle(); 67932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } 68032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate return _result; 68132418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate } 68232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 6838e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int getPasswordType() throws RemoteException { 6848e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence Parcel _data = Parcel.obtain(); 6858e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence Parcel _reply = Parcel.obtain(); 6868e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int _result; 6878e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence try { 6888e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 6898e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence mRemote.transact(Stub.TRANSACTION_getPasswordType, _data, _reply, 0); 6908e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _reply.readException(); 6918e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _result = _reply.readInt(); 6928e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } finally { 6938e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _reply.recycle(); 6948e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence _data.recycle(); 6958e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } 6968e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence return _result; 6978e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } 6988e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence 699945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public String getPassword() throws RemoteException { 700945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _data = Parcel.obtain(); 701945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _reply = Parcel.obtain(); 702945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence String _result; 703945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence try { 704945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 705945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence mRemote.transact(Stub.TRANSACTION_getPassword, _data, _reply, 0); 706945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.readException(); 707945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _result = _reply.readString(); 708945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } finally { 709945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.recycle(); 710945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.recycle(); 711945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 712945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence return _result; 713945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 714945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 715945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public void clearPassword() throws RemoteException { 716945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _data = Parcel.obtain(); 717945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence Parcel _reply = Parcel.obtain(); 718e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence try { 719e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 720e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence mRemote.transact(Stub.TRANSACTION_clearPassword, _data, _reply, IBinder.FLAG_ONEWAY); 721e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.readException(); 722e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } finally { 723e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.recycle(); 724e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.recycle(); 725e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 726e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 727e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 728e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public void setField(String field, String data) throws RemoteException { 729e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _data = Parcel.obtain(); 730e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _reply = Parcel.obtain(); 731e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence try { 732e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 733e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeString(field); 734e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeString(data); 735e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence mRemote.transact(Stub.TRANSACTION_setField, _data, _reply, IBinder.FLAG_ONEWAY); 736e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.readException(); 737e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } finally { 738e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _reply.recycle(); 739e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.recycle(); 740e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 741e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 742e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 743e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public String getField(String field) throws RemoteException { 744e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _data = Parcel.obtain(); 745e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence Parcel _reply = Parcel.obtain(); 746945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence String _result; 747945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence try { 748945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.writeInterfaceToken(DESCRIPTOR); 749e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _data.writeString(field); 750e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence mRemote.transact(Stub.TRANSACTION_getField, _data, _reply, 0); 751945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.readException(); 752e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence _result = _reply.readString(); 753945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } finally { 754945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _reply.recycle(); 755945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence _data.recycle(); 756945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 757e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence return _result; 758945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 759945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 760b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public StorageVolume[] getVolumeList() throws RemoteException { 761d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood Parcel _data = Parcel.obtain(); 762d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood Parcel _reply = Parcel.obtain(); 763b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey StorageVolume[] _result; 764d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood try { 765d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _data.writeInterfaceToken(DESCRIPTOR); 766d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood mRemote.transact(Stub.TRANSACTION_getVolumeList, _data, _reply, 0); 767d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _reply.readException(); 768b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey _result = _reply.createTypedArray(StorageVolume.CREATOR); 769d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } finally { 770d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _reply.recycle(); 771d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood _data.recycle(); 772d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 773d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood return _result; 774d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 775292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 776292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn /* 777292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn * Returns the filesystem path of a mounted secure container. 778292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn */ 779292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn public String getSecureContainerFilesystemPath(String id) throws RemoteException { 780292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn Parcel _data = Parcel.obtain(); 781292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn Parcel _reply = Parcel.obtain(); 782292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String _result; 783292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn try { 784292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.writeInterfaceToken(DESCRIPTOR); 785292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.writeString(id); 786292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn mRemote.transact(Stub.TRANSACTION_getSecureContainerFilesystemPath, _data, _reply, 0); 787292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _reply.readException(); 788292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _result = _reply.readString(); 789292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } finally { 790292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _reply.recycle(); 791292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn _data.recycle(); 792292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 793292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn return _result; 794292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 7956dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 7966dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root /** 7976dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Fix permissions in a container which has just been created and 7986dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * populated. Returns an int consistent with MountServiceResultCode 7996dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root */ 8006dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int fixPermissionsSecureContainer(String id, int gid, String filename) 8016dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root throws RemoteException { 8026dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root Parcel _data = Parcel.obtain(); 8036dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root Parcel _reply = Parcel.obtain(); 8046dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int _result; 8056dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root try { 8066dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInterfaceToken(DESCRIPTOR); 8076dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeString(id); 8086dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeInt(gid); 8096dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.writeString(filename); 8106dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root mRemote.transact(Stub.TRANSACTION_fixPermissionsSecureContainer, _data, _reply, 0); 8116dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _reply.readException(); 8126dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _result = _reply.readInt(); 8136dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } finally { 8146dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _reply.recycle(); 8156dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root _data.recycle(); 8166dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 8176dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root return _result; 8182d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } 8196dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 8202d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey @Override 8212d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey public int mkdirs(String callingPkg, String path) throws RemoteException { 8222d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey Parcel _data = Parcel.obtain(); 8232d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey Parcel _reply = Parcel.obtain(); 8242d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey int _result; 8252d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey try { 8262d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 8272d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.writeString(callingPkg); 8282d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.writeString(path); 8292d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey mRemote.transact(Stub.TRANSACTION_mkdirs, _data, _reply, 0); 8302d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _reply.readException(); 8312d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _result = _reply.readInt(); 8322d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } finally { 8332d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _reply.recycle(); 8342d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey _data.recycle(); 8352d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } 8362d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey return _result; 8376dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 838941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey 839941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey @Override 840941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int resizeSecureContainer(String id, int sizeMb, String key) 841941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey throws RemoteException { 842941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey Parcel _data = Parcel.obtain(); 843941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey Parcel _reply = Parcel.obtain(); 844941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int _result; 845941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey try { 846941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeInterfaceToken(DESCRIPTOR); 847941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeString(id); 848941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeInt(sizeMb); 849941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.writeString(key); 850941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey mRemote.transact(Stub.TRANSACTION_resizeSecureContainer, _data, _reply, 0); 851941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _reply.readException(); 852941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _result = _reply.readInt(); 853941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } finally { 854941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _reply.recycle(); 855941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey _data.recycle(); 856941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } 857941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey return _result; 858941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } 8597265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 8607265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate @Override 8617265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public long lastMaintenance() throws RemoteException { 8627265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _data = Parcel.obtain(); 8637265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _reply = Parcel.obtain(); 8647265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate long _result; 8657265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate try { 8667265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.writeInterfaceToken(DESCRIPTOR); 8677265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate mRemote.transact(Stub.TRANSACTION_lastMaintenance, _data, _reply, 0); 8687265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.readException(); 8697265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _result = _reply.readLong(); 8707265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } finally { 8717265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.recycle(); 8727265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.recycle(); 8737265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 8747265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return _result; 8757265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 8767265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 8777265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate @Override 8787265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public void runMaintenance() throws RemoteException { 8797265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _data = Parcel.obtain(); 8807265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate Parcel _reply = Parcel.obtain(); 8817265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate try { 8827265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.writeInterfaceToken(DESCRIPTOR); 8837265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate mRemote.transact(Stub.TRANSACTION_runMaintenance, _data, _reply, 0); 8847265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.readException(); 8857265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } finally { 8867265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _reply.recycle(); 8877265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate _data.recycle(); 8887265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 8897265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return; 8907265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 891be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 892be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 893be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root private static final String DESCRIPTOR = "IMountService"; 894be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 895be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_registerListener = IBinder.FIRST_CALL_TRANSACTION + 0; 896be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 897be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unregisterListener = IBinder.FIRST_CALL_TRANSACTION + 1; 898be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 899be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageConnected = IBinder.FIRST_CALL_TRANSACTION + 2; 900be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 901be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_setUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 3; 902be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 903be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isUsbMassStorageEnabled = IBinder.FIRST_CALL_TRANSACTION + 4; 904be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 905be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountVolume = IBinder.FIRST_CALL_TRANSACTION + 5; 906be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 907be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountVolume = IBinder.FIRST_CALL_TRANSACTION + 6; 908be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 909be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_formatVolume = IBinder.FIRST_CALL_TRANSACTION + 7; 910be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 911be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getStorageUsers = IBinder.FIRST_CALL_TRANSACTION + 8; 912be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 913be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getVolumeState = IBinder.FIRST_CALL_TRANSACTION + 9; 914be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 915be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_createSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 10; 916be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 917be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finalizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 11; 918be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 919be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_destroySecureContainer = IBinder.FIRST_CALL_TRANSACTION + 12; 920be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 921be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 13; 922be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 923be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 14; 924be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 925be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isSecureContainerMounted = IBinder.FIRST_CALL_TRANSACTION + 15; 926be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 927be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_renameSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 16; 928be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 929be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerPath = IBinder.FIRST_CALL_TRANSACTION + 17; 930be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 931be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getSecureContainerList = IBinder.FIRST_CALL_TRANSACTION + 18; 932be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 933be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_shutdown = IBinder.FIRST_CALL_TRANSACTION + 19; 934be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 935be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_finishMediaUpdate = IBinder.FIRST_CALL_TRANSACTION + 20; 936be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 937be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_mountObb = IBinder.FIRST_CALL_TRANSACTION + 21; 938be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 939be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_unmountObb = IBinder.FIRST_CALL_TRANSACTION + 22; 940be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 941be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_isObbMounted = IBinder.FIRST_CALL_TRANSACTION + 23; 942be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 943be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root static final int TRANSACTION_getMountedObbPath = IBinder.FIRST_CALL_TRANSACTION + 24; 944be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 945e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root static final int TRANSACTION_isExternalStorageEmulated = IBinder.FIRST_CALL_TRANSACTION + 25; 946e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 9475af0b916f850486cff4797355bf9e7dc3352fe00Jason parks static final int TRANSACTION_decryptStorage = IBinder.FIRST_CALL_TRANSACTION + 26; 9485af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 94956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks static final int TRANSACTION_encryptStorage = IBinder.FIRST_CALL_TRANSACTION + 27; 95056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 951f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks static final int TRANSACTION_changeEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 28; 952f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 953d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood static final int TRANSACTION_getVolumeList = IBinder.FIRST_CALL_TRANSACTION + 29; 954d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood 955292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn static final int TRANSACTION_getSecureContainerFilesystemPath = IBinder.FIRST_CALL_TRANSACTION + 30; 956292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 957444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int TRANSACTION_getEncryptionState = IBinder.FIRST_CALL_TRANSACTION + 31; 958444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 95932418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate static final int TRANSACTION_verifyEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 32; 96032418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 9616dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root static final int TRANSACTION_fixPermissionsSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 33; 9626dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 9632d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey static final int TRANSACTION_mkdirs = IBinder.FIRST_CALL_TRANSACTION + 34; 9642d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey 965945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence static final int TRANSACTION_getPasswordType = IBinder.FIRST_CALL_TRANSACTION + 35; 966945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 967945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence static final int TRANSACTION_getPassword = IBinder.FIRST_CALL_TRANSACTION + 36; 968945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 969945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence static final int TRANSACTION_clearPassword = IBinder.FIRST_CALL_TRANSACTION + 37; 9708e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence 971e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence static final int TRANSACTION_setField = IBinder.FIRST_CALL_TRANSACTION + 38; 972e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 973e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence static final int TRANSACTION_getField = IBinder.FIRST_CALL_TRANSACTION + 39; 974e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 975941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey static final int TRANSACTION_resizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 40; 976941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey 9777265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate static final int TRANSACTION_lastMaintenance = IBinder.FIRST_CALL_TRANSACTION + 41; 9787265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 9797265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate static final int TRANSACTION_runMaintenance = IBinder.FIRST_CALL_TRANSACTION + 42; 9807265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 981be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 982be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Cast an IBinder object into an IMountService interface, generating a 983be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * proxy if needed. 984be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 985be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public static IMountService asInterface(IBinder obj) { 986be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (obj == null) { 987be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return null; 988be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 989be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IInterface iin = obj.queryLocalInterface(DESCRIPTOR); 990be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (iin != null && iin instanceof IMountService) { 991be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return (IMountService) iin; 992be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 993be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return new IMountService.Stub.Proxy(obj); 994be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 995be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 996be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** Construct the stub at attach it to the interface. */ 997be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public Stub() { 998be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root attachInterface(this, DESCRIPTOR); 999be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1000be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1001be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public IBinder asBinder() { 1002be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return this; 1003be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1004be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1005be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root @Override 1006be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean onTransact(int code, Parcel data, Parcel reply, 1007be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int flags) throws RemoteException { 1008be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root switch (code) { 1009be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case INTERFACE_TRANSACTION: { 1010be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(DESCRIPTOR); 1011be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1012be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1013be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_registerListener: { 1014be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1015be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 1016be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 1017be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root registerListener(listener); 1018be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1019be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1020be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1021be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unregisterListener: { 1022be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1023be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountServiceListener listener; 1024be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root listener = IMountServiceListener.Stub.asInterface(data.readStrongBinder()); 1025be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root unregisterListener(listener); 1026be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1027be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1028be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1029be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageConnected: { 1030be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1031be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageConnected(); 1032be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1033be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 1034be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1035be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1036be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_setUsbMassStorageEnabled: { 1037be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1038be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean enable; 1039be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root enable = 0 != data.readInt(); 1040be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root setUsbMassStorageEnabled(enable); 1041be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1042be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1043be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1044be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isUsbMassStorageEnabled: { 1045be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1046be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean result = isUsbMassStorageEnabled(); 1047be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1048be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((result ? 1 : 0)); 1049be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1050be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1051be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountVolume: { 1052be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1053be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1054be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 1055be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = mountVolume(mountPoint); 1056be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1057be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1058be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1059be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1060be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountVolume: { 1061be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1062be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1063be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 106413c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo boolean force = 0 != data.readInt(); 106513c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo boolean removeEncrypt = 0 != data.readInt(); 106613c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo unmountVolume(mountPoint, force, removeEncrypt); 1067be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1068be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1069be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1070be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_formatVolume: { 1071be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1072be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1073be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 1074be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int result = formatVolume(mountPoint); 1075be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1076be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(result); 1077be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1078be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1079be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getStorageUsers: { 1080be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1081be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path; 1082be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root path = data.readString(); 1083be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int[] pids = getStorageUsers(path); 1084be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1085be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeIntArray(pids); 1086be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1087be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1088be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getVolumeState: { 1089be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1090be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountPoint; 1091be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root mountPoint = data.readString(); 1092be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String state = getVolumeState(mountPoint); 1093be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1094be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(state); 1095be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1096be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1097be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_createSecureContainer: { 1098be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1099be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int sizeMb; 1102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root sizeMb = data.readInt(); 1103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String fstype; 1104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root fstype = data.readString(); 1105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 1106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 1107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 1108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 11096dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root boolean external; 11106dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root external = 0 != data.readInt(); 11116dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int resultCode = createSecureContainer(id, sizeMb, fstype, key, ownerUid, 11126dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root external); 1113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finalizeSecureContainer: { 1118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = finalizeSecureContainer(id); 1122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_destroySecureContainer: { 1127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = destroySecureContainer(id, force); 1133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountSecureContainer: { 1138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1141be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String key; 1142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root key = data.readString(); 1143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int ownerUid; 1144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root ownerUid = data.readInt(); 1145941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey boolean readOnly; 1146941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey readOnly = data.readInt() != 0; 1147941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int resultCode = mountSecureContainer(id, key, ownerUid, readOnly); 1148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountSecureContainer: { 1153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = unmountSecureContainer(id, force); 1159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isSecureContainerMounted: { 1164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1165be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1166be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isSecureContainerMounted(id); 1168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 1170be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1171be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1172be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_renameSecureContainer: { 1173be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String oldId; 1175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root oldId = data.readString(); 1176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String newId; 1177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root newId = data.readString(); 1178be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int resultCode = renameSecureContainer(oldId, newId); 1179be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1180be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt(resultCode); 1181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerPath: { 1184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String id; 1186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root id = data.readString(); 1187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String path = getSecureContainerPath(id); 1188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(path); 1190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getSecureContainerList: { 1193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String[] ids = getSecureContainerList(); 1195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeStringArray(ids); 1197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_shutdown: { 1200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IMountShutdownObserver observer; 1202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IMountShutdownObserver.Stub.asInterface(data 1203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root .readStrongBinder()); 1204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root shutdown(observer); 1205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_finishMediaUpdate: { 1209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root finishMediaUpdate(); 1211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_mountObb: { 1215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 12164fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey final String rawPath = data.readString(); 12174fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey final String canonicalPath = data.readString(); 12184fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey final String key = data.readString(); 1219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 1220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 1221af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 1222af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 12234fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey mountObb(rawPath, canonicalPath, key, observer, nonce); 1224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_unmountObb: { 1228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean force; 1232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root force = 0 != data.readInt(); 1233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root IObbActionListener observer; 1234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root observer = IObbActionListener.Stub.asInterface(data.readStrongBinder()); 1235af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root int nonce; 1236af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root nonce = data.readInt(); 1237af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root unmountObb(filename, force, observer, nonce); 1238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_isObbMounted: { 1242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root boolean status = isObbMounted(filename); 1246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeInt((status ? 1 : 0)); 1248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root case TRANSACTION_getMountedObbPath: { 1251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.enforceInterface(DESCRIPTOR); 1252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String filename; 1253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root filename = data.readString(); 1254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root String mountedPath = getMountedObbPath(filename); 1255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeNoException(); 1256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.writeString(mountedPath); 1257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 1258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1259e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root case TRANSACTION_isExternalStorageEmulated: { 1260e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root data.enforceInterface(DESCRIPTOR); 1261e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root boolean emulated = isExternalStorageEmulated(); 1262e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeNoException(); 1263e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root reply.writeInt(emulated ? 1 : 0); 1264e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root return true; 1265e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root } 12665af0b916f850486cff4797355bf9e7dc3352fe00Jason parks case TRANSACTION_decryptStorage: { 12675af0b916f850486cff4797355bf9e7dc3352fe00Jason parks data.enforceInterface(DESCRIPTOR); 12685af0b916f850486cff4797355bf9e7dc3352fe00Jason parks String password = data.readString(); 12695af0b916f850486cff4797355bf9e7dc3352fe00Jason parks int result = decryptStorage(password); 12705af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeNoException(); 12715af0b916f850486cff4797355bf9e7dc3352fe00Jason parks reply.writeInt(result); 12725af0b916f850486cff4797355bf9e7dc3352fe00Jason parks return true; 12735af0b916f850486cff4797355bf9e7dc3352fe00Jason parks } 127456aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks case TRANSACTION_encryptStorage: { 127556aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks data.enforceInterface(DESCRIPTOR); 127646791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence int type = data.readInt(); 127756aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks String password = data.readString(); 127846791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence int result = encryptStorage(type, password); 127956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeNoException(); 128056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks reply.writeInt(result); 128156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks return true; 128256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks } 1283f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks case TRANSACTION_changeEncryptionPassword: { 1284f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks data.enforceInterface(DESCRIPTOR); 12858e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int type = data.readInt(); 1286f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks String password = data.readString(); 12878e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int result = changeEncryptionPassword(type, password); 1288f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeNoException(); 1289f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks reply.writeInt(result); 1290f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks return true; 1291f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks } 1292d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood case TRANSACTION_getVolumeList: { 1293d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood data.enforceInterface(DESCRIPTOR); 1294b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey StorageVolume[] result = getVolumeList(); 1295d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood reply.writeNoException(); 1296b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey reply.writeTypedArray(result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 1297d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood return true; 1298d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood } 1299292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn case TRANSACTION_getSecureContainerFilesystemPath: { 1300292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn data.enforceInterface(DESCRIPTOR); 1301292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String id; 1302292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn id = data.readString(); 1303292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn String path = getSecureContainerFilesystemPath(id); 1304292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn reply.writeNoException(); 1305292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn reply.writeString(path); 1306292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn return true; 1307292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn } 1308444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo case TRANSACTION_getEncryptionState: { 1309444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo data.enforceInterface(DESCRIPTOR); 1310444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo int result = getEncryptionState(); 1311444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo reply.writeNoException(); 1312444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo reply.writeInt(result); 1313444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo return true; 1314444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo } 13156dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root case TRANSACTION_fixPermissionsSecureContainer: { 13166dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root data.enforceInterface(DESCRIPTOR); 13176dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root String id; 13186dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root id = data.readString(); 13196dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int gid; 13206dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root gid = data.readInt(); 13216dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root String filename; 13226dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root filename = data.readString(); 13236dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int resultCode = fixPermissionsSecureContainer(id, gid, filename); 13246dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root reply.writeNoException(); 13256dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root reply.writeInt(resultCode); 13266dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root return true; 13276dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root } 13282d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey case TRANSACTION_mkdirs: { 13292d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey data.enforceInterface(DESCRIPTOR); 13302d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey String callingPkg = data.readString(); 13312d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey String path = data.readString(); 13322d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey int result = mkdirs(callingPkg, path); 13332d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey reply.writeNoException(); 13342d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey reply.writeInt(result); 13352d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey return true; 13362d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey } 13378e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence case TRANSACTION_getPasswordType: { 13388e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence data.enforceInterface(DESCRIPTOR); 13398e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence int result = getPasswordType(); 13408e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence reply.writeNoException(); 13418e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence reply.writeInt(result); 13428e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence return true; 13438e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence } 1344945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence case TRANSACTION_getPassword: { 1345945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence data.enforceInterface(DESCRIPTOR); 1346945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence String result = getPassword(); 1347945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence reply.writeNoException(); 1348945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence reply.writeString(result); 1349945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence return true; 1350945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 1351945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence case TRANSACTION_clearPassword: { 1352945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence data.enforceInterface(DESCRIPTOR); 1353945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence clearPassword(); 1354945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence reply.writeNoException(); 1355945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence return true; 1356945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence } 1357e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence case TRANSACTION_setField: { 1358e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence data.enforceInterface(DESCRIPTOR); 1359e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String field = data.readString(); 1360e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String contents = data.readString(); 1361e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence setField(field, contents); 1362e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence reply.writeNoException(); 1363e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence return true; 1364e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 1365e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence case TRANSACTION_getField: { 1366e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence data.enforceInterface(DESCRIPTOR); 1367e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String field = data.readString(); 1368e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence String contents = getField(field); 1369e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence reply.writeNoException(); 1370e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence reply.writeString(contents); 1371e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence return true; 1372e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence } 1373941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey case TRANSACTION_resizeSecureContainer: { 1374941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey data.enforceInterface(DESCRIPTOR); 1375941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey String id; 1376941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey id = data.readString(); 1377941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int sizeMb; 1378941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey sizeMb = data.readInt(); 1379941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey String key; 1380941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey key = data.readString(); 1381941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey int resultCode = resizeSecureContainer(id, sizeMb, key); 1382941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey reply.writeNoException(); 1383941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey reply.writeInt(resultCode); 1384941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey return true; 1385941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey } 13867265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate case TRANSACTION_lastMaintenance: { 13877265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate data.enforceInterface(DESCRIPTOR); 13887265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate long lastMaintenance = lastMaintenance(); 13897265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate reply.writeNoException(); 13907265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate reply.writeLong(lastMaintenance); 13917265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return true; 13927265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 13937265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate case TRANSACTION_runMaintenance: { 13947265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate data.enforceInterface(DESCRIPTOR); 13957265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate runMaintenance(); 13967265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate reply.writeNoException(); 13977265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate return true; 13987265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate } 1399be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1400be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return super.onTransact(code, data, reply, flags); 1401be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1402be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 1403be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1404be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1405be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Creates a secure container with the specified parameters. Returns an int 1406be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * consistent with MountServiceResultCode 1407be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 14086dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int createSecureContainer(String id, int sizeMb, String fstype, String key, 14096dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root int ownerUid, boolean external) throws RemoteException; 1410be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1411be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1412be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Destroy a secure container, and free up all resources associated with it. 1413be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * NOTE: Ensure all references are released prior to deleting. Returns an 1414be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1415be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1416be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int destroySecureContainer(String id, boolean force) throws RemoteException; 1417be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1418be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1419be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Finalize a container which has just been created and populated. After 1420be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * finalization, the container is immutable. Returns an int consistent with 1421be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1422be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1423be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int finalizeSecureContainer(String id) throws RemoteException; 1424be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1425be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1426be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Call into MountService by PackageManager to notify that its done 1427be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * processing the media status update request. 1428be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1429be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void finishMediaUpdate() throws RemoteException; 1430be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1431be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1432be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Format external storage given a mount point. Returns an int consistent 1433be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1434be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1435be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int formatVolume(String mountPoint) throws RemoteException; 1436be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1437be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1438be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the path to the mounted Opaque Binary Blob (OBB). 1439be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 14404fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public String getMountedObbPath(String rawPath) throws RemoteException; 1441be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1442be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1443be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets an Array of currently known secure container IDs 1444be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1445be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String[] getSecureContainerList() throws RemoteException; 1446be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1447be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1448be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns the filesystem path of a mounted secure container. 1449be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1450be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getSecureContainerPath(String id) throws RemoteException; 1451be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1452be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1453be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns an array of pids with open files on the specified path. 1454be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1455be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int[] getStorageUsers(String path) throws RemoteException; 1456be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1457be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1458be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Gets the state of a volume via its mountpoint. 1459be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1460be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public String getVolumeState(String mountPoint) throws RemoteException; 1461be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1462be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1463be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Checks whether the specified Opaque Binary Blob (OBB) is mounted 1464be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * somewhere. 1465be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 14664fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public boolean isObbMounted(String rawPath) throws RemoteException; 1467be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1468be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1469be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if the specified container is mounted 1470be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1471be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isSecureContainerMounted(String id) throws RemoteException; 1472be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1473be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1474be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is connected 1475be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1476be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageConnected() throws RemoteException; 1477be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1478be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1479be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Returns true if a USB mass storage host is enabled (media is shared) 1480be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1481be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public boolean isUsbMassStorageEnabled() throws RemoteException; 1482be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1483be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1484be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and 1485be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * only allows the calling process's UID access to the contents. 1486be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1487be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1488be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 14894fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void mountObb(String rawPath, String canonicalPath, String key, 14904fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey IObbActionListener token, int nonce) throws RemoteException; 1491be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1492be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1493be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount a secure container with the specified key and owner UID. Returns an 1494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * int consistent with MountServiceResultCode 1495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1496941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly) 1497941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey throws RemoteException; 1498be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1499be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Mount external storage at given mount point. Returns an int consistent 1501be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * with MountServiceResultCode 1502be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int mountVolume(String mountPoint) throws RemoteException; 1504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Registers an IMountServiceListener for receiving async notifications. 1507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void registerListener(IMountServiceListener listener) throws RemoteException; 1509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Rename an unmounted secure container. Returns an int consistent with 1512be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1513be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1514be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int renameSecureContainer(String oldId, String newId) throws RemoteException; 1515be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1516be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1517be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Enables / disables USB mass storage. The caller should check actual 1518be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * status of enabling/disabling USB mass storage via StorageEventListener. 1519be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1520be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void setUsbMassStorageEnabled(boolean enable) throws RemoteException; 1521be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1522be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1523be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Shuts down the MountService and gracefully unmounts all external media. 1524be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Invokes call back once the shutdown is complete. 1525be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1526be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void shutdown(IMountShutdownObserver observer) throws RemoteException; 1527be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1528be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1529be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified, 1530be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * any program using it will be forcibly killed to unmount the image. 1531be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountService will call back to the supplied IObbActionListener to inform 1532be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * it of the terminal state of the call. 1533be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 15344fbbda4cecb078bd3867f416b02cc75f5455284fJeff Sharkey public void unmountObb(String rawPath, boolean force, IObbActionListener token, int nonce) 1535be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root throws RemoteException; 1536be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1537be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /* 1538be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unount a secure container. Returns an int consistent with 1539be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * MountServiceResultCode 1540be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1541be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public int unmountSecureContainer(String id, boolean force) throws RemoteException; 1542be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1543be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1544be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Safely unmount external storage at given mount point. The unmount is an 1545be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * asynchronous operation. Applications should register StorageEventListener 1546be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * for storage related status changes. 154713c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param mountPoint the mount point 154813c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param force whether or not to forcefully unmount it (e.g. even if programs are using this 154913c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * data currently) 155013c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * @param removeEncryption whether or not encryption mapping should be removed from the volume. 155113c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo * This value implies {@code force}. 1552be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 155313c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption) 155413c7197da8a16f77f6398708a6314c80cb01e0d1Ben Komalo throws RemoteException; 1555be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 1556be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root /** 1557be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unregisters an IMountServiceListener 1558be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 1559be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root public void unregisterListener(IMountServiceListener listener) throws RemoteException; 1560e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root 1561e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root /** 1562e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root * Returns whether or not the external storage is emulated. 1563e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root */ 1564e1ff214e32ed5c546a7603b07b054908c4d93312Kenny Root public boolean isExternalStorageEmulated() throws RemoteException; 15655af0b916f850486cff4797355bf9e7dc3352fe00Jason parks 1566444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume is not encrypted. */ 1567444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_NONE = 1; 1568444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** The volume has been encrypted succesfully. */ 1569444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_OK = 0; 1570e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** The volume is in a bad state.*/ 1571444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_ERROR_UNKNOWN = -1; 1572e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** Encryption is incomplete */ 1573444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo static final int ENCRYPTION_STATE_ERROR_INCOMPLETE = -2; 1574e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** Encryption is incomplete and irrecoverable */ 1575e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence static final int ENCRYPTION_STATE_ERROR_INCONSISTENT = -3; 1576e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence /** Underlying data is corrupt */ 1577e2c88d39b2c5b33d55c42230db7899202625a96aPaul Lawrence static final int ENCRYPTION_STATE_ERROR_CORRUPT = -4; 1578444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 1579444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo /** 1580444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo * Determines the encryption state of the volume. 1581444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo * @return a numerical value. See {@code ENCRYPTION_STATE_*} for possible values. 1582444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo */ 1583444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo public int getEncryptionState() throws RemoteException; 1584444eca232964dbf27d0c4d01447c1493f89186e0Ben Komalo 15855af0b916f850486cff4797355bf9e7dc3352fe00Jason parks /** 15865af0b916f850486cff4797355bf9e7dc3352fe00Jason parks * Decrypts any encrypted volumes. 15875af0b916f850486cff4797355bf9e7dc3352fe00Jason parks */ 15885af0b916f850486cff4797355bf9e7dc3352fe00Jason parks public int decryptStorage(String password) throws RemoteException; 158956aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks 159056aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks /** 159156aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks * Encrypts storage. 159256aa5321fe6f00fa3662e6f46a4b2559aa34f63eJason parks */ 159346791e752ca1eca35e6a882c47d7de7f4f66687cPaul Lawrence public int encryptStorage(int type, String password) throws RemoteException; 1594f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1595f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks /** 1596f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks * Changes the encryption password. 1597f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks */ 15988e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int changeEncryptionPassword(int type, String password) 15998e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence throws RemoteException; 1600f7b3cd4efd40b7631f36ea014407a850f7dc637eJason parks 1601d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood /** 160232418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate * Verify the encryption password against the stored volume. This method 160332418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate * may only be called by the system process. 160432418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate */ 160532418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate public int verifyEncryptionPassword(String password) throws RemoteException; 160632418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate 160732418be49e5b61c2e9281528cb8fb67939e301e8Christopher Tate /** 1608d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood * Returns list of all mountable volumes. 1609d967f4664f40f9a4c5262a44b19df9bbdf457d8aMike Lockwood */ 1610b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public StorageVolume[] getVolumeList() throws RemoteException; 1611292f8bc9d1b790ab975a87a842c7fabc908b97e0Dianne Hackborn 161251a573c76737733638c475f52e441c814e6645ccKenny Root /** 161351a573c76737733638c475f52e441c814e6645ccKenny Root * Gets the path on the filesystem for the ASEC container itself. 161451a573c76737733638c475f52e441c814e6645ccKenny Root * 161551a573c76737733638c475f52e441c814e6645ccKenny Root * @param cid ASEC container ID 161651a573c76737733638c475f52e441c814e6645ccKenny Root * @return path to filesystem or {@code null} if it's not found 161751a573c76737733638c475f52e441c814e6645ccKenny Root * @throws RemoteException 161851a573c76737733638c475f52e441c814e6645ccKenny Root */ 161951a573c76737733638c475f52e441c814e6645ccKenny Root public String getSecureContainerFilesystemPath(String cid) throws RemoteException; 16206dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root 16216dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root /* 16226dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Fix permissions in a container which has just been created and populated. 16236dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root * Returns an int consistent with MountServiceResultCode 16246dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root */ 16256dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root public int fixPermissionsSecureContainer(String id, int gid, String filename) 16266dceb88f1c7c42c6ab43834af2c993d599895d82Kenny Root throws RemoteException; 16272d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey 16282d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey /** 16292d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * Ensure that all directories along given path exist, creating parent 16302d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * directories as needed. Validates that given path is absolute and that it 16312d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * contains no relative "." or ".." paths or symlinks. Also ensures that 16322d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * path belongs to a volume managed by vold, and that path is either 16332d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey * external storage data or OBB directory belonging to calling app. 16342d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey */ 16352d8b4e801332e02d6aad615b85cc9dd056ef805cJeff Sharkey public int mkdirs(String callingPkg, String path) throws RemoteException; 16368e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence 16378e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence /** 16388e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence * Determines the type of the encryption password 16398e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence * @return PasswordType 16408e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence */ 16418e39736f91a08961cf59c87075e61d9026833b50Paul Lawrence public int getPasswordType() throws RemoteException; 1642945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 1643945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence /** 1644945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence * Get password from vold 1645945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence * @return password or empty string 1646945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence */ 1647945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public String getPassword() throws RemoteException; 1648945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence 1649945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence /** 1650945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence * Securely clear password from vold 1651945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence */ 1652945490c12e32b1c13b9097c00702558260b2011fPaul Lawrence public void clearPassword() throws RemoteException; 1653e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 1654e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence /** 1655e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * Set a field in the crypto header. 1656e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @param field field to set 1657e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @param contents contents to set in field 1658e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence */ 1659e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public void setField(String field, String contents) throws RemoteException; 1660e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence 1661e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence /** 1662e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * Gets a field from the crypto header. 1663e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @param field field to get 1664e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence * @return contents of field 1665e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence */ 1666e51dcf98a4ddb1340cffba88059ad89f0b90909aPaul Lawrence public String getField(String field) throws RemoteException; 1667941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey 1668941a8ba1a6043cf84a7bf622e44a0b4f7abd0178Jeff Sharkey public int resizeSecureContainer(String id, int sizeMb, String key) throws RemoteException; 16697265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 16707265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate /** 16717265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * Report the time of the last maintenance operation such as fstrim. 16727265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * @return Timestamp of the last maintenance operation, in the 16737265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * System.currentTimeMillis() time base 16747265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * @throws RemoteException 16757265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate */ 16767265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public long lastMaintenance() throws RemoteException; 16777265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate 16787265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate /** 16797265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * Kick off an immediate maintenance operation 16807265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate * @throws RemoteException 16817265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate */ 16827265abe77a76f848a316640b5da106e882bdbc8aChristopher Tate public void runMaintenance() throws RemoteException; 1683be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root} 1684