Coverage Summary for Class: BackStackNavigatorImpl (dev.skymansandy.wiretap.navigation.impl)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| BackStackNavigatorImpl |
100%
(1/1)
|
100%
(8/8)
|
75%
(9/12)
|
100%
(14/14)
|
97.1%
(102/105)
|
/*
* Copyright (c) 2026 skymansandy. All rights reserved.
*/
package dev.skymansandy.wiretap.navigation.impl
import androidx.navigation3.runtime.NavBackStack
import androidx.navigation3.runtime.NavKey
import dev.skymansandy.wiretap.navigation.api.WiretapNavigator
import dev.skymansandy.wiretap.navigation.api.WiretapScreen
internal class BackStackNavigatorImpl(
private val backStack: NavBackStack<NavKey>,
private val onExit: () -> Unit = {},
) : WiretapNavigator {
override fun push(screen: WiretapScreen) {
backStack.add(screen)
}
override fun pushDetailPane(screen: WiretapScreen) {
popUntil { it is WiretapScreen.ListPane }
backStack.add(screen)
}
override fun clearDetailPane() {
popUntil { it is WiretapScreen.ListPane }
}
override fun pop() {
if (backStack.size > 1) backStack.removeAt(backStack.lastIndex)
}
override fun popUntil(predicate: (WiretapScreen) -> Boolean) {
while (backStack.size > 1) {
val last = backStack.lastOrNull() as? WiretapScreen ?: break
if (predicate(last)) break
backStack.removeAt(backStack.lastIndex)
}
}
override fun replaceTop(screen: WiretapScreen) {
if (backStack.isNotEmpty()) backStack.removeAt(backStack.lastIndex)
backStack.add(screen)
}
override fun exit() = onExit()
}