diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt index 56f1263f0..cbd278dc7 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt @@ -32,6 +32,8 @@ import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import app.omnivore.omnivore.MainActivity import app.omnivore.omnivore.R +import app.omnivore.omnivore.persistence.entities.SavedItemLabel +import app.omnivore.omnivore.ui.components.LabelsSelectionSheetContent import app.omnivore.omnivore.ui.components.WebReaderLabelsSelectionSheet import app.omnivore.omnivore.ui.notebook.NotebookView import app.omnivore.omnivore.ui.notebook.NotebookViewModel @@ -108,7 +110,8 @@ enum class BottomSheetState( NONE(), PREFERENCES(), NOTEBOOK(), - HIGHLIGHTNOTE() + HIGHLIGHTNOTE(), + LABELS(), } @@ -131,6 +134,8 @@ fun WebReaderLoadingContainer(slug: String? = null, requestID: String? = null, val shouldPopView: Boolean by webReaderViewModel.shouldPopViewLiveData.observeAsState(false) val toolbarHeightPx: Float by webReaderViewModel.currentToolbarHeightLiveData.observeAsState(0.0f) + val labels: List by webReaderViewModel.savedItemLabelsLiveData.observeAsState(listOf()) + val maxToolbarHeight = 48.dp webReaderViewModel.maxToolbarHeightPx = with(LocalDensity.current) { maxToolbarHeight.roundToPx().toFloat() } webReaderViewModel.loadItem(slug = slug, requestID = requestID) @@ -159,6 +164,15 @@ fun WebReaderLoadingContainer(slug: String? = null, requestID: String? = null, } } + val showLabelsSelector: Boolean by webReaderViewModel.showLabelsSelectionSheetLiveData.observeAsState(false) + + if (showLabelsSelector) { + bottomSheetState = BottomSheetState.LABELS + coroutineScope.launch { + modalBottomSheetState.animateTo(ModalBottomSheetValue.HalfExpanded) + } + } + ModalBottomSheetLayout( modifier = Modifier .statusBarsPadding(), @@ -201,6 +215,35 @@ fun WebReaderLoadingContainer(slug: String? = null, requestID: String? = null, } } } + app.omnivore.omnivore.ui.reader.BottomSheetState.LABELS -> { + BottomSheetUI(title = "Notebook") { + LabelsSelectionSheetContent( + labels = labels, + initialSelectedLabels = webReaderParams?.labels ?: listOf(), + onCancel = { + coroutineScope.launch { + modalBottomSheetState.hide() + bottomSheetState = BottomSheetState.NONE + } + }, + isLibraryMode = false, + onSave = { + if (it != labels) { + webReaderViewModel.updateSavedItemLabels( + savedItemID = webReaderParams?.item?.savedItemId ?: "", labels = it + ) + } + coroutineScope.launch { + modalBottomSheetState.hide() + bottomSheetState = BottomSheetState.NONE + } + }, + onCreateLabel = { newLabelName, labelHexValue -> + webReaderViewModel.createNewSavedItemLabel(newLabelName, labelHexValue) + } + ) + } + } BottomSheetState.NONE -> { } @@ -298,8 +341,6 @@ fun WebReaderLoadingContainer(slug: String? = null, requestID: String? = null, webReaderViewModel = webReaderViewModel ) } - - WebReaderLabelsSelectionSheet(webReaderViewModel) } LaunchedEffect(shouldPopView) {