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