diff options
author | 2016-05-27 08:52:52 -0700 | |
---|---|---|
committer | 2016-05-27 08:52:52 -0700 | |
commit | e5a6cd9832eaa7011dee162283ff6470f82a3fdc (patch) | |
tree | 5a79d4b3bbcdd3435b0c473e6dfc679fb4c0fb05 /tools/viewer/sk_app/android/surface_glue_android.cpp | |
parent | 3f9960949cba16b3a59b72f7b9833d4624044d6d (diff) |
Now we can use drawer to view the state information of the native app, and set its state using the spinner.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2004633002
Committed: https://skia.googlesource.com/skia/+/4e4e30823fba0047b93a56bfcf05c04ca57e82ec
Review-Url: https://codereview.chromium.org/2004633002
Diffstat (limited to 'tools/viewer/sk_app/android/surface_glue_android.cpp')
-rw-r--r-- | tools/viewer/sk_app/android/surface_glue_android.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tools/viewer/sk_app/android/surface_glue_android.cpp b/tools/viewer/sk_app/android/surface_glue_android.cpp index 958b7876b8..daf26a3852 100644 --- a/tools/viewer/sk_app/android/surface_glue_android.cpp +++ b/tools/viewer/sk_app/android/surface_glue_android.cpp @@ -46,6 +46,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"); + fSetStateMethodID = env->GetMethodID(cls, "setState", "(Ljava/lang/String;)V"); fNativeWindow = nullptr; pthread_create(&fThread, nullptr, pthread_main, this); } @@ -70,6 +71,12 @@ void SkiaAndroidApp::setTitle(const char* title) const { fPThreadEnv->DeleteLocalRef(titleString); } +void SkiaAndroidApp::setUIState(const Json::Value& state) const { + jstring jstr = fPThreadEnv->NewStringUTF(state.toStyledString().c_str()); + fPThreadEnv->CallVoidMethod(fAndroidApp, fSetStateMethodID, 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 +146,12 @@ int SkiaAndroidApp::message_callback(int fd, int events, void* data) { message.fTouchY); break; } + case kUIStateChanged: { + skiaAndroidApp->fWindow->onUIStateChanged(*message.stateName, *message.stateValue); + delete message.stateName; + delete message.stateValue; + break; + } default: { // do nothing } @@ -229,4 +242,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_onUIStateChanged( + JNIEnv* env, jobject activity, jlong handle, jstring stateName, jstring stateValue) { + auto skiaAndroidApp = (SkiaAndroidApp*)handle; + Message message(kUIStateChanged); + const char* nameChars = env->GetStringUTFChars(stateName, nullptr); + const char* valueChars = env->GetStringUTFChars(stateValue, nullptr); + message.stateName = new SkString(nameChars); + message.stateValue = new SkString(valueChars); + skiaAndroidApp->postMessage(message); + env->ReleaseStringUTFChars(stateName, nameChars); + env->ReleaseStringUTFChars(stateValue, valueChars); +} + } // namespace sk_app |