Zaki Shaikh
03/24/2023, 2:22 PMcurioustechizen
03/24/2023, 2:33 PMbackQueue
is private: https://issuetracker.google.com/issues/217465473Ian Lake
03/24/2023, 3:08 PMvide
03/24/2023, 4:17 PMIan Lake
03/24/2023, 4:20 PMIan Lake
03/24/2023, 4:21 PMnavController.graph.id
has always worked toovide
03/24/2023, 4:23 PMEtienne
09/06/2023, 7:57 AMbackQueue
is actually needed in order to logcat the incoherent and erroneous mess named android navigation component.Etienne
09/06/2023, 8:08 AMbackQueue
became private - any idea how to not throw away the bellow coding?
It was valuable to debug android nav components...
fun NavController.logBackStack(tag: String? = null, previous: List<NavBackStackEntry>? = null, logger: Logger): List<NavBackStackEntry> {
logger.run {
val spacer = " "
v(" ")
v(" -------- -------- -------- -------- -------- -------- -------- --------")
v(" ")
i(" -------- -------- Backstack status ${tag ?: ""} -------- --------")
v("Current entry: ${currentBackStackEntry?.logStr() ?: "null"}")
v("Previous entry: ${previousBackStackEntry?.logStr() ?: "null"}")
v(" ")
i("Current Backstack:")
backQueue.forEachIndexed { index, backstackEntry ->
d(backstackEntry.logStr(indent = spacer + spacer, tag = "[$index]"))
}
d(" ")
previous?.let {
v(" ")
i("Previous Backstack:")
it.forEachIndexed { index, backstackEntry ->
v(backstackEntry.logStr(indent = spacer + spacer, tag = "[$index]"))
}
}
v(" ")
i(" -------- -------- end -------- --------")
v(" ")
v(" -------- -------- -------- -------- -------- -------- -------- --------")
v(" ")
}
return backQueue.toImmutableList()
}
fun NavBackStackEntry.logStr(indent: String = "", tag: String? = null): String {
var s = "" + indent
tag?.let { s += " $it " }
s += ">> " + destination.logStr(indent)
return s
}
fun NavDestination.logStr(indent: String = "", tag: String? = null): String {
var s = "" + indent
tag?.let { s += it }
s += "[${this::class.simpleName}] : ${label ?: displayName} dest id $id"
return s
}
suspend fun NavController.logBackStackChanges(
logger: Logger = NavigationParams::class.inject().androidLogger(),
): Unit = withContext(Dispatchers.Main) {
var counter = 0
var previous: List<NavBackStackEntry>? = null
with(logger) {
i("Backstack-entry monitoring started...")
launch {
currentBackStackEntryFlow.collectLatest {
d("Backstack entry delta (°$counter) >> ${it.logStr()}")
previous = logBackStack("Monitoring (°$counter)", previous, logger)
counter++
}
}
}
}