Skip to content

Android Activity Integration

Thiago Santos edited this page Aug 15, 2024 · 1 revision

Important

This module is a case of studies that shows how you can extend Kotlin Routing to your context.

The android module provides plugin and handlers to manager starting an Activity.

sourceSets {
    androidMain.dependencies {
        implementation("dev.programadorthi.routing:android:$version")
    }
}

Install Android Activities

Installing the android activities plugin needs to provide the current Context.

val router = routing {
    install(AndroidActivities) {
        context = youCurrentContextInstance
    }
}

Define activity handlers

val router = routing {
    activity(path = "...") {
        Intent(call.currentActivity, Activity::class.java)
    }
}

Starting an Activity

router.call(uri = "...")
// or
router.pushActivity(path = "...")

Replacing an Activity

router.replaceActivity(path = "...")

Replacing all Activities

router.replaceAllActivity(path = "...")

Pop an Activity

router.popActivity()

Starting an Activity for Result

router.pushActivity(path = "...", requestCode = requestCode)

Pop an Activity with Result

router.popActivity(result = Intent())

Starting an Activity with ActivityOptions

router.pushActivity(
    path = "...",
    activityOptions = ActivityOptions.makeBasic().toBundle(),
)

Type-safe Activity route

Create a annotated type

@Resource("/articles")
class Articles()

Install Resources

val router = routing {
    install(Resources)
    install(AndroidActivities) {
        context = youCurrentContextInstance
    }
}

Define activity handlers

val router = routing {
    // ...
    activity<Articles> {
        Intent(call.currentActivity, Activity::class.java)
    }
}

Calling a resource activity

router.pushActivity(resource = Articles())

And, of course, if you need to get a result from an activity just follow the official docs.