diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt index 9bd8ab92a..7f3a00d70 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt @@ -19,8 +19,8 @@ import com.hippo.ehviewer.util.findActivity import com.ramcosta.composedestinations.navigation.DestinationsNavigator import kotlinx.coroutines.CoroutineScope -context(scope: AnimatedVisibilityScope) @Composable +context(scope: AnimatedVisibilityScope) inline fun Screen( navigator: DestinationsNavigator, block: @Composable context(MainActivity, SnackbarHostState, DialogState, SharedTransitionScope, TransitionsVisibilityScope, DestinationsNavigator, CoroutineScope) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt index d1937a35d..606503434 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt @@ -62,8 +62,8 @@ private fun GalleryDetail.content() = arrayOf( R.string.favorite_name to favoriteName, ) -context(_: Context, _: DestinationsNavigator) @Composable +context(_: Context, _: DestinationsNavigator) fun GalleryInfoBottomSheet(detail: GalleryDetail) { Column(modifier = Modifier.fillMaxWidth()) { Text( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt index f6a35bbf8..17d000af4 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt @@ -84,8 +84,8 @@ private val limitFlow: StateFlow = refreshEvent.conflate() .let { src -> merge(src, invalidateEvent.map { none() }) } .stateIn(limitScope, SharingStarted.Eagerly, none()) -context(_: CoroutineScope, _: DialogState, _: SnackbarHostState, _: DestinationsNavigator) @Composable +context(_: CoroutineScope, _: DialogState, _: SnackbarHostState, _: DestinationsNavigator) fun AvatarIcon() { val hasSignedIn by Settings.hasSignedIn.collectAsState() if (hasSignedIn) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt index e42cb8492..84362c8fa 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/DownloadCard.kt @@ -50,8 +50,8 @@ import com.hippo.ehviewer.ui.tools.TransitionsVisibilityScope import com.hippo.ehviewer.ui.tools.listThumbGenerator import com.hippo.ehviewer.util.FileUtils -context(_: SharedTransitionScope, _: TransitionsVisibilityScope) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope) fun DownloadCard( onClick: () -> Unit, onThumbClick: () -> Unit, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt index 5daf405ed..74a2031d2 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt @@ -32,8 +32,8 @@ fun requestOf(model: GalleryInfo) = with(LocalContext.current) { remember(model) { imageRequest(model) } } -context(_: SharedTransitionScope, _: TransitionsVisibilityScope, _: SETNodeGenerator) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope, _: SETNodeGenerator) fun EhAsyncCropThumb( key: GalleryInfo, modifier: Modifier = Modifier, @@ -56,8 +56,8 @@ fun EhAsyncCropThumb( ) } -context(_: SharedTransitionScope, _: TransitionsVisibilityScope, _: SETNodeGenerator) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope, _: SETNodeGenerator) fun EhThumbCard( key: GalleryInfo, modifier: Modifier = Modifier, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt index 2f688c7ef..fc7f93be1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt @@ -98,8 +98,8 @@ fun interface FabBuilder { fun onClick(icon: ImageVector, that: suspend () -> Unit) = onClick(icon, true, that) } -context(_: CoroutineScope) @Composable +context(_: CoroutineScope) fun FabLayout( hidden: Boolean, expanded: Boolean, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt index c641e7d45..0d38edcf0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryDetail.kt @@ -76,8 +76,8 @@ fun GalleryDetailHeaderInfoCard( } } -context(_: SharedTransitionScope, _: TransitionsVisibilityScope) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope) fun GalleryDetailHeaderCard( info: GalleryInfo, onInfoCardClick: () -> Unit, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt index 4069f0fab..9c8e951f6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryInfo.kt @@ -51,8 +51,8 @@ import com.hippo.ehviewer.ui.tools.TransitionsVisibilityScope import com.hippo.ehviewer.ui.tools.listThumbGenerator import com.hippo.ehviewer.util.FavouriteStatusRouter -context(_: SharedTransitionScope, _: TransitionsVisibilityScope) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope) fun GalleryInfoListItem( onClick: () -> Unit, onLongClick: () -> Unit, @@ -145,8 +145,8 @@ fun GalleryInfoListItem( } } -context(_: SharedTransitionScope, _: TransitionsVisibilityScope) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope) fun GalleryInfoGridItem( onClick: () -> Unit, onLongClick: () -> Unit, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt index 9bf7dfed8..e38b4a313 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryList.kt @@ -78,8 +78,8 @@ operator fun PaddingValues.plus(r: PaddingValues) = object : PaddingValues { override fun calculateTopPadding() = l.calculateTopPadding() + r.calculateTopPadding() } -context(_: CoroutineScope, ctx: Context) @Composable +context(_: CoroutineScope, ctx: Context) fun GalleryList( modifier: Modifier = Modifier, data: LazyPagingItems, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt index 09dcbd29e..9e1d3e8da 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt @@ -30,8 +30,8 @@ import com.hippo.ehviewer.client.data.VoteStatus import com.hippo.ehviewer.collectAsState import com.hippo.ehviewer.ui.tools.includeFontPadding -context(_: Context) @Composable +context(_: Context) fun GalleryTags( tagGroups: List, onTagClick: (String) -> Unit, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NavigationIcon.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NavigationIcon.kt index 5f004995a..699cdfbd3 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NavigationIcon.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NavigationIcon.kt @@ -8,8 +8,8 @@ import androidx.compose.material3.IconButtonDefaults import androidx.compose.runtime.Composable import com.ramcosta.composedestinations.navigation.DestinationsNavigator -context(navigator: DestinationsNavigator) @Composable +context(navigator: DestinationsNavigator) fun NavigationIcon() = IconButton(onClick = { navigator.popBackStack() }, shapes = IconButtonDefaults.shapes()) { Icon(imageVector = Icons.AutoMirrored.Default.ArrowBack, contentDescription = null) } 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 3ccced735..127ffa7c2 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 @@ -60,8 +60,8 @@ private val categoryTable = arrayOf( EhUtils.MISC to R.string.misc, ) -context(_: DialogState, _: CoroutineScope, _: Context) @Composable +context(_: DialogState, _: CoroutineScope, _: Context) fun SearchFilter( modifier: Modifier = Modifier, category: Int, 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 b52bb2656..b793fea0f 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 @@ -182,8 +182,8 @@ fun AnimatedVisibilityScope.ReaderScreen(args: ReaderScreenArgs, navigator: Dest } } -context(activity: MainActivity, _: SnackbarHostState, _: DialogState, _: CoroutineScope) @Composable +context(activity: MainActivity, _: SnackbarHostState, _: DialogState, _: CoroutineScope) fun ReaderScreen(pageLoader: PageLoader, info: BaseGalleryInfo?) { LaunchedEffect(Unit) { val orientation = activity.requestedOrientation diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt index cd3805620..2f881667d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt @@ -164,8 +164,8 @@ import moe.tarsin.navigate import moe.tarsin.snackbar import moe.tarsin.string -context(_: CoroutineScope, _: DestinationsNavigator, _: DialogState, _: MainActivity, _: SnackbarHostState, _: SharedTransitionScope, _: TransitionsVisibilityScope) @Composable +context(_: CoroutineScope, _: DestinationsNavigator, _: DialogState, _: MainActivity, _: SnackbarHostState, _: SharedTransitionScope, _: TransitionsVisibilityScope) fun GalleryDetailContent( galleryInfo: GalleryInfo, contentPadding: PaddingValues, @@ -393,8 +393,8 @@ fun GalleryDetailContent( } } -context(ctx: Context, _: CoroutineScope, _: DestinationsNavigator, _: DialogState, _: SnackbarHostState) @Composable +context(ctx: Context, _: CoroutineScope, _: DestinationsNavigator, _: DialogState, _: SnackbarHostState) fun BelowHeader(galleryDetail: GalleryDetail, voteTag: VoteTag) { @Composable fun EhIconButton( @@ -786,8 +786,8 @@ private fun getRatingText(rating: Float): Int = when ((rating * 2).roundToInt()) private fun List.artistTag() = find { (ns, _) -> ns == TagNamespace.Artist || ns == TagNamespace.Cosplayer }?.let { (ns, tags) -> "$ns:${tags[0].text}" } -context(_: Context) @Composable +context(_: Context) private fun GalleryDetail.collectPreviewItems() = rememberInVM(previewList) { val pageSize = previewList.size val pages = pages 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 1d14992f1..9a953359d 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 @@ -617,9 +617,9 @@ fun AnimatedVisibilityScope.GalleryListScreen( const val TOPLIST_PAGES = 200 -context(_: Context) @Composable @Stable +context(_: Context) private fun getSuitableTitleForUrlBuilder(urlBuilder: ListUrlBuilder, appName: Boolean = true): String? { val keyword = urlBuilder.keyword val category = urlBuilder.category diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt index f511b715d..5bff9c76d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt @@ -24,8 +24,8 @@ private fun urlToDestination(url: String): Direction? { return null } -context(nav: DestinationsNavigator) @MainThread +context(nav: DestinationsNavigator) fun navWithUrl(url: String): Boolean { val dest = urlToDestination(url) ?: return false navigate(dest) 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 831eeaa90..b790f38d5 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 @@ -107,8 +107,8 @@ abstract class Suggestion { suspend fun SearchDao.suggestions(prefix: String, limit: Int) = (if (prefix.isBlank()) list(limit) else rawSuggestions(prefix, limit)) -context(_: DialogState, _: DestinationsNavigator) @Composable +context(_: DialogState, _: DestinationsNavigator) fun SearchBarScreen( onApplySearch: (String) -> Unit, expanded: Boolean, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/BBCodeTextToolbar.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/BBCodeTextToolbar.kt index 31cdacdf9..9c3740737 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/BBCodeTextToolbar.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/BBCodeTextToolbar.kt @@ -140,8 +140,8 @@ fun AnnotatedString.toBBCode() = buildString { } } -context(activity: MainActivity) @Composable +context(activity: MainActivity) fun rememberBBCodeTextToolbar(textFieldValue: MutableState): TextToolbar { var tfv by textFieldValue val view = LocalView.current 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 8796592ba..b1afe0bad 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 @@ -119,8 +119,8 @@ class DialogState(val mutex: MutatorMutex = MutatorMutex()) : MutableComposable @Composable fun rememberLocal() = remember { DialogState(mutex) } - context(scope: BoxScope) @Composable + context(scope: BoxScope) fun Place() = value?.let { it(scope) } fun dismiss() { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt index d039aab7a..f9a78922e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt @@ -25,12 +25,12 @@ val NoopTransitionsVisibilityScope = TransitionsVisibilityScope(emptySet()) @Stable value class TransitionsVisibilityScope(val scopes: Set) -context(visScope: TransitionsVisibilityScope) @Composable +context(visScope: TransitionsVisibilityScope) inline fun togetherWith(scope: AnimatedVisibilityScope, block: @Composable TransitionsVisibilityScope.() -> T) = block(remember(visScope.scopes, scope) { TransitionsVisibilityScope(visScope.scopes + scope) }) -context(shareScope: SharedTransitionScope, visScope: TransitionsVisibilityScope, generator: SETNodeGenerator) @Composable +context(shareScope: SharedTransitionScope, visScope: TransitionsVisibilityScope, generator: SETNodeGenerator) fun Modifier.sharedBounds( key: String, enter: EnterTransition = fadeIn(), @@ -53,8 +53,8 @@ fun Modifier.sharedBounds( } } -context(_: SharedTransitionScope, _: TransitionsVisibilityScope, _: SETNodeGenerator) @Composable +context(_: SharedTransitionScope, _: TransitionsVisibilityScope, _: SETNodeGenerator) inline fun SharedElementBox(key: String, shape: Shape, crossinline content: @Composable BoxScope.() -> Unit) { val modifier = Modifier.sharedBounds(key = key).clip(shape) CompositionLocalProvider { Box(modifier = modifier, content = content) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt index 493e23a3f..16aaef830 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt @@ -82,8 +82,8 @@ suspend fun requestPermission(key: String): Boolean { context(_: Context) suspend fun pickVisualMedia(type: VisualMediaType): Uri? = awaitActivityResult(ActivityResultContracts.PickVisualMedia(), PickVisualMediaRequest(mediaType = type)) -context(ctx: Context) @RequiresApi(Build.VERSION_CODES.O) +context(ctx: Context) suspend fun requestInstallPermission(): Boolean = with(ctx) { if (packageManager.canRequestPackageInstalls()) return true val granted = requestPermission(Manifest.permission.REQUEST_INSTALL_PACKAGES) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 484feddb6..b7ae72250 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -91,7 +91,7 @@ diff = "io.github.petertrr:kotlin-multiplatform-diff:1.1.0" kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } -ktlint = "com.pinterest.ktlint:ktlint-cli:1.6.0" +ktlint = "com.pinterest.ktlint:ktlint-cli:1.7.1" okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp" } okhttp-android = { module = "com.squareup.okhttp3:okhttp-android" }