Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
1f8c9cc
Merge and cleanup version catalogs
Secozzi Apr 27, 2026
cdcb86a
Translations update from Hosted Weblate (#3003)
weblate Mar 21, 2026
e62d5bf
Cleanup and rework build logic
Secozzi Apr 27, 2026
ad72dba
Update Gradle to v9 (#2333)
renovate-bot Mar 21, 2026
7b98290
Address CancellableContinuation.resume deprecation (#3115)
MajorTanya Mar 21, 2026
90b6dd8
Update android.gradle to v9 (major) (#3105)
renovate-bot Mar 22, 2026
68b3346
Fix wrong exception being caught after 8c480c6355 migration
AntsyLich Mar 23, 2026
22353ff
Address Gradle warning about `Task.project` (#3118)
MajorTanya Mar 23, 2026
c1068df
Update dependency io.kotest:kotest-assertions-core to v6.1.8 (#3132)
renovate-bot Mar 24, 2026
88691d8
Update dependency io.kotest:kotest-assertions-core to v6.1.9 (#3137)
renovate-bot Mar 25, 2026
6508b4e
Revert "Update android.gradle to v9 (major) (#3105)"
AntsyLich Mar 25, 2026
f22ba5b
Use plural forms for update error notification (#3090)
sudo-ezekiel Mar 26, 2026
4c01b3b
Update dependency androidx.work:work-runtime to v2.11.2 (#3146)
renovate-bot Mar 26, 2026
d793ad4
Update r0adkll/sign-android-release digest to a391126 (#3145)
renovate-bot Mar 26, 2026
027c46b
Update dependency androidx.compose:compose-bom-beta to v2026.03.01 (#…
renovate-bot Mar 26, 2026
fe63a53
Add informative error for unapproved MAL titles (#3155)
MajorTanya Mar 26, 2026
3282ede
Update dependency io.kotest:kotest-assertions-core to v6.1.10 (#3172)
renovate-bot Mar 30, 2026
2e72841
Update dependency com.gradleup.tapmoc:tapmoc-gradle-plugin to v0.4.1 …
renovate-bot Mar 30, 2026
0b7fc9e
Run SQLDelight database migration verification task in CI
Secozzi May 10, 2026
cfe1441
Run tests before compiling APK in CI
Secozzi May 10, 2026
6c46a84
Add `gradle.properties` to `build-logic` synced with root `gradle.pro…
ArthurKun21 Mar 30, 2026
fa18503
Update dependency io.kotest:kotest-assertions-core to v6.1.11 (#3185)
renovate-bot Apr 7, 2026
7532ac5
Update moko.resources to v0.26.2 (#3202)
renovate-bot Apr 8, 2026
8290644
Update dependency androidx.annotation:annotation to v1.10.0 (#3204)
renovate-bot Apr 8, 2026
434d17d
Update dependency androidx.compose:compose-bom-beta to v2026.04.00 (#…
renovate-bot Apr 9, 2026
5c5915c
Update aboutLibraries to v14 (major) (#3195)
renovate-bot Apr 9, 2026
844ac57
Update moko.resources to v0.26.3 (#3213)
renovate-bot Apr 9, 2026
b58ad27
Update kotlinx.serialization to v1.11.0 (#3218)
renovate-bot Apr 9, 2026
48cb698
Translations update from Hosted Weblate (#3141)
weblate Apr 9, 2026
129ed52
Update aboutLibraries to v14.0.1 (#3217)
renovate-bot Apr 10, 2026
fd81144
Update dependency com.google.firebase.crashlytics to v3.0.7 (#3219)
renovate-bot Apr 10, 2026
5cdb2ea
Update dependency com.google.firebase:firebase-bom to v34.12.0 (#3216)
renovate-bot Apr 10, 2026
df49339
Translations update from Hosted Weblate (#3222)
weblate Apr 11, 2026
496ecea
Update dependency org.jsoup:jsoup to v1.22.2 (#3245)
renovate-bot Apr 20, 2026
192b521
Update dependency com.gradleup.tapmoc:tapmoc-gradle-plugin to v0.4.2 …
renovate-bot Apr 20, 2026
e66fc14
Update softprops/action-gh-release action to v2.6.2 (#3230)
renovate-bot Apr 20, 2026
77f4bfc
Update kotlin monorepo to v2.3.21 (#3258)
renovate-bot Apr 23, 2026
28a017b
Update dependency sh.calvin.reorderable:reorderable to v3.1.0 (#3251)
renovate-bot Apr 23, 2026
bf18c74
Update dependency androidx.compose:compose-bom-beta to v2026.04.01 (#…
renovate-bot Apr 24, 2026
bde6d57
Update dependency image-decoder to e03b81e18a (#3262)
AntsyLich Apr 25, 2026
f5291b0
Reapply "Update android.gradle to v9 (major)"
Secozzi May 10, 2026
7fba12c
Update sqldelight-androidx-driver and remove transaction management
Secozzi May 11, 2026
b35cf6e
Update Gradle to v9.5.0 (#3274)
renovate-bot Apr 28, 2026
d2feadc
Update android.gradle to v9.2.1 (#3294)
renovate-bot May 6, 2026
b0e1a69
Update moko.resources to v0.26.4 (#3297)
renovate-bot May 6, 2026
93d6f8d
Update kotlinx-coroutines monorepo to v1.11.0 (#3305)
renovate-bot May 8, 2026
dfd8619
Update dependency androidx.compose:compose-bom-alpha to v2026.05.00 (…
renovate-bot May 8, 2026
9d8bcee
Update dependency com.google.firebase:firebase-bom to v34.13.0 (#3303)
renovate-bot May 8, 2026
21d1086
Update aboutLibraries to v14.2.0 (#3283)
renovate-bot May 8, 2026
2bf18b4
Update dependency com.eygraber:sqldelight-androidx-driver to v0.2.0 (…
renovate-bot May 8, 2026
f8f6065
Remove redundant KGP classpath in :app
Secozzi May 11, 2026
98053c4
Update dependency com.mohamedrejeb.richeditor:richeditor-compose to v…
renovate-bot May 11, 2026
ddf147e
Fix chapters and categories not being added to database
Secozzi May 27, 2026
39cda3b
Update Gradle to v9.5.1 (#3315)
renovate-bot May 14, 2026
85ca5bc
Update spotless to v8.5.1 (#3322)
renovate-bot May 22, 2026
5507eaa
Update dependency org.junit.jupiter:junit-jupiter to v6.1.0 (#3335)
renovate-bot May 22, 2026
63e7799
Update dependency androidx.compose:compose-bom-alpha to v2026.05.01 (…
renovate-bot May 22, 2026
b9e2439
Update aboutLibraries to v14.2.1 (#3343)
renovate-bot May 25, 2026
c4b74ea
Update changelog
Secozzi May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,22 @@ jobs:
- name: Check code format
run: ./gradlew spotlessCheck

- name: Build app
run: ./gradlew assembleRelease -Penable-updater

- name: Run unit tests
id: unit_tests
run: ./gradlew testReleaseUnitTest
run: ./gradlew testDebugUnitTest

- name: Verify SQLDelight migrations
run: ./gradlew verifySqlDelightMigration

- name: Upload test report
if: steps.unit_tests.outcome == 'failure'
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: test-report-${{ github.sha }}
path: app/build/reports/tests/testReleaseUnitTest
path: app/build/reports/tests/testDebugUnitTest

- name: Build app
run: ./gradlew assembleRelease -Penable-updater

- name: Upload APK
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
run: ./gradlew assembleRelease -Penable-updater

- name: Sign APK
uses: r0adkll/sign-android-release@f30bdd30588842ac76044ecdbd4b6d0e3e813478
uses: r0adkll/sign-android-release@a391126403df92c6a0a3988a829dd47f79b89ed7
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
Expand Down Expand Up @@ -110,7 +110,7 @@ jobs:
Animiru

- name: Create GitHub Release
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2.6.2
with:
tag_name: ${{ needs.get_tag.outputs.tag }}
name: Animiru ${{ needs.get_tag.outputs.tag }}
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co
### Added
- Added system font fallback ([@Secozzi](https://github.com/Secozzi)) ([#156](https://github.com/quickdesh/Animiru/pull/156))

### Other
- Merge from Mihon ([@Secozzi](https://github.com/Secozzi)) ([#155](https://github.com/quickdesh/Animiru/pull/155))

## [v0.19.7.3] - 2026-04-17
### Improved
- Allow options in mpv.conf to override options set by `AniyomiMPVView` ([@Secozzi](https://github.com/Secozzi)) ([#151](https://github.com/quickdesh/Animiru/pull/151))
Expand Down
149 changes: 76 additions & 73 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import mihon.buildlogic.Config
import mihon.buildlogic.getBuildTime
import mihon.buildlogic.getCommitCount
import mihon.buildlogic.getGitSha
import mihon.gradle.Config
import mihon.gradle.getBuildTime
import mihon.gradle.getLatestCommitCount
import mihon.gradle.getLatestCommitSha
import mihon.gradle.tasks.ReplaceShortcutsPlaceholderTask

plugins {
id("mihon.android.application")
id("mihon.android.application.compose")
id("com.github.zellius.shortcut-helper")
kotlin("plugin.serialization")
alias(mihonx.plugins.android.application)
alias(mihonx.plugins.compose)
alias(mihonx.plugins.spotless)

alias(libs.plugins.aboutLibraries)
alias(libs.plugins.kotlin.serialization)
}

shortcutHelper.setFilePath("./shortcuts.xml")

android {
namespace = "eu.kanade.tachiyomi"

Expand All @@ -22,9 +22,9 @@ android {
versionCode = 140
versionName = "0.19.7.3"

buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLastCommitTime = false)}\"")
buildConfigField("String", "COMMIT_COUNT", "\"${getLatestCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getLatestCommitSha()}\"")
buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLatestCommitTime = false)}\"")
buildConfigField("boolean", "UPDATER_ENABLED", "${Config.enableUpdater}")

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
Expand All @@ -33,7 +33,7 @@ android {
buildTypes {
val debug by getting {
applicationIdSuffix = ".dev"
versionNameSuffix = "-${getCommitCount()}"
versionNameSuffix = "-${getLatestCommitCount()}"
isPseudoLocalesEnabled = true
}
val release by getting {
Expand All @@ -42,7 +42,7 @@ android {

proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro")

buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLastCommitTime = true)}\"")
buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLatestCommitTime = true)}\"")
}

val commonMatchingFallbacks = listOf(release.name)
Expand All @@ -57,7 +57,7 @@ android {

matchingFallbacks.addAll(commonMatchingFallbacks)

buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLastCommitTime = false)}\"")
buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLatestCommitTime = false)}\"")
}
create("benchmark") {
initWith(release)
Expand All @@ -74,8 +74,8 @@ android {
}

sourceSets {
getByName("preview").res.srcDirs("src/debug/res")
getByName("benchmark").res.srcDirs("src/debug/res")
getByName("preview").res.directories.add("src/debug/res")
getByName("benchmark").res.directories.add("src/debug/res")
}

splits {
Expand Down Expand Up @@ -138,10 +138,6 @@ android {
viewBinding = true
buildConfig = true
aidl = true

// Disable some unused things
renderScript = false
shaders = false
}

lint {
Expand Down Expand Up @@ -189,81 +185,81 @@ dependencies {
implementation(projects.presentationWidget)

// Compose
implementation(compose.activity)
implementation(compose.foundation)
implementation(compose.material3.core)
implementation(compose.material.icons)
implementation(compose.animation)
implementation(compose.animation.graphics)
debugImplementation(compose.ui.tooling)
implementation(compose.ui.tooling.preview)
implementation(compose.ui.util)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.materialIcons)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.animationGraphics)
debugImplementation(libs.androidx.compose.uiTooling)
implementation(libs.androidx.compose.uiToolingPreview)
implementation(libs.androidx.compose.uiUtil)

implementation(androidx.interpolator)
implementation(libs.androidx.interpolator)

implementation(androidx.paging.runtime)
implementation(androidx.paging.compose)
implementation(libs.androidx.paging.runtime)
implementation(libs.androidx.paging.compose)

implementation(androidx.sqlite.bundled)
implementation(libs.androidx.sqlite.bundled)

implementation(kotlinx.reflect)
implementation(kotlinx.immutables)
implementation(libs.kotlin.reflect)
implementation(libs.kotlinx.collections.immutable)

implementation(platform(kotlinx.coroutines.bom))
implementation(kotlinx.bundles.coroutines)
implementation(libs.bundles.kotlinx.coroutines)

implementation(libs.sqldelight.async)

// AndroidX libraries
implementation(androidx.annotation)
implementation(androidx.appcompat)
implementation(androidx.biometricktx)
implementation(androidx.constraintlayout)
implementation(libs.androidx.annotation)
implementation(libs.androidx.appCompat)
implementation(libs.androidx.biometric)
implementation(libs.androidx.constraintLayout)
// AY -->
implementation(aniyomilibs.compose.constraintlayout)
// <-- AY
implementation(androidx.corektx)
implementation(androidx.splashscreen)
implementation(androidx.recyclerview)
implementation(libs.androidx.core)
implementation(libs.androidx.coreSplashScreen)
implementation(libs.androidx.recyclerView)
// AM (REMOVE_LIBRARIES) -->
// implementation(androidx.viewpager)
// implementation(libs.androidx.viewPager)
// <-- AM (REMOVE_LIBRARIES)
implementation(androidx.profileinstaller)
implementation(libs.androidx.profileInstaller)
// AY -->
implementation(aniyomilibs.mediasession)
// <-- AY

implementation(androidx.bundles.lifecycle)
implementation(libs.bundles.androidx.lifecycle)

// Job scheduling
implementation(androidx.workmanager)
implementation(libs.androidx.work)

// RxJava
implementation(libs.rxjava)
implementation(libs.rxJava)

// Networking
implementation(libs.bundles.okhttp)
implementation(libs.okio)
implementation(libs.conscrypt.android) // TLS 1.3 support for Android < 10
implementation(libs.conscrypt) // TLS 1.3 support for Android < 10

// Data serialization (JSON, protobuf, xml)
implementation(kotlinx.bundles.serialization)
implementation(libs.bundles.serialization)

// HTML parser
implementation(libs.jsoup)

// Disk
implementation(libs.disklrucache)
implementation(libs.diskLruCache)
implementation(libs.unifile)

// Preferences
implementation(libs.preferencektx)
implementation(libs.androidx.preference)

// Dependency injection
implementation(libs.injekt)

// Image loading
implementation(platform(libs.coil.bom))
implementation(libs.bundles.coil)
implementation(libs.subsamplingscaleimageview) {
implementation(libs.subsamplingScaleImageView) {
exclude(module = "image-decoder")
}
// AM (REMOVE_LIBRARIES) -->
Expand All @@ -272,20 +268,20 @@ dependencies {

// UI libraries
implementation(libs.material)
implementation(libs.flexible.adapter.core)
implementation(libs.flexibleAdapter)
// AM (REMOVE_LIBRARIES) -->
// implementation(libs.photoview)
// implementation(libs.directionalviewpager) {
// implementation(libs.photoView)
// implementation(libs.directionalViewPager) {
// exclude(group = "androidx.viewpager", module = "viewpager")
// }
// <-- AM (REMOVE_LIBRARIES)
implementation(libs.richeditor.compose)
implementation(libs.composeRichEditor)
implementation(libs.aboutLibraries.compose)
implementation(libs.bundles.voyager)
implementation(libs.compose.materialmotion)
implementation(libs.composeMaterialMotion)
implementation(libs.swipe)
implementation(libs.compose.webview)
implementation(libs.compose.grid)
implementation(libs.composeWebview)
implementation(libs.composeGrid)
implementation(libs.reorderable)
implementation(libs.bundles.markdown)
implementation(libs.materialKolor)
Expand All @@ -304,9 +300,9 @@ dependencies {
testRuntimeOnly(libs.junit.platform.launcher)

// For detecting memory leaks; see https://square.github.io/leakcanary/
// debugImplementation(libs.leakcanary.android)
// debugImplementation(libs.leakCanary.android)
// AM (REMOVE_LIBRARIES) -->
// implementation(libs.leakcanary.plumber)
// implementation(libs.leakCanary.plumber)
// <-- AM (REMOVE_LIBRARIES)

// AY -->
Expand All @@ -329,19 +325,26 @@ dependencies {
implementation(aniyomilibs.google.api.client.oauth)
// <-- AM (SYNC_DRIVE)

testImplementation(kotlinx.coroutines.test)
testImplementation(libs.kotlinx.coroutines.test)
}

androidComponents {
onVariants { variant ->
val resSource = variant.sources.res ?: return@onVariants

val variantName = variant.name.replaceFirstChar { it.uppercase() }
val replaceShortcutsPlaceholderTask = tasks.register<ReplaceShortcutsPlaceholderTask>(
"replace${variantName}ShortcutPlaceholder",
) {
applicationId.set(variant.applicationId)
shortcutsFile.set(projectDir.resolve("src/main/shortcuts.xml"))
}
resSource.addGeneratedSourceDirectory(replaceShortcutsPlaceholderTask) { it.outputDir }
}

onVariants(selector().withFlavor("default" to "standard")) {
// Only excluding in standard flavor because this breaks
// Layout Inspector's Compose tree
it.packaging.resources.excludes.add("META-INF/*.version")
}
}

buildscript {
dependencies {
classpath(kotlinx.gradle)
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
package eu.kanade.domain.anime.interactor

import app.cash.sqldelight.async.coroutines.awaitAsList
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import tachiyomi.data.DatabaseHandler
import tachiyomi.data.Database
import tachiyomi.data.subscribeToList

class GetExcludedScanlators(
private val handler: DatabaseHandler,
private val database: Database,
) {

suspend fun await(animeId: Long): Set<String> {
return handler.awaitList {
excluded_scanlatorsQueries.getExcludedScanlatorsByAnimeId(animeId)
}
return database.excluded_scanlatorsQueries.getExcludedScanlatorsByAnimeId(animeId)
.awaitAsList()
.toSet()
}

fun subscribe(animeId: Long): Flow<Set<String>> {
return handler.subscribeToList {
excluded_scanlatorsQueries.getExcludedScanlatorsByAnimeId(animeId)
}
return database.excluded_scanlatorsQueries.getExcludedScanlatorsByAnimeId(animeId)
.subscribeToList()
.map { it.toSet() }
}
}
Loading
Loading