diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt index 7550063ac..04c45d9d9 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt @@ -43,7 +43,7 @@ private val xml = XML { } xmlDeclMode = XmlDeclMode.Charset xmlVersion = XmlVersion.XML10 - indent = 2 + setIndent(2) } fun GalleryInfo.getComicInfo(): ComicInfo { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt index 85450a9d1..829f44bd0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/SearchFilter.kt @@ -193,9 +193,6 @@ fun SearchFilter( } if (error != null) { ListItem( - headlineContent = { - Text(text = error, style = MaterialTheme.typography.bodySmall) - }, leadingContent = { Icon(imageVector = Icons.Default.Info, contentDescription = null) }, @@ -204,6 +201,9 @@ fun SearchFilter( headlineColor = MaterialTheme.colorScheme.error, leadingIconColor = MaterialTheme.colorScheme.error, ), + content = { + Text(text = error, style = MaterialTheme.typography.bodySmall) + }, ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt index 91bf04e37..ff7c36576 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt @@ -26,9 +26,10 @@ import androidx.compose.material3.CircularWavyProgressIndicator import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.SheetValue import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text -import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.material3.rememberBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect @@ -251,7 +252,7 @@ fun ReaderScreen(pageLoader: PageLoader, info: BaseGalleryInfo?) { val blocked = page.status is PageStatus.Blocked dialog { cont -> fun dispose() = cont.resume(Unit) - val state = rememberModalBottomSheetState() + val state = rememberBottomSheetState(SheetValue.Hidden) ModalBottomSheet( onDismissRequest = { dispose() }, modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Top)), diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt index c989a0446..6a763d9a9 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt @@ -159,7 +159,6 @@ fun AnimatedVisibilityScope.FavouritesScreen(navigator: DestinationsNavigator, v ) { faves.forEachIndexed { index, (name, count) -> ListItem( - headlineContent = { Text(text = name) }, trailingContent = { Text(text = count.toString(), style = MaterialTheme.typography.bodyLarge) }, modifier = Modifier.clip(CardDefaults.shape).clickable { val newCat = index - 2 @@ -169,6 +168,7 @@ fun AnimatedVisibilityScope.FavouritesScreen(navigator: DestinationsNavigator, v launch { sheetState.close() } }, colors = listItemOnDrawerColor(urlBuilder.favCat == index - 2), + content = { Text(text = name) }, ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt index a1a90bc72..ea30f8bb0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt @@ -260,12 +260,8 @@ fun AnimatedVisibilityScope.GalleryCommentsScreen(gid: Long, navigator: Destinat Column { data.forEach { (name, vote) -> ListItem( - headlineContent = { - Text(text = name) - }, - trailingContent = { - Text(text = vote) - }, + trailingContent = { Text(text = vote) }, + content = { Text(text = name) }, ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt index 35354a7b3..d3bbee83b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt @@ -226,10 +226,8 @@ fun AnimatedVisibilityScope.GalleryListScreen( fabHidden = false launch { sheetState.close() } }, - headlineContent = { - Text(text = name) - }, colors = listItemOnDrawerColor(urlBuilder.keyword == keyword), + content = { Text(text = name) }, ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt index 523c9913e..c5a0d96b5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt @@ -294,7 +294,6 @@ fun SearchBarScreen( item {} items(mSuggestionList, key = { it.keyword.hashCode() * 31 + it.canDelete.hashCode() }) { ListItem( - headlineContent = { Text(text = it.keyword) }, supportingContent = it.hint.ifNotNullThen { Text(text = it.hint!!) }, leadingContent = it.canOpenDirectly.ifTrueThen { Icon( @@ -312,6 +311,7 @@ fun SearchBarScreen( }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), modifier = Modifier.clickable { it.onClick() }.thenIf(animateItems) { animateItem() }, + content = { Text(text = it.keyword) }, ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt index 6aa1fac60..d1501c246 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/FilterScreen.kt @@ -26,6 +26,7 @@ import androidx.compose.material3.AlertDialog import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Checkbox import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExposedDropdownMenu import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt index 78260b276..e788a8f41 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/Dialog.kt @@ -42,6 +42,7 @@ import androidx.compose.material3.DatePickerDefaults import androidx.compose.material3.DatePickerDialog import androidx.compose.material3.DisplayMode import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExposedDropdownMenu import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults @@ -684,10 +685,10 @@ suspend fun awaitSelectItemWithIcon( } itemsIndexed(items) { index, (icon, text) -> ListItem( - headlineContent = { Text(text = stringResource(id = text), style = MaterialTheme.typography.titleMedium) }, modifier = Modifier.clickable { resume(index) }.padding(horizontal = 8.dp), leadingContent = { Icon(imageVector = icon, contentDescription = null, tint = AlertDialogDefaults.iconContentColor) }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), + content = { Text(text = stringResource(id = text), style = MaterialTheme.typography.titleMedium) }, ) } } @@ -756,17 +757,17 @@ private fun CheckableItem(text: String, checked: Boolean, modifier: Modifier = M val textStyle = MaterialTheme.typography.titleMedium val checkedColor = MaterialTheme.colorScheme.primary ListItem( - headlineContent = { - Text( - text = text, - style = if (checked) textStyle.copy(color = checkedColor) else textStyle, - ) - }, modifier = modifier, trailingContent = checked.ifTrueThen { Icon(imageVector = Icons.Default.Check, contentDescription = null, tint = checkedColor) }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), + content = { + Text( + text = text, + style = if (checked) textStyle.copy(color = checkedColor) else textStyle, + ) + }, ) } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt index adc5c82af..c6ac3ccc7 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt @@ -8,6 +8,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExposedDropdownMenu import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.FlexibleBottomAppBar diff --git a/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt b/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt index 8291fb424..5242d0c15 100644 --- a/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt +++ b/build-logic/convention/src/main/kotlin/com/ehviewer/Kotlin.kt @@ -6,7 +6,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions // https://kotlinlang.org/docs/gradle-compiler-options.html#all-compiler-options internal fun KotlinCommonCompilerOptions.configureKotlin(includeKotlinX: Boolean) { progressiveMode = true - // IDE support for context parameters without `-Xcontext-parameters` is not available yet. // allWarningsAsErrors = true optIn.addAll( "kotlin.ExperimentalStdlibApi", @@ -21,12 +20,7 @@ internal fun KotlinCommonCompilerOptions.configureKotlin(includeKotlinX: Boolean "kotlinx.serialization.ExperimentalSerializationApi", ) } - freeCompilerArgs.addAll( - "-Xcollection-literals", - "-Xcontext-parameters", - "-Xwhen-expressions=indy", - "-Xannotation-default-target=param-property", - ) + freeCompilerArgs.addAll("-Xcollection-literals", "-Xwhen-expressions=indy") } internal fun KotlinCommonCompilerOptions.configureKotlinCompose() { diff --git a/core/ui/src/commonMain/kotlin/com/ehviewer/core/ui/component/DropdownFilterChip.kt b/core/ui/src/commonMain/kotlin/com/ehviewer/core/ui/component/DropdownFilterChip.kt index 9d7edc200..b49eb43de 100644 --- a/core/ui/src/commonMain/kotlin/com/ehviewer/core/ui/component/DropdownFilterChip.kt +++ b/core/ui/src/commonMain/kotlin/com/ehviewer/core/ui/component/DropdownFilterChip.kt @@ -1,6 +1,7 @@ package com.ehviewer.core.ui.component import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExposedDropdownMenu import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1e9f96aa4..765e0986e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,43 +1,43 @@ [versions] -aboutlibraries = "14.2.0" +aboutlibraries = "14.2.1" accompanist = "0.37.3" -agp = "9.2.1" +agp = "9.3.1" androidx-activity = "1.13.0" -androidx-appcompat = "1.7.1" +androidx-appcompat = "1.8.0" androidx-biometric = "1.4.0-alpha07" androidx-browser = "1.10.0" -androidx-core = "1.18.0" +androidx-core = "1.19.0" androidx-core-splashscreen = "1.2.0" androidx-datastore = "1.2.1" -androidx-lifecycle = "2.10.0" -androidx-paging = "3.5.0" +androidx-lifecycle = "2.11.0" +androidx-paging = "3.5.1" androidx-room = "2.8.4" -androidx-webkit = "1.15.0" +androidx-webkit = "1.17.0" androidx-work = "2.11.2" -arrow = "2.2.2.1" -coil = "3.4.0" -compose-bom = "2026.05.00" -compose-multiplatform = "1.11.0" +arrow = "2.2.3" +coil = "3.5.0" +compose-bom = "2026.08.00" +compose-multiplatform = "1.11.1" compose-destinations = "2.3.0" compose-preference = "2.2.0" java = "25" -kotlin = "2.4.0" +kotlin = "2.4.10" kotlinx-coroutines = "1.11.0" kotlinx-datetime = "0.8.0" -kotlinx-io = "0.9.0" +kotlinx-io = "0.9.1" kotlinx-serialization = "1.11.0" -ksp = "2.3.8" -ktor = "3.5.0" +ksp = "2.3.9" +ktor = "3.5.2" moko-resources = "0.26.4" -okhttp = "5.3.2" -okio = "3.17.0" +okhttp = "5.5.0" +okio = "3.18.1" splitties = "3.0.0" -spotless = "8.5.1" +spotless = "8.10.0" telephoto = "0.19.0" -xmlutil = "0.91.3" +xmlutil = "1.0.2" junit = "1.3.0" -uiautomator = "2.4.0-beta02" -benchmark = "1.5.0-alpha06" +uiautomator = "2.4.0" +benchmark = "1.5.0-rc01" profileinstaller = "1.4.1" [libraries] @@ -89,7 +89,7 @@ compose-destinations-compiler = { module = "io.github.raamcosta.compose-destinat compose-preference = { module = "me.zhanghai.compose.preference:preference", version.ref = "compose-preference" } material-motion-core = "io.github.fornewid:material-motion-compose-core:2.0.1" -material-kolor = "com.materialkolor:material-kolor:4.1.1" +material-kolor = "com.materialkolor:material-kolor:5.0.0" desugar = "com.android.tools:desugar_jdk_libs:2.1.5" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index b1b8ef56b..eddabd2ee 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df6a6ad76..ad7845be3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip networkTimeout=10000 retries=0 retryBackOffMs=500 diff --git a/gradlew b/gradlew index b9bb139f7..249efbb03 100755 --- a/gradlew +++ b/gradlew @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: diff --git a/gradlew.bat b/gradlew.bat index aa5f10b06..8508ef684 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,7 +19,7 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## @@ -72,7 +72,7 @@ echo location of your Java installation. 1>&2 -@rem Execute Gradle +@rem Execute gradlew @rem endlocal doesn't take effect until after the line is parsed and variables are expanded @rem which allows us to clear the local environment before executing the java command endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel diff --git a/settings.gradle.kts b/settings.gradle.kts index abb4adb85..b49bdf30e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,12 +28,12 @@ dependencyResolutionManagement { } plugins { - id("com.android.settings") version "9.2.1" + id("com.android.settings") version "9.3.1" } android { compileSdk = 37 - minSdk = 23 + minSdk = 24 targetSdk = 37 ndkVersion = "29.0.14206865" buildToolsVersion = "37.0.0"