1818
1919package org.comixedproject.variant.android.view.comics
2020
21+ import androidx.compose.foundation.layout.padding
22+ import androidx.compose.material.icons.Icons
23+ import androidx.compose.material.icons.filled.Delete
24+ import androidx.compose.material3.BottomAppBar
25+ import androidx.compose.material3.Icon
26+ import androidx.compose.material3.IconButton
27+ import androidx.compose.material3.Scaffold
2128import androidx.compose.runtime.Composable
22- import androidx.compose.runtime.collectAsState
23- import androidx.compose.runtime.getValue
2429import androidx.compose.ui.Modifier
30+ import androidx.compose.ui.res.painterResource
31+ import androidx.compose.ui.res.stringResource
2532import androidx.compose.ui.tooling.preview.Preview
33+ import org.comixedproject.variant.android.COMIC_BOOK_LIST
34+ import org.comixedproject.variant.android.R
2635import org.comixedproject.variant.android.VariantTheme
2736import org.comixedproject.variant.model.library.ComicBook
28- import org.comixedproject.variant.viewmodel.VariantViewModel
29- import org.koin.androidx.compose.koinViewModel
37+ import org.comixedproject.variant.platform.Log
3038
3139private val TAG = " ComicBookView"
3240
3341@Composable
34- fun ComicBookView (onReadComicBook : (ComicBook ) -> Unit , modifier : Modifier = Modifier ) {
35- val variantViewModel: VariantViewModel = koinViewModel()
36- val comicBookList by variantViewModel.comicBookList.collectAsState()
42+ fun ComicBookView (
43+ comicBookList : List <ComicBook >,
44+ selectionMode : Boolean ,
45+ selectionList : List <String >,
46+ onSetSelectionMode : (Boolean ) -> Unit ,
47+ onComicBookClicked : (ComicBook ) -> Unit ,
48+ onDeleteComics : () -> Unit ,
49+ modifier : Modifier = Modifier
50+ ) {
51+ Scaffold (
52+ content = { padding ->
53+ ComicBookListView (
54+ comicBookList,
55+ selectionList,
56+ onClick = { onComicBookClicked(it) },
57+ modifier = modifier.padding(padding)
58+ )
59+ },
60+ bottomBar = {
61+ BottomAppBar (
62+ actions = {
63+ if (selectionMode) {
64+ IconButton (onClick = { onSetSelectionMode(false ) }) {
65+ Icon (
66+ painterResource(id = R .drawable.ic_selection_mode_on),
67+ contentDescription = stringResource(R .string.markReadLabel)
68+ )
69+ }
70+ } else {
71+ IconButton (onClick = { onSetSelectionMode(true ) }) {
72+ Icon (
73+ painterResource(id = R .drawable.ic_selection_mode_off),
74+ contentDescription = stringResource(R .string.markReadLabel)
75+ )
76+ }
77+ }
78+ if (! selectionList.isEmpty()) {
79+ IconButton (enabled = ! selectionList.isEmpty(), onClick = {
80+ Log .info(TAG , " Deleting ${selectionList.size} comic book(s)" )
81+ onDeleteComics()
82+ }) {
83+ Icon (
84+ Icons .Filled .Delete ,
85+ contentDescription = stringResource(R .string.deleteSelectionsLabel)
86+ )
87+ }
88+ }
3789
38- ComicBookListView (comicBookList, onClick = { onReadComicBook(it) }, modifier = modifier)
90+ }
91+ )
92+ }
93+ )
3994}
4095
4196@Composable
4297@Preview
4398fun ComicBookViewPreview () {
44- VariantTheme { ComicBookView (onReadComicBook = { }) }
99+ VariantTheme {
100+ ComicBookView (
101+ COMIC_BOOK_LIST ,
102+ false ,
103+ emptyList(),
104+ onSetSelectionMode = { _ -> },
105+ onComicBookClicked = { _ -> },
106+ onDeleteComics = { })
107+ }
108+ }
109+
110+ @Composable
111+ @Preview
112+ fun ComicBookViewWithSelectionsPreview () {
113+ VariantTheme {
114+ ComicBookView (
115+ COMIC_BOOK_LIST ,
116+ true ,
117+ listOf (COMIC_BOOK_LIST .get(0 ).path),
118+ onSetSelectionMode = { _ -> },
119+ onComicBookClicked = { _ -> },
120+ onDeleteComics = { })
121+ }
45122}
0 commit comments