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