diff --git a/.github/workflows/android-tests.yml b/.github/workflows/android-tests.yml
new file mode 100644
index 00000000..2879b0e9
--- /dev/null
+++ b/.github/workflows/android-tests.yml
@@ -0,0 +1,32 @@
+name: Android CI Unit Tests
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+
+jobs:
+ unit-tests:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v4
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
+ # Cache Gradle dependencies to speed up subsequent builds
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@v3
+
+ - name: Make Gradlew Executable
+ run: chmod +x ./gradlew
+
+ - name: Run Unit Tests
+ run: ./gradlew test
+
diff --git a/Images/feature-graphic (1).png b/Images/feature-graphic (1).png
deleted file mode 100644
index 863936f8..00000000
Binary files a/Images/feature-graphic (1).png and /dev/null differ
diff --git a/Images/feature-graphic.jpg b/Images/feature-graphic.jpg
deleted file mode 100644
index 802368dd..00000000
Binary files a/Images/feature-graphic.jpg and /dev/null differ
diff --git a/Images/feature-graphic.png b/Images/feature-graphic.png
deleted file mode 100644
index 863936f8..00000000
Binary files a/Images/feature-graphic.png and /dev/null differ
diff --git a/Images/foldable-browse-detail.png b/Images/foldable-browse-detail.png
new file mode 100644
index 00000000..2739a5cc
Binary files /dev/null and b/Images/foldable-browse-detail.png differ
diff --git a/Images/foldable-browse-grid.png b/Images/foldable-browse-grid.png
new file mode 100644
index 00000000..aab3376b
Binary files /dev/null and b/Images/foldable-browse-grid.png differ
diff --git a/Images/foldable-browse-screen-list.png b/Images/foldable-browse-screen-list.png
new file mode 100644
index 00000000..801a2e49
Binary files /dev/null and b/Images/foldable-browse-screen-list.png differ
diff --git a/Images/foldable-reading-dictionary.png b/Images/foldable-reading-dictionary.png
new file mode 100644
index 00000000..6523f511
Binary files /dev/null and b/Images/foldable-reading-dictionary.png differ
diff --git a/Images/foldable-reading-toc-pane.png b/Images/foldable-reading-toc-pane.png
new file mode 100644
index 00000000..28d76c93
Binary files /dev/null and b/Images/foldable-reading-toc-pane.png differ
diff --git a/Images/foldable-reading-translation-pane.png b/Images/foldable-reading-translation-pane.png
new file mode 100644
index 00000000..bc1fc895
Binary files /dev/null and b/Images/foldable-reading-translation-pane.png differ
diff --git a/Images/foldable-reading.png b/Images/foldable-reading.png
new file mode 100644
index 00000000..3704b4d2
Binary files /dev/null and b/Images/foldable-reading.png differ
diff --git a/Images/gk-library-view-translations.png b/Images/gk-library-view-translations.png
deleted file mode 100644
index 1fb95b72..00000000
Binary files a/Images/gk-library-view-translations.png and /dev/null differ
diff --git a/Images/gk-library-view.png b/Images/gk-library-view.png
deleted file mode 100644
index 70a3952e..00000000
Binary files a/Images/gk-library-view.png and /dev/null differ
diff --git a/Images/gk-reading-view-translation.png b/Images/gk-reading-view-translation.png
deleted file mode 100644
index 7651ea89..00000000
Binary files a/Images/gk-reading-view-translation.png and /dev/null differ
diff --git a/Images/gk-reading-view.png b/Images/gk-reading-view.png
deleted file mode 100644
index 9e6d324b..00000000
Binary files a/Images/gk-reading-view.png and /dev/null differ
diff --git a/Images/launcher-3.webp b/Images/launcher-3.webp
new file mode 100644
index 00000000..b47a6f3a
Binary files /dev/null and b/Images/launcher-3.webp differ
diff --git a/Images/library-lazy-cards.png b/Images/library-lazy-cards.png
deleted file mode 100644
index 3fa22ede..00000000
Binary files a/Images/library-lazy-cards.png and /dev/null differ
diff --git a/Images/library-view-translations.png b/Images/library-view-translations.png
deleted file mode 100644
index eea0ac45..00000000
Binary files a/Images/library-view-translations.png and /dev/null differ
diff --git a/Images/phone-browse-grid.png b/Images/phone-browse-grid.png
new file mode 100644
index 00000000..6d8e2a7d
Binary files /dev/null and b/Images/phone-browse-grid.png differ
diff --git a/Images/phone-browse-screen-detail.png b/Images/phone-browse-screen-detail.png
new file mode 100644
index 00000000..18f44639
Binary files /dev/null and b/Images/phone-browse-screen-detail.png differ
diff --git a/Images/phone-browse-screen-list.png b/Images/phone-browse-screen-list.png
new file mode 100644
index 00000000..bce2c9d0
Binary files /dev/null and b/Images/phone-browse-screen-list.png differ
diff --git a/Images/phone-reading-screen-dictionary.png b/Images/phone-reading-screen-dictionary.png
new file mode 100644
index 00000000..c340d3f2
Binary files /dev/null and b/Images/phone-reading-screen-dictionary.png differ
diff --git a/Images/phone-reading-screen-main.png b/Images/phone-reading-screen-main.png
new file mode 100644
index 00000000..fb1954f8
Binary files /dev/null and b/Images/phone-reading-screen-main.png differ
diff --git a/Images/phone-reading-screen-toc-pane.png b/Images/phone-reading-screen-toc-pane.png
new file mode 100644
index 00000000..25e517d3
Binary files /dev/null and b/Images/phone-reading-screen-toc-pane.png differ
diff --git a/Images/phone-reading-screen-translation-pane.png b/Images/phone-reading-screen-translation-pane.png
new file mode 100644
index 00000000..2e7c02d6
Binary files /dev/null and b/Images/phone-reading-screen-translation-pane.png differ
diff --git a/Images/reading-view-dictionary.png b/Images/reading-view-dictionary.png
deleted file mode 100644
index a0e4ec3b..00000000
Binary files a/Images/reading-view-dictionary.png and /dev/null differ
diff --git a/Images/reading-view-list.png b/Images/reading-view-list.png
deleted file mode 100644
index e140ec85..00000000
Binary files a/Images/reading-view-list.png and /dev/null differ
diff --git a/Images/reading-view.png b/Images/reading-view.png
deleted file mode 100644
index 9274d598..00000000
Binary files a/Images/reading-view.png and /dev/null differ
diff --git a/Images/tablet-browse-detail.png b/Images/tablet-browse-detail.png
new file mode 100644
index 00000000..b785cd0a
Binary files /dev/null and b/Images/tablet-browse-detail.png differ
diff --git a/Images/tablet-browse-grid.png b/Images/tablet-browse-grid.png
new file mode 100644
index 00000000..64c64475
Binary files /dev/null and b/Images/tablet-browse-grid.png differ
diff --git a/Images/tablet-browse-list.png b/Images/tablet-browse-list.png
new file mode 100644
index 00000000..74ac55e3
Binary files /dev/null and b/Images/tablet-browse-list.png differ
diff --git a/Images/tablet-reading-dictionary.png b/Images/tablet-reading-dictionary.png
new file mode 100644
index 00000000..2b428583
Binary files /dev/null and b/Images/tablet-reading-dictionary.png differ
diff --git a/Images/tablet-reading-toc-pane.png b/Images/tablet-reading-toc-pane.png
new file mode 100644
index 00000000..76ab9e88
Binary files /dev/null and b/Images/tablet-reading-toc-pane.png differ
diff --git a/Images/tablet-reading-translation-pane.png b/Images/tablet-reading-translation-pane.png
new file mode 100644
index 00000000..6b149b70
Binary files /dev/null and b/Images/tablet-reading-translation-pane.png differ
diff --git a/Images/tablet-reading.png b/Images/tablet-reading.png
new file mode 100644
index 00000000..68f02328
Binary files /dev/null and b/Images/tablet-reading.png differ
diff --git a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt b/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt
index 54409c8d..98a3150a 100644
--- a/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt
+++ b/LatinReader/compose/src/main/java/com/telpirion/compose/ui/components/ReaderTopAppBar.kt
@@ -76,6 +76,16 @@ fun ReaderTopAppBar(
contentDescription = null
)
},
+ trailingIcon = {
+ if (searchText.isNotEmpty()) {
+ IconButton(onClick = onClearSearch) {
+ Icon(
+ imageVector = Icons.Default.Close,
+ contentDescription = stringResource(R.string.cd_clear_search)
+ )
+ }
+ }
+ },
modifier = Modifier.width(IntrinsicSize.Max)
.align(Alignment.CenterHorizontally)
.testTag("SearchField"),
@@ -108,14 +118,6 @@ fun ReaderTopAppBar(
}
},
actions = {
- if (searchText.isNotEmpty()) {
- IconButton(onClick = onClearSearch) { // Use the new callback
- Icon(
- imageVector = Icons.Default.Close,
- contentDescription = stringResource(R.string.cd_clear_search)
- )
- }
- }
if (actions.isNotEmpty()) {
var showMenu by remember { mutableStateOf(false) }
Box {
diff --git a/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt b/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt
new file mode 100644
index 00000000..05a20fa1
--- /dev/null
+++ b/LatinReader/core/src/test/java/com/ericmschmidt/classicsreader/data/DictionaryTest.kt
@@ -0,0 +1,114 @@
+package com.ericmschmidt.classicsreader.data
+
+import com.ericmschmidt.classicsreader.MyApplication
+import com.ericmschmidt.classicsreader.utilities.getEntry
+import com.ericmschmidt.classicsreader.utilities.getResourceStream
+import io.mockk.every
+import io.mockk.mockk
+import io.mockk.mockkObject
+import io.mockk.mockkStatic
+import io.mockk.unmockkAll
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import java.io.ByteArrayInputStream
+
+class DictionaryTest {
+
+ private lateinit var libraryMock: Library
+ private lateinit var workInfoMock: WorkInfo
+ private lateinit var appInstanceMock: MyApplication.ApplicationInstance
+
+ private val dictionaryEntriesXmlString = """
+
+
+ A1
+ a2
+ abactus
+ abacus
+ abalienatio
+ abalieno
+
+ """.trimIndent()
+
+ @Before
+ fun setUp() {
+ // Mock static objects/functions
+ mockkObject(MyApplication.Factory)
+ mockkStatic("com.ericmschmidt.classicsreader.utilities.ResourceHelpersKt")
+
+ libraryMock = mockk()
+ workInfoMock = WorkInfo(id = "dict", location = 123)
+
+ every { libraryMock.getDictionaryInfo() } returns workInfoMock
+ every { libraryMock.getDictionaryEntryResource() } returns 456
+
+ appInstanceMock = MyApplication.ApplicationInstance(
+ context = mockk(),
+ library = libraryMock,
+ isNonRomanChar = false,
+ textConverter = null
+ )
+
+ every { MyApplication.applicationInstance() } returns appInstanceMock
+
+ // Mock getResourceStream for entry headers resource (456)
+ every { getResourceStream(456) } answers {
+ ByteArrayInputStream(dictionaryEntriesXmlString.toByteArray(Charsets.UTF_8))
+ }
+ // Mock getResourceStream for dictionary raw content resource (123)
+ every { getResourceStream(123) } answers {
+ ByteArrayInputStream("".toByteArray(Charsets.UTF_8))
+ }
+
+ // Mock the top-level getEntry function to bypass Android's XmlPullParser on JVM unit tests
+ every { getEntry(any(), any(), any()) } returns "driven away, driven off"
+ }
+
+ @After
+ fun tearDown() {
+ unmockkAll()
+ }
+
+ @Test
+ fun testDictionary_init() {
+ val dictionary = Dictionary()
+ assertNotNull(dictionary)
+ assertEquals(6, dictionary.entryCount())
+ }
+
+ @Test
+ fun testDictionary_isInDictionary() {
+ val dictionary = Dictionary()
+ assertTrue(dictionary.isInDictionary("abactus"))
+ assertTrue(dictionary.isInDictionary("abacus"))
+ assertFalse(dictionary.isInDictionary("nonexistent"))
+ }
+
+ @Test
+ fun testDictionary_getEntry() {
+ val dictionary = Dictionary()
+ val entry = dictionary.getEntry("abactus")
+ assertNotNull(entry)
+ assertTrue(entry!!.contains("driven away, driven off"))
+ }
+
+ @Test
+ fun testDictionary_getEntry_nonexistent_returnsEmptyString() {
+ val dictionary = Dictionary()
+ val entry = dictionary.getEntry("nonexistent")
+ assertEquals("", entry)
+ }
+
+ @Test
+ fun testDictionary_getRandomEntry() {
+ val dictionary = Dictionary()
+ val randomEntry = dictionary.getRandomEntry()
+ assertNotNull(randomEntry)
+ assertTrue(randomEntry!!.isNotEmpty())
+ }
+}
diff --git a/LatinReader/gradle/libs.versions.toml b/LatinReader/gradle/libs.versions.toml
index 4668a2b2..a700a932 100644
--- a/LatinReader/gradle/libs.versions.toml
+++ b/LatinReader/gradle/libs.versions.toml
@@ -1,18 +1,18 @@
[versions]
activity-compose = "1.13.0"
adaptive = "1.2.0"
-agp = "9.2.0-alpha05"
-androidx-ui-tooling = "1.10.6"
+agp = "9.2.1"
+androidx-ui-tooling = "1.11.2"
appcompat = "1.7.1"
-compose-bom = "2026.03.01"
+compose-bom = "2026.05.01"
core = "1.7.0"
core-ktx = "1.18.0"
datastore-preferences = "1.2.1"
espresso-core = "3.7.0"
espresso-core-version = "3.0.2"
espresso-device = "1.1.0"
-foundation = "1.10.6"
-jetbrains-kotlin-android = "2.3.20"
+foundation = "1.11.2"
+jetbrains-kotlin-android = "2.3.21"
junit = "1.3.0"
junit-version = "4.13.2"
kxml2 = "2.3.0"
@@ -21,16 +21,16 @@ lifecycle-runtime-ktx = "2.10.0"
markdownview-android = "2.0.0"
#noinspection GradleDependency
markdownview-android-v1110 = "1.1.1"
-material = "1.13.0"
-material-ripple = "1.10.6"
+material = "1.14.0"
+material-ripple = "1.11.2"
mockito-core = "5.23.0"
mockito-kotlin = "6.3.0"
mockk = "1.14.9"
mockk-android = "1.14.9"
-navigation-compose = "2.9.7"
-navigation-fragment-ktx = "2.9.7"
-navigation-safe-args-gradle-plugin = "2.9.7"
-navigation-ui-ktx = "2.9.7"
+navigation-compose = "2.9.8"
+navigation-fragment-ktx = "2.9.8"
+navigation-safe-args-gradle-plugin = "2.9.8"
+navigation-ui-ktx = "2.9.8"
preference-ktx = "1.2.1"
recyclerview = "1.4.0"
robolectric = "4.16.1"
@@ -38,9 +38,9 @@ runner = "1.0.2"
truth = "1.4.5"
material3-adaptive-navigation-suite = "1.4.0"
material3-window-size-class1 = "1.4.0"
-ui-test-junit4 = "1.10.6"
-ui-text-google-fonts = "1.10.6"
-junit-jupiter = "6.0.3"
+ui-test-junit4 = "1.11.2"
+ui-text-google-fonts = "1.11.2"
+junit-jupiter = "6.1.0"
[libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" }
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_anabasis.png b/LatinReader/greekreader/src/main/res/drawable/work_anabasis.png
deleted file mode 100644
index 27ca5e5b..00000000
Binary files a/LatinReader/greekreader/src/main/res/drawable/work_anabasis.png and /dev/null differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_anabasis.webp b/LatinReader/greekreader/src/main/res/drawable/work_anabasis.webp
new file mode 100644
index 00000000..b7075b10
Binary files /dev/null and b/LatinReader/greekreader/src/main/res/drawable/work_anabasis.webp differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_iliad.png b/LatinReader/greekreader/src/main/res/drawable/work_iliad.png
deleted file mode 100644
index b1e56e5d..00000000
Binary files a/LatinReader/greekreader/src/main/res/drawable/work_iliad.png and /dev/null differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_iliad.webp b/LatinReader/greekreader/src/main/res/drawable/work_iliad.webp
new file mode 100644
index 00000000..720fb466
Binary files /dev/null and b/LatinReader/greekreader/src/main/res/drawable/work_iliad.webp differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_odyssey.png b/LatinReader/greekreader/src/main/res/drawable/work_odyssey.png
deleted file mode 100644
index 809e2839..00000000
Binary files a/LatinReader/greekreader/src/main/res/drawable/work_odyssey.png and /dev/null differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_odyssey.webp b/LatinReader/greekreader/src/main/res/drawable/work_odyssey.webp
new file mode 100644
index 00000000..f8b62a8e
Binary files /dev/null and b/LatinReader/greekreader/src/main/res/drawable/work_odyssey.webp differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_politics.png b/LatinReader/greekreader/src/main/res/drawable/work_politics.png
deleted file mode 100644
index 56a613c8..00000000
Binary files a/LatinReader/greekreader/src/main/res/drawable/work_politics.png and /dev/null differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_politics.webp b/LatinReader/greekreader/src/main/res/drawable/work_politics.webp
new file mode 100644
index 00000000..f64c19fd
Binary files /dev/null and b/LatinReader/greekreader/src/main/res/drawable/work_politics.webp differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_speeches.png b/LatinReader/greekreader/src/main/res/drawable/work_speeches.png
deleted file mode 100644
index a0faf119..00000000
Binary files a/LatinReader/greekreader/src/main/res/drawable/work_speeches.png and /dev/null differ
diff --git a/LatinReader/greekreader/src/main/res/drawable/work_speeches.webp b/LatinReader/greekreader/src/main/res/drawable/work_speeches.webp
new file mode 100644
index 00000000..41a730a1
Binary files /dev/null and b/LatinReader/greekreader/src/main/res/drawable/work_speeches.webp differ
diff --git a/LatinReader/latinreader-compose/build.gradle b/LatinReader/latinreader-compose/build.gradle
index 47c0944a..694943fe 100644
--- a/LatinReader/latinreader-compose/build.gradle
+++ b/LatinReader/latinreader-compose/build.gradle
@@ -6,15 +6,15 @@ plugins {
android {
namespace="com.ericmschmidt.classicsreader.latin.compose"
compileSdk {
- version = release(36)
+ version = release(37)
}
defaultConfig {
- applicationId "com.ericmschmidt.classicsreader.latin.compose"
+ applicationId "com.ericmschmidt.latinreader"
minSdk 24
- targetSdk 36
- versionCode(21)
- versionName("2.1.0")
+ targetSdk 37
+ versionCode(22)
+ versionName("3.0.0")
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/LatinReader/latinreader-views/src/main/AndroidManifest.xml b/LatinReader/latinreader-views/src/main/AndroidManifest.xml
index 00dab2c0..3caacad3 100644
--- a/LatinReader/latinreader-views/src/main/AndroidManifest.xml
+++ b/LatinReader/latinreader-views/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
diff --git a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt b/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt
index 28fb9119..d900a834 100644
--- a/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt
+++ b/LatinReader/latinreader/src/main/java/com/ericmschmidt/latin/theme/Color.kt
@@ -3,11 +3,11 @@ import androidx.compose.ui.graphics.Color
val primaryLight = Color(0xFF804D78)
val onPrimaryLight = Color(0xFFFFFFFF)
-val primaryContainerLight = Color(0xFFFFD7F4)
+val primaryContainerLight = Color(0xFFFFD7FF)
val onPrimaryContainerLight = Color(0xFF66355F)
val secondaryLight = Color(0xFF6E5868)
val onSecondaryLight = Color(0xFFFFFFFF)
-val secondaryContainerLight = Color(0xFFF8DAEE)
+val secondaryContainerLight = Color(0xFFF8DAFF)
val onSecondaryContainerLight = Color(0xFF554050)
val tertiaryLight = Color(0xFF815344)
val onTertiaryLight = Color(0xFFFFFFFF)
@@ -111,11 +111,11 @@ val surfaceContainerHighestLightHighContrast = Color(0xFFCFC3C9)
val primaryDark = Color(0xFFF2B3E5)
val onPrimaryDark = Color(0xFF4C1F48)
-val primaryContainerDark = Color(0xFF66355F)
+val primaryContainerDark = Color(0xFF66357F)
val onPrimaryContainerDark = Color(0xFFFFD7F4)
val secondaryDark = Color(0xFFDBBED2)
val onSecondaryDark = Color(0xFF3D2A39)
-val secondaryContainerDark = Color(0xFF554050)
+val secondaryContainerDark = Color(0xFF554068)
val onSecondaryContainerDark = Color(0xFFF8DAEE)
val tertiaryDark = Color(0xFFF5B8A6)
val onTertiaryDark = Color(0xFF4C261A)
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.png b/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.png
deleted file mode 100644
index 1f5ab105..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.webp b/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.webp
new file mode 100644
index 00000000..45a52c5a
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_ab_urbe_condita.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.png b/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.png
deleted file mode 100644
index 7a27d492..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.webp b/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.webp
new file mode 100644
index 00000000..f0c8bc6c
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_apocolocyntosis.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_carmina.png b/LatinReader/latinreader/src/main/res/drawable/work_carmina.png
deleted file mode 100644
index 6934f8f8..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_carmina.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_carmina.webp b/LatinReader/latinreader/src/main/res/drawable/work_carmina.webp
new file mode 100644
index 00000000..bbe72d72
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_carmina.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.png b/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.png
deleted file mode 100644
index 2c4d3a72..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.webp b/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.webp
new file mode 100644
index 00000000..11d33697
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_de_bello_gallico.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.png b/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.png
deleted file mode 100644
index 713e0dbf..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp b/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp
new file mode 100644
index 00000000..9602d8b8
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_de_bellum_jugurthinum.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.png b/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.png
deleted file mode 100644
index beeed5a1..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.webp b/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.webp
new file mode 100644
index 00000000..fed2f617
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_de_rerum_natura.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.png b/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.png
deleted file mode 100644
index cee5706b..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.webp b/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.webp
new file mode 100644
index 00000000..9f32547f
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_metamorphoses.webp differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_satyricon.png b/LatinReader/latinreader/src/main/res/drawable/work_satyricon.png
deleted file mode 100644
index 8e7b20e1..00000000
Binary files a/LatinReader/latinreader/src/main/res/drawable/work_satyricon.png and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/drawable/work_satyricon.webp b/LatinReader/latinreader/src/main/res/drawable/work_satyricon.webp
new file mode 100644
index 00000000..b285d4e1
Binary files /dev/null and b/LatinReader/latinreader/src/main/res/drawable/work_satyricon.webp differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml b/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml
deleted file mode 100644
index b01727ce..00000000
--- a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml b/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml
deleted file mode 100644
index b01727ce..00000000
--- a/LatinReader/latinreader/src/main/res/mipmap-anydpi-v26/ic_launcher_2_round.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp b/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp
deleted file mode 100644
index d86330f1..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp b/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp
deleted file mode 100644
index c133ab27..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2_foreground.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp b/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp
deleted file mode 100644
index 3bc3c7e7..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-hdpi/ic_launcher_2_round.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp b/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp
deleted file mode 100644
index bb4681de..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp b/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp
deleted file mode 100644
index 091733a2..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2_foreground.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp b/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp
deleted file mode 100644
index 41405cc2..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-mdpi/ic_launcher_2_round.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp b/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp
deleted file mode 100644
index bace0987..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp b/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp
deleted file mode 100644
index 48f7fabe..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2_foreground.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp b/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp
deleted file mode 100644
index 0a0a4647..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xhdpi/ic_launcher_2_round.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp b/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp
deleted file mode 100644
index d16f08ee..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp b/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp
deleted file mode 100644
index 435cc00e..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_foreground.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp b/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp
deleted file mode 100644
index c47dce81..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xxhdpi/ic_launcher_2_round.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp b/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp
deleted file mode 100644
index 25348750..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp b/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp
deleted file mode 100644
index b5c01b8b..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_foreground.webp and /dev/null differ
diff --git a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp b/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp
deleted file mode 100644
index c78c1dc9..00000000
Binary files a/LatinReader/latinreader/src/main/res/mipmap-xxxhdpi/ic_launcher_2_round.webp and /dev/null differ