diff --git a/androidVariant/build.gradle.kts b/androidVariant/build.gradle.kts index fa350fa6..8c7f041d 100644 --- a/androidVariant/build.gradle.kts +++ b/androidVariant/build.gradle.kts @@ -44,7 +44,6 @@ dependencies { implementation(libs.bundles.android.compose) implementation(libs.compose.ui) implementation(libs.compose.ui.tooling.preview) - implementation(libs.compose.material3) implementation(libs.androidx.activity.compose) debugImplementation(libs.compose.ui.tooling) diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/MainActivity.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/MainActivity.kt index e757e075..c05afedf 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/MainActivity.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/MainActivity.kt @@ -24,11 +24,19 @@ import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.comixedproject.variant.android.view.HomeView +import org.comixedproject.variant.platform.Log import org.comixedproject.variant.viewmodel.VariantViewModel import org.koin.androidx.compose.koinViewModel +private const val TAG = "MainActivity" + class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -40,11 +48,61 @@ class MainActivity : ComponentActivity() { variantViewModel.setLibraryDirectory(directory) VariantTheme { + val comicBook by variantViewModel.comicBook.collectAsState() + val comicBookList by variantViewModel.comicBookList.collectAsState() + val loading by variantViewModel.loading.collectAsState() + val browsingState by variantViewModel.browsingState.collectAsState() + val selectionMode by variantViewModel.selectionMode.collectAsState() + val selectionList by variantViewModel.selectionList.collectAsState() + + val coroutineScope = rememberCoroutineScope() + Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - HomeView() + HomeView( + comicBook, + comicBookList, + browsingState, + loading, + selectionMode, + selectionList, + variantViewModel.address, + variantViewModel.username, + variantViewModel.password, + onLoadDirectory = { path, reload -> + coroutineScope.launch(Dispatchers.IO) { + Log.debug(TAG, "Loading directory: ${path} reload=${reload}") + variantViewModel.loadDirectory(path, reload) + } + }, + onDownloadFile = { path, filename -> + coroutineScope.launch(Dispatchers.IO) { + Log.debug(TAG, "Downloading file: ${path} filename=${filename}") + variantViewModel.downloadFile(path, filename) + } + }, + onReadComicBook = { comicBook -> + variantViewModel.readComicBook(comicBook) + }, + onSetSelectionMode = { enabled -> + variantViewModel.setSelectMode(enabled) + }, + onUpdateSelection = { comicBook -> + variantViewModel.updateSelectionList(comicBook.path) + }, + onDeleteSelections = { + coroutineScope.launch(Dispatchers.Unconfined) { + variantViewModel.deleteSelections() + } + }, + onSaveSettings = { address, username, password -> + variantViewModel.address = address + variantViewModel.username = username + variantViewModel.password = password + } + ) } } } diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/AppDestination.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/AppDestination.kt index 725469ab..6fdf3800 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/AppDestination.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/AppDestination.kt @@ -18,8 +18,10 @@ package org.comixedproject.variant.android.view -enum class AppDestination { - COMICS, - BROWSE, - SETTINGS +import org.comixedproject.variant.android.R + +enum class AppDestination(val icon: Int, val label: Int) { + COMICS(R.drawable.ic_comic_library, R.string.comicsDestinationLabel), + BROWSE(R.drawable.ic_browse_library, R.string.browseServerDestinationLabel), + SETTINGS(R.drawable.ic_settings, R.string.settingsDestinationLabel) } \ No newline at end of file diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/HomeView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/HomeView.kt index 183f7096..3137216c 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/HomeView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/HomeView.kt @@ -18,105 +18,161 @@ package org.comixedproject.variant.android.view +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch +import org.comixedproject.variant.android.COMIC_BOOK_LIST import org.comixedproject.variant.android.VariantTheme import org.comixedproject.variant.android.view.comics.ComicBookView import org.comixedproject.variant.android.view.reading.ReadingView import org.comixedproject.variant.android.view.server.ServerView import org.comixedproject.variant.android.view.settings.SettingsView +import org.comixedproject.variant.model.library.ComicBook import org.comixedproject.variant.platform.Log -import org.comixedproject.variant.viewmodel.VariantViewModel -import org.koin.androidx.compose.koinViewModel +import org.comixedproject.variant.viewmodel.BrowsingState private const val TAG = "HomeView" @Composable -fun HomeView() { - val variantViewModel: VariantViewModel = koinViewModel() +fun HomeView( + comicBook: ComicBook?, + comicBookList: List, + browsingState: BrowsingState, + loading: Boolean, + selectionMode: Boolean, + selectionList: List, + address: String, username: String, password: String, + onLoadDirectory: (String, Boolean) -> Unit, + onDownloadFile: (String, String) -> Unit, + onReadComicBook: (ComicBook?) -> Unit, + onSetSelectionMode: (Boolean) -> Unit, + onUpdateSelection: (ComicBook) -> Unit, + onDeleteSelections: () -> Unit, + onSaveSettings: (String, String, String) -> Unit +) { var currentDestination by remember { mutableStateOf(AppDestination.COMICS) } - val coroutineScope = rememberCoroutineScope() - val comicBookList by variantViewModel.comicBookList.collectAsState() - val selectionMode by variantViewModel.selectionMode.collectAsState() - val selectionList by variantViewModel.selectionList.collectAsState() - val comicBook by variantViewModel.comicBook.collectAsState() Scaffold( - topBar = { - VariantTopAppBar( - onBrowseComics = { currentDestination = AppDestination.COMICS }, - onBrowseServer = { - coroutineScope.launch(Dispatchers.IO) { - variantViewModel.loadDirectory( - variantViewModel.browsingState.value.currentPath, - false - ) - } - currentDestination = AppDestination.BROWSE - }, - onUpdateSettings = { currentDestination = AppDestination.SETTINGS }) - }, + topBar = { VariantTopAppBar() }, content = { padding -> - when (currentDestination) { - AppDestination.COMICS -> - if (comicBook != null) { - ReadingView( - comicBook!!, - modifier = Modifier.padding(padding), - onStopReading = { variantViewModel.readComicBook(null) } - ) - } else { - ComicBookView( - comicBookList, - selectionMode, - selectionList, - onSetSelectionMode = { - Log.info(TAG, "Setting selection mode: ${it}") - variantViewModel.setSelectMode(it) + NavigationSuiteScaffold( + navigationSuiteItems = { + AppDestination.entries.forEach { + item( + icon = { + Icon( + painterResource(it.icon), + contentDescription = stringResource(it.label) + ) }, - onComicBookClicked = { comicBook -> - if (selectionMode) { - Log.info( - TAG, - "Toggling comic book selection: ${comicBook.path}" - ) - variantViewModel.updateSelectionList(comicBook.path) - } else { - Log.info(TAG, "Reading comic book: ${comicBook.filename}") - variantViewModel.readComicBook(comicBook) + label = { Text(stringResource(it.label)) }, + selected = it == currentDestination, + onClick = { + if (it == AppDestination.BROWSE + ) { + onLoadDirectory(browsingState.currentPath, false) } - }, - onDeleteComics = { - coroutineScope.launch(Dispatchers.IO) { - variantViewModel.deleteSelections() - } - }, - modifier = Modifier.padding(padding) + currentDestination = it + } ) } + }, + modifier = Modifier.padding(padding) + ) { + when (currentDestination) { + AppDestination.COMICS -> + if (comicBook != null) { + ReadingView( + comicBook, + onStopReading = { onReadComicBook(null) }, + modifier = Modifier + .fillMaxSize() + ) + } else { + ComicBookView( + comicBookList, + selectionMode, + selectionList, + onSetSelectionMode = { + Log.info(TAG, "Setting selection mode: ${it}") + onSetSelectionMode(it) + }, + onComicBookClicked = { comicBook -> + if (selectionMode) { + Log.info( + TAG, + "Toggling comic book selection: ${comicBook.path}" + ) + onUpdateSelection(comicBook) + } else { + Log.info(TAG, "Reading comic book: ${comicBook.filename}") + onReadComicBook(comicBook) + } + }, + onDeleteComics = { onDeleteSelections() }, + modifier = Modifier + .fillMaxSize() + ) + } + + AppDestination.BROWSE -> ServerView( + browsingState, comicBookList, loading, + onLoadDirectory = { path, reload -> onLoadDirectory(path, reload) }, + onDownloadFile = { path, filename -> onDownloadFile(path, filename) }, + modifier = Modifier + .fillMaxSize() + ) - AppDestination.BROWSE -> ServerView(modifier = Modifier.padding(padding)) - AppDestination.SETTINGS -> SettingsView(onCloseSettings = { - currentDestination = AppDestination.COMICS - }, modifier = Modifier.padding(padding)) + AppDestination.SETTINGS -> SettingsView( + address, username, password, + onSaveSettings = { address, username, password -> + Log.info( + TAG, + "Updating server settings: address=${address} username=${username} password=${ + password.first() + }*****" + ) + onSaveSettings(address, username, password) + currentDestination = AppDestination.COMICS + }, + modifier = Modifier + .fillMaxSize() + ) + } } - } - ) + }) } @Composable @Preview fun HomeViewPreview() { - VariantTheme { HomeView() } + VariantTheme { + HomeView( + COMIC_BOOK_LIST.get(0), + COMIC_BOOK_LIST, + BrowsingState("", "", "", listOf(), listOf()), + false, + false, + listOf(), + "http://www.comixedproject.org:7171", "reader@comixedproject.org", "my!password", + onLoadDirectory = { _, _ -> }, + onDownloadFile = { _, _ -> }, + onReadComicBook = { _ -> }, + onSetSelectionMode = { _ -> }, + onUpdateSelection = { _ -> }, + onDeleteSelections = { }, onSaveSettings = { _, _, _ -> } + ) + } } \ No newline at end of file diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt index cc835a91..2e3a8231 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt @@ -19,52 +19,22 @@ package org.comixedproject.variant.android.view import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import org.comixedproject.variant.android.R import org.comixedproject.variant.android.VariantTheme @OptIn(ExperimentalMaterial3Api::class) @Composable fun VariantTopAppBar( - onBrowseComics: () -> Unit, - onBrowseServer: () -> Unit, - onUpdateSettings: () -> Unit, modifier: Modifier = Modifier ) { TopAppBar( title = { Text("Variant") }, - actions = { - IconButton(onClick = { onBrowseComics() }) { - Icon( - painterResource(R.drawable.ic_comic_library), - contentDescription = stringResource(R.string.browseServerDestinationLabel) - ) - } - - IconButton(onClick = { onBrowseServer() }) { - Icon( - painterResource(R.drawable.ic_browse_library), - contentDescription = stringResource(R.string.browseServerDestinationLabel) - ) - } - - IconButton(onClick = { onUpdateSettings() }) { - Icon( - painterResource(R.drawable.ic_settings), - contentDescription = stringResource(R.string.settingsDestinationLabel) - ) - } - }, modifier = modifier ) } @@ -73,9 +43,6 @@ fun VariantTopAppBar( @Preview fun VariantTopAppBarPreview() { VariantTheme { - VariantTopAppBar( - onBrowseComics = {}, - onBrowseServer = {}, - onUpdateSettings = {}) + VariantTopAppBar() } } \ No newline at end of file diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt index 94a7b435..d8299615 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt @@ -50,8 +50,10 @@ fun ComicBookListView( Scaffold( topBar = { Text( - pluralStringResource(R.plurals.comicBookListTitle, comicBookList.size, - comicBookList.size), + pluralStringResource( + R.plurals.comicBookListTitle, comicBookList.size, + comicBookList.size + ), style = MaterialTheme.typography.headlineMedium ) }, diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/reading/ReadingPageView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/reading/ReadingPageView.kt index f079e2a6..c7e2e4dc 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/reading/ReadingPageView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/reading/ReadingPageView.kt @@ -25,9 +25,6 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.automirrored.filled.ArrowForward import androidx.compose.material3.BottomAppBar import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -44,6 +41,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -103,7 +101,7 @@ fun ReadingPageView( } ) { Icon( - Icons.AutoMirrored.Filled.ArrowBack, + painterResource(R.drawable.ic_close), contentDescription = stringResource(R.string.stopReadingLabel) ) } @@ -125,7 +123,7 @@ fun ReadingPageView( onChangePage(currentPage - 1) }, enabled = (currentPage > 0)) { Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowBack, + painterResource(R.drawable.ic_previous_page), contentDescription = stringResource(R.string.previousPageLabel) ) } @@ -146,7 +144,7 @@ fun ReadingPageView( onChangePage(currentPage + 1) }, enabled = (currentPage < (totalPages - 1))) { Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowForward, + painterResource(R.drawable.ic_next_page), contentDescription = stringResource(R.string.nextPageLabel) ) } diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/BrowseServerView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/BrowseServerView.kt index 32c53458..8cc9aa46 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/BrowseServerView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/BrowseServerView.kt @@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -37,6 +35,7 @@ import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -76,7 +75,7 @@ fun BrowseServerView( }, enabled = !parentPath.isEmpty() ) { - Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = parentPath) + Icon(painterResource(R.drawable.ic_back), contentDescription = parentPath) } val displayedTitle = when (title.isEmpty()) { diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/ServerView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/ServerView.kt index 7682a1ca..d1d4d436 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/ServerView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/ServerView.kt @@ -19,29 +19,24 @@ package org.comixedproject.variant.android.view.server import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch +import org.comixedproject.variant.android.COMIC_BOOK_LIST import org.comixedproject.variant.android.VariantTheme -import org.comixedproject.variant.platform.Log -import org.comixedproject.variant.viewmodel.VariantViewModel -import org.koin.androidx.compose.koinViewModel +import org.comixedproject.variant.model.library.ComicBook +import org.comixedproject.variant.viewmodel.BrowsingState private const val TAG = "ServerView" @Composable -fun ServerView(modifier: Modifier = Modifier) { - val variantViewModel: VariantViewModel = koinViewModel() - val browsingState by variantViewModel.browsingState.collectAsState() - val comicBookList by variantViewModel.comicBookList.collectAsState() - val loading by variantViewModel.loading.collectAsState() - - val coroutineScope = rememberCoroutineScope() - +fun ServerView( + browsingState: BrowsingState, + comicBookList: List, + loading: Boolean, + onLoadDirectory: (String, Boolean) -> Unit, + onDownloadFile: (String, String) -> Unit, + modifier: Modifier = Modifier +) { BrowseServerView( browsingState.currentPath, browsingState.title, @@ -51,21 +46,21 @@ fun ServerView(modifier: Modifier = Modifier) { browsingState.downloadingState, loading, modifier = modifier, - onLoadDirectory = { path, reload -> - coroutineScope.launch(Dispatchers.IO) { - Log.debug(TAG, "Loading directory: ${path} reload=${reload}") - variantViewModel.loadDirectory(path, reload) - } - }, - onDownloadFile = { path, filename -> - Log.debug(TAG, "Downloading file: ${path} -> ${filename}") - variantViewModel.downloadFile(path, filename) - }, + onLoadDirectory = { path, reload -> onLoadDirectory(path, reload) }, + onDownloadFile = { path, filename -> onDownloadFile(path, filename) }, ) } @Composable @Preview fun ServerViewPreview() { - VariantTheme { ServerView() } + VariantTheme { + ServerView( + BrowsingState("", "", "", listOf(), listOf()), + COMIC_BOOK_LIST, + false, + onLoadDirectory = { _, _ -> }, + onDownloadFile = { _, _ -> } + ) + } } \ No newline at end of file diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/EditServerView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/EditServerView.kt similarity index 93% rename from androidVariant/src/main/java/org/comixedproject/variant/android/view/server/EditServerView.kt rename to androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/EditServerView.kt index d3429feb..2dc71f07 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/EditServerView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/EditServerView.kt @@ -16,15 +16,12 @@ * along with this program. If not, see */ -package org.comixedproject.variant.android.view.server +package org.comixedproject.variant.android.view.settings import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Clear -import androidx.compose.material.icons.filled.Done import androidx.compose.material3.Button import androidx.compose.material3.Icon import androidx.compose.material3.Text @@ -35,6 +32,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import org.comixedproject.variant.android.R @@ -94,7 +92,7 @@ fun EditServerView( onSave(addressValue, usernameValue, passwordValue) }, enabled = validForm) { Icon( - imageVector = Icons.Default.Done, + painterResource(R.drawable.ic_save), contentDescription = stringResource(R.string.saveButton) ) } @@ -105,7 +103,7 @@ fun EditServerView( passwordValue = password }, enabled = validForm) { Icon( - imageVector = Icons.Default.Clear, + painterResource(R.drawable.ic_cancel), contentDescription = stringResource(R.string.cancelButton) ) } diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/SettingsView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/SettingsView.kt index 73fd745f..6a53b678 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/SettingsView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/settings/SettingsView.kt @@ -23,34 +23,24 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import org.comixedproject.variant.android.VariantTheme -import org.comixedproject.variant.android.view.server.EditServerView -import org.comixedproject.variant.platform.Log -import org.comixedproject.variant.viewmodel.VariantViewModel -import org.koin.androidx.compose.koinViewModel private val TAG = "SettingsView" @Composable fun SettingsView( - onCloseSettings: () -> Unit, + address: String, + username: String, + password: String, + onSaveSettings: (String, String, String) -> Unit, modifier: Modifier = Modifier ) { - val variantViewModel: VariantViewModel = koinViewModel() - Column(modifier = modifier) { EditServerView( - variantViewModel.address, - variantViewModel.username, - variantViewModel.password, + address, + username, + password, onSave = { address, username, password -> - Log.debug( - TAG, - "Updating server settings: address=$address, username=$username, password=$password" - ) - variantViewModel.address = address - variantViewModel.username = username - variantViewModel.password = password - onCloseSettings() + onSaveSettings(address, username, password) } ) } @@ -60,6 +50,10 @@ fun SettingsView( @Preview fun SettingsViewPreview() { VariantTheme { - SettingsView(onCloseSettings = { }) + SettingsView( + "http://www.comixedproject.org:7171", + "reader@comixedproject.org", + "my!password", + onSaveSettings = { _, _, _ -> }) } } \ No newline at end of file diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_back.xml b/androidVariant/src/main/res/drawable-anydpi/ic_back.xml new file mode 100644 index 00000000..ecde333d --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_back.xml @@ -0,0 +1,11 @@ + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_cancel.xml b/androidVariant/src/main/res/drawable-anydpi/ic_cancel.xml new file mode 100644 index 00000000..2683e239 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_cancel.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_close.xml b/androidVariant/src/main/res/drawable-anydpi/ic_close.xml new file mode 100644 index 00000000..7c5f4779 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_close.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_next_page.xml b/androidVariant/src/main/res/drawable-anydpi/ic_next_page.xml new file mode 100644 index 00000000..ffb8434c --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_next_page.xml @@ -0,0 +1,14 @@ + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_previous_page.xml b/androidVariant/src/main/res/drawable-anydpi/ic_previous_page.xml new file mode 100644 index 00000000..df6851be --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_previous_page.xml @@ -0,0 +1,14 @@ + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_save.xml b/androidVariant/src/main/res/drawable-anydpi/ic_save.xml new file mode 100644 index 00000000..1adbbabe --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_save.xml @@ -0,0 +1,14 @@ + + + + diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_back.png b/androidVariant/src/main/res/drawable-hdpi/ic_back.png new file mode 100644 index 00000000..758a37bb Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_back.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_cancel.png b/androidVariant/src/main/res/drawable-hdpi/ic_cancel.png new file mode 100644 index 00000000..a594bd52 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_cancel.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_close.png b/androidVariant/src/main/res/drawable-hdpi/ic_close.png new file mode 100644 index 00000000..cf2ee6b8 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_close.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_next_page.png b/androidVariant/src/main/res/drawable-hdpi/ic_next_page.png new file mode 100644 index 00000000..35528683 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_next_page.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_previous_page.png b/androidVariant/src/main/res/drawable-hdpi/ic_previous_page.png new file mode 100644 index 00000000..3d28eea3 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_previous_page.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_save.png b/androidVariant/src/main/res/drawable-hdpi/ic_save.png new file mode 100644 index 00000000..795bd384 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_save.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_back.png b/androidVariant/src/main/res/drawable-mdpi/ic_back.png new file mode 100644 index 00000000..0133a5d6 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_back.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_cancel.png b/androidVariant/src/main/res/drawable-mdpi/ic_cancel.png new file mode 100644 index 00000000..7fc0f961 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_cancel.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_close.png b/androidVariant/src/main/res/drawable-mdpi/ic_close.png new file mode 100644 index 00000000..1a95c924 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_close.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_next_page.png b/androidVariant/src/main/res/drawable-mdpi/ic_next_page.png new file mode 100644 index 00000000..c861a08d Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_next_page.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_previous_page.png b/androidVariant/src/main/res/drawable-mdpi/ic_previous_page.png new file mode 100644 index 00000000..92f9bf42 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_previous_page.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_save.png b/androidVariant/src/main/res/drawable-mdpi/ic_save.png new file mode 100644 index 00000000..e032e409 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_save.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_back.png b/androidVariant/src/main/res/drawable-xhdpi/ic_back.png new file mode 100644 index 00000000..aa2ec58e Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_back.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_cancel.png b/androidVariant/src/main/res/drawable-xhdpi/ic_cancel.png new file mode 100644 index 00000000..42dcb08e Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_cancel.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_close.png b/androidVariant/src/main/res/drawable-xhdpi/ic_close.png new file mode 100644 index 00000000..fc824e76 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_close.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_next_page.png b/androidVariant/src/main/res/drawable-xhdpi/ic_next_page.png new file mode 100644 index 00000000..ce7976bd Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_next_page.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_previous_page.png b/androidVariant/src/main/res/drawable-xhdpi/ic_previous_page.png new file mode 100644 index 00000000..fa01f6e3 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_previous_page.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_save.png b/androidVariant/src/main/res/drawable-xhdpi/ic_save.png new file mode 100644 index 00000000..07d10382 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_save.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_back.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_back.png new file mode 100644 index 00000000..b5364d4b Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_back.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_cancel.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_cancel.png new file mode 100644 index 00000000..8711b8a0 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_cancel.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_close.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_close.png new file mode 100644 index 00000000..45b315fc Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_close.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_next_page.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_next_page.png new file mode 100644 index 00000000..35064e53 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_next_page.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_previous_page.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_previous_page.png new file mode 100644 index 00000000..76283516 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_previous_page.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_save.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_save.png new file mode 100644 index 00000000..02e76661 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_save.png differ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index acbec546..cdf7604b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,6 @@ android-gradle-plugin = "8.10.0" kotlin = "2.2.0" compose = "1.5.4" -compose-material3 = "1.1.2" androidx-activity-compose = "1.8.0" koin-version = "3.5.6" sqldelight-plugin = "2.0.2" @@ -16,7 +15,6 @@ androidx-activity-compose = { group = "androidx.activity", name = "activity-comp compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "compose" } compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "compose" } -compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "compose-material3" } desugar-jdk-libs = { group = "com.android.tools", name = "desugar_jdk_libs", version = "2.0.4" } kmp-viewmodel-core = { group = "com.rickclephas.kmp", name = "kmp-observableviewmodel-core", version = "1.0.0-BETA-12" } kermit-logging = { group = "co.touchlab", name = "kermit", version = "2.0.4" } @@ -39,6 +37,7 @@ sqldelight-driver-native = { group = "app.cash.sqldelight", name = "native-drive # material androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "android-material3-version" } androidx-compose-material3-android = { group = "androidx.compose.material3", name = "material3-android", version.ref = "android-material3-version" } +androidx-compose-material3-navigation = { group = "androidx.compose.material3", name = "material3-adaptive-navigation-suite", version.ref = "android-material3-version" } # networking ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor-version" } @@ -71,6 +70,6 @@ native-coroutines = { id = "com.rickclephas.kmp.nativecoroutines", version = "1. plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version = "2.1.21" } [bundles] -android-compose = ["koin-androidx-compose", "androidx-compose-material3", "androidx-compose-material3-android"] +android-compose = ["koin-androidx-compose", "androidx-compose-material3", "androidx-compose-material3-android", "androidx-compose-material3-navigation"] ktor-common = ["ktor-client-core", "ktor-client-auth", "ktor-client-serialization", "ktor-client-serialization-json", "ktor-client-content-negotiation", "ktor-server-content-negotiation", "ktor-client-logging"] metadata = ["xml-util", "xml-util-serialization"] \ No newline at end of file diff --git a/iosVariant/Variant.xcodeproj/project.pbxproj b/iosVariant/Variant.xcodeproj/project.pbxproj index 4c4ffa12..97125f07 100644 --- a/iosVariant/Variant.xcodeproj/project.pbxproj +++ b/iosVariant/Variant.xcodeproj/project.pbxproj @@ -171,7 +171,7 @@ B68FF2E72E08348A0010853B /* Comics */, 6AF012912E1DDF5B001A6A19 /* Reading */, B6AEB7982E102915003FB705 /* Settings */, - B6B20B9A2DE508A9008598A7 /* Servers */, + B6B20B9A2DE508A9008598A7 /* Server */, ); path = Views; sourceTree = ""; @@ -204,7 +204,7 @@ path = Data; sourceTree = ""; }; - B6B20B9A2DE508A9008598A7 /* Servers */ = { + B6B20B9A2DE508A9008598A7 /* Server */ = { isa = PBXGroup; children = ( 6AA598482DE72E910078CC9F /* ServerView.swift */, @@ -212,7 +212,7 @@ B68922522DFDC29400BDC032 /* DirectoryItemView.swift */, B68922542DFDC34E00BDC032 /* FileItemView.swift */, ); - path = Servers; + path = Server; sourceTree = ""; }; /* End PBXGroup section */ diff --git a/iosVariant/iosVariant/Assets.xcassets/back.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/back.imageset/Contents.json new file mode 100644 index 00000000..f71e23db --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/back.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-angle-back-8E4DS2MACR.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/back.imageset/reshot-icon-angle-back-8E4DS2MACR.svg b/iosVariant/iosVariant/Assets.xcassets/back.imageset/reshot-icon-angle-back-8E4DS2MACR.svg new file mode 100644 index 00000000..86370ad6 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/back.imageset/reshot-icon-angle-back-8E4DS2MACR.svg @@ -0,0 +1 @@ +Trade_Icons \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/browse_library.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/browse_library.imageset/Contents.json new file mode 100644 index 00000000..14ebc31e --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/browse_library.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-cloud-8FZ46C952V.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/browse_library.imageset/reshot-icon-cloud-8FZ46C952V.svg b/iosVariant/iosVariant/Assets.xcassets/browse_library.imageset/reshot-icon-cloud-8FZ46C952V.svg new file mode 100644 index 00000000..ed2ca669 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/browse_library.imageset/reshot-icon-cloud-8FZ46C952V.svg @@ -0,0 +1 @@ +1.Cloud \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/close.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/close.imageset/Contents.json new file mode 100644 index 00000000..ca77cff8 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/close.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-close-PTL63WY9KD.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/close.imageset/reshot-icon-close-PTL63WY9KD.svg b/iosVariant/iosVariant/Assets.xcassets/close.imageset/reshot-icon-close-PTL63WY9KD.svg new file mode 100644 index 00000000..c9049b71 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/close.imageset/reshot-icon-close-PTL63WY9KD.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iosVariant/iosVariant/Assets.xcassets/comic_library.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/comic_library.imageset/Contents.json new file mode 100644 index 00000000..b31a75fe --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/comic_library.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-library-539WBKTVCD.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/comic_library.imageset/reshot-icon-library-539WBKTVCD.svg b/iosVariant/iosVariant/Assets.xcassets/comic_library.imageset/reshot-icon-library-539WBKTVCD.svg new file mode 100644 index 00000000..4ce4f1cb --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/comic_library.imageset/reshot-icon-library-539WBKTVCD.svg @@ -0,0 +1,3 @@ + + + diff --git a/iosVariant/iosVariant/Assets.xcassets/delete_selections.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/delete_selections.imageset/Contents.json new file mode 100644 index 00000000..702e9a63 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/delete_selections.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-trash-EQVMX5TB72.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/delete_selections.imageset/reshot-icon-trash-EQVMX5TB72.svg b/iosVariant/iosVariant/Assets.xcassets/delete_selections.imageset/reshot-icon-trash-EQVMX5TB72.svg new file mode 100644 index 00000000..f52f5a27 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/delete_selections.imageset/reshot-icon-trash-EQVMX5TB72.svg @@ -0,0 +1 @@ +70-Trash \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/next_page.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/next_page.imageset/Contents.json new file mode 100644 index 00000000..253cbe35 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/next_page.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-next-circle-C6SMFYQZW9.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/next_page.imageset/reshot-icon-next-circle-C6SMFYQZW9.svg b/iosVariant/iosVariant/Assets.xcassets/next_page.imageset/reshot-icon-next-circle-C6SMFYQZW9.svg new file mode 100644 index 00000000..b691355d --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/next_page.imageset/reshot-icon-next-circle-C6SMFYQZW9.svg @@ -0,0 +1 @@ +next circle \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/previous_page.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/previous_page.imageset/Contents.json new file mode 100644 index 00000000..69001d1a --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/previous_page.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-back-circle-JYQ7GC5DF8.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/previous_page.imageset/reshot-icon-back-circle-JYQ7GC5DF8.svg b/iosVariant/iosVariant/Assets.xcassets/previous_page.imageset/reshot-icon-back-circle-JYQ7GC5DF8.svg new file mode 100644 index 00000000..bcbd2773 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/previous_page.imageset/reshot-icon-back-circle-JYQ7GC5DF8.svg @@ -0,0 +1 @@ +back circle \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/save.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/save.imageset/Contents.json new file mode 100644 index 00000000..063a1372 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/save.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-check-mark-GTKPVL654M.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/save.imageset/reshot-icon-check-mark-GTKPVL654M.svg b/iosVariant/iosVariant/Assets.xcassets/save.imageset/reshot-icon-check-mark-GTKPVL654M.svg new file mode 100644 index 00000000..3bc01d6a --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/save.imageset/reshot-icon-check-mark-GTKPVL654M.svg @@ -0,0 +1 @@ +4.Check mark \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/settings.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/settings.imageset/Contents.json new file mode 100644 index 00000000..76251bf1 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/settings.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-setting-E4QJBWP6Z9.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/settings.imageset/reshot-icon-setting-E4QJBWP6Z9.svg b/iosVariant/iosVariant/Assets.xcassets/settings.imageset/reshot-icon-setting-E4QJBWP6Z9.svg new file mode 100644 index 00000000..04bdc1fc --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/settings.imageset/reshot-icon-setting-E4QJBWP6Z9.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/iosVariant/iosVariant/HomeView.swift b/iosVariant/iosVariant/HomeView.swift index 789e0890..bbae849d 100644 --- a/iosVariant/iosVariant/HomeView.swift +++ b/iosVariant/iosVariant/HomeView.swift @@ -77,7 +77,7 @@ struct HomeView: View { localized: "destination.comics.label", defaultValue: "Comics" ), - systemImage: "book.fill" + image: "comic_library" ) } @@ -121,7 +121,7 @@ struct HomeView: View { localized: "destination.browse-server.label", defaultValue: "Browse" ), - systemImage: "person.crop.circle.fill" + image: "browse_library" ) } @@ -147,7 +147,7 @@ struct HomeView: View { localized: "destination.settings.label", defaultValue: "Settings" ), - systemImage: "gearshape.fill" + image: "settings" ) } } diff --git a/iosVariant/iosVariant/Views/Comics/ComicBooksView.swift b/iosVariant/iosVariant/Views/Comics/ComicBooksView.swift index 63b30905..108039b9 100644 --- a/iosVariant/iosVariant/Views/Comics/ComicBooksView.swift +++ b/iosVariant/iosVariant/Views/Comics/ComicBooksView.swift @@ -57,7 +57,7 @@ struct ComicBooksView: View { Button { onDeleteComics() } label: { - Image(systemName: "trash.fill") + Image("delete_selections") } .disabled(selectionList.isEmpty) } else { diff --git a/iosVariant/iosVariant/Views/Reading/ReadingPageView.swift b/iosVariant/iosVariant/Views/Reading/ReadingPageView.swift index 630ecbd3..04fe980f 100644 --- a/iosVariant/iosVariant/Views/Reading/ReadingPageView.swift +++ b/iosVariant/iosVariant/Views/Reading/ReadingPageView.swift @@ -79,7 +79,7 @@ struct ReadingPageView: View { ) self.pageNumber = self.pageNumber - 1 } label: { - Image(systemName: "arrowshape.left.fill") + Image("previous_page") } .disabled(pageNumber == 0) @@ -101,7 +101,7 @@ struct ReadingPageView: View { Log().info(tag: TAG, message: "Going to next page") self.pageNumber = self.pageNumber + 1 } label: { - Image(systemName: "arrowshape.right.fill") + Image("next_page") } .disabled(pageNumber == (totalPages - 1)) } diff --git a/iosVariant/iosVariant/Views/Servers/BrowseServerView.swift b/iosVariant/iosVariant/Views/Server/BrowseServerView.swift similarity index 97% rename from iosVariant/iosVariant/Views/Servers/BrowseServerView.swift rename to iosVariant/iosVariant/Views/Server/BrowseServerView.swift index 5e563aea..c29f1fdd 100644 --- a/iosVariant/iosVariant/Views/Servers/BrowseServerView.swift +++ b/iosVariant/iosVariant/Views/Server/BrowseServerView.swift @@ -100,7 +100,7 @@ struct BrowseServerView: View { ) onLoadDirectory(parentPath, false) } label: { - Image(systemName: "arrow.backward") + Image("back") } } } @@ -112,9 +112,9 @@ struct BrowseServerView: View { #Preview("directories") { BrowseServerView( comicBookList: COMIC_BOOK_LIST, - path: "/reader/v1", + path: "/reader/v1/publishers", title: "", - parentPath: "", + parentPath: "/reader/v1", directoryContents: DIRECTORY_LIST.filter { $0.isDirectory }, downloadingState: [], loading: false, diff --git a/iosVariant/iosVariant/Views/Servers/DirectoryItemView.swift b/iosVariant/iosVariant/Views/Server/DirectoryItemView.swift similarity index 100% rename from iosVariant/iosVariant/Views/Servers/DirectoryItemView.swift rename to iosVariant/iosVariant/Views/Server/DirectoryItemView.swift diff --git a/iosVariant/iosVariant/Views/Servers/FileItemView.swift b/iosVariant/iosVariant/Views/Server/FileItemView.swift similarity index 100% rename from iosVariant/iosVariant/Views/Servers/FileItemView.swift rename to iosVariant/iosVariant/Views/Server/FileItemView.swift diff --git a/iosVariant/iosVariant/Views/Servers/ServerView.swift b/iosVariant/iosVariant/Views/Server/ServerView.swift similarity index 100% rename from iosVariant/iosVariant/Views/Servers/ServerView.swift rename to iosVariant/iosVariant/Views/Server/ServerView.swift diff --git a/iosVariant/iosVariant/Views/Settings/EditServerView.swift b/iosVariant/iosVariant/Views/Settings/EditServerView.swift index 1168aa7a..e3418d70 100644 --- a/iosVariant/iosVariant/Views/Settings/EditServerView.swift +++ b/iosVariant/iosVariant/Views/Settings/EditServerView.swift @@ -104,7 +104,7 @@ struct EditServerView: View { Button { onSaveChanges(addressValue, usernameValue, passwordValue) } label: { - Image(systemName: "checkmark.circle.fill") + Image("save") } } }.navigationViewStyle(StackNavigationViewStyle())