diff options
Diffstat (limited to 'app/src/main/java/sh/lajo/buddy/WebSocketService.kt')
| -rw-r--r-- | app/src/main/java/sh/lajo/buddy/WebSocketService.kt | 68 |
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") } |