Chromium Code Reviews| Index: tools/viewer/sk_app/android/surface_glue_android.cpp |
| diff --git a/tools/viewer/sk_app/android/surface_glue_android.cpp b/tools/viewer/sk_app/android/surface_glue_android.cpp |
| index 958b7876b8baa674aec32cc89c684d8f7db0edda..60897f4635947fcb0d022b20e2b3a2f84b40ec7f 100644 |
| --- a/tools/viewer/sk_app/android/surface_glue_android.cpp |
| +++ b/tools/viewer/sk_app/android/surface_glue_android.cpp |
| @@ -21,6 +21,7 @@ |
| #include "../Application.h" |
| #include "SkTypes.h" |
| #include "SkUtils.h" |
| +#include "SkString.h" |
| #include "Window_android.h" |
| namespace sk_app { |
| @@ -46,6 +47,7 @@ SkiaAndroidApp::SkiaAndroidApp(JNIEnv* env, jobject androidApp) { |
| fAndroidApp = env->NewGlobalRef(androidApp); |
| jclass cls = env->GetObjectClass(fAndroidApp); |
| fSetTitleMethodID = env->GetMethodID(cls, "setTitle", "(Ljava/lang/String;)V"); |
| + fUpdateStateMethodID = env->GetMethodID(cls, "updateState", "(Ljava/lang/String;)V"); |
| fNativeWindow = nullptr; |
| pthread_create(&fThread, nullptr, pthread_main, this); |
| } |
| @@ -70,6 +72,12 @@ void SkiaAndroidApp::setTitle(const char* title) const { |
| fPThreadEnv->DeleteLocalRef(titleString); |
| } |
| +void SkiaAndroidApp::updateState(const char* stateJsonStr) const { |
| + jstring jstr = fPThreadEnv->NewStringUTF(stateJsonStr); |
| + fPThreadEnv->CallVoidMethod(fAndroidApp, fUpdateStateMethodID, jstr); |
| + fPThreadEnv->DeleteLocalRef(jstr); |
| +} |
| + |
| void SkiaAndroidApp::postMessage(const Message& message) const { |
| SkDEBUGCODE(auto writeSize =) write(fPipes[1], &message, sizeof(message)); |
| SkASSERT(writeSize == sizeof(message)); |
| @@ -139,6 +147,12 @@ int SkiaAndroidApp::message_callback(int fd, int events, void* data) { |
| message.fTouchY); |
| break; |
| } |
| + case kSetState: { |
| + skiaAndroidApp->fWindow->onSet(*message.stateName, *message.stateValue); |
| + delete message.stateName; |
| + delete message.stateValue; |
| + break; |
| + } |
| default: { |
| // do nothing |
| } |
| @@ -229,4 +243,17 @@ extern "C" JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onTouched( |
| skiaAndroidApp->postMessage(message); |
| } |
| +extern "C" JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_setState( |
| + JNIEnv* env, jobject activity, jlong handle, jstring stateName, jstring stateValue) { |
| + auto skiaAndroidApp = (SkiaAndroidApp*)handle; |
| + Message message(kSetState); |
| + const char* nameChars = env->GetStringUTFChars(stateName, nullptr); |
| + const char* valueChars = env->GetStringUTFChars(stateValue, nullptr); |
| + message.stateName = new SkString(nameChars); |
|
djsollen
2016/05/24 17:32:40
stateName.reset(nameChars);
liyuqian
2016/05/24 20:18:05
We'll preserve the pointers because of the message
|
| + message.stateValue = new SkString(valueChars); |
| + skiaAndroidApp->postMessage(message); |
| + env->ReleaseStringUTFChars(stateName, nameChars); |
| + env->ReleaseStringUTFChars(stateValue, valueChars); |
| +} |
| + |
| } // namespace sk_app |