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.
This commit is contained in:
Julian Winkler
2025-10-10 14:03:02 +02:00
parent f208e944d2
commit b2f99da75b
2 changed files with 3 additions and 6 deletions

View File

@@ -249,7 +249,6 @@ GVariant *intent_serialize(JNIEnv *env, jobject intent) {
jobject component = _GET_OBJ_FIELD(intent, "component", "Landroid/content/ComponentName;"); jobject component = _GET_OBJ_FIELD(intent, "component", "Landroid/content/ComponentName;");
jstring className_jstr = component ? _GET_OBJ_FIELD(component, "mClass", "Ljava/lang/String;") : NULL; 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 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; GVariantBuilder extras_builder;
g_variant_builder_init(&extras_builder, G_VARIANT_TYPE_VARDICT); 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 *action = action_jstr ? (*env)->GetStringUTFChars(env, action_jstr, NULL) : NULL;
const char *className = className_jstr ? (*env)->GetStringUTFChars(env, className_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 *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; 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, sender_package); GVariant *variant = g_variant_new(INTENT_G_VARIANT_TYPE_STRING, action ?: "", className ?: "", data ?: "", &extras_builder, dbus_name);
if (sender_package_jstr)
(*env)->ReleaseStringUTFChars(env, sender_package_jstr, sender_package);
if (action_jstr) if (action_jstr)
(*env)->ReleaseStringUTFChars(env, action_jstr, action); (*env)->ReleaseStringUTFChars(env, action_jstr, action);
if (className_jstr) if (className_jstr)

View File

@@ -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_allocate(GtkWidget *widget);
void atl_safe_gtk_widget_queue_resize(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); GVariant *intent_serialize(JNIEnv *env, jobject intent);
jobject intent_deserialize(JNIEnv *env, GVariant *variant); jobject intent_deserialize(JNIEnv *env, GVariant *variant);
const char *intent_actionname_from_type(int type); const char *intent_actionname_from_type(int type);