From b2f99da75b367c467ddd93b4cad4f8068549e9ba Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Fri, 10 Oct 2025 14:03:02 +0200 Subject: [PATCH] intent_serialize: use DBus name instead of package name Applications may need to use a DBus name different from the package name. For example, the Flatpak sandbox does not allow DBus names with less than two dots, but many Android package names contain just one dot. --- src/api-impl-jni/util.c | 7 ++----- src/api-impl-jni/util.h | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/api-impl-jni/util.c b/src/api-impl-jni/util.c index e31e38e0..f8842af8 100644 --- a/src/api-impl-jni/util.c +++ b/src/api-impl-jni/util.c @@ -249,7 +249,6 @@ GVariant *intent_serialize(JNIEnv *env, jobject intent) { jobject component = _GET_OBJ_FIELD(intent, "component", "Landroid/content/ComponentName;"); jstring className_jstr = component ? _GET_OBJ_FIELD(component, "mClass", "Ljava/lang/String;") : NULL; jstring data_jstr = (*env)->CallObjectMethod(env, intent, handle_cache.intent.getDataString); - jstring sender_package_jstr = (*env)->CallObjectMethod(env, _GET_STATIC_OBJ_FIELD(handle_cache.context.class, "this_application", "Landroid/app/Application;"), handle_cache.context.get_package_name); GVariantBuilder extras_builder; g_variant_builder_init(&extras_builder, G_VARIANT_TYPE_VARDICT); @@ -285,10 +284,8 @@ GVariant *intent_serialize(JNIEnv *env, jobject intent) { const char *action = action_jstr ? (*env)->GetStringUTFChars(env, action_jstr, NULL) : NULL; const char *className = className_jstr ? (*env)->GetStringUTFChars(env, className_jstr, NULL) : NULL; const char *data = data_jstr ? (*env)->GetStringUTFChars(env, data_jstr, NULL) : NULL; - const char *sender_package = sender_package_jstr ? (*env)->GetStringUTFChars(env, sender_package_jstr, NULL) : NULL; - GVariant *variant = g_variant_new(INTENT_G_VARIANT_TYPE_STRING, action ?: "", className ?: "", data ?: "", &extras_builder, sender_package); - if (sender_package_jstr) - (*env)->ReleaseStringUTFChars(env, sender_package_jstr, sender_package); + const char *dbus_name = g_application_get_application_id(g_application_get_default()); + GVariant *variant = g_variant_new(INTENT_G_VARIANT_TYPE_STRING, action ?: "", className ?: "", data ?: "", &extras_builder, dbus_name); if (action_jstr) (*env)->ReleaseStringUTFChars(env, action_jstr, action); if (className_jstr) diff --git a/src/api-impl-jni/util.h b/src/api-impl-jni/util.h index 3c72e97b..95221a8f 100644 --- a/src/api-impl-jni/util.h +++ b/src/api-impl-jni/util.h @@ -57,7 +57,7 @@ void atl_safe_gtk_widget_set_visible(GtkWidget *widget, gboolean visible); void atl_safe_gtk_widget_queue_allocate(GtkWidget *widget); void atl_safe_gtk_widget_queue_resize(GtkWidget *widget); -#define INTENT_G_VARIANT_TYPE_STRING "(sssa{sv}s)" // (action, className, data, extras, sender_package) +#define INTENT_G_VARIANT_TYPE_STRING "(sssa{sv}s)" // (action, className, data, extras, sender_dbus_name) GVariant *intent_serialize(JNIEnv *env, jobject intent); jobject intent_deserialize(JNIEnv *env, GVariant *variant); const char *intent_actionname_from_type(int type);