Replaced xml navigation with self-handled

This commit is contained in:
Viktor De Pasquale
2019-04-16 19:00:32 +02:00
parent 0e5417a13e
commit ebab126579
13 changed files with 311 additions and 67 deletions
@@ -0,0 +1,82 @@
package com.topjohnwu.magisk.model.navigation
import android.os.Bundle
import androidx.annotation.AnimRes
import androidx.annotation.AnimatorRes
import androidx.fragment.app.Fragment
import com.skoumal.teanity.viewevents.NavigationDslMarker
import com.skoumal.teanity.viewevents.ViewEvent
import kotlin.reflect.KClass
class MagiskNavigationEvent(
val navDirections: MagiskNavDirectionsBuilder,
val navOptions: MagiskNavOptions,
val animOptions: MagiskAnimBuilder
) : ViewEvent() {
companion object {
operator fun invoke(builder: Builder.() -> Unit) = Builder().apply(builder).build()
}
@NavigationDslMarker
class Builder {
private var animOptions: MagiskAnimBuilder = MagiskAnimBuilder()
private var navOptions: MagiskNavOptions = MagiskNavOptions()
private val directionsBuilder = MagiskNavDirectionsBuilder()
fun args(builder: Bundle.() -> Unit) = directionsBuilder.args(builder)
fun navAnim(builder: MagiskAnimBuilder.() -> Unit) {
animOptions = MagiskAnimBuilder().apply(builder)
}
fun navOptions(builder: MagiskNavOptions.() -> Unit) {
navOptions = MagiskNavOptions().apply(builder)
}
fun navDirections(builder: MagiskNavDirectionsBuilder.() -> Unit) {
directionsBuilder.apply(builder)
}
internal fun build() = MagiskNavigationEvent(directionsBuilder, navOptions, animOptions)
}
}
@NavigationDslMarker
class MagiskNavDirectionsBuilder {
var destination: KClass<out Fragment>? = null
var isActivity: Boolean = false
val args: Bundle = Bundle()
fun args(builder: Bundle.() -> Unit) = args.apply(builder)
}
@NavigationDslMarker
class MagiskNavOptions {
var popUpTo: KClass<*>? = null
var inclusive: Boolean = false
var clearTask: Boolean = false
var singleTop: Boolean = false
}
@NavigationDslMarker
class MagiskAnimBuilder {
@AnimRes
@AnimatorRes
var enter = 0
@AnimRes
@AnimatorRes
var exit = 0
@AnimRes
@AnimatorRes
var popEnter = 0
@AnimRes
@AnimatorRes
var popExit = 0
}
@@ -1,34 +1,43 @@
package com.topjohnwu.magisk.model.navigation
import com.skoumal.teanity.viewevents.NavigationEvent
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.ui.hide.MagiskHideFragment
import com.topjohnwu.magisk.ui.home.MagiskFragment
import com.topjohnwu.magisk.ui.log.LogFragment
import com.topjohnwu.magisk.ui.module.ModulesFragment
import com.topjohnwu.magisk.ui.module.ReposFragment
import com.topjohnwu.magisk.ui.settings.SettingsFragment
import com.topjohnwu.magisk.ui.superuser.SuperuserFragment
object Navigation {
fun home() = NavigationEvent {
navDirections { destination = R.id.magiskFragment }
navOptions { popUpTo = R.id.magiskFragment }
fun home() = MagiskNavigationEvent {
navDirections { destination = MagiskFragment::class }
navOptions { popUpTo = MagiskFragment::class }
}
fun superuser() = NavigationEvent {
navDirections { destination = R.id.superuserFragment }
fun superuser() = MagiskNavigationEvent {
navDirections { destination = SuperuserFragment::class }
}
fun modules() = NavigationEvent {
navDirections { destination = R.id.modulesFragment }
fun modules() = MagiskNavigationEvent {
navDirections { destination = ModulesFragment::class }
}
fun repos() = NavigationEvent {
navDirections { destination = R.id.reposFragment }
fun repos() = MagiskNavigationEvent {
navDirections { destination = ReposFragment::class }
}
fun hide() = NavigationEvent {
navDirections { destination = R.id.magiskHideFragment }
fun hide() = MagiskNavigationEvent {
navDirections { destination = MagiskHideFragment::class }
}
fun log() = NavigationEvent {
navDirections { destination = R.id.logFragment }
fun log() = MagiskNavigationEvent {
navDirections { destination = LogFragment::class }
}
fun settings() = MagiskNavigationEvent {
navDirections { destination = SettingsFragment::class }
}
@@ -0,0 +1,13 @@
package com.topjohnwu.magisk.model.navigation
import androidx.fragment.app.Fragment
import kotlin.reflect.KClass
interface Navigator {
//TODO Elevate Fragment to MagiskFragment<*,*> once everything is on board with it
val baseFragments: List<KClass<out Fragment>>
fun navigateTo(event: MagiskNavigationEvent)
}