From 65fd1cacdba72aad929c852b016dff1e361dfeb3 Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Sun, 24 Nov 2019 11:48:53 -0500 Subject: [PATCH] Parse body param in uri query Fixes 1321 --- .../feature/compose/ComposeActivityModule.kt | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivityModule.kt b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivityModule.kt index 5d7b789c..dcf9af1f 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivityModule.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivityModule.kt @@ -44,23 +44,12 @@ class ComposeActivityModule { @Provides @Named("addresses") fun provideAddresses(activity: ComposeActivity): List { - activity.intent.data?.let { - val data = it.toString() - var address = when { - it.scheme?.startsWith("smsto") == true -> data.replace("smsto:", "") - it.scheme?.startsWith("mmsto") == true -> data.replace("mmsto:", "") - it.scheme?.startsWith("sms") == true -> data.replace("sms:", "") - it.scheme?.startsWith("mms") == true -> data.replace("mms:", "") - else -> "" - } - - // The dialer app on Oreo sends a URL encoded string, make sure to decode it - if (address.contains('%')) address = URLDecoder.decode(address, "UTF-8") - - return address.split(",") - } - - return listOf() + return activity.intent + ?.decodedDataString() + ?.substringAfter(':') // Remove scheme + ?.replaceAfter("?", "") // Remove query + ?.split(",") + ?: listOf() } @Provides @@ -68,6 +57,11 @@ class ComposeActivityModule { fun provideSharedText(activity: ComposeActivity): String { return activity.intent.extras?.getString(Intent.EXTRA_TEXT) ?: activity.intent.extras?.getString("sms_body") + ?: activity.intent?.decodedDataString() + ?.substringAfter('?') // Query string + ?.split(',') + ?.firstOrNull { param -> param.startsWith("body") } + ?.substringAfter('=') ?: "" } @@ -85,4 +79,13 @@ class ComposeActivityModule { @ViewModelKey(ComposeViewModel::class) fun provideComposeViewModel(viewModel: ComposeViewModel): ViewModel = viewModel + // The dialer app on Oreo sends a URL encoded string, make sure to decode it + private fun Intent.decodedDataString(): String? { + val data = data?.toString() + if (data?.contains('%') == true) { + return URLDecoder.decode(data, "UTF-8") + } + return data + } + } \ No newline at end of file