From 17b68441272678980a1f104d2144b5849e7be4af Mon Sep 17 00:00:00 2001 From: Hunter Kehoe Date: Fri, 3 Mar 2023 06:25:40 -0700 Subject: [PATCH] WIP: launch activity using broadcast intent --- .../main/java/io/heckel/ntfy/backup/Backuper.kt | 6 ++++++ app/src/main/java/io/heckel/ntfy/db/Database.kt | 2 ++ .../java/io/heckel/ntfy/msg/BroadcastService.kt | 16 +++++++++++++++- app/src/main/java/io/heckel/ntfy/msg/Message.kt | 2 ++ .../io/heckel/ntfy/msg/NotificationParser.kt | 4 ++++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt b/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt index e0f8f92..be386bd 100644 --- a/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt +++ b/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt @@ -129,6 +129,8 @@ class Backuper(val context: Context) { body = a.body, intent = a.intent, extras = a.extras, + intent_class = a.intent_class, + intent_package = a.intent_package, progress = a.progress, error = a.error ) @@ -256,6 +258,8 @@ class Backuper(val context: Context) { body = a.body, intent = a.intent, extras = a.extras, + intent_class = a.intent_class, + intent_package = a.intent_package, progress = a.progress, error = a.error ) @@ -383,6 +387,8 @@ data class Action( val body: String?, // used in "http" action val intent: String?, // used in "broadcast" action val extras: Map?, // used in "broadcast" action + val intent_class: String?, // used in "broadcast" action + val intent_package: String?, // used in "broadcast" action val progress: Int?, // used to indicate progress in popup val error: String? // used to indicate errors in popup ) diff --git a/app/src/main/java/io/heckel/ntfy/db/Database.kt b/app/src/main/java/io/heckel/ntfy/db/Database.kt index 62daf0a..b83f730 100644 --- a/app/src/main/java/io/heckel/ntfy/db/Database.kt +++ b/app/src/main/java/io/heckel/ntfy/db/Database.kt @@ -113,6 +113,8 @@ data class Action( @ColumnInfo(name = "body") val body: String?, // used in "http" action @ColumnInfo(name = "intent") val intent: String?, // used in "broadcast" action @ColumnInfo(name = "extras") val extras: Map?, // used in "broadcast" action + @ColumnInfo(name = "intent_class") val intent_class: String?, // used in "broadcast" action + @ColumnInfo(name = "intent_package") val intent_package: String?, // used in "broadcast" action @ColumnInfo(name = "progress") val progress: Int?, // used to indicate progress in popup @ColumnInfo(name = "error") val error: String?, // used to indicate errors in popup ) diff --git a/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt b/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt index 6ad65b2..0cc8f80 100644 --- a/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt +++ b/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt @@ -47,10 +47,24 @@ class BroadcastService(private val ctx: Context) { fun sendUserAction(action: Action) { val intent = Intent() intent.action = action.intent ?: USER_ACTION_ACTION + if (action.intent_class != null && action.intent_package != null) { + intent.setClassName(action.intent_package, action.intent_class) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + + Log.d( + TAG, + "Sending user action intent to start activity: ${intent.action} to ${action.intent_package}:${action.intent_class} with extras ${intent.extras}" + ) + ctx.startActivity(intent) + return + } action.extras?.forEach { (key, value) -> intent.putExtra(key, value) } - Log.d(TAG, "Sending user action intent broadcast: ${intent.action} with extras ${intent.extras}") + Log.d( + TAG, + "Sending user action intent broadcast: ${intent.action} with extras ${intent.extras}" + ) ctx.sendBroadcast(intent) } diff --git a/app/src/main/java/io/heckel/ntfy/msg/Message.kt b/app/src/main/java/io/heckel/ntfy/msg/Message.kt index 8de0ab8..f502848 100644 --- a/app/src/main/java/io/heckel/ntfy/msg/Message.kt +++ b/app/src/main/java/io/heckel/ntfy/msg/Message.kt @@ -42,6 +42,8 @@ data class MessageAction( val body: String?, // used in "http" action val intent: String?, // used in "broadcast" action val extras: Map?, // used in "broadcast" action + val intent_class: String?, // used in "broadcast" action + val intent_package: String?, // used in "broadcast" action ) const val MESSAGE_ENCODING_BASE64 = "base64" diff --git a/app/src/main/java/io/heckel/ntfy/msg/NotificationParser.kt b/app/src/main/java/io/heckel/ntfy/msg/NotificationParser.kt index 60b2e3a..3c1aa58 100644 --- a/app/src/main/java/io/heckel/ntfy/msg/NotificationParser.kt +++ b/app/src/main/java/io/heckel/ntfy/msg/NotificationParser.kt @@ -45,6 +45,8 @@ class NotificationParser { body = a.body, intent = a.intent, extras = a.extras, + intent_class = a.intent_class, + intent_package = a.intent_package, progress = null, error = null ) @@ -89,6 +91,8 @@ class NotificationParser { body = a.body, intent = a.intent, extras = a.extras, + intent_class = a.intent_class, + intent_package = a.intent_package, progress = null, error = null )