NoitficationManager: implement cancel

This commit is contained in:
Julian Winkler
2024-03-18 18:13:56 +01:00
parent cdcc3411aa
commit 50fa760c63
3 changed files with 32 additions and 1 deletions

View File

@@ -117,6 +117,14 @@ JNIEXPORT void JNICALL Java_android_app_NotificationManager_nativeShowNotificati
g_hash_table_add(ongoing_notifications, GINT_TO_POINTER(id)); g_hash_table_add(ongoing_notifications, GINT_TO_POINTER(id));
} }
JNIEXPORT void JNICALL Java_android_app_NotificationManager_nativeCancel(JNIEnv *env, jobject this, jint id)
{
char *id_string = g_strdup_printf("%d", id);
if (portal)
xdp_portal_remove_notification(portal, id_string);
g_free(id_string);
}
static void remove_ongoing_notification(gpointer key, gpointer value, gpointer user_data) static void remove_ongoing_notification(gpointer key, gpointer value, gpointer user_data)
{ {
char *id_string = g_strdup_printf("%d", GPOINTER_TO_INT(key)); char *id_string = g_strdup_printf("%d", GPOINTER_TO_INT(key));

View File

@@ -31,6 +31,14 @@ JNIEXPORT void JNICALL Java_android_app_NotificationManager_nativeAddAction
JNIEXPORT void JNICALL Java_android_app_NotificationManager_nativeShowNotification JNIEXPORT void JNICALL Java_android_app_NotificationManager_nativeShowNotification
(JNIEnv *, jobject, jlong, jint, jstring, jstring, jstring, jboolean, jint, jstring, jstring); (JNIEnv *, jobject, jlong, jint, jstring, jstring, jstring, jboolean, jint, jstring, jstring);
/*
* Class: android_app_NotificationManager
* Method: nativeCancel
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_android_app_NotificationManager_nativeCancel
(JNIEnv *, jobject, jint);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -3,6 +3,7 @@ package android.app;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Handler;
public class NotificationManager { public class NotificationManager {
public void cancelAll() {} public void cancelAll() {}
@@ -36,7 +37,20 @@ public class NotificationManager {
notify(null, id, notification); notify(null, id, notification);
} }
public void cancel(String tag, int id) {} public void cancel(String tag, final int id) {
// remove_notification doesn't work reliably when sent directly after add_notification in GNOME session.
// So we give some extra delay here.
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
nativeCancel(id);
}
}, 100);
}
public void cancel(int id) {
cancel(null, id);
}
protected static void notificationActionCallback(int id, int intentType, String action, String className) { protected static void notificationActionCallback(int id, int intentType, String action, String className) {
Context context = Context.this_application; Context context = Context.this_application;
@@ -56,4 +70,5 @@ public class NotificationManager {
protected native long nativeInitBuilder(); protected native long nativeInitBuilder();
protected native void nativeAddAction(long builder, String title, int intentType, String action, String className); protected native void nativeAddAction(long builder, String title, int intentType, String action, String className);
protected native void nativeShowNotification(long builder, int id, String title, String text, String iconPath, boolean ongoing, int intentType, String action, String className); protected native void nativeShowNotification(long builder, int id, String title, String text, String iconPath, boolean ongoing, int intentType, String action, String className);
protected native void nativeCancel(int id);
} }