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