aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/sk_app
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2018-03-02 17:28:39 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-03-06 22:52:10 +0000
commitc5cf762177c5708a5efa39f95b086c751e03e2e4 (patch)
tree5c13da69f689b0580001f7906ead9a5f748d3ea1 /tools/sk_app
parenta82780e09d1f2d7a57901d53700cdb7678f631d0 (diff)
Viewer/Amdroid: universal build, resources in APK
Change-Id: I57dda6e3329dbee720333b6e92142fce28f8dbd3 Reviewed-on: https://skia-review.googlesource.com/111940 Commit-Queue: Hal Canary <halcanary@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org> Reviewed-by: Yuqian Li <liyuqian@google.com>
Diffstat (limited to 'tools/sk_app')
-rw-r--r--tools/sk_app/android/surface_glue_android.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/tools/sk_app/android/surface_glue_android.cpp b/tools/sk_app/android/surface_glue_android.cpp
index 9c734247db..9766d3a56d 100644
--- a/tools/sk_app/android/surface_glue_android.cpp
+++ b/tools/sk_app/android/surface_glue_android.cpp
@@ -13,18 +13,44 @@
#include <unistd.h>
#include <unordered_map>
+#include <android/asset_manager.h>
+#include <android/asset_manager_jni.h>
#include <android/input.h>
#include <android/keycodes.h>
#include <android/looper.h>
#include <android/native_window_jni.h>
#include "../Application.h"
+#include "ResourceFactory.h"
#include "SkTypes.h"
#include "SkUtils.h"
#include "Window_android.h"
+
namespace sk_app {
+static void config_resource_mgr(JNIEnv* env, jobject assetManager) {
+ static AAssetManager* gAAssetManager = nullptr;
+ SkASSERT(assetManager);
+ gAAssetManager = AAssetManager_fromJava(env, assetManager);
+ SkASSERT(gAAssetManager);
+ gResourceFactory = [](const char* resource) -> sk_sp<SkData> {
+ if (!gAAssetManager) {
+ return nullptr;
+ }
+ SkString path = SkStringPrintf("resources/%s", resource);
+ AAsset* asset = AAssetManager_open(gAAssetManager, path.c_str(), AASSET_MODE_STREAMING);
+ if (!asset) {
+ return nullptr;
+ }
+ size_t size = SkToSizeT(AAsset_getLength(asset));
+ sk_sp<SkData> data = SkData::MakeUninitialized(size);
+ (void)AAsset_read(asset, data->writable_data(), size);
+ AAsset_close(asset);
+ return data;
+ };
+}
+
static const int LOOPER_ID_MESSAGEPIPE = 1;
static const std::unordered_map<int, Window::Key> ANDROID_TO_WINDOW_KEYMAP({
@@ -208,7 +234,10 @@ void* SkiaAndroidApp::pthread_main(void* arg) {
extern "C" // extern "C" is needed for JNI (although the method itself is in C++)
JNIEXPORT jlong JNICALL
- Java_org_skia_viewer_ViewerApplication_createNativeApp(JNIEnv* env, jobject application) {
+ Java_org_skia_viewer_ViewerApplication_createNativeApp(JNIEnv* env,
+ jobject application,
+ jobject assetManager) {
+ config_resource_mgr(env, assetManager);
SkiaAndroidApp* skiaAndroidApp = new SkiaAndroidApp(env, application);
return (jlong)((size_t)skiaAndroidApp);
}