summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2010-08-24 09:57:33 -0700
committerKenny Root <kroot@google.com>2010-08-24 09:57:33 -0700
commit53e75ea847df20b29124966a4232dc0109c37e27 (patch)
tree4c545e0c93b0d50122002201d3f6836225a6b3dd /native
parentd820714e30a53b244d252e77c7922e2c1604adbc (diff)
parent485de781f6bd30dfb7aa1e55c4f1efb3d3b11eba (diff)
downloadframeworks_base-53e75ea847df20b29124966a4232dc0109c37e27.zip
frameworks_base-53e75ea847df20b29124966a4232dc0109c37e27.tar.gz
frameworks_base-53e75ea847df20b29124966a4232dc0109c37e27.tar.bz2
resolved conflicts for merge of 485de781 to master
Change-Id: I483cb81596f09b024b1aea7fc55960183f38b24f
Diffstat (limited to 'native')
-rw-r--r--native/android/Android.mk6
-rw-r--r--native/android/storage_manager.cpp141
-rw-r--r--native/include/android/storage_manager.h69
3 files changed, 215 insertions, 1 deletions
diff --git a/native/android/Android.mk b/native/android/Android.mk
index bd2b27a..cc35a3a 100644
--- a/native/android/Android.mk
+++ b/native/android/Android.mk
@@ -12,7 +12,8 @@ LOCAL_SRC_FILES:= \
looper.cpp \
native_activity.cpp \
native_window.cpp \
- sensor.cpp
+ sensor.cpp \
+ storage_manager.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
@@ -23,6 +24,9 @@ LOCAL_SHARED_LIBRARIES := \
libsurfaceflinger_client \
libandroid_runtime
+LOCAL_STATIC_LIBRARIES := \
+ libstorage
+
LOCAL_C_INCLUDES += \
frameworks/base/native/include \
frameworks/base/core/jni/android \
diff --git a/native/android/storage_manager.cpp b/native/android/storage_manager.cpp
new file mode 100644
index 0000000..6dbe746
--- /dev/null
+++ b/native/android/storage_manager.cpp
@@ -0,0 +1,141 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "NStorage"
+
+#include <android/storage_manager.h>
+#include <storage/IMountService.h>
+
+#include <binder/Binder.h>
+#include <binder/IServiceManager.h>
+#include <utils/Log.h>
+#include <utils/RefBase.h>
+#include <utils/String8.h>
+#include <utils/String16.h>
+
+
+using namespace android;
+
+struct ObbActionListener : public BnObbActionListener {
+private:
+ sp<AStorageManager> mStorageManager;
+
+public:
+ ObbActionListener(AStorageManager* mgr) :
+ mStorageManager(mgr)
+ {}
+
+ virtual void onObbResult(const android::String16& filename, const android::String16& state) {
+ LOGD("Got obb result (%s, %s)\n", String8(filename).string(), String8(state).string());
+ }
+};
+
+struct AStorageManager : public RefBase {
+protected:
+ void* mObbCallback;
+ sp<ObbActionListener> mObbActionListener;
+ sp<IMountService> mMountService;
+
+public:
+ AStorageManager() :
+ mObbCallback(NULL)
+ {
+ }
+
+ bool initialize() {
+ sp<IServiceManager> sm = defaultServiceManager();
+ if (sm == NULL) {
+ LOGE("Couldn't get default ServiceManager\n");
+ return false;
+ }
+
+ mMountService = interface_cast<IMountService>(sm->getService(String16("mount")));
+ if (mMountService == NULL) {
+ LOGE("Couldn't get connection to MountService\n");
+ return false;
+ }
+
+ mObbActionListener = new ObbActionListener(this);
+
+ return true;
+ }
+
+ void setObbCallback(void* cb) {
+ mObbCallback = cb;
+ }
+
+ void mountObb(const char* filename, const char* key) {
+ String16 filename16(filename);
+ String16 key16(key);
+ mMountService->mountObb(filename16, key16, mObbActionListener);
+ }
+
+ void unmountObb(const char* filename, const bool force) {
+ String16 filename16(filename);
+ mMountService->unmountObb(filename16, force);
+ }
+
+ int isObbMounted(const char* filename) {
+ String16 filename16(filename);
+ return mMountService->isObbMounted(filename16);
+ }
+
+ const char* getMountedObbPath(const char* filename) {
+ String16 filename16(filename);
+ String16 path16;
+ if (mMountService->getMountedObbPath(filename16, path16)) {
+ return String8(path16).string();
+ } else {
+ return NULL;
+ }
+ }
+};
+
+
+AStorageManager* AStorageManager_new() {
+ sp<AStorageManager> mgr = new AStorageManager();
+ if (mgr == NULL || !mgr->initialize()) {
+ return NULL;
+ }
+ mgr->incStrong((void*)AStorageManager_new);
+ return static_cast<AStorageManager*>(mgr.get());
+}
+
+void AStorageManager_delete(AStorageManager* mgr) {
+ if (mgr) {
+ mgr->decStrong((void*)AStorageManager_new);
+ }
+}
+
+void AStorageManager_setObbCallback(AStorageManager* mgr, void* cb) {
+ mgr->setObbCallback(cb);
+}
+
+void AStorageManager_mountObb(AStorageManager* mgr, const char* filename, const char* key) {
+ mgr->mountObb(filename, key);
+}
+
+void AStorageManager_unmountObb(AStorageManager* mgr, const char* filename, const int force) {
+ mgr->unmountObb(filename, force != 0);
+}
+
+int AStorageManager_isObbMounted(AStorageManager* mgr, const char* filename) {
+ return mgr->isObbMounted(filename) != 0;
+}
+
+const char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char* filename) {
+ return mgr->getMountedObbPath(filename);
+}
diff --git a/native/include/android/storage_manager.h b/native/include/android/storage_manager.h
new file mode 100644
index 0000000..bbed8a4
--- /dev/null
+++ b/native/include/android/storage_manager.h
@@ -0,0 +1,69 @@
+/*
+ * 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_STORAGE_MANAGER_H
+#define ANDROID_STORAGE_MANAGER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct AStorageManager;
+typedef struct AStorageManager AStorageManager;
+
+
+/**
+ * Obtains a new instance of AStorageManager.
+ */
+AStorageManager* AStorageManager_new();
+
+/**
+ * Release AStorageManager instance.
+ */
+void AStorageManager_delete(AStorageManager* mgr);
+
+/**
+ * Callback to call when requested OBB is complete.
+ */
+void AStorageManager_setObbCallback(AStorageManager* mgr, void* cb);
+
+/**
+ * Attempts to mount an OBB file.
+ */
+void AStorageManager_mountObb(AStorageManager* mgr, const char* filename, const char* key);
+
+/**
+ * Attempts to unmount an OBB file.
+ */
+void AStorageManager_unmountObb(AStorageManager* mgr, const char* filename, const int force);
+
+/**
+ * Check whether an OBB is mounted.
+ */
+int AStorageManager_isObbMounted(AStorageManager* mgr, const char* filename);
+
+/**
+ * Get the mounted path for an OBB.
+ */
+const char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char* filename);
+
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif // ANDROID_PACKAGE_MANAGER_H