Home | History | Annotate | Download | only in storage
      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      */
     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