Skip to content

Instantly share code, notes, and snippets.

View MkhytarMkhoian's full-sized avatar
🏠
Working from home

Mkhytar Mkhoian MkhytarMkhoian

🏠
Working from home
View GitHub Profile
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Supported schemes -->
<data android:scheme="moove" />
<!-- Corporate subdomains -->
class MainActivityViewModel(
exceptionHandler: ExceptionHandler,
private val getDeeplinkUseCase: GetDeeplinkUseCase,
) : ViewModel(), ContainerHost<MainActivityState, MainActivityEffect> {
/* ... */
fun handleIntent(intent: Intent?) = intent {
if (intent == null) return@intent
class MainActivity : AppCompatActivity() {
private val mainViewModel: MainActivityViewModel by viewModel()
/* ... */
override fun onCreate(savedInstanceState: Bundle?) {
/* ... */
mainViewModel.handleIntent(intent)
}
val mainModule = module {
factory {
AppNavigator(navController = get())
} binds arrayOf(
ScreenNavigator::class,
GlobalAppNavigator::class,
TicketsNavigator::class,
)
}
class AppNavigator(
private val navController: NavController,
) : GlobalAppNavigator {
override fun goFares(ryderId: String) {
navController.navigateSafely(HomeFragmentDirections.actionHomeFragmentToTicketsFlow())
navController.navigateSafely(
RyderListFragmentDirections.actionRydersFragmentToFareListFragment(ryderId = ryderId)
)
}
interface GlobalAppNavigator : ScreenNavigator, TicketsNavigator {
fun goHome()
}
interface TicketsNavigator {
fun goFares(ryderId: String)
fun goToConfirmation(ryderId: String, fareDescription: String, farePrice: Float)
}
class DeepLinkAppNavigator(
private val globalAppNavigator: GlobalAppNavigator,
private val ticketsNavigator: TicketsNavigator,
) : DeepLinkNavigator {
override fun navigateTo(link: DeepLink) {
when (link) {
is AppDeepLink.FareList -> ticketsNavigator.goFares(link.ryderId)
is AppDeepLink.Confirmation -> {
ticketsNavigator.goFares(link.ryderId)
ticketsNavigator.goToConfirmation(
interface DeepLinkNavigator {
fun navigateTo(link: DeepLink)
}
class GetDeeplinkUseCase(
private val deeplinkRepository: DeeplinkRepository,
private val getDynamicLinkUseCase: GetDynamicLinkUseCase,
) {
suspend operator fun invoke(uri: String): DeepLink {
val parsedUri = getDynamicLinkUseCase(uri) ?: uri
val deepLink = deeplinkRepository.getDeepLink(parsedUri)
return deepLink
}
}