Krouter
A lightweight Android activity router written in Kotlin.
Basic usage
// anywhere in the app, preferably on application creation val krouter = Krouter.from(context, hashMapOf(
"user/:id/likes" to UserLikesActivity::class.java )) // anywhere that can access the val above krouter.start("user/42/likes") // this will start UserLikesActivity // inside UserLikesActivity, possibly inside onCreate() val id: Int = intent.getIntExtra("id", 0) // 42
Adding more extras
In order to add more extras to the intent, one can do the following:
krouter.getRouter("user/42/likes")!!
.withIntent {
it.putExtra("name", "John")
}
.start()
Starting for result
In order to set a request code:
krouter.getRouter("user/42/likes")!!
.startForResult(activity, 123) // 123 is the request code
Advanced routing configuration
It is possible to instantiate Krouter establishing a regular expression that the parameter must specify:
val krouter = Krouter(context, hashMapOf(
Route("user/:id/likes", hashMapOf(
"id" to Schema("^[0-9]{
2
}
$")
)) to UserLikesActivity::class.java )
There are default implementations for integer, float, double, long, char:
// the constants must be statically imported from Schema.Type Route("user/:id/likes", hashMapOf("id" to Schema(INT))) Route("my/balance/:value", hashMapOf("value" to Schema(FLOAT)))
If no schema is defined, Krouter will try to infer the type accordingly. If no schema is suitable, the param will be coerced to a String.
Installation
Add the dependency:
dependencies {
compile 'com.github.denisidoro.github:krouter:0.0.2'
}
Best practices
- Use dependency injection: Krouter was idealized to be used in conjunction with Dagger.
- Compose routers: say you have an activity flow in your app that's only accessible to users who are admin, for instance. If you don't want to deal with a huge routing map that has routes all flows, then create multiple Krouter instances.
val globalKrouter
and@AdminScope val adminKrouter
, for example.