Skip to content

Commit

Permalink
Make NavigationEvent generic, too
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanmoelter committed May 2, 2021
1 parent b6e0f97 commit b4a4d94
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import android.view.View
import com.wealthfront.magellan.HistoryRewriter
import com.wealthfront.magellan.NavigationType
import com.wealthfront.magellan.init.getDefaultTransition
Expand All @@ -8,7 +9,7 @@ import java.util.ArrayDeque
import java.util.Deque

internal fun HistoryRewriter.rewriteHistoryWithNavigationEvents(
oldBackStack: Deque<NavigationEvent>,
oldBackStack: Deque<NavigationEvent<View>>,
magellanTransition: MagellanTransition? = null,
navigationType: NavigationType? = null
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ import java.util.Deque
@OpenForMocking
public class Navigator internal constructor(
container: () -> ScreenContainer,
) : Navigator, LifecycleAwareComponent() {
) : Navigator<View>, LifecycleAwareComponent() {

private val delegate by lifecycle(NavigationDelegate(container))

override val backStack: List<NavigationEvent>
override val backStack: List<NavigationEvent<View>>
get() = delegate.backStack.toList()

internal var currentNavigableProvider: CurrentNavigableProvider? = null
Expand All @@ -43,13 +43,13 @@ public class Navigator internal constructor(
}
}

public fun navigate(backStackOperation: (Deque<NavigationEvent>) -> NavigationEvent) {
public fun navigate(backStackOperation: (Deque<NavigationEvent<View>>) -> NavigationEvent<View>) {
navigate(FORWARD, backStackOperation)
}

public fun navigate(
direction: Direction,
backStackOperation: (Deque<NavigationEvent>) -> NavigationEvent
backStackOperation: (Deque<NavigationEvent<View>>) -> NavigationEvent<View>
) {
delegate.navigate(direction, backStackOperation)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.wealthfront.magellan.core

import android.view.View

public interface Displayable<ViewType : Any> {

public val view: ViewType?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ import java.util.Deque
@OpenForMocking
public class LinearNavigator internal constructor(
container: () -> ScreenContainer
) : Navigator, LifecycleAwareComponent() {
) : Navigator<View>, LifecycleAwareComponent() {

private val delegate by lifecycle(NavigationDelegate(container))

override val backStack: List<NavigationEvent>
override val backStack: List<NavigationEvent<View>>
get() = delegate.backStack.toList()

public fun goTo(navigable: Navigable<View>, overrideMagellanTransition: MagellanTransition? = null) {
Expand All @@ -30,7 +30,7 @@ public class LinearNavigator internal constructor(

public fun navigate(
direction: Direction,
backStackOperation: (Deque<NavigationEvent>) -> NavigationEvent
backStackOperation: (Deque<NavigationEvent<View>>) -> NavigationEvent<View>
) {
delegate.navigate(direction, backStackOperation)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class NavigationDelegate(

private var containerView: ScreenContainer? = null
private val navigationPropagator = NavigationPropagator
public val backStack: Deque<NavigationEvent> = ArrayDeque()
public val backStack: Deque<NavigationEvent<View>> = ArrayDeque()

private val lifecycleLimiter by lifecycle(LifecycleLimiter())

Expand Down Expand Up @@ -97,7 +97,7 @@ public class NavigationDelegate(

public fun navigate(
direction: Direction,
backStackOperation: (Deque<NavigationEvent>) -> NavigationEvent
backStackOperation: (Deque<NavigationEvent<View>>) -> NavigationEvent<View>
) {
containerView?.setInterceptTouchEvents(true)
navigationPropagator.beforeNavigation()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.wealthfront.magellan.navigation

import android.view.View
import com.wealthfront.magellan.transitions.MagellanTransition
import java.util.Deque

public data class NavigationEvent(
val navigable: NavigableCompat<View>,
public data class NavigationEvent<ViewType : Any>(
val navigable: NavigableCompat<ViewType>,
val magellanTransition: MagellanTransition
)

internal fun Deque<NavigationEvent>.navigables(): List<NavigableCompat<View>> {
internal fun <ViewType : Any> Deque<NavigationEvent<ViewType>>.navigables(): List<NavigableCompat<ViewType>> {
return map { it.navigable }
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ public class NavigationTraverser(private val root: NavigableCompat<*>) {
public data class NavigationNode(val value: NavigableCompat<*>, var children: List<NavigationNode>) {

val hasBackstack: Boolean
get() = (value as? LifecycleOwner)?.children?.mapNotNull { it as? Navigator }?.isNotEmpty()
get() = (value as? LifecycleOwner)?.children?.mapNotNull { it as? Navigator<*> }?.isNotEmpty()
?: false

public fun getBackstack(): Deque<NavigationEvent> {
val backStackDeepCopy = ArrayDeque<NavigationEvent>()
(value as LifecycleOwner).children.mapNotNull { it as? Navigator }.first().backStack.toList()
public fun getBackstack(): Deque<NavigationEvent<*>> {
val backStackDeepCopy = ArrayDeque<NavigationEvent<*>>()
(value as LifecycleOwner).children.mapNotNull { it as? Navigator<*> }.first().backStack.toList()
.toCollection(backStackDeepCopy)
return backStackDeepCopy
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.wealthfront.magellan.navigation

public interface Navigator {
public interface Navigator<ViewType : Any> {

public val backStack: List<NavigationEvent>
public val backStack: List<NavigationEvent<ViewType>>

public fun goBack(): Boolean
}

0 comments on commit b4a4d94

Please sign in to comment.