4fbbda4cec
Since emulated external storage paths differ based on execution context, carefully fix up paths for various use-cases: 1. When sending paths to DefaultContainerService, always scope OBB paths as belonging to USER_OWNER. 2. When sending paths to vold, always build emulated storage paths visible to root. 3. Always use the original untouched path when talking with apps. Mount OBB containers using shared app GID, so that an app can read the mount point across users. Handle legacy paths like "/sdcard" by resolving the canonical path before sending to MountService. Move tests to servicestests, and add tests for new path generation logic. Bug: 7212801 Change-Id: I078c52879cd08d9c8a52cc8c83ac7ced1e8035e7
88 lines
3.6 KiB
C++
88 lines
3.6 KiB
C++
/*
|
|
* Copyright (C) 2010 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef ANDROID_IMOUNTSERVICE_H
|
|
#define ANDROID_IMOUNTSERVICE_H
|
|
|
|
#include <storage/IMountServiceListener.h>
|
|
#include <storage/IMountShutdownObserver.h>
|
|
#include <storage/IObbActionListener.h>
|
|
|
|
#include <utils/String8.h>
|
|
|
|
#include <binder/IInterface.h>
|
|
#include <binder/Parcel.h>
|
|
|
|
namespace android {
|
|
|
|
class IMountService: public IInterface {
|
|
public:
|
|
DECLARE_META_INTERFACE(MountService);
|
|
|
|
virtual void registerListener(const sp<IMountServiceListener>& listener) = 0;
|
|
virtual void
|
|
unregisterListener(const sp<IMountServiceListener>& listener) = 0;
|
|
virtual bool isUsbMassStorageConnected() = 0;
|
|
virtual void setUsbMassStorageEnabled(const bool enable) = 0;
|
|
virtual bool isUsbMassStorageEnabled() = 0;
|
|
virtual int32_t mountVolume(const String16& mountPoint) = 0;
|
|
virtual int32_t unmountVolume(
|
|
const String16& mountPoint, const bool force, const bool removeEncryption) = 0;
|
|
virtual int32_t formatVolume(const String16& mountPoint) = 0;
|
|
virtual int32_t
|
|
getStorageUsers(const String16& mountPoint, int32_t** users) = 0;
|
|
virtual int32_t getVolumeState(const String16& mountPoint) = 0;
|
|
virtual int32_t createSecureContainer(const String16& id,
|
|
const int32_t sizeMb, const String16& fstype, const String16& key,
|
|
const int32_t ownerUid) = 0;
|
|
virtual int32_t finalizeSecureContainer(const String16& id) = 0;
|
|
virtual int32_t destroySecureContainer(const String16& id) = 0;
|
|
virtual int32_t mountSecureContainer(const String16& id,
|
|
const String16& key, const int32_t ownerUid) = 0;
|
|
virtual int32_t
|
|
unmountSecureContainer(const String16& id, const bool force) = 0;
|
|
virtual bool isSecureContainerMounted(const String16& id) = 0;
|
|
virtual int32_t renameSecureContainer(const String16& oldId,
|
|
const String16& newId) = 0;
|
|
virtual bool getSecureContainerPath(const String16& id, String16& path) = 0;
|
|
virtual int32_t getSecureContainerList(const String16& id,
|
|
String16*& containers) = 0;
|
|
virtual void shutdown(const sp<IMountShutdownObserver>& observer) = 0;
|
|
virtual void finishMediaUpdate() = 0;
|
|
virtual void mountObb(const String16& rawPath, const String16& canonicalPath,
|
|
const String16& key, const sp<IObbActionListener>& token,
|
|
const int32_t nonce) = 0;
|
|
virtual void unmountObb(const String16& filename, const bool force,
|
|
const sp<IObbActionListener>& token, const int32_t nonce) = 0;
|
|
virtual bool isObbMounted(const String16& filename) = 0;
|
|
virtual bool getMountedObbPath(const String16& filename, String16& path) = 0;
|
|
virtual int32_t decryptStorage(const String16& password) = 0;
|
|
virtual int32_t encryptStorage(const String16& password) = 0;
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class BnMountService: public BnInterface<IMountService> {
|
|
public:
|
|
virtual status_t onTransact(uint32_t code, const Parcel& data,
|
|
Parcel* reply, uint32_t flags = 0);
|
|
};
|
|
|
|
}
|
|
; // namespace android
|
|
|
|
#endif // ANDROID_IMOUNTSERVICE_H
|