Skip to content

Commit 0e3c77c

Browse files
authored
Merge pull request #17 from pseudoankit/fix-deeplink
Fix deeplink
2 parents 4504595 + 966f550 commit 0e3c77c

File tree

12 files changed

+57
-51
lines changed

12 files changed

+57
-51
lines changed

app/src/main/java/pseudoankit/droid/tasky/MainActivity.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import kotlinx.coroutines.flow.firstOrNull
2929
import kotlinx.coroutines.runBlocking
3030
import org.koin.android.ext.android.inject
3131
import pseudoankit.droid.core.deeplink.TaskyDeeplink
32-
import pseudoankit.droid.core.logger.TaskyLogger
32+
import pseudoankit.droid.core.logger.logInfo
3333
import pseudoankit.droid.coreui.deeplink.navigateViaDeepLink
3434
import pseudoankit.droid.coreui.util.extension.clearStack
3535
import pseudoankit.droid.navigation.navgraph.mainNavGraph
@@ -52,8 +52,6 @@ internal class MainActivity : ComponentActivity() {
5252
splashScreen.show()
5353
super.onCreate(savedInstanceState)
5454

55-
TaskyLogger.info("intent = $intent")
56-
5755
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
5856

5957
setContent {
@@ -109,7 +107,7 @@ internal class MainActivity : ComponentActivity() {
109107

110108
val launcher = rememberPermissionState(permission = Manifest.permission.POST_NOTIFICATIONS)
111109

112-
TaskyLogger.info("Notification Permission Status", launcher.taskyStatus.name)
110+
logInfo("Notification Permission Status", launcher.taskyStatus.name)
113111

114112
LaunchedEffect(key1 = Unit) {
115113
launcher.launchPermissionRequest()
@@ -129,8 +127,4 @@ internal class MainActivity : ComponentActivity() {
129127
}
130128
}
131129
}
132-
133-
override fun onDestroy() {
134-
super.onDestroy()
135-
}
136130
}

core/core-ui/src/main/java/pseudoankit/droid/coreui/deeplink/DeepLinkReciever.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package pseudoankit.droid.coreui.deeplink
22

3+
import android.net.Uri
34
import androidx.navigation.NavController
4-
import pseudoankit.droid.core.deeplink.TaskyDeeplink
5-
import pseudoankit.droid.core.logger.TaskyLogger
5+
import pseudoankit.droid.core.logger.logError
66

7-
fun NavController.navigateViaDeepLink(deepLink: String) = try {
8-
val internalRoute = TaskyDeeplink.mapToInternalRoute(deepLink)
9-
navigate(internalRoute)
7+
fun NavController.navigateViaDeepLink(deepLink: String) {
8+
navigateViaDeepLink(Uri.parse(deepLink))
9+
}
10+
11+
fun NavController.navigateViaDeepLink(uri: Uri?) = try {
12+
navigate(uri!!)
1013
} catch (e: IllegalArgumentException) {
1114
e.printStackTrace()
12-
TaskyLogger.error("deeplink [$deepLink] failed with error msg = ${e.message}")
15+
logError("deeplink [${uri}] failed with error msg ${e.message}")
1316
}
14-

core/core-ui/src/main/java/pseudoankit/droid/coreui/util/extension/ContextExtension.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,14 @@ import android.content.Intent
77
import android.net.Uri
88
import android.provider.Settings
99
import android.widget.Toast
10+
import pseudoankit.droid.core.deeplink.DeepLinkUtil
1011
import pseudoankit.droid.core.util.TextResource
1112
import pseudoankit.droid.core.util.TextResource.Companion.asString
1213

14+
fun Context.openDeeplink(deeplink: String) {
15+
startActivity(DeepLinkUtil.createDeeplinkIntent(deeplink))
16+
}
17+
1318
fun Context.finish() {
1419
(this as? Activity)?.finish()
1520
}

core/core/src/main/java/pseudoankit/droid/core/coroutine/CoroutineUtil.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import kotlinx.coroutines.Job
66
import kotlinx.coroutines.launch
77
import kotlin.coroutines.CoroutineContext
88

9-
fun launch(
9+
fun launchCoroutine(
1010
dispatcher: CoroutineContext = Dispatchers.IO,
1111
block: suspend CoroutineScope.() -> Unit
1212
): Job {

core/core/src/main/java/pseudoankit/droid/core/deeplink/TaskyDeeplink.kt

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,16 @@ package pseudoankit.droid.core.deeplink
55
* Preferred way to create deeplink is via [pseudoankit.droid.navigation.deeplink.DeepLinkProvider]
66
*/
77
object TaskyDeeplink {
8-
private const val SCHEME = "tasky://"
9-
10-
private object Host {
11-
const val login = "login"
12-
const val home = "home"
13-
const val reminder = "reminder"
14-
const val agendaSelection = "agendaSelection"
15-
const val widget = "widget"
16-
}
17-
188
object Path {
199
object Reminder {
20-
const val ACTION = "{action}"
10+
const val action = "{action}"
2111
}
2212
}
2313

24-
const val login = "${SCHEME}${Host.login}"
25-
const val home = "${SCHEME}${Host.home}"
26-
const val reminder = "${SCHEME}${Host.reminder}/${Path.Reminder.ACTION}"
27-
const val agendaSelection = "${SCHEME}${Host.agendaSelection}"
28-
const val fromWidget = "${SCHEME}${Host.widget}"
29-
30-
fun mapToInternalRoute(externalLink: String) = externalLink.run {
31-
when {
32-
contains(Host.home) -> "home_screen"
33-
contains(Host.login) -> "login_screen"
34-
contains(Host.reminder) -> {
35-
replace(SCHEME + Host.reminder, "reminder_screen")
36-
}
37-
contains(Host.agendaSelection) -> "agenda_items_screen"
38-
else -> ""
39-
}
40-
}
14+
const val login = "tasky://login"
15+
const val registration = "tasky://registration"
16+
const val home = "tasky://home"
17+
const val reminder = "tasky://reminder/${Path.Reminder.action}"
18+
const val agendaSelection = "tasky://agendaSelection"
19+
const val profile = "tasky://profile"
4120
}

core/core/src/main/java/pseudoankit/droid/core/logger/TaskyLogger.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,11 @@ object TaskyLogger {
1414
Log.e("$INTERNAL_TAG $tag", value.joinToString(", "))
1515
}
1616
}
17+
18+
fun logInfo(vararg value: Any, tag: String = "") {
19+
TaskyLogger.info(*value, tag)
20+
}
21+
22+
fun logError(vararg value: Any, tag: String = "") {
23+
TaskyLogger.error(*value, tag)
24+
}

core/core/src/main/java/pseudoankit/droid/core/util/extension/CollectionExtension.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,5 @@ import kotlinx.collections.immutable.ImmutableList
44
import kotlinx.collections.immutable.toImmutableList
55

66
inline fun <T, R> Iterable<T>.mapToImmutableList(transform: (T) -> R): ImmutableList<R> {
7-
return map {
8-
transform(it)
9-
}.toImmutableList()
7+
return map(transform).toImmutableList()
108
}

core/navigation/src/main/java/pseudoankit/droid/navigation/deeplink/DeepLinkProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ internal class DeepLinkProvider : ReminderDeepLinkProvider, HomeDeepLinkProvider
2626

2727
override fun reminderScreenRoute(action: AgendaTypes.Action): String {
2828
return TaskyDeeplink.reminder.replace(
29-
TaskyDeeplink.Path.Reminder.ACTION,
29+
TaskyDeeplink.Path.Reminder.action,
3030
ActionNavTypeSerializer.toRouteString(action)
3131
)
3232
}

core/preferences-manager/src/main/java/pseudoankit/droid/preferencesmanager/BasePreference.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.datastore.preferences.core.edit
66
import androidx.datastore.preferences.core.emptyPreferences
77
import kotlinx.coroutines.flow.Flow
88
import kotlinx.coroutines.flow.catch
9+
import kotlinx.coroutines.flow.distinctUntilChanged
910
import kotlinx.coroutines.flow.firstOrNull
1011
import kotlinx.coroutines.flow.map
1112

@@ -31,5 +32,6 @@ abstract class BasePreference(
3132
.map { prefs ->
3233
prefs[key]
3334
}
35+
.distinctUntilChanged()
3436
}
3537
}

feature/authentication/src/main/java/pseudoankit/droid/authentication/presentation/registration/RegistrationScreen.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.compose.runtime.LaunchedEffect
1010
import androidx.compose.ui.Modifier
1111
import androidx.compose.ui.platform.LocalContext
1212
import androidx.compose.ui.unit.dp
13+
import com.ramcosta.composedestinations.annotation.DeepLink
1314
import com.ramcosta.composedestinations.annotation.Destination
1415
import kotlinx.coroutines.flow.collectLatest
1516
import org.koin.androidx.compose.getViewModel
@@ -18,6 +19,7 @@ import pseudoankit.droid.authentication.di.RegistrationModule
1819
import pseudoankit.droid.authentication.navigator.AuthNavigator
1920
import pseudoankit.droid.authentication.presentation.registration.ui.RegistrationScreenComponents
2021
import pseudoankit.droid.authentication.presentation.registration.ui.RegistrationScreenComponents.RegistrationInputFields
22+
import pseudoankit.droid.core.deeplink.TaskyDeeplink
2123
import pseudoankit.droid.coreui.koin.load
2224
import pseudoankit.droid.coreui.util.extension.showToast
2325
import pseudoankit.droid.unify.component.button.UnifyButton
@@ -26,7 +28,11 @@ import pseudoankit.droid.unify.screen.UnifyScreen
2628
import pseudoankit.droid.unify.screen.UnifyScreenConfig
2729
import pseudoankit.droid.unify.token.UnifyDimens
2830

29-
@Destination
31+
@Destination(
32+
deepLinks = [
33+
DeepLink(uriPattern = TaskyDeeplink.registration)
34+
]
35+
)
3036
@Composable
3137
internal fun RegistrationScreen(navigator: AuthNavigator) = RegistrationModule.load {
3238
val viewModel: RegistrationViewModel = getViewModel()

0 commit comments

Comments
 (0)