diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index 10713b715..000000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,222 +0,0 @@
-plugins {
- id "com.android.application"
- id "org.jetbrains.kotlin.android"
- id "kotlin-kapt"
- id "dagger.hilt.android.plugin"
- id "com.google.dagger.hilt.android"
- id 'com.mikepenz.aboutlibraries.plugin'
-}
-
-def gitCommitHash = "git rev-parse --verify --short HEAD".execute().text.trim()
-def keyProps = new Properties()
-def keyPropsFile = rootProject.file("signature/keystore.properties")
-if (keyPropsFile.exists()) {
- println("Loading keystore properties from ${keyPropsFile.absolutePath}")
- keyProps.load(new FileInputStream(keyPropsFile))
-}
-
-android {
- compileSdk 34
-
- defaultConfig {
- applicationId "me.ash.reader"
- minSdk 26
- targetSdk 33
- versionCode 25
- versionName "0.10.1"
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- vectorDrawables {
- useSupportLibrary true
- }
-
- javaCompileOptions {
- annotationProcessorOptions {
- arguments += [
- "room.schemaLocation": "$projectDir/schemas".toString(),
- "room.incremental" : "true"
- ]
- }
- }
- }
-
- flavorDimensions "channel"
- productFlavors {
- github {
- dimension "channel"
- }
- fdroid {
- dimension "channel"
- }
- googlePlay {
- dimension "channel"
- applicationIdSuffix ".google.play"
- }
- }
- signingConfigs {
- release {
- keyAlias keyProps["keyAlias"]
- keyPassword keyProps["keyPassword"]
- storeFile keyProps["storeFile"] ? file(keyProps["storeFile"]) : null
- storePassword keyProps["storePassword"]
- }
- }
- lint {
- disable.addAll("MissingTranslation", "ExtraTranslation")
- }
- buildTypes {
- release {
- minifyEnabled true
- shrinkResources true
- proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
- signingConfig signingConfigs.release
- }
- }
- applicationVariants.all { variant ->
- variant.outputs.each { output ->
- output.outputFileName = "ReadYou-${defaultConfig.versionName}-${gitCommitHash}.apk"
- }
- }
- kotlinOptions {
- freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn"
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_11
- targetCompatibility JavaVersion.VERSION_11
- }
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_11
- }
- buildFeatures {
- compose true
- }
- composeOptions {
- kotlinCompilerExtensionVersion '1.5.8'
- }
- packagingOptions {
- resources {
- excludes += "/META-INF/{AL2.0,LGPL2.1}"
- }
- }
-
-// https://developer.android.com/guide/topics/resources/app-languages#auto-localeconfig
- androidResources {
- generateLocaleConfig true
- }
-
- namespace 'me.ash.reader'
-}
-
-dependencies {
- // https://github.com/mikepenz/AboutLibraries/releases
- implementation "com.mikepenz:aboutlibraries-core:${aboutLibsRelease}"
- implementation "com.mikepenz:aboutlibraries-compose-m3:${aboutLibsRelease}"
-
- // https://github.com/ireward/compose-html/tags
- implementation "com.github.ireward:compose-html:1.0.2"
-
- // http://bigbadaboom.github.io/androidsvg/release_notes.html
- implementation "com.caverock:androidsvg-aar:$androidSVG"
-
- // https://github.com/mdewilde/opml-parser
- implementation "be.ceau:opml-parser:$opmlParser"
-
- // https://github.com/dankito/Readability4J
- implementation "net.dankito.readability4j:readability4j:$readability4j"
-
- // https://mvnrepository.com/artifact/com.rometools/rome
- implementation "com.rometools:rome:$rome"
-
- // https://coil-kt.github.io/coil/changelog/
- implementation("io.coil-kt:coil-base:$coil")
- implementation("io.coil-kt:coil-compose:$coil")
- implementation("io.coil-kt:coil-svg:$coil")
- implementation("io.coil-kt:coil-gif:$coil")
-
- // https://saket.github.io/telephoto/zoomableimage/
- implementation("me.saket.telephoto:zoomable:0.7.1")
-
- // Cancel TLSv1.3 support pre Android10
- // implementation 'org.conscrypt:conscrypt-android:2.5.2'
-
- // https://square.github.io/okhttp/changelogs/changelog/
- implementation "com.squareup.okhttp3:okhttp:$okhttp"
- implementation "com.squareup.okhttp3:okhttp-coroutines-jvm:$okhttp"
- implementation "com.squareup.retrofit2:retrofit:$retrofit2"
- implementation "com.squareup.retrofit2:converter-gson:$retrofit2"
-
- // https://developer.android.com/jetpack/androidx/releases/profileinstaller
- implementation "androidx.profileinstaller:profileinstaller:$profileinstaller"
-
- // https://developer.android.com/jetpack/androidx/releases/work
- implementation "androidx.work:work-runtime-ktx:$work"
-
- // https://developer.android.com/jetpack/androidx/releases/datastore
- implementation "androidx.datastore:datastore-preferences:$datastore"
-
- // https://developer.android.com/jetpack/androidx/releases/room
- implementation "androidx.room:room-paging:$room"
- implementation "androidx.room:room-common:$room"
- implementation "androidx.room:room-ktx:$room"
- kapt "androidx.room:room-compiler:$room"
-
- // https://developer.android.com/jetpack/androidx/releases/paging
- implementation "androidx.paging:paging-common-ktx:$paging"
- implementation "androidx.paging:paging-runtime-ktx:$paging"
- implementation "androidx.paging:paging-compose:$paging"
-
- // https://developer.android.com/jetpack/androidx/releases/paging
- implementation "androidx.browser:browser:1.8.0"
-
- // https://developer.android.com/jetpack/androidx/releases/navigation
- implementation "androidx.navigation:navigation-compose:$navigation"
-
- // https://developer.android.com/jetpack/androidx/releases/lifecycle
- implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle"
- implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle"
-
- // https://developer.android.com/jetpack/androidx/releases/compose-material3
- implementation "androidx.compose.material3:material3"
-
- // https://github.com/google/accompanist/releases
- implementation "com.google.accompanist:accompanist-pager:$accompanist"
- implementation "com.google.accompanist:accompanist-flowlayout:$accompanist"
- implementation "com.google.accompanist:accompanist-swiperefresh:$accompanist"
-
- implementation platform("androidx.compose:compose-bom:$composeBom")
- androidTestImplementation(platform("androidx.compose:compose-bom:$composeBom"))
-
- // https://developer.android.com/jetpack/androidx/releases/compose-animation
- implementation "androidx.compose.animation:animation-graphics"
- // https://developer.android.com/jetpack/androidx/releases/compose-ui
- implementation "androidx.compose.ui:ui"
- implementation "androidx.compose.ui:ui-util"
- // https://developer.android.com/jetpack/androidx/releases/compose-material
- implementation "androidx.compose.material:material"
- implementation "androidx.compose.material:material-icons-extended"
- implementation "androidx.compose.ui:ui-tooling"
- implementation "androidx.compose.ui:ui-tooling-preview"
-
- androidTestImplementation "androidx.compose.ui:ui-test-junit4"
-
- // hilt
- implementation "androidx.hilt:hilt-work:1.1.0"
- implementation "com.google.dagger:hilt-android:2.50"
- kapt "com.google.dagger:hilt-android-compiler:2.50"
-// implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
- kapt "androidx.hilt:hilt-compiler:1.1.0"
- implementation "androidx.hilt:hilt-navigation-compose:1.1.0"
-
- // android
- implementation "androidx.core:core-ktx:1.13.1"
- implementation "androidx.activity:activity-compose:1.9.0"
- implementation 'androidx.appcompat:appcompat:1.7.0'
- testImplementation "junit:junit:4.13.2"
- androidTestImplementation "androidx.test.ext:junit:1.1.5"
- androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1"
-
- // mockito
- testImplementation "org.mockito:mockito-core:5.11.0"
- testImplementation 'org.mockito:mockito-junit-jupiter:5.11.0'
- testImplementation "org.mockito.kotlin:mockito-kotlin:5.2.1"
-}
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 000000000..8a7cafee6
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,183 @@
+import java.util.Properties
+import java.io.FileInputStream
+
+plugins {
+ alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.ksp)
+ alias(libs.plugins.aboutlibraries)
+ alias(libs.plugins.room)
+ alias(libs.plugins.hilt)
+}
+
+fun fetchGitCommitHash(): String {
+ val process = ProcessBuilder("git", "rev-parse", "--verify", "--short", "HEAD")
+ .redirectErrorStream(true)
+ .start()
+ return process.inputStream.bufferedReader().use { it.readText().trim() }
+}
+
+val gitCommitHash = fetchGitCommitHash()
+val keyProps = Properties()
+val keyPropsFile: File = rootProject.file("signature/keystore.properties")
+if (keyPropsFile.exists()) {
+ println("Loading keystore properties from ${keyPropsFile.absolutePath}")
+ keyProps.load(FileInputStream(keyPropsFile))
+}
+
+android {
+ compileSdk = 34
+
+ defaultConfig {
+ applicationId = "me.ash.reader"
+ minSdk = 26
+ targetSdk = 33
+ versionCode = 25
+ versionName = "0.10.1"
+
+ buildConfigField("String", "USER_AGENT_STRING", "\"ReadYou/${'$'}{versionName}(${versionCode})\"")
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables.useSupportLibrary = true
+
+ room {
+ schemaDirectory("$projectDir/schemas")
+ }
+
+ ksp {
+ arg("room.incremental","true")
+ }
+ }
+
+ flavorDimensions.add("channel")
+ productFlavors {
+ create("github") {
+ dimension = "channel"
+ }
+ create("fdroid") {
+ dimension = "channel"
+ }
+ create("googlePlay") {
+ dimension = "channel"
+ applicationIdSuffix = ".google.play"
+ }
+ }
+ signingConfigs {
+ create("release") {
+ keyAlias = keyProps["keyAlias"] as String?
+ keyPassword = keyProps["keyPassword"] as String?
+ storeFile = keyProps["storeFile"]?.let { file(it as String) }
+ storePassword = keyProps["storePassword"] as String?
+ }
+ }
+ lint {
+ disable.addAll(listOf("MissingTranslation", "ExtraTranslation"))
+ }
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = true
+ isShrinkResources = true
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
+ signingConfig = signingConfigs.getByName("release")
+ }
+ }
+ applicationVariants.all {
+ outputs.all {
+ (this as com.android.build.gradle.internal.api.BaseVariantOutputImpl).outputFileName = "ReadYou-${defaultConfig.versionName}-${gitCommitHash}.apk"
+ }
+ }
+ kotlinOptions {
+ freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn"
+ jvmTarget = JavaVersion.VERSION_11.toString()
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+ }
+ buildFeatures {
+ compose = true
+ buildConfig = true
+ }
+ composeOptions {
+ kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
+ }
+ packaging {
+ resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}")
+ }
+ androidResources {
+ generateLocaleConfig = true
+ }
+ namespace = "me.ash.reader"
+}
+
+dependencies {
+ // AboutLibraries
+ implementation(libs.aboutlibraries.core)
+ implementation(libs.aboutlibraries.compose)
+
+ // Compose
+ implementation(libs.compose.html)
+ implementation(platform(libs.compose.bom))
+ androidTestImplementation(platform(libs.compose.bom))
+ implementation(libs.compose.animation.graphics)
+ implementation(libs.compose.ui)
+ implementation(libs.compose.ui.util)
+ implementation(libs.compose.material)
+ implementation(libs.compose.material.icons.extended)
+ implementation(libs.compose.ui.tooling)
+ implementation(libs.compose.ui.tooling.preview)
+ androidTestImplementation(libs.compose.ui.test.junit4)
+ implementation(libs.compose.material3)
+
+ // Accompanist
+ implementation(libs.accompanist.swiperefresh)
+
+ // Coil
+ implementation(libs.coil.base)
+ implementation(libs.coil.compose)
+ implementation(libs.coil.svg)
+ implementation(libs.coil.gif)
+
+ // Hilt
+ implementation(libs.hilt.work)
+ implementation(libs.hilt.android)
+ ksp(libs.hilt.android.compiler)
+ ksp(libs.hilt.compiler)
+ implementation(libs.hilt.navigation.compose)
+
+ // AndroidX
+ implementation(libs.android.svg)
+ implementation(libs.opml.parser)
+ implementation(libs.readability4j)
+ implementation(libs.rome)
+ implementation(libs.telephoto)
+ implementation(libs.okhttp)
+ implementation(libs.okhttp.coroutines)
+ implementation(libs.retrofit)
+ implementation(libs.retrofit.gson)
+ implementation(libs.profileinstaller)
+ implementation(libs.work.runtime.ktx)
+ implementation(libs.datastore.preferences)
+ implementation(libs.room.paging)
+ implementation(libs.room.common)
+ implementation(libs.room.ktx)
+ ksp(libs.room.compiler)
+ implementation(libs.paging.common.ktx)
+ implementation(libs.paging.runtime.ktx)
+ implementation(libs.paging.compose)
+ implementation(libs.browser)
+ implementation(libs.navigation.compose)
+ implementation(libs.lifecycle.viewmodel.compose)
+ implementation(libs.lifecycle.runtime.ktx)
+ implementation(libs.core.ktx)
+ implementation(libs.activity.compose)
+ implementation(libs.appcompat)
+
+ // Testing
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.junit.ext)
+ androidTestImplementation(libs.espresso)
+ testImplementation(libs.mockito.core)
+ testImplementation(libs.mockito.junit.jupiter)
+ testImplementation(libs.mockito.kotlin)
+}
\ No newline at end of file
diff --git a/app/src/main/java/me/ash/reader/domain/service/AbstractRssRepository.kt b/app/src/main/java/me/ash/reader/domain/service/AbstractRssRepository.kt
index 906c5bcf6..8ade1db37 100644
--- a/app/src/main/java/me/ash/reader/domain/service/AbstractRssRepository.kt
+++ b/app/src/main/java/me/ash/reader/domain/service/AbstractRssRepository.kt
@@ -8,6 +8,7 @@ import androidx.work.ListenableWorker
import androidx.work.WorkManager
import com.rometools.rome.feed.synd.SyndFeed
import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.flow.Flow
@@ -274,6 +275,7 @@ abstract class AbstractRssRepository(
}
}
+ @OptIn(ExperimentalCoroutinesApi::class)
fun pullImportant(
isStarred: Boolean,
isUnread: Boolean,
diff --git a/app/src/main/java/me/ash/reader/infrastructure/di/OkHttpClientModule.kt b/app/src/main/java/me/ash/reader/infrastructure/di/OkHttpClientModule.kt
index 2d45df76f..2973f4ff9 100644
--- a/app/src/main/java/me/ash/reader/infrastructure/di/OkHttpClientModule.kt
+++ b/app/src/main/java/me/ash/reader/infrastructure/di/OkHttpClientModule.kt
@@ -122,4 +122,4 @@ object UserAgentInterceptor : Interceptor {
}
}
-const val USER_AGENT_STRING = "ReadYou/${BuildConfig.VERSION_NAME}(${BuildConfig.VERSION_CODE})"
+const val USER_AGENT_STRING = BuildConfig.USER_AGENT_STRING
\ No newline at end of file
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/AnimatedText.kt b/app/src/main/java/me/ash/reader/ui/component/base/AnimatedText.kt
index d4ba8a623..4197851ca 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/AnimatedText.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/AnimatedText.kt
@@ -46,7 +46,7 @@ fun AnimatedText(
200,
easing = FastOutSlowInEasing
)
- ) { height -> height } with slideOutVertically { height -> -height } + fadeOut(
+ ) { height -> height } togetherWith slideOutVertically { height -> -height } + fadeOut(
tween(
200,
easing = FastOutSlowInEasing
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/Banner.kt b/app/src/main/java/me/ash/reader/ui/component/base/Banner.kt
index e9d280716..c79a2142f 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/Banner.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/Banner.kt
@@ -44,7 +44,7 @@ fun Banner(
Surface(
modifier = modifier
.fillMaxWidth()
- .height(if (!desc.isNullOrBlank()) 88.dp else Dp.Unspecified),
+ .height(Dp.Unspecified),
color = Color.Unspecified,
) {
Row(
@@ -57,7 +57,7 @@ fun Banner(
view.playSoundEffect(SoundEffectConstants.CLICK)
onClick()
}
- .padding(16.dp, 20.dp),
+ .padding(16.dp, 15.dp),
verticalAlignment = Alignment.CenterVertically
) {
icon?.let { icon ->
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/DisplayText.kt b/app/src/main/java/me/ash/reader/ui/component/base/DisplayText.kt
index 82fb79792..0c8d35d80 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/DisplayText.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/DisplayText.kt
@@ -1,5 +1,6 @@
package me.ash.reader.ui.component.base
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -16,6 +17,7 @@ fun DisplayText(
modifier: Modifier = Modifier,
text: String,
desc: String,
+ onTextClick: () -> Unit = {},
) {
Column(
modifier = modifier
@@ -28,9 +30,7 @@ fun DisplayText(
)
) {
Text(
- // modifier = Modifier
- // .height(44.dp),
- // .animateContentSize(tween()),
+ modifier = Modifier.clickable { onTextClick() },
text = text,
style = MaterialTheme.typography.displaySmall,
color = MaterialTheme.colorScheme.onSurface,
@@ -39,7 +39,6 @@ fun DisplayText(
)
RYExtensibleVisibility(visible = desc.isNotEmpty()) {
Text(
- modifier = Modifier.height(16.dp),
text = desc,
style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.outline.copy(alpha = 0.7f),
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/RYOutlineTextField.kt b/app/src/main/java/me/ash/reader/ui/component/base/RYOutlineTextField.kt
index 06bff56d2..1a4698eb9 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/RYOutlineTextField.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/RYOutlineTextField.kt
@@ -60,8 +60,9 @@ fun RYOutlineTextField(
OutlinedTextField(
modifier = Modifier.focusRequester(focusRequester),
- colors = TextFieldDefaults.textFieldColors(
- containerColor = Color.Transparent,
+ colors = TextFieldDefaults.colors(
+ unfocusedContainerColor = Color.Transparent,
+ focusedContainerColor = Color.Transparent
),
maxLines = if (singleLine) 1 else Int.MAX_VALUE,
enabled = !readOnly,
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/RYScaffold.kt b/app/src/main/java/me/ash/reader/ui/component/base/RYScaffold.kt
index 3997087ea..9bccc5859 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/RYScaffold.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/RYScaffold.kt
@@ -44,7 +44,7 @@ fun RYScaffold(
title = {},
navigationIcon = { navigationIcon?.invoke() },
actions = { actions?.invoke(this) },
- colors = TopAppBarDefaults.smallTopAppBarColors(
+ colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(
topBarTonalElevation
),
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/RYTextField.kt b/app/src/main/java/me/ash/reader/ui/component/base/RYTextField.kt
index 86824a201..10a2fc478 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/RYTextField.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/RYTextField.kt
@@ -46,8 +46,9 @@ fun RYTextField(
TextField(
modifier = Modifier.focusRequester(focusRequester),
- colors = TextFieldDefaults.textFieldColors(
- containerColor = Color.Transparent,
+ colors = TextFieldDefaults.colors(
+ unfocusedContainerColor = Color.Transparent,
+ focusedContainerColor = Color.Transparent
),
maxLines = if (singleLine) 1 else Int.MAX_VALUE,
enabled = !readOnly,
diff --git a/app/src/main/java/me/ash/reader/ui/component/base/ViewPager.kt b/app/src/main/java/me/ash/reader/ui/component/base/ViewPager.kt
index 599c027d3..c20df8c74 100644
--- a/app/src/main/java/me/ash/reader/ui/component/base/ViewPager.kt
+++ b/app/src/main/java/me/ash/reader/ui/component/base/ViewPager.kt
@@ -1,26 +1,24 @@
package me.ash.reader.ui.component.base
import androidx.compose.animation.animateContentSize
+import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.pager.HorizontalPager
+import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import com.google.accompanist.pager.ExperimentalPagerApi
-import com.google.accompanist.pager.HorizontalPager
-import com.google.accompanist.pager.PagerState
-@OptIn(ExperimentalPagerApi::class)
+@OptIn(ExperimentalFoundationApi::class)
@Composable
fun ViewPager(
modifier: Modifier = Modifier,
- state: PagerState = com.google.accompanist.pager.rememberPagerState(),
composableList: List<@Composable () -> Unit>,
userScrollEnabled: Boolean = true,
) {
HorizontalPager(
- count = composableList.size,
- state = state,
+ state = rememberPagerState { composableList.size },
verticalAlignment = Alignment.Top,
modifier = modifier
.animateContentSize()
@@ -30,4 +28,4 @@ fun ViewPager(
) { page ->
composableList[page]()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/me/ash/reader/ui/ext/ModifierExt.kt b/app/src/main/java/me/ash/reader/ui/ext/ModifierExt.kt
index 14931de55..e1b985b0e 100644
--- a/app/src/main/java/me/ash/reader/ui/ext/ModifierExt.kt
+++ b/app/src/main/java/me/ash/reader/ui/ext/ModifierExt.kt
@@ -19,30 +19,18 @@ import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.lerp
-import com.google.accompanist.pager.ExperimentalPagerApi
-import com.google.accompanist.pager.PagerScope
-import com.google.accompanist.pager.calculateCurrentOffsetForPage
+import androidx.compose.foundation.pager.PagerState
import kotlin.math.absoluteValue
-@OptIn(ExperimentalPagerApi::class)
-fun Modifier.pagerAnimate(pagerScope: PagerScope, page: Int): Modifier {
+@OptIn(ExperimentalFoundationApi::class)
+fun Modifier.pagerAnimate(pagerState: PagerState, page: Int): Modifier {
return graphicsLayer {
// Calculate the absolute offset for the current page from the
// scroll position. We use the absolute value which allows us to mirror
// any effects for both directions
- val pageOffset = pagerScope.calculateCurrentOffsetForPage(page).absoluteValue
+ val pageOffset = ((pagerState.currentPage - page) + pagerState.currentPageOffsetFraction).absoluteValue
- // We animate the scaleX + scaleY, between 85% and 100%
-// lerp(
-// start = 0.85f.dp,
-// stop = 1f.dp,
-// fraction = 1f - pageOffset.coerceIn(0f, 1f)
-// ).also { scale ->
-// scaleX = scale.value
-// scaleY = scale.value
-// }
-
- // We animate the alpha, between 50% and 100%
+ // We animate the alpha, between 20% and 100%
alpha = lerp(
start = 0.2f.dp,
stop = 1f.dp,
diff --git a/app/src/main/java/me/ash/reader/ui/ext/PagerStateExt.kt b/app/src/main/java/me/ash/reader/ui/ext/PagerStateExt.kt
index 1dba85b11..07c0f601c 100644
--- a/app/src/main/java/me/ash/reader/ui/ext/PagerStateExt.kt
+++ b/app/src/main/java/me/ash/reader/ui/ext/PagerStateExt.kt
@@ -1,11 +1,11 @@
package me.ash.reader.ui.ext
-import com.google.accompanist.pager.ExperimentalPagerApi
-import com.google.accompanist.pager.PagerState
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.pager.PagerState
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
-@OptIn(ExperimentalPagerApi::class)
+@OptIn(ExperimentalFoundationApi::class)
fun PagerState.animateScrollToPage(
scope: CoroutineScope,
targetPage: Int,
diff --git a/app/src/main/java/me/ash/reader/ui/ext/StringExt.kt b/app/src/main/java/me/ash/reader/ui/ext/StringExt.kt
index 321de6112..063c503f9 100644
--- a/app/src/main/java/me/ash/reader/ui/ext/StringExt.kt
+++ b/app/src/main/java/me/ash/reader/ui/ext/StringExt.kt
@@ -43,7 +43,7 @@ fun String.md5(): String =
BigInteger(1, MessageDigest.getInstance("MD5").digest(toByteArray()))
.toString(16).padStart(32, '0')
-fun String?.decodeHTML(): String? = this?.run { Html.fromHtml(this).toString() }
+fun String?.decodeHTML(): String? = this?.run { Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY).toString() }
fun String?.orNotEmpty(l: (value: String) -> String): String =
if (this.isNullOrBlank()) "" else l(this)
diff --git a/app/src/main/java/me/ash/reader/ui/page/common/HomeEntry.kt b/app/src/main/java/me/ash/reader/ui/page/common/HomeEntry.kt
index 41cce368c..6d4dec806 100644
--- a/app/src/main/java/me/ash/reader/ui/page/common/HomeEntry.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/common/HomeEntry.kt
@@ -69,7 +69,7 @@ fun HomeEntry(
val intent by rememberSaveable { mutableStateOf(context.findActivity()?.intent) }
var openArticleId by rememberSaveable {
- mutableStateOf(intent?.extras?.get(ExtraName.ARTICLE_ID)?.toString() ?: "")
+ mutableStateOf(intent?.extras?.getString(ExtraName.ARTICLE_ID) ?: "")
}.also {
intent?.replaceExtras(null)
}
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedOptionView.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedOptionView.kt
index c4a9e45e0..3f68ca612 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedOptionView.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedOptionView.kt
@@ -9,7 +9,6 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.Article
import androidx.compose.material.icons.outlined.Add
-import androidx.compose.material.icons.outlined.Article
import androidx.compose.material.icons.outlined.Notifications
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -22,9 +21,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
-import com.google.accompanist.flowlayout.FlowCrossAxisAlignment
-import com.google.accompanist.flowlayout.FlowRow
-import com.google.accompanist.flowlayout.MainAxisAlignment
+import androidx.compose.foundation.layout.FlowRow
import me.ash.reader.R
import me.ash.reader.domain.model.group.Group
import me.ash.reader.ui.component.base.RYSelectionChip
@@ -119,6 +116,7 @@ private fun EditableUrl(
}
}
+@OptIn(ExperimentalLayoutApi::class)
@Composable
private fun Preset(
selectedAllowNotificationPreset: Boolean = false,
@@ -133,10 +131,8 @@ private fun Preset(
Subtitle(text = stringResource(R.string.preset))
Spacer(modifier = Modifier.height(10.dp))
FlowRow(
- mainAxisAlignment = MainAxisAlignment.Start,
- crossAxisAlignment = FlowCrossAxisAlignment.Center,
- crossAxisSpacing = 10.dp,
- mainAxisSpacing = 10.dp,
+ horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start),
+ verticalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterVertically),
) {
RYSelectionChip(
modifier = Modifier.animateContentSize(),
@@ -193,6 +189,7 @@ private fun Preset(
}
}
+@OptIn(ExperimentalLayoutApi::class)
@Composable
private fun AddToGroup(
isMoveToGroup: Boolean = false,
@@ -222,10 +219,8 @@ private fun AddToGroup(
}
} else {
FlowRow(
- mainAxisAlignment = MainAxisAlignment.Start,
- crossAxisAlignment = FlowCrossAxisAlignment.Center,
- crossAxisSpacing = 10.dp,
- mainAxisSpacing = 10.dp,
+ horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start),
+ verticalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterVertically),
) {
groups.forEach {
RYSelectionChip(
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt
index e1a12c3e2..d1f5294f3 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt
@@ -79,6 +79,7 @@ import me.ash.reader.ui.ext.collectAsStateValue
import me.ash.reader.ui.ext.currentAccountId
import me.ash.reader.ui.ext.findActivity
import me.ash.reader.ui.ext.getCurrentVersion
+import me.ash.reader.ui.ext.getDefaultGroupId
import me.ash.reader.ui.page.common.RouteName
import me.ash.reader.ui.page.home.FilterState
import me.ash.reader.ui.page.home.HomeViewModel
@@ -238,12 +239,9 @@ fun FeedsPage(
) {
item {
DisplayText(
- modifier = Modifier.clickable {
- accountTabVisible = true
- },
text = feedsUiState.account?.name ?: "",
desc = if (isSyncing) stringResource(R.string.syncing) else "",
- )
+ ) { accountTabVisible = true }
}
item {
Banner(
@@ -267,6 +265,7 @@ fun FeedsPage(
)
}
}
+
item {
Spacer(modifier = Modifier.height(24.dp))
Row(
@@ -317,36 +316,43 @@ fun FeedsPage(
}
Spacer(modifier = Modifier.height(8.dp))
}
+
+ val defaultGroupId = context.currentAccountId.getDefaultGroupId()
+
itemsIndexed(groupWithFeedList) { index, groupWithFeed ->
when (groupWithFeed) {
is GroupFeedsView.Group -> {
Spacer(modifier = Modifier.height(16.dp))
- GroupItem(
- isExpanded = {
- groupsVisible.getOrPut(
- groupWithFeed.group.id,
- groupListExpand::value
+
+ if (groupWithFeed.group.id != defaultGroupId || groupWithFeed.group.feeds > 0) {
+ GroupItem(
+ isExpanded = {
+ groupsVisible.getOrPut(
+ groupWithFeed.group.id,
+ groupListExpand::value
+ )
+ },
+ group = groupWithFeed.group,
+ alpha = groupAlpha,
+ indicatorAlpha = groupIndicatorAlpha,
+ roundedBottomCorner = { index == groupWithFeedList.lastIndex || groupWithFeed.group.feeds == 0 },
+ onExpanded = {
+ groupsVisible[groupWithFeed.group.id] =
+ groupsVisible.getOrPut(
+ groupWithFeed.group.id,
+ groupListExpand::value
+ ).not()
+ }
+ ) {
+ filterChange(
+ navController = navController,
+ homeViewModel = homeViewModel,
+ filterState = filterUiState.copy(
+ group = groupWithFeed.group,
+ feed = null,
+ )
)
- },
- group = groupWithFeed.group,
- alpha = groupAlpha,
- indicatorAlpha = groupIndicatorAlpha,
- roundedBottomCorner = { index == groupWithFeedList.lastIndex || groupWithFeed.group.feeds == 0 },
- onExpanded = {
- groupsVisible[groupWithFeed.group.id] = groupsVisible.getOrPut(
- groupWithFeed.group.id,
- groupListExpand::value
- ).not()
}
- ) {
- filterChange(
- navController = navController,
- homeViewModel = homeViewModel,
- filterState = filterUiState.copy(
- group = groupWithFeed.group,
- feed = null,
- )
- )
}
}
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsViewModel.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsViewModel.kt
index 478adf12d..3932fb8e5 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsViewModel.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsViewModel.kt
@@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import me.ash.reader.R
@@ -39,6 +40,7 @@ class FeedsViewModel @Inject constructor(
}
}
+ @OptIn(ExperimentalCoroutinesApi::class)
fun pullFeeds(filterState: FilterState) {
val isStarred = filterState.filter.isStarred()
val isUnread = filterState.filter.isUnread()
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/accounts/AccountsTab.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/accounts/AccountsTab.kt
index c90268b34..41851e3f5 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/accounts/AccountsTab.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/accounts/AccountsTab.kt
@@ -22,15 +22,14 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import com.google.accompanist.flowlayout.FlowCrossAxisAlignment
-import com.google.accompanist.flowlayout.FlowRow
-import com.google.accompanist.flowlayout.MainAxisAlignment
+import androidx.compose.foundation.layout.FlowRow
import me.ash.reader.R
import me.ash.reader.domain.model.account.Account
import me.ash.reader.ui.component.base.RYDialog
import me.ash.reader.ui.ext.currentAccountId
import me.ash.reader.ui.theme.palette.alwaysLight
+@OptIn(ExperimentalLayoutApi::class)
@Composable
fun AccountsTab(
modifier: Modifier = Modifier,
@@ -58,10 +57,8 @@ fun AccountsTab(
},
text = {
FlowRow(
- mainAxisAlignment = MainAxisAlignment.Start,
- crossAxisAlignment = FlowCrossAxisAlignment.Start,
- crossAxisSpacing = 10.dp,
- mainAxisSpacing = 10.dp,
+ horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start),
+ verticalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterVertically),
) {
accounts.forEach { account ->
Column(
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/drawer/group/GroupOptionDrawer.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/drawer/group/GroupOptionDrawer.kt
index c6598cafe..ad7ecbeb4 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/drawer/group/GroupOptionDrawer.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/drawer/group/GroupOptionDrawer.kt
@@ -27,9 +27,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
-import com.google.accompanist.flowlayout.FlowCrossAxisAlignment
-import com.google.accompanist.flowlayout.FlowRow
-import com.google.accompanist.flowlayout.MainAxisAlignment
+import androidx.compose.foundation.layout.FlowRow
import kotlinx.coroutines.launch
import me.ash.reader.R
import me.ash.reader.domain.model.group.Group
@@ -149,6 +147,7 @@ fun GroupOptionDrawer(
)
}
+@OptIn(ExperimentalLayoutApi::class)
@Composable
private fun Preset(
viewModel: GroupOptionViewModel,
@@ -156,10 +155,8 @@ private fun Preset(
context: Context,
) {
FlowRow(
- mainAxisAlignment = MainAxisAlignment.Start,
- crossAxisAlignment = FlowCrossAxisAlignment.Center,
- crossAxisSpacing = 10.dp,
- mainAxisSpacing = 10.dp,
+ horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start),
+ verticalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterVertically),
) {
RYSelectionChip(
modifier = Modifier.animateContentSize(),
@@ -212,6 +209,7 @@ private fun Preset(
}
}
+@OptIn(ExperimentalLayoutApi::class)
@Composable
private fun FlowRowGroups(
groupOptionUiState: GroupOptionUiState,
@@ -219,10 +217,8 @@ private fun FlowRowGroups(
groupOptionViewModel: GroupOptionViewModel,
) {
FlowRow(
- mainAxisAlignment = MainAxisAlignment.Start,
- crossAxisAlignment = FlowCrossAxisAlignment.Center,
- crossAxisSpacing = 10.dp,
- mainAxisSpacing = 10.dp,
+ horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start),
+ verticalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterVertically),
) {
groupOptionUiState.groups.forEach {
if (it.id != group?.id) {
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/subscribe/SubscribeDialog.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/subscribe/SubscribeDialog.kt
index 7a6834086..3fe71c824 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/subscribe/SubscribeDialog.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/subscribe/SubscribeDialog.kt
@@ -8,6 +8,7 @@ import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
+import androidx.compose.animation.togetherWith
import androidx.compose.animation.with
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
@@ -104,8 +105,8 @@ fun SubscribeDialog(
AnimatedContent(
targetState = subscribeUiState.isSearchPage,
transitionSpec = {
- slideInHorizontally { width -> width } + fadeIn() with
- slideOutHorizontally { width -> -width } + fadeOut()
+ (slideInHorizontally { width -> width } + fadeIn()).togetherWith(
+ slideOutHorizontally { width -> -width } + fadeOut())
}
) { targetExpanded ->
if (targetExpanded) {
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/flow/FlowPage.kt b/app/src/main/java/me/ash/reader/ui/page/home/flow/FlowPage.kt
index d7e5e0c8d..30223b094 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/flow/FlowPage.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/flow/FlowPage.kt
@@ -61,7 +61,6 @@ import me.ash.reader.ui.page.common.RouteName
import me.ash.reader.ui.page.home.HomeViewModel
@OptIn(
- com.google.accompanist.pager.ExperimentalPagerApi::class,
androidx.compose.ui.ExperimentalComposeUiApi::class,
)
@Composable
diff --git a/app/src/main/java/me/ash/reader/ui/page/home/reading/TopBar.kt b/app/src/main/java/me/ash/reader/ui/page/home/reading/TopBar.kt
index 205ab715e..c589a2643 100644
--- a/app/src/main/java/me/ash/reader/ui/page/home/reading/TopBar.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/home/reading/TopBar.kt
@@ -81,7 +81,7 @@ fun TopBar(
) {
sharedContent.share(context, title, link)
}
- }, colors = TopAppBarDefaults.smallTopAppBarColors(
+ }, colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(tonalElevation.value.dp),
)
)
diff --git a/app/src/main/java/me/ash/reader/ui/page/settings/SettingItem.kt b/app/src/main/java/me/ash/reader/ui/page/settings/SettingItem.kt
index 1054a6415..12063f0c4 100644
--- a/app/src/main/java/me/ash/reader/ui/page/settings/SettingItem.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/settings/SettingItem.kt
@@ -85,11 +85,11 @@ fun SettingItem(
}
action?.let {
if (separatedActions) {
- Divider(
+ HorizontalDivider(
modifier = Modifier
.padding(start = 16.dp)
.size(1.dp, 32.dp),
- color = tonalPalettes neutralVariant 80 onDark (tonalPalettes neutralVariant 30),
+ color = tonalPalettes neutralVariant 80 onDark (tonalPalettes neutralVariant 30)
)
}
Box(Modifier.padding(start = 16.dp)) {
diff --git a/app/src/main/java/me/ash/reader/ui/page/settings/color/feeds/FeedsPagePreview.kt b/app/src/main/java/me/ash/reader/ui/page/settings/color/feeds/FeedsPagePreview.kt
index 67533542b..35dc09458 100644
--- a/app/src/main/java/me/ash/reader/ui/page/settings/color/feeds/FeedsPagePreview.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/settings/color/feeds/FeedsPagePreview.kt
@@ -88,7 +88,7 @@ fun FeedsPagePreview(
contentDescription = stringResource(R.string.subscribe),
tint = MaterialTheme.colorScheme.onSurface,
)
- }, colors = TopAppBarDefaults.smallTopAppBarColors(
+ }, colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(
topBarTonalElevation.value.dp
),
diff --git a/app/src/main/java/me/ash/reader/ui/page/settings/color/flow/FlowPagePreview.kt b/app/src/main/java/me/ash/reader/ui/page/settings/color/flow/FlowPagePreview.kt
index 073f5019e..1114e0bf3 100644
--- a/app/src/main/java/me/ash/reader/ui/page/settings/color/flow/FlowPagePreview.kt
+++ b/app/src/main/java/me/ash/reader/ui/page/settings/color/flow/FlowPagePreview.kt
@@ -26,7 +26,6 @@ import me.ash.reader.domain.model.feed.Feed
import me.ash.reader.domain.model.general.Filter
import me.ash.reader.infrastructure.preference.FlowArticleListTonalElevationPreference
import me.ash.reader.infrastructure.preference.FlowTopBarTonalElevationPreference
-import me.ash.reader.infrastructure.preference.LocalDarkTheme
import me.ash.reader.ui.component.FilterBar
import me.ash.reader.ui.component.base.FeedbackIconButton
import me.ash.reader.ui.ext.surfaceColorAtElevation
@@ -76,7 +75,7 @@ fun FlowPagePreview(
contentDescription = stringResource(R.string.search),
tint = MaterialTheme.colorScheme.onSurface,
) {}
- }, colors = TopAppBarDefaults.smallTopAppBarColors(
+ }, colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(
topBarTonalElevation.value.dp
),
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 8affae9ef..a1bec965c 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -113,7 +113,6 @@
يتوفَّر الإصدار %1$s
احصل على التحديثات الجديدة
اللون والأسلوب
- الإنجليزيَّة، الصينيَّة، إلخ
أغلق
صفحة البداية، استجابة اللمس
التلميحات والدعم
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 397a176aa..088e5ec5b 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -103,7 +103,6 @@
3д
7д
Езици
- английски, китайски и др
Съвети и поддръжка
Относно лицензите с отворен код
Прегледайте Условията за ползване и Политиката за поверителност
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 7906e70fb..8baa122d6 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -101,7 +101,6 @@
Interacció
Pàgina d\'inici, feedback hàptic
Llenguatges
- Anglès, xinès i altres
Ajuda a la traducció
Aplica el llenguatge del dispositiu
Sobre les llicències de codi obert
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index e23b36d8d..b6f97f970 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -102,7 +102,6 @@
Interakce
Úvodní stránka, haptická odezva
Jazyky
- Angličtina, Čeština, více
Pomozte nám s překladem
Použít jazyk zařízení
Tipy a podpora
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 17fad8994..aa37da5a0 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -101,7 +101,6 @@
I kode
Startside, haptisk feedback
Sprog
- Engelsk, Kinesisk, med mere
Tema, farvestil, skriftstørrelse
Interaktion
Hjælp med at oversætte
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index c28b0a1f9..a50344d26 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -99,7 +99,6 @@
Interaktion
Haptisches Feedback beim Start
Sprachen
- Deutsch, Englisch, andere
Hilf uns beim Übersetzen
Gerätesprache verwenden
Tipps & Support
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 8ddc190c7..19905ea8d 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -67,7 +67,6 @@
Koloro ⳤ stilo
Interago
Komenca paĝo, haptika retrosciigo
- Angla, Ĉina, pli
Helpu traduki
Uzi aparatlingvon
Konsiloj ⳤ subteno
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 870fe0ee8..7be4c371c 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -102,7 +102,6 @@
Interacción
Página inicial, respuesta táctil
Idiomas
- Inglés, Chino, más
Ayuda para traducir
Usar idioma del dispositivo
Consejos y ayuda
diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml
index 1bbb06c23..2624f6a6a 100644
--- a/app/src/main/res/values-eu-rES/strings.xml
+++ b/app/src/main/res/values-eu-rES/strings.xml
@@ -99,7 +99,6 @@
Interakzioa
Abioa, ukipen-atzeraelikadura
Hizkuntzak
- Ingelesa, Txinera, gehiago
Itzulpenarekin lagundu
Gailuaren hizkuntza erabili
Aholkuak eta babesa
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index fed2733d8..bca4ea01b 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -87,7 +87,6 @@
اثر متقابل
صفحه اولیه، بازخورد لمسی
زبان ها
- انگلیسی، چینی و غیره
کمک در ترجمه
استفاده از زبان دستگاه
نکات و پشتیبانی
diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml
index 22cc36f61..ef3642aab 100644
--- a/app/src/main/res/values-fil/strings.xml
+++ b/app/src/main/res/values-fil/strings.xml
@@ -62,7 +62,6 @@
Pag-interact
Nangungunang pahina, haptic feedback
Mga Wika
- Ingles, Chinese, marami pa
Tumulong magsalin
Gamitin ang wika ng device
Mga tip at support
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index c7e1b72fb..ffda82357 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -102,7 +102,6 @@
Comportement
Page de démarrage, retour haptique
Langues
- Français, anglais et plus
Aidez-nous à traduire
Utiliser la langue système
Aide et assistance
diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml
index 968cc25e8..33948e69c 100644
--- a/app/src/main/res/values-hi-rIN/strings.xml
+++ b/app/src/main/res/values-hi-rIN/strings.xml
@@ -99,7 +99,6 @@
प्रभाव
प्रारंभिक पृष्ठ, हैप्टिक फीडबैक
भाषाएं
- अंग्रेजी , चीनी भाषा, और भी
अनुवाद में सहायता करें
डिवाइस भाषा का उपयोग करें
सुझाव और सहायता
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index d8d6d622c..9638d735a 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -144,7 +144,6 @@
Téma, színstílus, betűméret
Interakció
Nyelvek
- Angol, kínai és továbbiak
Segítsen a fordításban
Eszköz nyelvének használata
Tippek és támogatás
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index 7780e1529..6fc0eb5dd 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -99,7 +99,6 @@
Interaksi
Halaman awal, getaran haptik
Bahasa
- Inggris, Mandarin, dll
Bantu terjemahkan
Gunakan bahasa perangkat
Tips dan Bantuan
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index b00b05c78..a2dd4a96f 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -102,7 +102,6 @@
Interazione
Pagina iniziale, feedback aptico
Lingue
- Inglese, Cinese, altre
Aiuta a tradurre
Usa la lingua del dispositivo
Note e supporto
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 994083bf9..6bd044b51 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -38,7 +38,6 @@
אינטראקציה
עמוד ראשוני, משוב ברטט
שפות
- אנגלית, עברית ועוד
עזרה בתרגום
להשתמש בשפת המכשיר
עצות ותמיכה
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 8c18c1a90..18aabca56 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -33,7 +33,6 @@
操作
起動時のページ、触覚フィードバック
言語
- 英語、中国語、その他
翻訳を手伝う
ようこそ
利用規約
diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml
index 1f7f3fbce..f1709f664 100644
--- a/app/src/main/res/values-kn/strings.xml
+++ b/app/src/main/res/values-kn/strings.xml
@@ -92,7 +92,6 @@
ಹೊಸ ಆವೃತ್ತಿ %1$s ಲಭ್ಯವಿದೆ
ಬಣ್ಣ ಮತ್ತು ಶೈಲಿ
ಭಾಷೆಗಳು
- ಇಂಗ್ಲೀಷ್, ಚೈನೀಸ್, ಹೆಚ್ಚು
ಅನುವಾದಿಸಲು ಸಹಾಯ ಮಾಡಿ
ಸಲಹೆಗಳು ಮತ್ತು ಬೆಂಬಲ
ಕುರಿತು, ಮುಕ್ತ ಮೂಲ ಪರವಾನಗಿಗಳು
diff --git a/app/src/main/res/values-lzh/strings.xml b/app/src/main/res/values-lzh/strings.xml
index ad8e7e11b..c49c38c96 100644
--- a/app/src/main/res/values-lzh/strings.xml
+++ b/app/src/main/res/values-lzh/strings.xml
@@ -42,7 +42,6 @@
预置
已选取
告知往来
- 英语、简体中文、更多
罗列
更多
增添
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 5536fb59c..7799a525e 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -15,7 +15,6 @@
Marker som stjernemerket
Kontoer
Drakt, fargestil, skriftstørrelse
- Engelsk, kinesisk, med mer
Tjenestevilkår
Mørk drakt
Bruk enhetsdrakten
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 914bdcf03..54ce4eb9d 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -116,7 +116,6 @@
Ontvang nieuwe updates
Binnenkort beschikbaar
Talen
- Engels, Chinees, meer
Help met vertalen
Tips & ondersteuning
Basiskleuren
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index 50b615d61..44ea98407 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -102,7 +102,6 @@
Interakcje
Strona startowa, reakcja na dotyk
Język
- Angielski, Chiński i więcej
Pomóż w tłumaczeniu
Zgodny z systemem
Porady i wsparcie
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 2385ad778..a52356fb5 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -81,7 +81,6 @@
Interação
Página Inicial, Feedback Tátil
Idiomas
- Português, Inglês, Chinês, mais
Ajude a traduzir
Usar o idioma do dispositivo
Bem-vindo
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 2342069aa..d774c859b 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -108,7 +108,6 @@
Tema, estilo de cores e tamanho da letra
Interação
Idiomas
- Português, Inglês, Chinês, e mais
Ajude a traduzir
Utilizar o idioma do sistema
Dicas e apoio
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 994ffd4df..8fbce0e79 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -3,7 +3,6 @@
Limbi
Răsfoiți Termenii și condițiile și Politica de confidențialitate
3z
- Română, Engleză, etc
Culoare primară
Pictograme și etichete
Culori de fundal
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 65aad57bb..24e54b704 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -87,7 +87,6 @@
Взаимодействие
При запуске, тактильная обратная связь
Локализация
- Английский, Китайский, и прочие
Цвет & стиль
Подзаголовок
Использовать тему устройства
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index d19bf6984..9c2eed539 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -70,7 +70,6 @@
Miestne, FreshRSS
Farba a štýl
Téma, farebný štýl, veľkosť písma
- Angličtina, čínština a ďalšie
Jazyky
Pomôžte s prekladom
Použiť jazyk zariadenia
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 5df657fe4..d37563cf9 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -164,7 +164,6 @@
Včeraj
Dodaj med priljubljene
Odjavite se od \"%1$s\" in izbrišite vse arhivirane novice iz tega vira
- angleščina, kitajščina, več
Naslednje možnosti veljajo za vse vire v tej skupini
Dobrodošli
Označi kot prebrano
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 55698102b..dcde5381f 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -3,7 +3,6 @@
Језици
Погледајте Услове коришћења и Политику приватности
3д
- енглески, кинески, остали
Примарне боје
Иконице и ознаке
Боје позадине
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 912d140c8..b3858e554 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -185,7 +185,6 @@
Rensa alla arkiverade artiklar i gruppen \"%1$s\".
Råd & hjälp
Hämta nya uppdateringar
- Engelska, Kinesiska, ytterligare
Om, öppen källkodlicenser
Använd enhetens språk
Tjänstevillkor
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 2d3abd78e..883856622 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -170,7 +170,6 @@
Cihaz temasını kullan
İlk sayfa, haptik geribildirim
#666666 veya 666666 gibi
- İngilizce, Çince, daha fazlası
Çeviriye yardım et
Ana Renk
Güncelle
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 7e1e47a54..3f02dc9fe 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -74,7 +74,6 @@
Позначити як Обране
Позначити як прочитане більше 1 дня
Позначити як прочитане більше 7 днів тому
- Англійська, Китайська, інші
Ласкаво Просимо
Про застосунок, ліцензії з відкритим кодом
Будь ласка, прочитайте та прийміть Умови надання послуг та Політику конфіденційності, щоб продовжити.
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 3408d987b..61c3c803a 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -81,7 +81,6 @@
Sẽ sớm ra mắt
Tài khoản
Điện thoại, FreshRSS
- Anh, Việt, Trung và hơn nữa
Giúp dịch
Dùng ngôn ngữ thiết bị
Mẹo & hỗ trợ
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index dfaea2d55..0157cde2e 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -97,7 +97,6 @@
交互
初始页面、触感反馈
语言
- 英语、简体中文、更多
跟随系统设置
帮助我们翻译
提示和支持
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 991cfd42e..ce3aebf4b 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -96,7 +96,6 @@
互動
起始頁面、觸覺回饋
語言
- 英文、中文、更多
使用裝置語言
協助翻譯
提示和支援
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 0b29d6ca7..000000000
--- a/build.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-buildscript {
- ext {
-// https://developer.android.com/jetpack/androidx/releases/compose-ui
-// compose = '1.2.0-beta02'
- // https://developer.android.com/jetpack/compose/bom
- composeBom = '2024.05.00'
- // https://github.com/google/accompanist/releases
- accompanist = '0.34.0'
- // https://developer.android.com/jetpack/androidx/releases/compose-material3
-// material3 = '1.2.0-rc01'
- // https://developer.android.com/jetpack/androidx/releases/lifecycle
- lifecycle = '2.8.1'
- // https://developer.android.com/jetpack/androidx/releases/navigation
- navigation = '2.7.7'
- // https://developer.android.com/jetpack/androidx/releases/paging
- paging = '3.3.0'
- // https://developer.android.com/jetpack/androidx/releases/room
- room = '2.6.1'
- // https://developer.android.com/jetpack/androidx/releases/datastore
- datastore = '1.1.1'
- // https://developer.android.com/jetpack/androidx/releases/work
- work = '2.9.0'
- // https://developer.android.com/jetpack/androidx/releases/profileinstaller
- profileinstaller = '1.3.1'
- // https://square.github.io/okhttp/changelogs/changelog/
- okhttp = '5.0.0-alpha.12'
- retrofit2 = '2.9.0'
- // https://coil-kt.github.io/coil/changelog/
- coil = '2.5.0'
- // https://mvnrepository.com/artifact/com.rometools/rome
- rome = '1.18.0'
- // https://github.com/dankito/Readability4J
- readability4j = '1.0.8'
- // https://github.com/mdewilde/opml-parser
- opmlParser = '3.1.0'
- // http://bigbadaboom.github.io/androidsvg/release_notes.html
- androidSVG = '1.4'
- // https://github.com/mikepenz/AboutLibraries/releases
- aboutLibsRelease = '11.1.1'
- }
-
- dependencies {
- classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50'
- }
-}
-
-plugins {
- id 'com.android.application' version '8.2.1' apply false
- id 'com.android.library' version '8.2.1' apply false
- id 'org.jetbrains.kotlin.android' version '1.9.22' apply false
- id 'com.mikepenz.aboutlibraries.plugin' version "${aboutLibsRelease}" apply false
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 000000000..a7ce84225
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,13 @@
+plugins {
+ alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.library) apply false
+ alias(libs.plugins.kotlin.android) apply false
+ alias(libs.plugins.ksp) apply false
+ alias(libs.plugins.aboutlibraries) apply false
+ alias(libs.plugins.room) apply false
+ alias(libs.plugins.hilt) apply false
+}
+
+tasks.register("clean") {
+ delete(rootProject.layout.buildDirectory)
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index a77285de8..81acb424c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,8 +1,8 @@
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -XX:+UseParallelGC
org.gradle.parallel=true
+android.buildConfig = true
android.useAndroidX=true
-android.defaults.buildfeatures.buildconfig=true
-android.nonTransitiveRClass=false
-android.nonFinalResIds=false
+android.nonTransitiveRClass=true
+android.nonFinalResIds=true
android.enableR8.fullMode=false
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
new file mode 100644
index 000000000..f2a74521f
--- /dev/null
+++ b/gradle/libs.versions.toml
@@ -0,0 +1,134 @@
+[versions]
+# Android Gradle Plugin
+androidGradlePlugin = "8.2.1"
+
+# Kotlin
+kotlin = "1.9.22"
+ksp = "1.9.22-1.0.17"
+
+# AboutLibraries
+aboutLibsRelease = "11.1.1"
+
+# Accompanist
+accompanist = "0.34.0"
+
+# AndroidX
+activityCompose = "1.9.0"
+appcompat = "1.7.0"
+browser = "1.8.0"
+coreKtx = "1.13.1"
+datastore = "1.1.1"
+espresso = "3.5.1"
+lifecycle = "2.8.1"
+navigation = "2.7.7"
+paging = "3.3.0"
+profileinstaller = "1.3.1"
+room = "2.6.1"
+work = "2.9.0"
+
+# Compose
+composeBom = "2024.05.00"
+composeCompiler = "1.5.8"
+composeHtml = "1.0.2"
+
+# Coil
+coil = "2.5.0"
+
+# Hilt
+hiltAndroid = "2.50"
+hiltCompiler = "1.1.0"
+hiltNavigationCompose = "1.1.0"
+hiltWork = "1.1.0"
+
+# Miscellaneous Libraries
+androidSVG = "1.4"
+junit = "4.13.2"
+junitExt = "1.1.5"
+mockitoCore = "5.11.0"
+mockitoJUnitJupiter = "5.11.0"
+mockitoKotlin = "5.2.1"
+okhttp = "5.0.0-alpha.12"
+opmlParser = "3.1.0"
+readability4j = "1.0.8"
+retrofit2 = "2.9.0"
+rome = "1.18.0"
+telephoto = "0.7.1"
+
+[libraries]
+# AboutLibraries
+aboutlibraries-core = { group = "com.mikepenz", name = "aboutlibraries-core", version.ref = "aboutLibsRelease" }
+aboutlibraries-compose = { group = "com.mikepenz", name = "aboutlibraries-compose-m3", version.ref = "aboutLibsRelease" }
+
+# Compose
+compose-html = { group = "com.github.ireward", name = "compose-html", version.ref = "composeHtml" }
+compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
+compose-animation-graphics = { group = "androidx.compose.animation", name = "animation-graphics" }
+compose-ui = { group = "androidx.compose.ui", name = "ui" }
+compose-ui-util = { group = "androidx.compose.ui", name = "ui-util" }
+compose-material = { group = "androidx.compose.material", name = "material" }
+compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" }
+compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
+compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
+compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
+compose-material3 = { group = "androidx.compose.material3", name = "material3" }
+
+# Accompanist
+accompanist-swiperefresh = { group = "com.google.accompanist", name = "accompanist-swiperefresh", version.ref = "accompanist" }
+
+# Coil
+coil-base = { group = "io.coil-kt", name = "coil-base", version.ref = "coil" }
+coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
+coil-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" }
+coil-gif = { group = "io.coil-kt", name = "coil-gif", version.ref = "coil" }
+
+# Hilt
+hilt-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltWork" }
+hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hiltAndroid" }
+hilt-android-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hiltAndroid" }
+hilt-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltCompiler" }
+hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigationCompose" }
+
+# AndroidX
+android-svg = { group = "com.caverock", name = "androidsvg-aar", version.ref = "androidSVG" }
+opml-parser = { group = "be.ceau", name = "opml-parser", version.ref = "opmlParser" }
+readability4j = { group = "net.dankito.readability4j", name = "readability4j", version.ref = "readability4j" }
+rome = { group = "com.rometools", name = "rome", version.ref = "rome" }
+telephoto = { group = "me.saket.telephoto", name = "zoomable", version.ref = "telephoto" }
+okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
+okhttp-coroutines = { group = "com.squareup.okhttp3", name = "okhttp-coroutines-jvm", version.ref = "okhttp" }
+retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit2" }
+retrofit-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit2" }
+profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" }
+work-runtime-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "work" }
+datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore" }
+room-paging = { group = "androidx.room", name = "room-paging", version.ref = "room" }
+room-common = { group = "androidx.room", name = "room-common", version.ref = "room" }
+room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" }
+room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
+paging-common-ktx = { group = "androidx.paging", name = "paging-common-ktx", version.ref = "paging" }
+paging-runtime-ktx = { group = "androidx.paging", name = "paging-runtime-ktx", version.ref = "paging" }
+paging-compose = { group = "androidx.paging", name = "paging-compose", version.ref = "paging" }
+browser = { group = "androidx.browser", name = "browser", version.ref = "browser" }
+navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" }
+lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" }
+lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" }
+core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
+activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
+appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+
+# Testing
+junit = { group = "junit", name = "junit", version.ref = "junit" }
+junit-ext = { group = "androidx.test.ext", name = "junit", version.ref = "junitExt" }
+espresso = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso" }
+mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockitoCore" }
+mockito-junit-jupiter = { group = "org.mockito", name = "mockito-junit-jupiter", version.ref = "mockitoJUnitJupiter" }
+mockito-kotlin = { group = "org.mockito.kotlin", name = "mockito-kotlin", version.ref = "mockitoKotlin" }
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
+android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
+kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
+aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutLibsRelease" }
+room = { id = "androidx.room", version.ref = "room" }
+hilt = { id = "com.google.dagger.hilt.android", version.ref = "hiltAndroid" }
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle.kts
similarity index 81%
rename from settings.gradle
rename to settings.gradle.kts
index efa8c3962..421184d26 100644
--- a/settings.gradle
+++ b/settings.gradle.kts
@@ -5,13 +5,15 @@ pluginManagement {
mavenCentral()
}
}
+
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
- maven { url 'https://jitpack.io' }
+ maven { url = uri("https://jitpack.io") }
}
}
+
rootProject.name = "Reader"
-include ':app'
+include(":app")