Split MOUNT_FLAG_VISIBLE into MOUNT_FLAG_VISIBLE_FOR_{READ, WRITE}

IVold.MOUNT_FLAG_VISIBLE is split into MOUNT_FLAG_VISIBLE_FOR_READ and
MOUNT_FLAG_VISIBLE_FOR_WRITE.
Accordingly, VolumeBase::MountFlags::kVisible is split into
kVisibleForRead and kVisibleForWrite.

Bug: 206019156
Test: m
Change-Id: Ia55673400d9f713f221650e1335a46ba11f6f027
Merged-In: Ia55673400d9f713f221650e1335a46ba11f6f027
This commit is contained in:
Youkichi Hosoi 2021-11-11 11:23:01 +09:00
parent 660f052858
commit 2991cbe49f
5 changed files with 19 additions and 9 deletions

View file

@ -1002,8 +1002,8 @@ int VolumeManager::setupAppDir(const std::string& path, int32_t appUid, bool fix
// The volume must be mounted
return false;
}
if ((vol.getMountFlags() & VolumeBase::MountFlags::kVisible) == 0) {
// and visible
if (!vol.isVisibleForWrite()) {
// App dirs should only be created for writable volumes.
return false;
}
if (vol.getInternalPath().empty()) {
@ -1077,8 +1077,8 @@ int VolumeManager::createObb(const std::string& sourcePath, const std::string& s
// The volume must be mounted
return false;
}
if ((vol.getMountFlags() & VolumeBase::MountFlags::kVisible) == 0) {
// and visible
if (!vol.isVisibleForWrite()) {
// Obb volume should only be created for writable volumes.
return false;
}
if (vol.getInternalPath().empty()) {

View file

@ -159,7 +159,8 @@ interface IVold {
const int FSTRIM_FLAG_DEEP_TRIM = 1;
const int MOUNT_FLAG_PRIMARY = 1;
const int MOUNT_FLAG_VISIBLE = 2;
const int MOUNT_FLAG_VISIBLE_FOR_READ = 2;
const int MOUNT_FLAG_VISIBLE_FOR_WRITE = 4;
const int PARTITION_TYPE_PUBLIC = 0;
const int PARTITION_TYPE_PRIVATE = 1;

View file

@ -246,7 +246,7 @@ status_t EmulatedVolume::unmountSdcardFs() {
status_t EmulatedVolume::doMount() {
std::string label = getLabel();
bool isVisible = getMountFlags() & MountFlags::kVisible;
bool isVisible = isVisibleForWrite();
mSdcardFsDefault = StringPrintf("/mnt/runtime/default/%s", label.c_str());
mSdcardFsRead = StringPrintf("/mnt/runtime/read/%s", label.c_str());

View file

@ -97,7 +97,7 @@ status_t PublicVolume::doDestroy() {
}
status_t PublicVolume::doMount() {
bool isVisible = getMountFlags() & MountFlags::kVisible;
bool isVisible = isVisibleForWrite();
readMetadata();
if (mFsType == "vfat" && vfat::IsSupported()) {

View file

@ -63,8 +63,14 @@ class VolumeBase {
enum MountFlags {
/* Flag that volume is primary external storage */
kPrimary = 1 << 0,
/* Flag that volume is visible to normal apps */
kVisible = 1 << 1,
/*
* Flags indicating that volume is visible to normal apps.
* kVisibleForRead and kVisibleForWrite correspond to
* VolumeInfo.MOUNT_FLAG_VISIBLE_FOR_READ and
* VolumeInfo.MOUNT_FLAG_VISIBLE_FOR_WRITE, respectively.
*/
kVisibleForRead = 1 << 1,
kVisibleForWrite = 1 << 2,
};
enum class State {
@ -103,6 +109,9 @@ class VolumeBase {
std::shared_ptr<VolumeBase> findVolume(const std::string& id);
bool isEmulated() { return mType == Type::kEmulated; }
bool isVisibleForRead() const { return (mMountFlags & MountFlags::kVisibleForRead) != 0; }
bool isVisibleForWrite() const { return (mMountFlags & MountFlags::kVisibleForWrite) != 0; }
bool isVisible() const { return isVisibleForRead() || isVisibleForWrite(); }
status_t create();
status_t destroy();