summaryrefslogtreecommitdiff
path: root/app/src/main/java/sh/lajo/buddy/WebSocketService.kt
diff options
context:
space:
mode:
authorJustZvan <justzvan@justzvan.xyz>2026-04-08 19:41:36 +0200
committerJustZvan <justzvan@justzvan.xyz>2026-04-08 19:41:36 +0200
commit1f07f153b23fa9a7ae0ea648b498dad60f96c594 (patch)
treec7c7d1c824d7fdfeaea4ca77ea22c370708ed8a7 /app/src/main/java/sh/lajo/buddy/WebSocketService.kt
parentadb6a4fd9ec3a23c04d5e4c2ce799448237915c4 (diff)
feat: 1.2main
Diffstat (limited to 'app/src/main/java/sh/lajo/buddy/WebSocketService.kt')
-rw-r--r--app/src/main/java/sh/lajo/buddy/WebSocketService.kt68
1 files changed, 68 insertions, 0 deletions
diff --git a/app/src/main/java/sh/lajo/buddy/WebSocketService.kt b/app/src/main/java/sh/lajo/buddy/WebSocketService.kt
index 100f019..ee509bd 100644
--- a/app/src/main/java/sh/lajo/buddy/WebSocketService.kt
+++ b/app/src/main/java/sh/lajo/buddy/WebSocketService.kt
@@ -47,6 +47,11 @@ class WebSocketService : Service() {
const val ACTION_CIRCUMVENTION_EVENT = "sh.lajo.buddy.action.CIRCUMVENTION_EVENT"
const val EXTRA_CIRCUMVENTION_PACKAGE = "sh.lajo.buddy.extra.CIRCUMVENTION_PACKAGE"
const val EXTRA_CIRCUMVENTION_CLASS = "sh.lajo.buddy.extra.CIRCUMVENTION_CLASS"
+ const val ACTION_SEND_IMAGE = "sh.lajo.buddy.action.SEND_IMAGE"
+ const val EXTRA_IMAGE_NAME = "sh.lajo.buddy.extra.IMAGE_NAME"
+ const val ACTION_NSFW_IMAGE_DETECTED = "sh.lajo.buddy.action.NSFW_IMAGE_DETECTED"
+ const val EXTRA_NSFW_IMAGE_NAME = "sh.lajo.buddy.extra.NSFW_IMAGE_NAME"
+ const val EXTRA_NSFW_IMAGE_CONFIDENCE = "sh.lajo.buddy.extra.NSFW_IMAGE_CONFIDENCE"
}
private lateinit var webSocket: WebSocket
@@ -57,6 +62,7 @@ class WebSocketService : Service() {
private val pendingMessages = mutableListOf<String>()
private var contactsObserver: ContactsObserver? = null
+ private var imagesObserver: ImagesObserver? = null
var token: String = ""
private val configFetchHandler = Handler(Looper.getMainLooper())
@@ -102,6 +108,10 @@ class WebSocketService : Service() {
extractAndForwardAccessibilityMessage(intent)
} else if (intent?.action == ACTION_CIRCUMVENTION_EVENT) {
extractAndForwardCircumventionEvent(intent)
+ } else if (intent?.action == ACTION_SEND_IMAGE) {
+ extractAndForwardImage(intent)
+ } else if (intent?.action == ACTION_NSFW_IMAGE_DETECTED) {
+ extractAndForwardNsfwImageDetected(intent)
}
return START_STICKY
@@ -125,6 +135,10 @@ class WebSocketService : Service() {
// Initialize and register ContactsObserver
contactsObserver = ContactsObserver(this, contentResolver)
contactsObserver?.register()
+
+ // Initialize and register ImagesObserver
+ imagesObserver = ImagesObserver(this, contentResolver)
+ imagesObserver?.register()
}
private fun createNotification(): Notification {
@@ -352,6 +366,59 @@ class WebSocketService : Service() {
sendCircumventionPayload(packageName, className)
}
+ private fun extractAndForwardImage(intent: Intent) {
+ val name = intent.getStringExtra(EXTRA_IMAGE_NAME) ?: return
+ sendImagePayload(name)
+ }
+
+ private fun extractAndForwardNsfwImageDetected(intent: Intent) {
+ val name = intent.getStringExtra(EXTRA_NSFW_IMAGE_NAME) ?: return
+ val confidence = intent.getFloatExtra(EXTRA_NSFW_IMAGE_CONFIDENCE, -1f)
+ if (confidence < 0f) return
+
+ sendNsfwImageDetectedPayload(name, confidence)
+ }
+
+ private fun sendImagePayload(name: String) {
+ // Check if Buddy is disabled in config
+ val config = ConfigManager.getConfig(this)
+ if (config.disableBuddy) {
+ Log.d("WebSocketService", "Buddy is disabled, skipping image event")
+ return
+ }
+
+ val payload = buildJsonObject {
+ put("type", "image_added")
+ put("name", name)
+ put("timestamp", System.currentTimeMillis())
+ }
+
+ Log.d("WebSocketService", "Sending image added payload: ${payload.toString()}")
+
+ val json = Json.encodeToString(JsonObject.serializer(), payload)
+ sendOrQueue(json)
+ }
+
+ private fun sendNsfwImageDetectedPayload(name: String, confidence: Float) {
+ val config = ConfigManager.getConfig(this)
+ if (config.disableBuddy) {
+ Log.d("WebSocketService", "Buddy is disabled, skipping NSFW image event")
+ return
+ }
+
+ val payload = buildJsonObject {
+ put("type", "nsfw_image_detected")
+ put("name", name)
+ put("confidence", confidence)
+ put("timestamp", System.currentTimeMillis())
+ }
+
+ Log.d("WebSocketService", "Sending NSFW image payload: ${payload.toString()}")
+
+ val json = Json.encodeToString(JsonObject.serializer(), payload)
+ sendOrQueue(json)
+ }
+
private fun sendCircumventionPayload(packageName: String, className: String) {
// Check if Buddy is disabled in config
val config = ConfigManager.getConfig(this)
@@ -377,6 +444,7 @@ class WebSocketService : Service() {
configFetchHandler.removeCallbacks(configFetchRunnable)
statusPingHandler.removeCallbacks(statusPingRunnable)
contactsObserver?.unregister()
+ imagesObserver?.unregister()
if (::webSocket.isInitialized) {
webSocket.close(1000, "Service stopped")
}