android: Set Activity title to window title

This commit is contained in:
rdb 2025-11-09 12:07:26 +01:00
parent 32bdca9015
commit 8a23014cc6
3 changed files with 34 additions and 0 deletions

View File

@ -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.

View File

@ -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

View File

@ -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();
}
}
/**