diff options
| author | JustZvan <justzvan@justzvan.xyz> | 2026-02-06 13:38:36 +0100 |
|---|---|---|
| committer | JustZvan <justzvan@justzvan.xyz> | 2026-02-06 13:38:36 +0100 |
| commit | adb6a4fd9ec3a23c04d5e4c2ce799448237915c4 (patch) | |
| tree | 786edcf5888788e0667a90fae96d7ebec68c507a /app/src/main/java/sh/lajo/buddy/BuddyNotificationService.kt | |
feat: initial commit
Diffstat (limited to 'app/src/main/java/sh/lajo/buddy/BuddyNotificationService.kt')
| -rw-r--r-- | app/src/main/java/sh/lajo/buddy/BuddyNotificationService.kt | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/app/src/main/java/sh/lajo/buddy/BuddyNotificationService.kt b/app/src/main/java/sh/lajo/buddy/BuddyNotificationService.kt new file mode 100644 index 0000000..51076b9 --- /dev/null +++ b/app/src/main/java/sh/lajo/buddy/BuddyNotificationService.kt @@ -0,0 +1,65 @@ +package sh.lajo.buddy + +import android.content.Intent +import android.provider.ContactsContract +import android.service.notification.NotificationListenerService +import android.service.notification.StatusBarNotification +import android.util.Log + +class BuddyNotificationService : NotificationListenerService() { + override fun onNotificationPosted(sbn: StatusBarNotification?) { + sbn ?: return + + val config = ConfigManager.getConfig(this) + if (config.disableBuddy) { + Log.d("BuddyNotificationService", "Buddy is disabled, skipping notification") + return + } + + + val notification = sbn.notification + val title = notification.extras.getCharSequence(android.app.Notification.EXTRA_TITLE)?.toString() ?: "" + val text = notification.extras.getCharSequence(android.app.Notification.EXTRA_TEXT)?.toString() ?: "" + val packageName = sbn.packageName + + val allowedPackages = arrayOf( + "com.whatsapp", + "com.discord", + "org.thoughtcrime.securesms", // Signal + "network.loki.messenger", // Session + "chat.simplex.app", // SimpleX + ) + + if (!allowedPackages.contains(packageName)) { + return + } + + val contacts = mutableListOf<String>() + val cursor = contentResolver.query( + ContactsContract.Contacts.CONTENT_URI, + arrayOf(ContactsContract.Contacts.DISPLAY_NAME), + null, null, null + ) + cursor?.use { + while (it.moveToNext()) { + val name = it.getString(it.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)) + contacts.add(name) + } + } + + for (contactName in contacts) { + if (title.contains(contactName, ignoreCase = true)) { + return + } + } + + val intent = Intent(this, WebSocketService::class.java).apply { + action = WebSocketService.ACTION_SEND_NOTIFICATION + putExtra(WebSocketService.EXTRA_NOTIFICATION_TITLE, title) + putExtra(WebSocketService.EXTRA_NOTIFICATION_TEXT, text) + putExtra(WebSocketService.EXTRA_NOTIFICATION_PACKAGE, packageName) + } + + startForegroundService(intent) + } +} |