From 6c93deacca7adc3ad2653aaedd13d4c72ddd09b7 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Wed, 31 Jul 2024 10:01:38 +0700 Subject: [PATCH] refactor: Use AboutLibraries Should unblock GH-124 from being merged, no thanks to Google. --- app/build.gradle.kts | 6 +- .../tachiyomi/ui/more/AboutController.kt | 4 +- .../ui/more/AboutLibraryLicenseController.kt | 73 +++++++++++++++++++ .../ui/more/AboutLicenseController.kt | 40 ++++++++++ build.gradle.kts | 2 +- gradle/libs.versions.toml | 6 +- settings.gradle.kts | 7 -- 7 files changed, 123 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLibraryLicenseController.kt create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLicenseController.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d4d38fdb32..b8f0f57253 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,7 +12,7 @@ plugins { alias(kotlinx.plugins.compose.compiler) alias(kotlinx.plugins.serialization) alias(kotlinx.plugins.parcelize) - alias(libs.plugins.google.oss) + alias(libs.plugins.aboutlibraries) alias(libs.plugins.firebase.crashlytics) apply false alias(libs.plugins.google.services) apply false } @@ -236,6 +236,8 @@ dependencies { // Sort implementation(libs.java.nat.sort) + implementation(libs.aboutlibraries) + // UI implementation(libs.material.design.dimens) implementation(libs.loading.button) @@ -268,8 +270,6 @@ dependencies { // Text distance implementation(libs.java.string.similarity) - implementation(libs.play.services.oss.licenses) - // TLS 1.3 support for Android < 10 implementation(libs.conscrypt) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt index 61779c8eca..3a22ddc79b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt @@ -13,7 +13,6 @@ import androidx.core.content.getSystemService import androidx.core.net.toUri import androidx.preference.PreferenceScreen import co.touchlab.kermit.Logger -import com.google.android.gms.oss.licenses.OssLicensesMenuActivity import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.updater.AppDownloadInstallJob import eu.kanade.tachiyomi.data.updater.AppUpdateChecker @@ -37,6 +36,7 @@ import eu.kanade.tachiyomi.util.view.setNegativeButton import eu.kanade.tachiyomi.util.view.setPositiveButton import eu.kanade.tachiyomi.util.view.setTitle import eu.kanade.tachiyomi.util.view.snack +import eu.kanade.tachiyomi.util.view.withFadeTransaction import io.noties.markwon.Markwon import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -126,7 +126,7 @@ class AboutController : SettingsLegacyController() { titleMRes = MR.strings.open_source_licenses onClick { - startActivity(Intent(activity, OssLicensesMenuActivity::class.java)) + router.pushController(AboutLicenseController().withFadeTransaction()) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLibraryLicenseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLibraryLicenseController.kt new file mode 100644 index 0000000000..7128133e5a --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLibraryLicenseController.kt @@ -0,0 +1,73 @@ +package eu.kanade.tachiyomi.ui.more + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Public +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.rememberTopAppBarState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.text.HtmlCompat +import com.google.android.material.textview.MaterialTextView +import dev.icerock.moko.resources.compose.stringResource +import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController +import yokai.i18n.MR +import yokai.presentation.AppBarType +import yokai.presentation.YokaiScaffold +import yokai.presentation.component.ToolTipButton + +class AboutLibraryLicenseController( + private val name: String, + private val website: String?, + private val license: String, +) : BaseComposeController() { + @Composable + override fun ScreenContent() { + val uriHandler = LocalUriHandler.current + + YokaiScaffold( + onNavigationIconClicked = router::handleBack, + title = name, + appBarType = AppBarType.SMALL, + scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior( + state = rememberTopAppBarState(), + ), + actions = { + if (website != null) { + ToolTipButton( + toolTipLabel = stringResource(MR.strings.website), + icon = Icons.Outlined.Public, + buttonClicked = { uriHandler.openUri(website) }, + ) + } + } + ) { innerPadding -> + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + .padding(innerPadding) + .padding(16.dp), + ) { + HtmlLicenseText(html = license) + } + } + } + + @Composable + private fun HtmlLicenseText(html: String) { + AndroidView( + factory = { + MaterialTextView(it) + }, + update = { + it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT) + }, + ) + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLicenseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLicenseController.kt new file mode 100644 index 0000000000..d0b13196a5 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLicenseController.kt @@ -0,0 +1,40 @@ +package eu.kanade.tachiyomi.ui.more + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer +import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent +import dev.icerock.moko.resources.compose.stringResource +import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController +import eu.kanade.tachiyomi.util.view.withFadeTransaction +import yokai.i18n.MR +import yokai.presentation.AppBarType +import yokai.presentation.YokaiScaffold + +class AboutLicenseController : BaseComposeController() { + @Composable + override fun ScreenContent() { + YokaiScaffold( + onNavigationIconClicked = router::handleBack, + title = stringResource(MR.strings.open_source_licenses), + appBarType = AppBarType.SMALL, + scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(), + ) { innerPadding -> + LibrariesContainer( + modifier = Modifier.fillMaxSize(), + contentPadding = innerPadding, + onLibraryClick = { + router.pushController( + AboutLibraryLicenseController( + it.name, + it.website, + it.licenses.firstOrNull()?.htmlReadyLicenseContent.orEmpty(), + ).withFadeTransaction(), + ) + } + ) + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index cc41a104c3..b85331dcda 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,8 +15,8 @@ plugins { alias(kotlinx.plugins.multiplatform) apply false alias(kotlinx.plugins.parcelize) apply false alias(kotlinx.plugins.serialization) apply false + alias(libs.plugins.aboutlibraries) apply false alias(libs.plugins.firebase.crashlytics) apply false - alias(libs.plugins.google.oss) apply false alias(libs.plugins.google.services) apply false alias(libs.plugins.moko) apply false alias(libs.plugins.sqldelight) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c461c26dc3..5115f5d3c9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,8 +13,11 @@ sqlite = "2.4.0" sqldelight = "2.0.2" junit = "5.8.2" kermit = "2.0.3" +aboutlibraries = "11.2.2" [libraries] +aboutlibraries = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlibraries" } + accompanist-webview = { module = "com.google.accompanist:accompanist-webview", version = "0.30.1" } chucker-library-no-op = { module = "com.github.ChuckerTeam.Chucker:library-no-op", version.ref = "chucker" } chucker-library = { module = "com.github.ChuckerTeam.Chucker:library", version.ref = "chucker" } @@ -69,7 +72,6 @@ okhttp-dnsoverhttps = { module = "com.squareup.okhttp3:okhttp-dnsoverhttps", ver okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } play-services-gcm = { module = "com.google.android.gms:play-services-gcm", version = "17.0.0" } -play-services-oss-licenses = { module = "com.google.android.gms:play-services-oss-licenses", version = "17.1.0" } photoview = { module = "com.github.chrisbanes:PhotoView", version = "2.3.0" } quickjs-android = { module = "app.cash.quickjs:quickjs-android", version = "0.9.2" } rxrelay = { module = "com.jakewharton.rxrelay:rxrelay", version = "1.2.0" } @@ -96,8 +98,8 @@ viewstatepageradapter = { module = "com.nightlynexus.viewstatepageradapter:views viewtooltip = { module = "com.github.florent37:viewtooltip", version = "1.2.2" } [plugins] +aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.2" } -google-oss = { id = "com.google.android.gms.oss-licenses-plugin", version = "0.10.6" } google-services = { id = "com.google.gms.google-services", version = "4.4.2" } gradle-versions = { id = "com.github.ben-manes.versions", version = "0.42.0" } kotlinter = { id = "org.jmailen.kotlinter", version = "4.1.1" } diff --git a/settings.gradle.kts b/settings.gradle.kts index f5b74d988b..7bf13d5ea1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,13 +4,6 @@ pluginManagement { mavenCentral() google() } - resolutionStrategy { - eachPlugin { - if (requested.id.id == "com.google.android.gms.oss-licenses-plugin") { - useModule("com.google.android.gms:oss-licenses-plugin:${requested.version}") - } - } - } } dependencyResolutionManagement {