Skip to content
This repository was archived by the owner on Mar 26, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -61,46 +61,54 @@ open class ActivityNavigator(protected val activity: FragmentActivity) : Navigat
startActivityInternal(Intent(action, uri))
}

override fun startActivity(activityClass: Class<out Activity>, adaptIntentFun: (Intent.() -> Unit)?) {
startActivityInternal(activityClass, null, adaptIntentFun)
override fun startActivity(activityClass: Class<out Activity>) {
startActivityInternal(activityClass, null)
}

override fun startActivityForResult(activityClass: Class<out Activity>, requestCode: Int, adaptIntentFun: (Intent.() -> Unit)?) {
startActivityInternal(activityClass, requestCode, adaptIntentFun)
override fun startActivityForResult(intent: Intent, requestCode: Int) {
startActivityInternal(intent, requestCode)
}

override fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: Pair<View, String>, adaptIntentFun: (Intent.() -> Unit)?) {
startActivityWithTransitionInternal(activityClass, transitionViews, adaptIntentFun)
override fun startActivityForResult(activityClass: Class<out Activity>, requestCode: Int) {
startActivityInternal(activityClass, requestCode)
}

override fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: View, adaptIntentFun: (Intent.() -> Unit)?) {
val mapped = transitionViews.map {
val transitionName = ViewCompat.getTransitionName(it) ?: throw IllegalArgumentException("View with ID \"${it.resources.getResourceEntryName(it.id)}\" must have a transitionName")
Pair(it, transitionName)
}.toTypedArray()
override fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: Pair<View, String>) {
startActivityWithTransitionInternal(Intent(activity, activityClass), transitionViews)
}

startActivityWithTransitionInternal(activityClass, mapped, adaptIntentFun)
override fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: View) {
startActivityWithTransition(Intent(activity, activityClass), *transitionViews)
}

private fun startActivityWithTransitionInternal(activityClass: Class<out Activity>, transitionViews: Array<out Pair<View, String>>, adaptIntentFun: (Intent.() -> Unit)?) {
val intent = Intent(activity, activityClass)
override fun startActivityWithTransition(intent: Intent, vararg transitionViews: Pair<View, String>) {
startActivityWithTransitionInternal(intent, transitionViews)
}

override fun startActivityWithTransition(intent: Intent, vararg transitionViews: View) {
val mapped = transitionViews.map {
val transitionName = ViewCompat.getTransitionName(it) ?: throw IllegalArgumentException("View with ID \"${it.resources.getResourceEntryName(it.id)}\" must have a transitionName")
Pair(it, transitionName)
}.toTypedArray()

startActivityWithTransitionInternal(intent, mapped)
}

private fun startActivityWithTransitionInternal(intent: Intent, transitionViews: Array<out Pair<View, String>>) {
val mapped = transitionViews
.map { android.support.v4.util.Pair(it.first, it.second) }
.toTypedArray()
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, *mapped).toBundle()

startActivityInternal(intent, null, adaptIntentFun, options)
startActivityInternal(intent, null, options)
}

private fun startActivityInternal(activityClass: Class<out Activity>, requestCode: Int?, adaptIntentFun: (Intent.() -> Unit)?) {
private fun startActivityInternal(activityClass: Class<out Activity>, requestCode: Int?) {
val intent = Intent(activity, activityClass)
startActivityInternal(intent, requestCode, adaptIntentFun)
startActivityInternal(intent, requestCode)
}

protected open fun startActivityInternal(intent: Intent, requestCode: Int? = null, adaptIntentFun: (Intent.() -> Unit)? = null, options: Bundle? = null) {
adaptIntentFun?.invoke(intent)

protected open fun startActivityInternal(intent: Intent, requestCode: Int? = null, options: Bundle? = null) {
if (requestCode != null) {
ActivityCompat.startActivityForResult(activity, intent, requestCode, options)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,7 @@ class ChildFragmentNavigator(private val fragment: Fragment) : ActivityNavigator
override val fragmentManager: FragmentManager? get() = fragment.fragmentManager
private val childFragmentManager get() = fragment.childFragmentManager

override fun startActivityInternal(intent: Intent, requestCode: Int?, adaptIntentFun: (Intent.() -> Unit)?, options: Bundle?) {
adaptIntentFun?.invoke(intent)

override fun startActivityInternal(intent: Intent, requestCode: Int?, options: Bundle?) {
if (requestCode != null) {
fragment.startActivityForResult(intent, requestCode, options)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,15 @@ interface Navigator {

fun startActivity(intent: Intent)
fun startActivity(action: String, uri: Uri? = null)
fun startActivity(activityClass: Class<out Activity>, adaptIntentFun: (Intent.() -> Unit)? = null)
fun startActivity(activityClass: Class<out Activity>)

fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: Pair<View, String>, adaptIntentFun: (Intent.() -> Unit)? = null)
fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: View, adaptIntentFun: (Intent.() -> Unit)? = null)
fun startActivityWithTransition(intent: Intent, vararg transitionViews: Pair<View, String>)
fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: Pair<View, String>)
fun startActivityWithTransition(intent: Intent, vararg transitionViews: View)
fun startActivityWithTransition(activityClass: Class<out Activity>, vararg transitionViews: View)

fun startActivityForResult(activityClass: Class<out Activity>, requestCode: Int, adaptIntentFun: (Intent.() -> Unit)? = null)
fun startActivityForResult(intent: Intent, requestCode: Int)
fun startActivityForResult(activityClass: Class<out Activity>, requestCode: Int)

fun <T : DialogFragment> showDialogFragment(dialog: T, fragmentTag: String = dialog::class.java.name)

Expand Down