1/**
2 * Copyright (c) 2016, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.os.storage;
18
19import android.content.pm.IPackageMoveObserver;
20import android.os.IVoldTaskListener;
21import android.os.ParcelFileDescriptor;
22import android.os.storage.DiskInfo;
23import android.os.storage.IStorageEventListener;
24import android.os.storage.IStorageShutdownObserver;
25import android.os.storage.IObbActionListener;
26import android.os.storage.StorageVolume;
27import android.os.storage.VolumeInfo;
28import android.os.storage.VolumeRecord;
29import com.android.internal.os.AppFuseMount;
30
31/**
32 * WARNING! Update IMountService.h and IMountService.cpp if you change this
33 * file. In particular, the transaction ids below must match the
34 * _TRANSACTION enum in IMountService.cpp
35 *
36 * @hide - Applications should use android.os.storage.StorageManager to access
37 *       storage functions.
38 */
39interface IStorageManager {
40    /**
41     * Registers an IStorageEventListener for receiving async notifications.
42     */
43    void registerListener(IStorageEventListener listener) = 0;
44    /**
45     * Unregisters an IStorageEventListener
46     */
47    void unregisterListener(IStorageEventListener listener) = 1;
48    /**
49     * Shuts down the StorageManagerService and gracefully unmounts all external media.
50     * Invokes call back once the shutdown is complete.
51     */
52    void shutdown(IStorageShutdownObserver observer) = 19;
53    /**
54     * Mounts an Opaque Binary Blob (OBB) with the specified decryption key and
55     * only allows the calling process's UID access to the contents.
56     * StorageManagerService will call back to the supplied IObbActionListener to inform
57     * it of the terminal state of the call.
58     */
59    void mountObb(in String rawPath, in String canonicalPath, in String key,
60            IObbActionListener token, int nonce) = 21;
61    /**
62     * Unmounts an Opaque Binary Blob (OBB). When the force flag is specified,
63     * any program using it will be forcibly killed to unmount the image.
64     * StorageManagerService will call back to the supplied IObbActionListener to inform
65     * it of the terminal state of the call.
66     */
67    void unmountObb(in String rawPath, boolean force, IObbActionListener token, int nonce) = 22;
68    /**
69     * Checks whether the specified Opaque Binary Blob (OBB) is mounted
70     * somewhere.
71     */
72    boolean isObbMounted(in String rawPath) = 23;
73    /**
74     * Gets the path to the mounted Opaque Binary Blob (OBB).
75     */
76    String getMountedObbPath(in String rawPath) = 24;
77    /**
78     * Decrypts any encrypted volumes.
79     */
80    int decryptStorage(in String password) = 26;
81    /**
82     * Encrypts storage.
83     */
84    int encryptStorage(int type, in String password) = 27;
85    /**
86     * Changes the encryption password.
87     */
88    int changeEncryptionPassword(int type, in String password) = 28;
89    /**
90     * Returns list of all mountable volumes.
91     */
92    StorageVolume[] getVolumeList(int uid, in String packageName, int flags) = 29;
93    /**
94     * Determines the encryption state of the volume.
95     * @return a numerical value. See {@code ENCRYPTION_STATE_*} for possible
96     * values.
97     * Note that this has been replaced in most cases by the APIs in
98     * StorageManager (see isEncryptable and below)
99     * This is still useful to get the error state when encryption has failed
100     * and CryptKeeper needs to throw up a screen advising the user what to do
101     */
102    int getEncryptionState() = 31;
103    /**
104     * Verify the encryption password against the stored volume.  This method
105     * may only be called by the system process.
106     */
107    int verifyEncryptionPassword(in String password) = 32;
108    /**
109     * Ensure that all directories along given path exist, creating parent
110     * directories as needed. Validates that given path is absolute and that it
111     * contains no relative "." or ".." paths or symlinks. Also ensures that
112     * path belongs to a volume managed by vold, and that path is either
113     * external storage data or OBB directory belonging to calling app.
114     */
115    void mkdirs(in String callingPkg, in String path) = 34;
116    /**
117     * Determines the type of the encryption password
118     * @return PasswordType
119     */
120    int getPasswordType() = 35;
121    /**
122     * Get password from vold
123     * @return password or empty string
124     */
125    String getPassword() = 36;
126    /**
127     * Securely clear password from vold
128     */
129    oneway void clearPassword() = 37;
130    /**
131     * Set a field in the crypto header.
132     * @param field field to set
133     * @param contents contents to set in field
134     */
135    oneway void setField(in String field, in String contents) = 38;
136    /**
137     * Gets a field from the crypto header.
138     * @param field field to get
139     * @return contents of field
140     */
141    String getField(in String field) = 39;
142    /**
143     * Report the time of the last maintenance operation such as fstrim.
144     * @return Timestamp of the last maintenance operation, in the
145     *     System.currentTimeMillis() time base
146     * @throws RemoteException
147     */
148    long lastMaintenance() = 41;
149    /**
150     * Kick off an immediate maintenance operation
151     * @throws RemoteException
152     */
153    void runMaintenance() = 42;
154    DiskInfo[] getDisks() = 44;
155    VolumeInfo[] getVolumes(int flags) = 45;
156    VolumeRecord[] getVolumeRecords(int flags) = 46;
157    void mount(in String volId) = 47;
158    void unmount(in String volId) = 48;
159    void format(in String volId) = 49;
160    void partitionPublic(in String diskId) = 50;
161    void partitionPrivate(in String diskId) = 51;
162    void partitionMixed(in String diskId, int ratio) = 52;
163    void setVolumeNickname(in String fsUuid, in String nickname) = 53;
164    void setVolumeUserFlags(in String fsUuid, int flags, int mask) = 54;
165    void forgetVolume(in String fsUuid) = 55;
166    void forgetAllVolumes() = 56;
167    String getPrimaryStorageUuid() = 57;
168    void setPrimaryStorageUuid(in String volumeUuid, IPackageMoveObserver callback) = 58;
169    void benchmark(in String volId, IVoldTaskListener listener) = 59;
170    void setDebugFlags(int flags, int mask) = 60;
171    void createUserKey(int userId, int serialNumber, boolean ephemeral) = 61;
172    void destroyUserKey(int userId) = 62;
173    void unlockUserKey(int userId, int serialNumber, in byte[] token, in byte[] secret) = 63;
174    void lockUserKey(int userId) = 64;
175    boolean isUserKeyUnlocked(int userId) = 65;
176    void prepareUserStorage(in String volumeUuid, int userId, int serialNumber, int flags) = 66;
177    void destroyUserStorage(in String volumeUuid, int userId, int flags) = 67;
178    boolean isConvertibleToFBE() = 68;
179    void addUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 70;
180    void fixateNewestUserKeyAuth(int userId) = 71;
181    void fstrim(int flags, IVoldTaskListener listener) = 72;
182    AppFuseMount mountProxyFileDescriptorBridge() = 73;
183    ParcelFileDescriptor openProxyFileDescriptor(int mountPointId, int fileId, int mode) = 74;
184    long getCacheQuotaBytes(String volumeUuid, int uid) = 75;
185    long getCacheSizeBytes(String volumeUuid, int uid) = 76;
186    long getAllocatableBytes(String volumeUuid, int flags, String callingPackage) = 77;
187    void allocateBytes(String volumeUuid, long bytes, int flags, String callingPackage) = 78;
188    void runIdleMaintenance() = 79;
189    void abortIdleMaintenance() = 80;
190}
191