Files
SyncFlow/app/src/main/kotlin/com/syncflow/ui/navigation/NavGraph.kt
T
amir d6220b7bd7 fix: add edit button, bypass constraints on manual sync
- 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>
2026-05-22 23:32:46 +00:00

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() })
}
}
}