d6220b7bd7
- Add Edit icon to PairDetailScreen top bar - Wire onEdit callback through NavGraph to AddPairScreen with pairId - Manual "Sync now" (home card + detail screen) now ignores wifiOnly and chargingOnly constraints so it runs immediately on tap Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
66 lines
2.5 KiB
Kotlin
66 lines
2.5 KiB
Kotlin
package com.syncflow.ui.navigation
|
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.navigation.NavHostController
|
|
import androidx.navigation.NavType
|
|
import androidx.navigation.compose.NavHost
|
|
import androidx.navigation.compose.composable
|
|
import androidx.navigation.navArgument
|
|
import com.syncflow.ui.addpair.AddPairScreen
|
|
import com.syncflow.ui.auth.AccountSetupScreen
|
|
import com.syncflow.ui.conflict.ConflictScreen
|
|
import com.syncflow.ui.main.MainShell
|
|
import com.syncflow.ui.pairdetail.PairDetailScreen
|
|
|
|
sealed class Screen(val route: String) {
|
|
object Main : Screen("main")
|
|
object AddPair : Screen("add_pair?pairId={pairId}") {
|
|
fun route(pairId: Long? = null) = if (pairId != null) "add_pair?pairId=$pairId" else "add_pair"
|
|
}
|
|
object PairDetail : Screen("pair/{pairId}") {
|
|
fun route(pairId: Long) = "pair/$pairId"
|
|
}
|
|
object Conflicts : Screen("conflicts/{pairId}") {
|
|
fun route(pairId: Long) = "conflicts/$pairId"
|
|
}
|
|
object AddAccount : Screen("add_account")
|
|
}
|
|
|
|
@Composable
|
|
fun SyncFlowNavGraph(navController: NavHostController) {
|
|
NavHost(navController = navController, startDestination = Screen.Main.route) {
|
|
composable(Screen.Main.route) {
|
|
MainShell(
|
|
onAddPair = { navController.navigate(Screen.AddPair.route()) },
|
|
onPairClick = { id -> navController.navigate(Screen.PairDetail.route(id)) },
|
|
onAddAccount = { navController.navigate(Screen.AddAccount.route) },
|
|
)
|
|
}
|
|
composable(
|
|
route = "add_pair?pairId={pairId}",
|
|
arguments = listOf(navArgument("pairId") { type = NavType.LongType; defaultValue = -1L }),
|
|
) {
|
|
AddPairScreen(onDone = { navController.popBackStack() })
|
|
}
|
|
composable(
|
|
route = "pair/{pairId}",
|
|
arguments = listOf(navArgument("pairId") { type = NavType.LongType }),
|
|
) {
|
|
PairDetailScreen(
|
|
onBack = { navController.popBackStack() },
|
|
onEdit = { id -> navController.navigate(Screen.AddPair.route(id)) },
|
|
onConflicts = { id -> navController.navigate(Screen.Conflicts.route(id)) },
|
|
)
|
|
}
|
|
composable(
|
|
route = "conflicts/{pairId}",
|
|
arguments = listOf(navArgument("pairId") { type = NavType.LongType }),
|
|
) {
|
|
ConflictScreen(onBack = { navController.popBackStack() })
|
|
}
|
|
composable(Screen.AddAccount.route) {
|
|
AccountSetupScreen(onDone = { navController.popBackStack() })
|
|
}
|
|
}
|
|
}
|