2
0
Эх сурвалжийг харах

android: Set Activity title to window title

rdb 1 сар өмнө
parent
commit
8a23014cc6

+ 24 - 0
panda/src/android/config_android.cxx

@@ -28,6 +28,9 @@ jmethodID jni_PandaActivity_createBitmap;
 jmethodID jni_PandaActivity_compressBitmap;
 jmethodID jni_PandaActivity_showToast;
 
+jclass    jni_Activity;
+jmethodID jni_Activity_setTitle;
+
 jclass   jni_BitmapFactory_Options;
 jfieldID jni_BitmapFactory_Options_outWidth;
 jfieldID jni_BitmapFactory_Options_outHeight;
@@ -80,6 +83,11 @@ jint JNI_OnLoad(JavaVM *jvm, void *reserved) {
   jni_PandaActivity_showToast = env->GetMethodID(jni_PandaActivity,
                    "showToast", "(Ljava/lang/String;I)V");
 
+  jni_Activity = env->FindClass("android/app/Activity");
+  jni_Activity = (jclass) env->NewGlobalRef(jni_Activity);
+  jni_Activity_setTitle = env->GetMethodID(jni_Activity,
+              "setTitle", "(Ljava/lang/CharSequence;)V");
+
   jni_BitmapFactory_Options = env->FindClass("android/graphics/BitmapFactory$Options");
   jni_BitmapFactory_Options = (jclass) env->NewGlobalRef(jni_BitmapFactory_Options);
 
@@ -118,6 +126,7 @@ void JNI_OnUnload(JavaVM *jvm, void *reserved) {
   nassertv(env != nullptr);
 
   env->DeleteGlobalRef(jni_PandaActivity);
+  env->DeleteGlobalRef(jni_Activity);
   env->DeleteGlobalRef(jni_BitmapFactory_Options);
 
   // These will no longer work without JNI, so unregister them.
@@ -135,6 +144,21 @@ void JNI_OnUnload(JavaVM *jvm, void *reserved) {
   }
 }
 
+/**
+ * Sets the window title of the activity.
+ */
+void android_set_title(ANativeActivity *activity, const std::string &title) {
+  nassertv(jni_Activity_setTitle);
+
+  Thread *thread = Thread::get_current_thread();
+  JNIEnv *env = thread->get_jni_env();
+  nassertv(env != nullptr);
+
+  jstring jmsg = env->NewStringUTF(title.c_str());
+  env->CallVoidMethod(activity->clazz, jni_Activity_setTitle, jmsg);
+  env->DeleteLocalRef(jmsg);
+}
+
 /**
  * Shows a toast notification at the bottom of the activity.  The duration
  * should be 0 for short and 1 for long.

+ 4 - 0
panda/src/android/config_android.h

@@ -35,10 +35,14 @@ extern jmethodID jni_PandaActivity_createBitmap;
 extern jmethodID jni_PandaActivity_compressBitmap;
 extern jmethodID jni_PandaActivity_showToast;
 
+extern jclass    jni_Activity;
+extern jmethodID jni_Activity_setTitle;
+
 extern jclass   jni_BitmapFactory_Options;
 extern jfieldID jni_BitmapFactory_Options_outWidth;
 extern jfieldID jni_BitmapFactory_Options_outHeight;
 
+EXPORT_CLASS void android_set_title(ANativeActivity *activity, const std::string &title);
 EXPORT_CLASS void android_show_toast(ANativeActivity *activity, const std::string &message, int duration);
 
 #endif

+ 6 - 0
panda/src/androiddisplay/androidGraphicsWindow.cxx

@@ -15,6 +15,7 @@
 #include "androidGraphicsStateGuardian.h"
 #include "config_androiddisplay.h"
 #include "androidGraphicsPipe.h"
+#include "config_android.h"
 
 #include "graphicsPipe.h"
 #include "keyboardButton.h"
@@ -232,6 +233,11 @@ set_properties_now(WindowProperties &properties) {
     _properties.set_fullscreen(properties.get_fullscreen());
     properties.clear_fullscreen();
   }
+
+  if (properties.has_title()) {
+    android_set_title(_app->activity, properties.get_title());
+    properties.clear_title();
+  }
 }
 
 /**