Add close button and swipe-left-to-close on view all pages

- X button in top app bar navigates back to notebook list
- Swipe left gesture (>200px) on the page grid closes to notebook list
- Both clear the notebook and view-all-pages state in SharedPreferences

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-24 18:27:42 -07:00
parent 7a94704c8c
commit 7d7073c3c9
2 changed files with 39 additions and 3 deletions

View File

@@ -159,6 +159,11 @@ fun EngPadNavGraph(
?.set("selectedPageId", pageId)
navController.popBackStack()
},
onClose = {
onNotebookClosed()
onViewAllPagesChanged(false)
navController.popBackStack(Routes.NOTEBOOKS, false)
},
)
}
}

View File

@@ -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),