commit 18bbd385580d8f03fb5bcec1cda1d18d540d9e86 equwal <13551856+equwal@users.noreply.github.com> 2026-09-26 15:12:57 -0700 Add a More apps section with links to the other apps The settings screen shows the other sites and apps of the author, after About. A tap on an entry opens its page in the browser. Add a More projects section to the README.
README.md | 24 ++++++++++ app/src/main/java/dev/equwal/inkdim/MoreApps.kt | 55 ++++++++++++++++++++++ .../java/dev/equwal/inkdim/SettingsActivity.kt | 5 ++ .../test/java/dev/equwal/inkdim/MoreAppsTest.kt | 30 ++++++++++++ 4 files changed, 114 insertions(+)
diff --git a/README.md b/README.md index 1f66e8e..6583b96 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,30 @@ Release signing is optional. Put a `keystore.properties` file in the root of the project with `storeFile`, `storePassword`, `keyAlias` and `keyPassword`. Without that file the build makes an unsigned APK. +## More projects + +- [SubRead](https://subread.space/): read along with an audiobook, in the browser. + Also [for Android](https://github.com/equwal/subread-android/releases/latest), + [for YouTube](https://github.com/equwal/subread-extension/releases/latest) + and [for KOReader](https://github.com/equwal/subread.koplugin). +- [SubRead Overlay](https://github.com/equwal/subread-overlay/releases/latest): subtitle lines over any Android media player. +- [SubRead Dictionary](https://github.com/equwal/subread-dictionary/releases/latest): a pop-up dictionary for Android that reads Yomitan dictionaries. +- [SubRead Anki](https://github.com/equwal/subread-anki): one tap makes an Anki card from any Android app. +- [Subrep](https://github.com/equwal/subrep-android/releases/latest): live captions of the sound of your phone. +- [Book Simulator](https://booksimulator.com/): a reading room for Aozora Bunko and Project Gutenberg books. +- [honjimaku.com](https://honjimaku.com/): subtitles for Japanese audiobooks. +- [sbm Sync](https://sbmsync.com/): your bookmarks, the same on every device, + with [sbm](https://github.com/equwal/sbm) for dmenu, + [sbm for Android](https://github.com/equwal/sbm-android/releases/latest) + and the [sbm add-on](https://github.com/equwal/sbm-extension/releases/latest) for Firefox and Chrome. +- [Rebind](https://github.com/equwal/rebind/releases): remap the hardware buttons of e-ink readers and Android, + with [Ink Recents](https://github.com/equwal/ink-recents/releases/latest), + [Ink Dim](https://github.com/equwal/ink-dim/releases/latest) + and [Ink Update](https://github.com/equwal/ink-update/releases/latest). +- [dickt.store](https://dickt.store/): language-learning tools, flashcards and web toys. +- [hentaibun.online](https://hentaibun.online/): learn kanbun and kobun. +- [Recently Written](https://recentlywritten.com/): the blog, and a list of [all projects](https://recentlywritten.com/projects.html). + ## Licence GPL-3.0-or-later. See [LICENSE](LICENSE). diff --git a/app/src/main/java/dev/equwal/inkdim/MoreApps.kt b/app/src/main/java/dev/equwal/inkdim/MoreApps.kt new file mode 100644 index 0000000..4107f27 --- /dev/null +++ b/app/src/main/java/dev/equwal/inkdim/MoreApps.kt @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// Copyright (c) 2026 equwal +package dev.equwal.inkdim + +/** + * The other sites and apps of the same author, for the settings screen. They are + * in the order of the catalog: the sites, then the Android apps, then the list of + * all projects. Ink Dim is not in it. + */ +object MoreApps { + + /** One link: a name, one line about it, and the page that a tap opens. */ + class App(val name: String, val line: String, val url: String) + + val ALL = listOf( + App("SubRead", "Read along with an audiobook.", "https://subread.space/"), + App("Book Simulator", "A reading room for Aozora Bunko and Project Gutenberg books.", "https://booksimulator.com/"), + App("honjimaku.com", "Subtitles for Japanese audiobooks.", "https://honjimaku.com/"), + App("sbm Sync", "Your bookmarks, the same on every device.", "https://sbmsync.com/"), + App( + "SubRead for Android", "Times an audiobook against its ebook on the device.", + "https://github.com/equwal/subread-android/releases/latest" + ), + App( + "SubRead Overlay", "Subtitle lines over any Android media player.", + "https://github.com/equwal/subread-overlay/releases/latest" + ), + App( + "SubRead Dictionary", "Pop-up dictionary that reads Yomitan dictionaries.", + "https://github.com/equwal/subread-dictionary/releases/latest" + ), + App("SubRead Anki", "One tap makes an Anki card from any app.", "https://github.com/equwal/subread-anki"), + App( + "Subrep", "Live captions of the sound of your phone.", + "https://github.com/equwal/subrep-android/releases/latest" + ), + App( + "sbm for Android", "Fuzzy search for your bookmarks.", + "https://github.com/equwal/sbm-android/releases/latest" + ), + App( + "Rebind", "Remap the hardware buttons of e-ink readers and Android.", + "https://github.com/equwal/rebind/releases" + ), + App( + "Ink Recents", "A recent-apps switcher for e-ink.", + "https://github.com/equwal/ink-recents/releases/latest" + ), + App( + "Ink Update", "Tells you when Rebind and its extensions update.", + "https://github.com/equwal/ink-update/releases/latest" + ), + App("All projects", "Everything, with source code.", "https://recentlywritten.com/projects.html") + ) +} diff --git a/app/src/main/java/dev/equwal/inkdim/SettingsActivity.kt b/app/src/main/java/dev/equwal/inkdim/SettingsActivity.kt index 88ed476..dd00404 100644 --- a/app/src/main/java/dev/equwal/inkdim/SettingsActivity.kt +++ b/app/src/main/java/dev/equwal/inkdim/SettingsActivity.kt @@ -59,6 +59,11 @@ class SettingsActivity : Activity() { col.row("Licence", null, enabled = false, state = "GPL-3.0-or-later") col.row("Source code", REPO.removePrefix("https://")) { start(Intent(Intent.ACTION_VIEW, Uri.parse(REPO))) } col.row("Buy me a coffee", TIP.removePrefix("https://")) { start(Intent(Intent.ACTION_VIEW, Uri.parse(TIP))) } + + col.header("More apps") + for (app in MoreApps.ALL) { + col.row(app.name, app.line) { start(Intent(Intent.ACTION_VIEW, Uri.parse(app.url))) } + } } private fun lightState(): String = when { diff --git a/app/src/test/java/dev/equwal/inkdim/MoreAppsTest.kt b/app/src/test/java/dev/equwal/inkdim/MoreAppsTest.kt new file mode 100644 index 0000000..9ab8066 --- /dev/null +++ b/app/src/test/java/dev/equwal/inkdim/MoreAppsTest.kt @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// Copyright (c) 2026 equwal +package dev.equwal.inkdim + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +/** Tests for the list of the More apps section. */ +class MoreAppsTest { + + @Test fun `the list leaves out Ink Dim`() { + assertFalse(MoreApps.ALL.any { it.name == "Ink Dim" || "equwal/ink-dim" in it.url }) + } + + @Test fun `each link opens an https page`() { + for (app in MoreApps.ALL) assertTrue(app.url, app.url.startsWith("https://")) + } + + @Test fun `the list keeps the order of the catalog`() { + assertEquals( + listOf("SubRead", "Book Simulator", "honjimaku.com", "sbm Sync"), + MoreApps.ALL.take(4).map { it.name } + ) + assertEquals("All projects", MoreApps.ALL.last().name) + // The catalog has 15 entries. Ink Dim is the one that is not in the list. + assertEquals(14, MoreApps.ALL.size) + } +}