diff --git a/app/src/main/kotlin/net/metacircular/engpad/ui/navigation/NavGraph.kt b/app/src/main/kotlin/net/metacircular/engpad/ui/navigation/NavGraph.kt index f3e69c2..58c8978 100644 --- a/app/src/main/kotlin/net/metacircular/engpad/ui/navigation/NavGraph.kt +++ b/app/src/main/kotlin/net/metacircular/engpad/ui/navigation/NavGraph.kt @@ -159,6 +159,11 @@ fun EngPadNavGraph( ?.set("selectedPageId", pageId) navController.popBackStack() }, + onClose = { + onNotebookClosed() + onViewAllPagesChanged(false) + navController.popBackStack(Routes.NOTEBOOKS, false) + }, ) } } diff --git a/app/src/main/kotlin/net/metacircular/engpad/ui/pages/PageListScreen.kt b/app/src/main/kotlin/net/metacircular/engpad/ui/pages/PageListScreen.kt index 45371fa..35c8956 100644 --- a/app/src/main/kotlin/net/metacircular/engpad/ui/pages/PageListScreen.kt +++ b/app/src/main/kotlin/net/metacircular/engpad/ui/pages/PageListScreen.kt @@ -4,6 +4,7 @@ import android.graphics.Paint as AndroidPaint import android.graphics.Path as AndroidPath import androidx.compose.foundation.Canvas import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -39,6 +40,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.graphics.drawscope.drawIntoCanvas import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.nativeCanvas @@ -65,6 +67,7 @@ fun PageListScreen( pageSize: PageSize, database: EngPadDatabase, onPageClick: (Long, PageSize) -> Unit, + onClose: () -> Unit, ) { val repository = remember { PageRepository(database.pageDao(), database.strokeDao()) @@ -97,7 +100,14 @@ fun PageListScreen( Scaffold( topBar = { - TopAppBar(title = { Text(notebookTitle) }) + TopAppBar( + title = { Text(notebookTitle) }, + navigationIcon = { + androidx.compose.material3.IconButton(onClick = onClose) { + Text("X") + } + }, + ) }, floatingActionButton = { FloatingActionButton(onClick = { viewModel.addPage() }) { @@ -105,11 +115,31 @@ fun PageListScreen( } }, ) { padding -> + // Detect left swipe from right edge to close + var swipeCumulative by remember { mutableStateOf(0f) } + val swipeModifier = Modifier.pointerInput(Unit) { + detectHorizontalDragGestures( + onDragStart = { startOffset -> + swipeCumulative = 0f + }, + onDragEnd = { + if (swipeCumulative < -200f) { // Swipe left threshold + onClose() + } + swipeCumulative = 0f + }, + onHorizontalDrag = { _, dragAmount -> + swipeCumulative += dragAmount + }, + ) + } + if (pages.isEmpty()) { Column( modifier = Modifier .fillMaxSize() - .padding(padding), + .padding(padding) + .then(swipeModifier), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { @@ -121,7 +151,8 @@ fun PageListScreen( modifier = Modifier .fillMaxSize() .padding(padding) - .padding(8.dp), + .padding(8.dp) + .then(swipeModifier), state = lazyGridState, horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp),