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 
17 package android.os.storage;
18 
19 import android.content.pm.IPackageMoveObserver;
20 import android.os.IVoldTaskListener;
21 import android.os.ParcelFileDescriptor;
22 import android.os.storage.DiskInfo;
23 import android.os.storage.IStorageEventListener;
24 import android.os.storage.IStorageShutdownObserver;
25 import android.os.storage.IObbActionListener;
26 import android.os.storage.StorageVolume;
27 import android.os.storage.VolumeInfo;
28 import android.os.storage.VolumeRecord;
29 import 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  */
39 interface 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      */
mountObb(in String rawPath, in String canonicalPath, in String key, IObbActionListener token, int nonce)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      */
unmountObb(in String rawPath, boolean force, IObbActionListener token, int nonce)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      */
encryptStorage(int type, in String password)84     int encryptStorage(int type, in String password) = 27;
85     /**
86      * Changes the encryption password.
87      */
changeEncryptionPassword(int type, in String password)88     int changeEncryptionPassword(int type, in String password) = 28;
89     /**
90      * Returns list of all mountable volumes.
91      */
getVolumeList(int uid, in String packageName, int flags)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      */
getEncryptionState()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      */
mkdirs(in String callingPkg, in String path)115     void mkdirs(in String callingPkg, in String path) = 34;
116     /**
117      * Determines the type of the encryption password
118      * @return PasswordType
119      */
getPasswordType()120     int getPasswordType() = 35;
121     /**
122      * Get password from vold
123      * @return password or empty string
124      */
getPassword()125     String getPassword() = 36;
126     /**
127      * Securely clear password from vold
128      */
clearPassword()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      */
setField(in String field, in String contents)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      */
lastMaintenance()148     long lastMaintenance() = 41;
149     /**
150      * Kick off an immediate maintenance operation
151      * @throws RemoteException
152      */
runMaintenance()153     void runMaintenance() = 42;
getDisks()154     DiskInfo[] getDisks() = 44;
getVolumes(int flags)155     VolumeInfo[] getVolumes(int flags) = 45;
getVolumeRecords(int flags)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;
partitionMixed(in String diskId, int ratio)162     void partitionMixed(in String diskId, int ratio) = 52;
setVolumeNickname(in String fsUuid, in String nickname)163     void setVolumeNickname(in String fsUuid, in String nickname) = 53;
setVolumeUserFlags(in String fsUuid, int flags, int mask)164     void setVolumeUserFlags(in String fsUuid, int flags, int mask) = 54;
165     void forgetVolume(in String fsUuid) = 55;
forgetAllVolumes()166     void forgetAllVolumes() = 56;
getPrimaryStorageUuid()167     String getPrimaryStorageUuid() = 57;
setPrimaryStorageUuid(in String volumeUuid, IPackageMoveObserver callback)168     void setPrimaryStorageUuid(in String volumeUuid, IPackageMoveObserver callback) = 58;
benchmark(in String volId, IVoldTaskListener listener)169     void benchmark(in String volId, IVoldTaskListener listener) = 59;
setDebugFlags(int flags, int mask)170     void setDebugFlags(int flags, int mask) = 60;
createUserKey(int userId, int serialNumber, boolean ephemeral)171     void createUserKey(int userId, int serialNumber, boolean ephemeral) = 61;
destroyUserKey(int userId)172     void destroyUserKey(int userId) = 62;
unlockUserKey(int userId, int serialNumber, in byte[] token, in byte[] secret)173     void unlockUserKey(int userId, int serialNumber, in byte[] token, in byte[] secret) = 63;
lockUserKey(int userId)174     void lockUserKey(int userId) = 64;
isUserKeyUnlocked(int userId)175     boolean isUserKeyUnlocked(int userId) = 65;
prepareUserStorage(in String volumeUuid, int userId, int serialNumber, int flags)176     void prepareUserStorage(in String volumeUuid, int userId, int serialNumber, int flags) = 66;
destroyUserStorage(in String volumeUuid, int userId, int flags)177     void destroyUserStorage(in String volumeUuid, int userId, int flags) = 67;
isConvertibleToFBE()178     boolean isConvertibleToFBE() = 68;
addUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret)179     void addUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 70;
fixateNewestUserKeyAuth(int userId)180     void fixateNewestUserKeyAuth(int userId) = 71;
fstrim(int flags, IVoldTaskListener listener)181     void fstrim(int flags, IVoldTaskListener listener) = 72;
mountProxyFileDescriptorBridge()182     AppFuseMount mountProxyFileDescriptorBridge() = 73;
openProxyFileDescriptor(int mountPointId, int fileId, int mode)183     ParcelFileDescriptor openProxyFileDescriptor(int mountPointId, int fileId, int mode) = 74;
getCacheQuotaBytes(String volumeUuid, int uid)184     long getCacheQuotaBytes(String volumeUuid, int uid) = 75;
getCacheSizeBytes(String volumeUuid, int uid)185     long getCacheSizeBytes(String volumeUuid, int uid) = 76;
getAllocatableBytes(String volumeUuid, int flags, String callingPackage)186     long getAllocatableBytes(String volumeUuid, int flags, String callingPackage) = 77;
allocateBytes(String volumeUuid, long bytes, int flags, String callingPackage)187     void allocateBytes(String volumeUuid, long bytes, int flags, String callingPackage) = 78;
runIdleMaintenance()188     void runIdleMaintenance() = 79;
abortIdleMaintenance()189     void abortIdleMaintenance() = 80;
190 }
191