From 05105f7abe02b2dff91d6260b3628c8b97816bab Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Wed, 22 Sep 2010 17:29:43 -0700 Subject: Update OBB API to include callbacks Add a callback for users of the StorageManager API to be able to receive notifications when the requested operation completes for mountObb and unmountObb. Add NDK API to get to ObbInfo like the Java API has. Also update the docs for the API and remove the "STOPSHIP" comments. Change-Id: I23a4409c7f8b74d3169614beba920b4d667990a4 --- native/android/Android.mk | 1 + native/android/obb.cpp | 54 +++++++++++++++++++++++++++ native/android/storage_manager.cpp | 31 +++++++++++----- native/include/android/obb.h | 63 ++++++++++++++++++++++++++++++++ native/include/android/storage_manager.h | 15 +++++--- 5 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 native/android/obb.cpp create mode 100644 native/include/android/obb.h (limited to 'native') diff --git a/native/android/Android.mk b/native/android/Android.mk index cc35a3a..44ec83f 100644 --- a/native/android/Android.mk +++ b/native/android/Android.mk @@ -12,6 +12,7 @@ LOCAL_SRC_FILES:= \ looper.cpp \ native_activity.cpp \ native_window.cpp \ + obb.cpp \ sensor.cpp \ storage_manager.cpp diff --git a/native/android/obb.cpp b/native/android/obb.cpp new file mode 100644 index 0000000..e0cb1a6 --- /dev/null +++ b/native/android/obb.cpp @@ -0,0 +1,54 @@ +/* + * 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 "NObb" + +#include + +#include +#include + +using namespace android; + +struct AObbInfo : public ObbFile {}; + +AObbInfo* AObbScanner_getObbInfo(const char* filename) { + AObbInfo* obbFile = new AObbInfo(); + if (obbFile == NULL || !obbFile->readFrom(filename)) { + delete obbFile; + return NULL; + } + obbFile->incStrong((void*)AObbScanner_getObbInfo); + return static_cast(obbFile); +} + +void AObbInfo_delete(AObbInfo* obbInfo) { + if (obbInfo != NULL) { + obbInfo->decStrong((void*)AObbScanner_getObbInfo); + } +} + +const char* AObbInfo_getPackageName(AObbInfo* obbInfo) { + return obbInfo->getPackageName(); +} + +int32_t AObbInfo_getVersion(AObbInfo* obbInfo) { + return obbInfo->getVersion(); +} + +int32_t AObbInfo_getFlags(AObbInfo* obbInfo) { + return obbInfo->getFlags(); +} diff --git a/native/android/storage_manager.cpp b/native/android/storage_manager.cpp index 6dbe746..2f20641 100644 --- a/native/android/storage_manager.cpp +++ b/native/android/storage_manager.cpp @@ -38,20 +38,20 @@ public: 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()); - } + virtual void onObbResult(const android::String16& filename, const android::String16& state); }; struct AStorageManager : public RefBase { protected: - void* mObbCallback; + AStorageManager_obbCallbackFunc mObbCallback; + void* mObbCallbackData; sp mObbActionListener; sp mMountService; public: - AStorageManager() : - mObbCallback(NULL) + AStorageManager() + : mObbCallback(NULL) + , mObbCallbackData(NULL) { } @@ -73,8 +73,15 @@ public: return true; } - void setObbCallback(void* cb) { + void setObbCallback(AStorageManager_obbCallbackFunc cb, void* data) { mObbCallback = cb; + mObbCallbackData = data; + } + + void fireCallback(const char* filename, const char* state) { + if (mObbCallback != NULL) { + mObbCallback(filename, state, mObbCallbackData); + } } void mountObb(const char* filename, const char* key) { @@ -85,7 +92,7 @@ public: void unmountObb(const char* filename, const bool force) { String16 filename16(filename); - mMountService->unmountObb(filename16, force); + mMountService->unmountObb(filename16, force, mObbActionListener); } int isObbMounted(const char* filename) { @@ -104,6 +111,10 @@ public: } }; +void ObbActionListener::onObbResult(const android::String16& filename, const android::String16& state) { + mStorageManager->fireCallback(String8(filename).string(), String8(state).string()); +} + AStorageManager* AStorageManager_new() { sp mgr = new AStorageManager(); @@ -120,8 +131,8 @@ void AStorageManager_delete(AStorageManager* mgr) { } } -void AStorageManager_setObbCallback(AStorageManager* mgr, void* cb) { - mgr->setObbCallback(cb); +void AStorageManager_setObbCallback(AStorageManager* mgr, AStorageManager_obbCallbackFunc cb, void* data) { + mgr->setObbCallback(cb, data); } void AStorageManager_mountObb(AStorageManager* mgr, const char* filename, const char* key) { diff --git a/native/include/android/obb.h b/native/include/android/obb.h new file mode 100644 index 0000000..65e9b2a --- /dev/null +++ b/native/include/android/obb.h @@ -0,0 +1,63 @@ +/* + * 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_OBB_H +#define ANDROID_OBB_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct AObbInfo; +typedef struct AObbInfo AObbInfo; + +enum { + AOBBINFO_OVERLAY = 0x0001, +}; + +/** + * Scan an OBB and get information about it. + */ +AObbInfo* AObbScanner_getObbInfo(const char* filename); + +/** + * Destroy the AObbInfo object. You must call this when finished with the object. + */ +void AObbInfo_delete(AObbInfo* obbInfo); + +/** + * Get the package name for the OBB. + */ +const char* AObbInfo_getPackageName(AObbInfo* obbInfo); + +/** + * Get the version of an OBB file. + */ +int32_t AObbInfo_getVersion(AObbInfo* obbInfo); + +/** + * Get the flags of an OBB file. + */ +int32_t AObbInfo_getFlags(AObbInfo* obbInfo); + +#ifdef __cplusplus +}; +#endif + +#endif // ANDROID_OBB_H diff --git a/native/include/android/storage_manager.h b/native/include/android/storage_manager.h index bbed8a4..6f925c1 100644 --- a/native/include/android/storage_manager.h +++ b/native/include/android/storage_manager.h @@ -37,17 +37,22 @@ AStorageManager* AStorageManager_new(); void AStorageManager_delete(AStorageManager* mgr); /** - * Callback to call when requested OBB is complete. + * Callback function for asynchronous calls made on OBB files. */ -void AStorageManager_setObbCallback(AStorageManager* mgr, void* cb); +typedef void (*AStorageManager_obbCallbackFunc)(const char* filename, const char* state, void* data); /** - * Attempts to mount an OBB file. + * Callback to call when requested asynchronous OBB operation is complete. + */ +void AStorageManager_setObbCallback(AStorageManager* mgr, AStorageManager_obbCallbackFunc cb, void* data); + +/** + * Attempts to mount an OBB file. This is an asynchronous operation. */ void AStorageManager_mountObb(AStorageManager* mgr, const char* filename, const char* key); /** - * Attempts to unmount an OBB file. + * Attempts to unmount an OBB file. This is an asynchronous operation. */ void AStorageManager_unmountObb(AStorageManager* mgr, const char* filename, const int force); @@ -66,4 +71,4 @@ const char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char* }; #endif -#endif // ANDROID_PACKAGE_MANAGER_H +#endif // ANDROID_STORAGE_MANAGER_H -- cgit v1.1