handle urls in notifications. Fixes #1589

This commit is contained in:
Phillip Thelen 2021-07-13 09:57:44 +02:00
parent bbe5bb005c
commit de0a6ec7c4
2 changed files with 37 additions and 4 deletions

View file

@ -1,8 +1,12 @@
package com.habitrpg.android.habitica.helpers
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.navigation.NavController
import androidx.navigation.NavDeepLink
import androidx.navigation.NavDeepLinkRequest
import androidx.navigation.NavDirections
import java.lang.ref.WeakReference
import java.util.*
@ -11,17 +15,20 @@ import kotlin.math.abs
object MainNavigationController {
var lastNavigation: Date? = null
var navController: WeakReference<NavController>? = null
private var controllerReference: WeakReference<NavController>? = null
private val navController: NavController?
get() { return controllerReference?.get() }
fun setup(navController: NavController) {
this.navController = WeakReference(navController)
this.controllerReference = WeakReference(navController)
}
fun navigate(transactionId: Int, args: Bundle? = null) {
if (abs((lastNavigation?.time ?: 0) - Date().time) > 500) {
lastNavigation = Date()
try {
navController?.get()?.navigate(transactionId, args)
navController?.navigate(transactionId, args)
} catch (e: IllegalArgumentException) {
Log.e("Main Navigation", e.localizedMessage ?: "")
} catch (error: Exception) {
@ -34,8 +41,29 @@ object MainNavigationController {
if (abs((lastNavigation?.time ?: 0) - Date().time) > 500) {
lastNavigation = Date()
try {
navController?.get()?.navigate(directions)
navController?.navigate(directions)
} catch (_: IllegalArgumentException) {}
}
}
fun navigate(uriString: String) {
val uri = Uri.parse(uriString)
navigate(uri)
}
fun navigate(uri: Uri) {
if (navController?.graph?.hasDeepLink(uri) == true) {
navController?.navigate(uri)
}
}
fun navigate(request: NavDeepLinkRequest) {
if (navController?.graph?.hasDeepLink(request) == true) {
navController?.navigate(request)
}
}
fun handle(deeplink: Intent) {
navController?.handleDeepLink(deeplink)
}
}

View file

@ -26,6 +26,11 @@ class NotificationOpenHandler {
PushNotificationManager.CHAT_MENTION_NOTIFICATION_KEY -> handleChatMessage(intent.getStringExtra("type"), intent.getStringExtra("groupID"))
PushNotificationManager.GROUP_ACTIVITY_NOTIFICATION_KEY -> handleChatMessage(intent.getStringExtra("type"), intent.getStringExtra("groupID"))
PushNotificationManager.G1G1_PROMO_KEY -> openGiftOneGetOneInfoScreen()
else -> {
if (intent.hasExtra("openURL")) {
MainNavigationController.navigate(intent.getStringExtra("openURL"))
}
}
}
}
}