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 eeb8267..cc835a9 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
@@ -18,10 +18,6 @@
package org.comixedproject.variant.android.view
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.AccountCircle
-import androidx.compose.material.icons.rounded.Home
-import androidx.compose.material.icons.rounded.Settings
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -29,6 +25,7 @@ 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
@@ -49,21 +46,21 @@ fun VariantTopAppBar(
actions = {
IconButton(onClick = { onBrowseComics() }) {
Icon(
- imageVector = Icons.Rounded.Home,
+ painterResource(R.drawable.ic_comic_library),
contentDescription = stringResource(R.string.browseServerDestinationLabel)
)
}
IconButton(onClick = { onBrowseServer() }) {
Icon(
- imageVector = Icons.Rounded.AccountCircle,
+ painterResource(R.drawable.ic_browse_library),
contentDescription = stringResource(R.string.browseServerDestinationLabel)
)
}
IconButton(onClick = { onUpdateSettings() }) {
Icon(
- imageVector = Icons.Rounded.Settings,
+ painterResource(R.drawable.ic_settings),
contentDescription = stringResource(R.string.settingsDestinationLabel)
)
}
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 143a182..94a7b43 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
@@ -23,10 +23,12 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
import androidx.compose.foundation.lazy.staggeredgrid.items
+import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
@@ -46,6 +48,13 @@ fun ComicBookListView(
modifier: Modifier = Modifier
) {
Scaffold(
+ topBar = {
+ Text(
+ pluralStringResource(R.plurals.comicBookListTitle, comicBookList.size,
+ comicBookList.size),
+ style = MaterialTheme.typography.headlineMedium
+ )
+ },
content = { padding ->
if (comicBookList.isEmpty()) {
Log.debug(
diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt
index 1ca9aa1..a022298 100644
--- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt
+++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt
@@ -19,8 +19,6 @@
package org.comixedproject.variant.android.view.comics
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -81,7 +79,7 @@ fun ComicBookView(
onDeleteComics()
}) {
Icon(
- Icons.Filled.Delete,
+ painterResource(R.drawable.ic_delete_comics),
contentDescription = stringResource(R.string.deleteSelectionsLabel)
)
}
diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_browse_library.xml b/androidVariant/src/main/res/drawable-anydpi/ic_browse_library.xml
new file mode 100644
index 0000000..117e380
--- /dev/null
+++ b/androidVariant/src/main/res/drawable-anydpi/ic_browse_library.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_comic_library.xml b/androidVariant/src/main/res/drawable-anydpi/ic_comic_library.xml
new file mode 100644
index 0000000..8e9b6a7
--- /dev/null
+++ b/androidVariant/src/main/res/drawable-anydpi/ic_comic_library.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_delete_comics.xml b/androidVariant/src/main/res/drawable-anydpi/ic_delete_comics.xml
new file mode 100644
index 0000000..b44c820
--- /dev/null
+++ b/androidVariant/src/main/res/drawable-anydpi/ic_delete_comics.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_settings.xml b/androidVariant/src/main/res/drawable-anydpi/ic_settings.xml
new file mode 100644
index 0000000..3085f10
--- /dev/null
+++ b/androidVariant/src/main/res/drawable-anydpi/ic_settings.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-hdpi/ic_browse_library.png
new file mode 100644
index 0000000..a147001
Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_browse_library.png differ
diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-hdpi/ic_comic_library.png
new file mode 100644
index 0000000..8b2bc41
Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_comic_library.png differ
diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-hdpi/ic_delete_comics.png
new file mode 100644
index 0000000..2ae8b69
Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_delete_comics.png differ
diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_settings.png b/androidVariant/src/main/res/drawable-hdpi/ic_settings.png
new file mode 100644
index 0000000..fe5e143
Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_settings.png differ
diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-mdpi/ic_browse_library.png
new file mode 100644
index 0000000..4108ba9
Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_browse_library.png differ
diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-mdpi/ic_comic_library.png
new file mode 100644
index 0000000..f5b2a36
Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_comic_library.png differ
diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-mdpi/ic_delete_comics.png
new file mode 100644
index 0000000..485c3f1
Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_delete_comics.png differ
diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_settings.png b/androidVariant/src/main/res/drawable-mdpi/ic_settings.png
new file mode 100644
index 0000000..59d2f49
Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_settings.png differ
diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-xhdpi/ic_browse_library.png
new file mode 100644
index 0000000..14661b0
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_browse_library.png differ
diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-xhdpi/ic_comic_library.png
new file mode 100644
index 0000000..64118a0
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_comic_library.png differ
diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-xhdpi/ic_delete_comics.png
new file mode 100644
index 0000000..92d883d
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_delete_comics.png differ
diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_settings.png b/androidVariant/src/main/res/drawable-xhdpi/ic_settings.png
new file mode 100644
index 0000000..832872d
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_settings.png differ
diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_browse_library.png
new file mode 100644
index 0000000..52cf4a5
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_browse_library.png differ
diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_comic_library.png
new file mode 100644
index 0000000..2a29721
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_comic_library.png differ
diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_delete_comics.png
new file mode 100644
index 0000000..f78ce91
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_delete_comics.png differ
diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_settings.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_settings.png
new file mode 100644
index 0000000..914162d
Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_settings.png differ
diff --git a/androidVariant/src/main/res/values/strings.xml b/androidVariant/src/main/res/values/strings.xml
index 74f2adf..e48340b 100644
--- a/androidVariant/src/main/res/values/strings.xml
+++ b/androidVariant/src/main/res/values/strings.xml
@@ -19,4 +19,8 @@
Mark selected comics as read.
Mark selected comics as unread.
Delete selected comics from device.
+
+ - %d Comic Book
+ - %d Comic Books
+
diff --git a/iosVariant/Translations.xcstrings b/iosVariant/Translations.xcstrings
new file mode 100644
index 0000000..dfc9481
--- /dev/null
+++ b/iosVariant/Translations.xcstrings
@@ -0,0 +1,28 @@
+{
+ "sourceLanguage" : "en",
+ "strings" : {
+ "%lld Comic Books" : {
+ "localizations" : {
+ "en" : {
+ "variations" : {
+ "plural" : {
+ "one" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "%lld Comic Book"
+ }
+ },
+ "other" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "%lld Comic Books"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "version" : "1.0"
+}
\ No newline at end of file
diff --git a/iosVariant/Variant.xcodeproj/project.pbxproj b/iosVariant/Variant.xcodeproj/project.pbxproj
index 3e52e86..4c4ffa1 100644
--- a/iosVariant/Variant.xcodeproj/project.pbxproj
+++ b/iosVariant/Variant.xcodeproj/project.pbxproj
@@ -10,6 +10,7 @@
058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; };
058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; };
2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; };
+ 6A1EDFD12E294F7D00429CEF /* Translations.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 6A1EDFD02E294F7D00429CEF /* Translations.xcstrings */; };
6A4D18062E14191D00FF9EA2 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4D18052E14191D00FF9EA2 /* Constants.swift */; };
6AA598492DE72E910078CC9F /* ServerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA598482DE72E910078CC9F /* ServerView.swift */; };
6AA5984C2DE72EF40078CC9F /* Fixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA5984B2DE72EF40078CC9F /* Fixtures.swift */; };
@@ -50,6 +51,7 @@
058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; };
+ 6A1EDFD02E294F7D00429CEF /* Translations.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Translations.xcstrings; sourceTree = ""; };
6A4D18052E14191D00FF9EA2 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; };
6AA598482DE72E910078CC9F /* ServerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerView.swift; sourceTree = ""; };
6AA5984B2DE72EF40078CC9F /* Fixtures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixtures.swift; sourceTree = ""; };
@@ -114,6 +116,7 @@
7555FF72242A565900829871 = {
isa = PBXGroup;
children = (
+ 6A1EDFD02E294F7D00429CEF /* Translations.xcstrings */,
7555FF7D242A565900829871 /* iosVariant */,
7555FF7C242A565900829871 /* Products */,
7555FFB0242A642200829871 /* Frameworks */,
@@ -256,9 +259,6 @@
knownRegions = (
en,
Base,
- es,
- fr,
- "pt-BR",
);
mainGroup = 7555FF72242A565900829871;
packageReferences = (
@@ -279,6 +279,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 6A1EDFD12E294F7D00429CEF /* Translations.xcstrings in Resources */,
058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */,
058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */,
);
@@ -394,6 +395,7 @@
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
@@ -448,6 +450,7 @@
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
diff --git a/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift b/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift
index ff5c875..380c646 100644
--- a/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift
+++ b/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift
@@ -30,6 +30,8 @@ struct ComicBookListView: View {
var onClick: (ComicBook) -> Void
+ var comicBookCount: Int { return comicBookList.count }
+
var body: some View {
NavigationStack {
ScrollView {
@@ -48,8 +50,8 @@ struct ComicBookListView: View {
}
.navigationTitle(
String(
- localized: "comic-book-list.title",
- defaultValue: "Comic List"
+ localized: "\(comicBookCount) Comic Books",
+ table: "Translations"
)
)
}