diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index bebc653c03..6ba66a5e74 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -37,4 +37,4 @@ jobs: - name: Build app and run unit tests uses: gradle/gradle-command-action@v2 with: - arguments: ktlintCheck assembleStandardRelease testReleaseUnitTest \ No newline at end of file + arguments: detekt assembleStandardRelease testReleaseUnitTest diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml index 73106a0ef6..1d14c640bb 100644 --- a/.github/workflows/build_push.yml +++ b/.github/workflows/build_push.yml @@ -35,7 +35,7 @@ jobs: - name: Build app and run unit tests uses: gradle/gradle-command-action@v2 with: - arguments: ktlintCheck assembleStandardRelease testReleaseUnitTest + arguments: detekt assembleStandardRelease testReleaseUnitTest # Sign APK and create release for tags diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a76b9a70bf..871b23bdc4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -163,7 +163,6 @@ dependencies { implementation(compose.ui.util) implementation(compose.accompanist.webview) implementation(compose.accompanist.systemuicontroller) - lintChecks(compose.lintchecks) implementation(androidx.paging.runtime) implementation(androidx.paging.compose) diff --git a/build.gradle.kts b/build.gradle.kts index ad3a21a2ed..dfaf0816ec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,8 +32,7 @@ subprojects { } plugins.withType { - plugins.apply("tachiyomi.lint") - + plugins.apply("detekt") configure { compileSdkVersion(AndroidConfig.compileSdk) defaultConfig { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2c76035b72..a948efcc7a 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -3,9 +3,10 @@ plugins { } dependencies { + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) implementation(androidxLibs.gradle) implementation(kotlinLibs.gradle) - implementation(libs.ktlint) + implementation(libs.detekt.gradlePlugin) implementation(gradleApi()) } diff --git a/buildSrc/src/main/kotlin/detekt.gradle.kts b/buildSrc/src/main/kotlin/detekt.gradle.kts new file mode 100644 index 0000000000..986138ee63 --- /dev/null +++ b/buildSrc/src/main/kotlin/detekt.gradle.kts @@ -0,0 +1,47 @@ +import io.gitlab.arturbosch.detekt.Detekt +import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("io.gitlab.arturbosch.detekt") +} + +val libs = the() +dependencies { + detektPlugins(libs.detekt.rules.formatting) + detektPlugins(libs.detekt.rules.compose) +} + +private val configFile = files("$rootDir/config/detekt/detekt.yml") +private val baselineFile = file("$rootDir/config/detekt/baseline.xml") +private val kotlinFiles = "**/*.kt" +private val resourceFiles = "**/resources/**" +private val buildFiles = "**/build/**" +private val generatedFiles = "**/generated/**" +private val scriptsFiles = "**/*.kts" + +detekt { + buildUponDefaultConfig = true + parallel = true + autoCorrect = false + ignoreFailures = false + config.setFrom(configFile) + baseline = file(baselineFile) +} + +tasks.withType().configureEach { + include(kotlinFiles) + exclude(resourceFiles, buildFiles, generatedFiles, scriptsFiles) + reports { + html.required.set(true) + xml.required.set(false) + txt.required.set(false) + } +} + +tasks.withType().configureEach { + jvmTarget = JavaVersion.VERSION_17.toString() +} +tasks.withType().configureEach { + jvmTarget = JavaVersion.VERSION_17.toString() +} diff --git a/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts b/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts deleted file mode 100644 index 5216d49627..0000000000 --- a/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts +++ /dev/null @@ -1,22 +0,0 @@ -import org.jlleitschuh.gradle.ktlint.KtlintExtension -import org.jlleitschuh.gradle.ktlint.KtlintPlugin - -apply() - -extensions.configure("ktlint") { - version.set("0.50.0") - android.set(true) - enableExperimentalRules.set(true) - - filter { - exclude("**/generated/**") - - // For some reason this is needed for Kotlin MPP - exclude { tree -> - val path = tree.file.path - listOf("/generated/").any { - path.contains(it) - } - } - } -} diff --git a/config/detekt/baseline.xml b/config/detekt/baseline.xml new file mode 100644 index 0000000000..1845cae53c --- /dev/null +++ b/config/detekt/baseline.xml @@ -0,0 +1,1327 @@ + + + + + ComplexCondition:MangaScreenModel.kt$MangaScreenModel$(selectedItem.selected && selected) || (!selectedItem.selected && !selected) + ComplexCondition:ReaderNavigationOverlayView.kt$ReaderNavigationOverlayView$isVisible || (!showOnStart && firstLaunch) || navigation is DisabledNavigation + ComplexCondition:ReaderPageImageView.kt$ReaderPageImageView$config != null && config!!.landscapeZoom && config!!.minimumScaleType == SCALE_TYPE_CENTER_INSIDE && sWidth > sHeight && scale == minScale + ComposableParamOrder:ChapterSettingsDialog.kt$ChapterSettingsDialog + ComposableParamOrder:LazyLibraryGrid.kt$LazyLibraryGrid + ComposableParamOrder:SwitchPreferenceWidget.kt$SwitchPreferenceWidget + ComposableParamOrder:TrackingPreferenceWidget.kt$TrackingPreferenceWidget + ComposableParamOrder:TriStateListDialog.kt$TriStateListDialog + CompositionLocalAllowlist:Navigator.kt$LocalBackPress + CompositionLocalAllowlist:PreferenceItem.kt$LocalPreferenceHighlighted + CompositionLocalAllowlist:PreferenceItem.kt$LocalPreferenceMinHeight + ConstructorParameterNaming:AnilistModels.kt$ALManga$val average_score: Int + ConstructorParameterNaming:AnilistModels.kt$ALManga$val image_url_lge: String + ConstructorParameterNaming:AnilistModels.kt$ALManga$val publishing_status: String + ConstructorParameterNaming:AnilistModels.kt$ALManga$val remote_id: Long + ConstructorParameterNaming:AnilistModels.kt$ALManga$val start_date_fuzzy: Long + ConstructorParameterNaming:AnilistModels.kt$ALManga$val title_user_pref: String + ConstructorParameterNaming:AnilistModels.kt$ALManga$val total_chapters: Long + ConstructorParameterNaming:AnilistModels.kt$ALUserManga$val chapters_read: Int + ConstructorParameterNaming:AnilistModels.kt$ALUserManga$val completed_date_fuzzy: Long + ConstructorParameterNaming:AnilistModels.kt$ALUserManga$val library_id: Long + ConstructorParameterNaming:AnilistModels.kt$ALUserManga$val list_status: String + ConstructorParameterNaming:AnilistModels.kt$ALUserManga$val score_raw: Int + ConstructorParameterNaming:AnilistModels.kt$ALUserManga$val start_date_fuzzy: Long + ConstructorParameterNaming:AnilistModels.kt$OAuth$val access_token: String + ConstructorParameterNaming:AnilistModels.kt$OAuth$val expires_in: Long + ConstructorParameterNaming:AnilistModels.kt$OAuth$val token_type: String + ConstructorParameterNaming:BackupManga.kt$BackupManga$@ProtoNumber(103) var viewer_flags: Int? = null + ConstructorParameterNaming:BangumiModels.kt$Collection$val ep_status: Int? = 0 + ConstructorParameterNaming:BangumiModels.kt$Collection$val vol_status: Int? = 0 + ConstructorParameterNaming:BangumiModels.kt$OAuth$val access_token: String + ConstructorParameterNaming:BangumiModels.kt$OAuth$val created_at: Long = System.currentTimeMillis() / 1000 + ConstructorParameterNaming:BangumiModels.kt$OAuth$val expires_in: Long + ConstructorParameterNaming:BangumiModels.kt$OAuth$val refresh_token: String? + ConstructorParameterNaming:BangumiModels.kt$OAuth$val token_type: String + ConstructorParameterNaming:BangumiModels.kt$OAuth$val user_id: Long? + ConstructorParameterNaming:ExtensionDetailsScreenModel.kt$ExtensionDetailsScreenModel.State$private val _sources: ImmutableList<ExtensionSourceItem>? = null + ConstructorParameterNaming:KavitaModels.kt$SeriesDto$val thumbnail_url: String? = "" + ConstructorParameterNaming:KitsuModels.kt$OAuth$val access_token: String + ConstructorParameterNaming:KitsuModels.kt$OAuth$val created_at: Long + ConstructorParameterNaming:KitsuModels.kt$OAuth$val expires_in: Long + ConstructorParameterNaming:KitsuModels.kt$OAuth$val refresh_token: String? + ConstructorParameterNaming:KitsuModels.kt$OAuth$val token_type: String + ConstructorParameterNaming:MyAnimeListModels.kt$OAuth$val access_token: String + ConstructorParameterNaming:MyAnimeListModels.kt$OAuth$val created_at: Long = System.currentTimeMillis() + ConstructorParameterNaming:MyAnimeListModels.kt$OAuth$val expires_in: Long + ConstructorParameterNaming:MyAnimeListModels.kt$OAuth$val refresh_token: String + ConstructorParameterNaming:MyAnimeListModels.kt$OAuth$val token_type: String + ConstructorParameterNaming:ShikimoriModels.kt$OAuth$val access_token: String + ConstructorParameterNaming:ShikimoriModels.kt$OAuth$val created_at: Long + ConstructorParameterNaming:ShikimoriModels.kt$OAuth$val expires_in: Long + ConstructorParameterNaming:ShikimoriModels.kt$OAuth$val refresh_token: String? + ConstructorParameterNaming:ShikimoriModels.kt$OAuth$val token_type: String + CyclomaticComplexMethod:AnilistModels.kt$fun DomainTrack.toAnilistScore(): String + CyclomaticComplexMethod:BrowseSourceScreen.kt$@Composable fun BrowseSourceContent( source: Source?, mangaList: LazyPagingItems<StateFlow<Manga>>, columns: GridCells, displayMode: LibraryDisplayMode, snackbarHostState: SnackbarHostState, contentPadding: PaddingValues, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onLocalSourceHelpClick: () -> Unit, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) + CyclomaticComplexMethod:BrowseSourceScreen.kt$BrowseSourceScreen$@Composable override fun Content() + CyclomaticComplexMethod:BrowseSourceScreenModel.kt$BrowseSourceScreenModel$fun searchGenre(genreName: String) + CyclomaticComplexMethod:Button.kt$ButtonElevation$@Composable private fun animateElevation( enabled: Boolean, interactionSource: InteractionSource, ): State<Dp> + CyclomaticComplexMethod:DownloadCache.kt$DownloadCache$private fun renewCache() + CyclomaticComplexMethod:ExtensionLoader.kt$ExtensionLoader$private fun loadExtension(context: Context, extensionInfo: ExtensionInfo): LoadResult + CyclomaticComplexMethod:ExtensionsScreen.kt$@Composable private fun ExtensionContent( state: ExtensionsScreenModel.State, contentPadding: PaddingValues, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onOpenWebView: (Extension.Available) -> Unit, onInstallExtension: (Extension.Available) -> Unit, onUninstallExtension: (Extension) -> Unit, onUpdateExtension: (Extension.Installed) -> Unit, onTrustExtension: (Extension.Untrusted) -> Unit, onOpenExtension: (Extension.Installed) -> Unit, onClickUpdateAll: () -> Unit, ) + CyclomaticComplexMethod:ExtensionsScreen.kt$@Composable private fun ExtensionItemContent( extension: Extension, installStep: InstallStep, modifier: Modifier = Modifier, ) + CyclomaticComplexMethod:GetSourcesWithFavoriteCount.kt$GetSourcesWithFavoriteCount$private fun sortFn( direction: SetMigrateSorting.Direction, sorting: SetMigrateSorting.Mode, ): java.util.Comparator<Pair<Source, Long>> + CyclomaticComplexMethod:ImageUtil.kt$ImageUtil$fun chooseBackground(context: Context, imageStream: InputStream): Drawable + CyclomaticComplexMethod:LibraryScreenModel.kt$LibraryScreenModel$private fun LibraryMap.applySort( // Map<MangaId, List<Track>> trackMap: Map<Long, List<Track>>, ): LibraryMap + CyclomaticComplexMethod:LibraryScreenModel.kt$LibraryScreenModel$private suspend fun LibraryMap.applyFilters( trackMap: Map<Long, List<Track>>, loggedInTrackers: Map<Long, TriState>, ): LibraryMap + CyclomaticComplexMethod:LibraryTab.kt$LibraryTab$@Composable override fun Content() + CyclomaticComplexMethod:LibraryUpdateJob.kt$LibraryUpdateJob$private suspend fun addMangaToQueue(categoryId: Long) + CyclomaticComplexMethod:LocalSource.kt$LocalSource$override suspend fun getMangaDetails(manga: SManga): SManga + CyclomaticComplexMethod:LocalSource.kt$LocalSource$private fun updateCover(chapter: SChapter, manga: SManga): UniFile? + CyclomaticComplexMethod:MainActivity.kt$MainActivity$override fun onCreate(savedInstanceState: Bundle?) + CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun handleIntentAction(intent: Intent, navigator: Navigator): Boolean + CyclomaticComplexMethod:MangaInfoHeader.kt$@Composable private fun ColumnScope.MangaContentInfo( title: String, doSearch: (query: String, global: Boolean) -> Unit, author: String?, artist: String?, status: Long, sourceName: String, isStubSource: Boolean, textAlign: TextAlign? = LocalTextStyle.current.textAlign, ) + CyclomaticComplexMethod:MangaScreen.kt$MangaScreen$@Composable override fun Content() + CyclomaticComplexMethod:MangaScreenModel.kt$MangaScreenModel$fun toggleSelection( item: ChapterList.Item, selected: Boolean, userSelected: Boolean = false, fromLongPress: Boolean = false, ) + CyclomaticComplexMethod:MigrateDialog.kt$MigrateDialogScreenModel$private suspend fun migrateMangaInternal( oldSource: Source?, newSource: Source, oldManga: Manga, newManga: Manga, sourceChapters: List<SChapter>, replace: Boolean, flags: Int, ) + CyclomaticComplexMethod:NotificationReceiver.kt$NotificationReceiver$override fun onReceive(context: Context, intent: Intent) + CyclomaticComplexMethod:PagerViewer.kt$PagerViewer$override fun handleKeyEvent(event: KeyEvent): Boolean + CyclomaticComplexMethod:PagerViewerAdapter.kt$PagerViewerAdapter$fun setChapters(chapters: ViewerChapters, forceTransition: Boolean) + CyclomaticComplexMethod:PreferenceItem.kt$@Composable internal fun PreferenceItem( item: Preference.PreferenceItem<*>, highlightKey: String?, ) + CyclomaticComplexMethod:RateLimitInterceptor.kt$RateLimitInterceptor$override fun intercept(chain: Interceptor.Chain): Response + CyclomaticComplexMethod:ReaderActivity.kt$ReaderActivity$override fun onCreate(savedInstanceState: Bundle?) + CyclomaticComplexMethod:ReaderActivity.kt$ReaderActivity$private fun initializeMenu() + CyclomaticComplexMethod:Scaffold.kt$@Composable private fun ScaffoldLayout( fabPosition: FabPosition, topBar: @Composable () -> Unit, startBar: @Composable () -> Unit, content: @Composable (PaddingValues) -> Unit, snackbar: @Composable () -> Unit, fab: @Composable () -> Unit, contentWindowInsets: WindowInsets, bottomBar: @Composable () -> Unit, ) + CyclomaticComplexMethod:SourcesScreenModel.kt$SourcesScreenModel$private fun collectLatestSources(sources: List<Source>) + CyclomaticComplexMethod:SyncChaptersWithSource.kt$SyncChaptersWithSource$suspend fun await( rawSourceChapters: List<SChapter>, manga: Manga, source: Source, manualFetch: Boolean = false, fetchWindow: Pair<Long, Long> = Pair(0, 0), ): List<Chapter> + CyclomaticComplexMethod:TriStateListDialog.kt$@Composable fun <T> TriStateListDialog( title: String, message: String? = null, items: List<T>, initialChecked: List<T>, initialInversed: List<T>, itemLabel: @Composable (T) -> String, onDismissRequest: () -> Unit, onValueChanged: (newIncluded: List<T>, newExcluded: List<T>) -> Unit, ) + CyclomaticComplexMethod:UpdatesScreenModel.kt$UpdatesScreenModel$fun toggleSelection( item: UpdatesItem, selected: Boolean, userSelected: Boolean = false, fromLongPress: Boolean = false, ) + CyclomaticComplexMethod:VerticalFastScroller.kt$@Composable fun VerticalFastScroller( listState: LazyListState, modifier: Modifier = Modifier, thumbAllowed: () -> Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, content: @Composable () -> Unit, ) + CyclomaticComplexMethod:VerticalFastScroller.kt$@Composable fun VerticalGridFastScroller( state: LazyGridState, columns: GridCells, arrangement: Arrangement.Horizontal, contentPadding: PaddingValues, modifier: Modifier = Modifier, thumbAllowed: () -> Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, content: @Composable () -> Unit, ) + CyclomaticComplexMethod:WebtoonRecyclerView.kt$WebtoonRecyclerView.Detector$override fun onTouchEvent(ev: MotionEvent): Boolean + CyclomaticComplexMethod:WebtoonViewer.kt$WebtoonViewer$override fun handleKeyEvent(event: KeyEvent): Boolean + DestructuringDeclarationWithTooManyEntries:ExtensionsScreenModel.kt$ExtensionsScreenModel$(_updates, _installed, _available, _untrusted) + DestructuringDeclarationWithTooManyEntries:MangaInfoHeader.kt$(shrunk, expanded, actual, scrim) + EmptyCatchBlock:RarPageLoader.kt$RarPageLoader${ } + EqualsAlwaysReturnsTrueOrFalse:FilterList.kt$FilterList$override fun equals(other: Any?): Boolean + ExplicitItLambdaParameter:ColorFilterPage.kt${ index, it -> FilterChip( selected = colorFilterMode == index, onClick = { screenModel.preferences.colorFilterMode().set(index) }, label = { Text(stringResource(it.first)) }, ) } + ExplicitItLambdaParameter:LibraryTab.kt$LibraryTab${ it: LibraryManga -> scope.launchIO { val chapter = screenModel.getNextUnreadChapter(it.manga) if (chapter != null) { context.startActivity( ReaderActivity.newIntent(context, chapter.mangaId, chapter.id), ) } else { snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter)) } } Unit } + ExplicitItLambdaParameter:ReadingModePage.kt${ index, it -> FilterChip( selected = imageScaleType == index + 1, onClick = { screenModel.preferences.imageScaleType().set(index + 1) }, label = { Text(stringResource(it)) }, ) } + ExplicitItLambdaParameter:ReadingModePage.kt${ index, it -> FilterChip( selected = selected == index, onClick = { onSelect(index) }, label = { Text(stringResource(it)) }, ) } + ExplicitItLambdaParameter:ReadingModePage.kt${ index, it -> FilterChip( selected = zoomStart == index + 1, onClick = { screenModel.preferences.zoomStart().set(index + 1) }, label = { Text(stringResource(it)) }, ) } + ExplicitItLambdaParameter:SettingsReaderScreen.kt$SettingsReaderScreen${ index, it -> index + 1 to stringResource(it) } + ExplicitItLambdaParameter:SettingsReaderScreen.kt$SettingsReaderScreen${ index, it -> index to stringResource(it) } + FinalNewline:Commands.kt$.Commands.kt + ForEachOnRange:MangaBottomActionMenu.kt$0..<5 + ForEachOnRange:MangaBottomActionMenu.kt$0..<7 + ForEachOnRange:UpdatesWidget.kt$0..<rowCount + ForbiddenComment:AddTracks.kt$AddTracks$// TODO: merge into [SyncChapterProgressWithTrack]? + ForbiddenComment:AddTracks.kt$AddTracks$// TODO: update all trackers based on common data + ForbiddenComment:AppTheme.kt$AppTheme.NORD$// TODO: re-enable for preview + ForbiddenComment:BackupRestorer.kt$BackupRestorer$// TODO: optionally trigger online library + tracker update + ForbiddenComment:BangumiApi.kt$BangumiApi$// TODO: get user readed chapter here + ForbiddenComment:BaseTracker.kt$BaseTracker$// TODO: Store all scores as 10 point in the future maybe? + ForbiddenComment:BaselineProfileGenerator.kt$BaselineProfileGenerator$// TODO: automate storage permissions and possibly open manga details screen too? + ForbiddenComment:CategoryDialogs.kt$// TODO: https://issuetracker.google.com/issues/204502668 + ForbiddenComment:Chapter.kt$// TODO: Remove when all deps are migrated + ForbiddenComment:ConfigurableSource.kt$// TODO: use getSourcePreferences once all extensions are on ext-lib 1.5 + ForbiddenComment:DisplayExtensions.kt$// TODO: move the logic to `isTabletUi()` when main activity is rewritten in Compose + ForbiddenComment:ExtensionReposDialogs.kt$// TODO: https://issuetracker.google.com/issues/204502668 + ForbiddenComment:GlobalSearchToolbar.kt$// TODO: make this UX better; it only applies when triggering a new search + ForbiddenComment:HomeScreen.kt$HomeScreen$// TODO: https://issuetracker.google.com/u/0/issues/316327367 + ForbiddenComment:LibrarySettingsDialog.kt$// TODO: re-enable when custom intervals are ready for stable + ForbiddenComment:LibraryTabs.kt$// TODO: use default when width is fixed upstream + ForbiddenComment:LibraryUpdateJob.kt$LibraryUpdateJob$// TODO: surface skipped reasons to user? + ForbiddenComment:LocalSource.kt$LocalSource$// TODO: remove support for this entirely after a while + ForbiddenComment:Localize.kt$// TODO: janky workaround for https://github.com/icerockdev/moko-resources/issues/337 + ForbiddenComment:MainActivity.kt$MainActivity$// TODO: replace with ComponentActivity#enableEdgeToEdge + ForbiddenComment:Manga.kt$// TODO: move these into the domain model + ForbiddenComment:MangaCoverScreenModel.kt$MangaCoverScreenModel$// TODO: Handle animated cover + ForbiddenComment:MangaInfoHeader.kt$// TODO: show something better when using custom interval + ForbiddenComment:PreferenceItem.kt$// TODO: use different composable? + ForbiddenComment:ReaderPreferences.kt$ReaderPreferences$// TODO: default this to true if reader long strip ever goes stable + ForbiddenComment:SettingsAdvancedScreen.kt$SettingsAdvancedScreen$// TODO: allow private option in stable versions once URL handling is more fleshed out + ForbiddenComment:Tracker.kt$Tracker$// TODO: Store all scores as 10 point in the future maybe? + ForbiddenComment:Tracker.kt$Tracker$// TODO: move this to an interactor, and update all trackers based on common data + ForbiddenComment:VerticalFastScroller.kt$// TODO: Sometimes item height is not available when scrolling up + FunctionNaming:Downloader.kt$Downloader$private fun _clearQueue() + FunctionNaming:Pin.kt$fun Pins(vararg pins: Pin) + FunctionNaming:PullRefresh.kt$PullToRefreshStateImpl.Companion$fun Saver( extraVerticalOffset: Float, positionalThreshold: Float, enabled: () -> Boolean, onRefresh: () -> Unit, ) + FunctionNaming:Requests.kt$fun DELETE( url: String, headers: Headers = DEFAULT_HEADERS, body: RequestBody = DEFAULT_BODY, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request + FunctionNaming:Requests.kt$fun GET( url: HttpUrl, headers: Headers = DEFAULT_HEADERS, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request + FunctionNaming:Requests.kt$fun GET( url: String, headers: Headers = DEFAULT_HEADERS, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request + FunctionNaming:Requests.kt$fun POST( url: String, headers: Headers = DEFAULT_HEADERS, body: RequestBody = DEFAULT_BODY, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request + FunctionNaming:Requests.kt$fun PUT( url: String, headers: Headers = DEFAULT_HEADERS, body: RequestBody = DEFAULT_BODY, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request + FunctionParameterNaming:MangaScreen.kt$MangaScreen$manga_: Manga? + FunctionParameterNaming:MangaScreen.kt$MangaScreen$source_: Source? + FunctionParameterNaming:WebViewInterceptor.kt$_name: String + FunctionParameterNaming:WebViewInterceptor.kt$_value: String + ImportOrdering:Commands.kt$import org.gradle.api.Project import java.io.ByteArrayOutputStream import java.text.SimpleDateFormat import java.util.TimeZone import java.util.Date + Indentation:LocalesConfigPlugin.kt$ + InstanceOfCheckForException:AppUpdateDownloadJob.kt$AppUpdateDownloadJob$e is CancellationException + InstanceOfCheckForException:AppUpdateDownloadJob.kt$AppUpdateDownloadJob$e is StreamResetException + InstanceOfCheckForException:BackupRestoreJob.kt$BackupRestoreJob$e is CancellationException + InstanceOfCheckForException:Downloader.kt$Downloader$e is CancellationException + InstanceOfCheckForException:Downloader.kt$Downloader$error is CancellationException + InstanceOfCheckForException:HttpPageLoader.kt$HttpPageLoader$e is CancellationException + InstanceOfCheckForException:LibraryUpdateJob.kt$LibraryUpdateJob$e is CancellationException + InstanceOfCheckForException:MangaScreenModel.kt$MangaScreenModel$e is HttpException + InstanceOfCheckForException:MangaScreenModel.kt$MangaScreenModel$e is NoChaptersException + InstanceOfCheckForException:MetadataUpdateJob.kt$MetadataUpdateJob$e is CancellationException + InstanceOfCheckForException:ReaderViewModel.kt$ReaderViewModel$e is CancellationException + InstanceOfCheckForException:UncaughtExceptionInterceptor.kt$UncaughtExceptionInterceptor$e is IOException + LargeClass:MangaScreenModel.kt$MangaScreenModel : StateScreenModel + LongMethod:AboutScreen.kt$AboutScreen$@Composable override fun Content() + LongMethod:AdaptiveSheet.kt$@Composable fun AdaptiveSheet( isTabletUi: Boolean, tonalElevation: Dp, enableSwipeDismiss: Boolean, onDismissRequest: () -> Unit, modifier: Modifier = Modifier, content: @Composable () -> Unit, ) + LongMethod:AnilistApi.kt$AnilistApi$suspend fun findLibManga(track: Track, userid: Int): Track? + LongMethod:AppBar.kt$@Composable fun AppBarActions( actions: ImmutableList<AppBar.AppBarAction>, ) + LongMethod:AppBar.kt$@Composable fun SearchToolbar( searchQuery: String?, onChangeSearchQuery: (String?) -> Unit, modifier: Modifier = Modifier, titleContent: @Composable () -> Unit = {}, navigateUp: (() -> Unit)? = null, searchEnabled: Boolean = true, placeholderText: String? = null, onSearch: (String) -> Unit = {}, onClickCloseSearch: () -> Unit = { onChangeSearchQuery(null) }, actions: @Composable RowScope.() -> Unit = {}, scrollBehavior: TopAppBarScrollBehavior? = null, visualTransformation: VisualTransformation = VisualTransformation.None, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, ) + LongMethod:AppModule.kt$AppModule$override fun InjektRegistrar.registerInjectables() + LongMethod:AppThemePreferenceWidget.kt$@Composable fun AppThemePreviewItem( selected: Boolean, onClick: () -> Unit, ) + LongMethod:BrowseSourceScreen.kt$@Composable fun BrowseSourceContent( source: Source?, mangaList: LazyPagingItems<StateFlow<Manga>>, columns: GridCells, displayMode: LibraryDisplayMode, snackbarHostState: SnackbarHostState, contentPadding: PaddingValues, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onLocalSourceHelpClick: () -> Unit, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) + LongMethod:BrowseSourceScreen.kt$BrowseSourceScreen$@Composable override fun Content() + LongMethod:BrowseSourceToolbar.kt$@Composable fun BrowseSourceToolbar( searchQuery: String?, onSearchQueryChange: (String?) -> Unit, source: Source?, displayMode: LibraryDisplayMode, onDisplayModeChange: (LibraryDisplayMode) -> Unit, navigateUp: () -> Unit, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onSettingsClick: () -> Unit, onSearch: (String) -> Unit, scrollBehavior: TopAppBarScrollBehavior? = null, ) + LongMethod:Button.kt$ButtonElevation$@Composable private fun animateElevation( enabled: Boolean, interactionSource: InteractionSource, ): State<Dp> + LongMethod:CategoryDialogs.kt$@Composable fun ChangeCategoryDialog( initialSelection: ImmutableList<CheckboxState<Category>>, onDismissRequest: () -> Unit, onEditCategories: () -> Unit, onConfirm: (List<Long>, List<Long>) -> Unit, ) + LongMethod:ChapterDownloadIndicator.kt$@Composable private fun DownloadingIndicator( enabled: Boolean, downloadState: Download.State, downloadProgressProvider: () -> Int, onClick: (ChapterDownloadAction) -> Unit, modifier: Modifier = Modifier, ) + LongMethod:ChapterNavigator.kt$@Composable fun ChapterNavigator( isRtl: Boolean, onNextChapter: () -> Unit, enabledNext: Boolean, onPreviousChapter: () -> Unit, enabledPrevious: Boolean, currentPage: Int, totalPages: Int, onSliderValueChange: (Int) -> Unit, ) + LongMethod:ChapterSettingsDialog.kt$@Composable fun ChapterSettingsDialog( onDismissRequest: () -> Unit, manga: Manga? = null, onDownloadFilterChanged: (TriState) -> Unit, onUnreadFilterChanged: (TriState) -> Unit, onBookmarkedFilterChanged: (TriState) -> Unit, scanlatorFilterActive: Boolean, onScanlatorFilterClicked: (() -> Unit), onSortModeChanged: (Long) -> Unit, onDisplayModeChanged: (Long) -> Unit, onSetAsDefault: (applyToExistingManga: Boolean) -> Unit, onResetToDefault: () -> Unit, ) + LongMethod:ClearDatabaseScreen.kt$ClearDatabaseScreen$@Composable override fun Content() + LongMethod:ColorFilterPage.kt$@Composable internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) + LongMethod:CreateBackupScreen.kt$CreateBackupScreen$@Composable override fun Content() + LongMethod:DomainModule.kt$DomainModule$override fun InjektRegistrar.registerInjectables() + LongMethod:DownloadCache.kt$DownloadCache$private fun renewCache() + LongMethod:DownloadQueueScreen.kt$DownloadQueueScreen$@Composable override fun Content() + LongMethod:Downloader.kt$Downloader$private suspend fun downloadChapter(download: Download) + LongMethod:EditTextPreferenceWidget.kt$@Composable fun EditTextPreferenceWidget( title: String, subtitle: String?, icon: ImageVector?, value: String, onConfirm: suspend (String) -> Boolean, ) + LongMethod:ExtensionDetailsScreen.kt$@Composable fun ExtensionDetailsScreen( navigateUp: () -> Unit, state: ExtensionDetailsScreenModel.State, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickEnableAll: () -> Unit, onClickDisableAll: () -> Unit, onClickClearCookies: () -> Unit, onClickUninstall: () -> Unit, onClickSource: (sourceId: Long) -> Unit, ) + LongMethod:ExtensionDetailsScreen.kt$@Composable private fun DetailsHeader( extension: Extension, onClickAgeRating: () -> Unit, onClickUninstall: () -> Unit, onClickAppInfo: (() -> Unit)?, ) + LongMethod:ExtensionLoader.kt$ExtensionLoader$private fun loadExtension(context: Context, extensionInfo: ExtensionInfo): LoadResult + LongMethod:ExtensionsScreen.kt$@Composable private fun ExtensionContent( state: ExtensionsScreenModel.State, contentPadding: PaddingValues, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onOpenWebView: (Extension.Available) -> Unit, onInstallExtension: (Extension.Available) -> Unit, onUninstallExtension: (Extension) -> Unit, onUpdateExtension: (Extension.Installed) -> Unit, onTrustExtension: (Extension.Untrusted) -> Unit, onOpenExtension: (Extension.Installed) -> Unit, onClickUpdateAll: () -> Unit, ) + LongMethod:ExtensionsScreen.kt$@Composable private fun ExtensionItemActions( extension: Extension, installStep: InstallStep, modifier: Modifier = Modifier, onClickItemCancel: (Extension) -> Unit = {}, onClickItemAction: (Extension) -> Unit = {}, onClickItemSecondaryAction: (Extension) -> Unit = {}, ) + LongMethod:GlobalSearchToolbar.kt$@Composable fun GlobalSearchToolbar( searchQuery: String?, progress: Int, total: Int, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, sourceFilter: SourceFilter, onChangeSearchFilter: (SourceFilter) -> Unit, onlyShowHasResults: Boolean, onToggleResults: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, ) + LongMethod:HomeScreen.kt$HomeScreen$@Composable override fun Content() + LongMethod:ImageUtil.kt$ImageUtil$fun chooseBackground(context: Context, imageStream: InputStream): Drawable + LongMethod:InfoScreen.kt$@Composable fun InfoScreen( icon: ImageVector, headingText: String, subtitleText: String, acceptText: String, onAcceptClick: () -> Unit, canAccept: Boolean = true, rejectText: String? = null, onRejectClick: (() -> Unit)? = null, content: @Composable ColumnScope.() -> Unit, ) + LongMethod:LibraryContent.kt$@Composable fun LibraryContent( categories: List<Category>, searchQuery: String?, selection: List<LibraryManga>, contentPadding: PaddingValues, currentPage: () -> Int, hasActiveFilters: Boolean, showPageTabs: Boolean, onChangeCurrentPage: (Int) -> Unit, onMangaClicked: (Long) -> Unit, onContinueReadingClicked: ((LibraryManga) -> Unit)?, onToggleSelection: (LibraryManga) -> Unit, onToggleRangeSelection: (LibraryManga) -> Unit, onRefresh: (Category?) -> Boolean, onGlobalSearchClicked: () -> Unit, getNumberOfMangaForCategory: (Category) -> Int?, getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>, getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>, getLibraryForPage: (Int) -> List<LibraryItem>, ) + LongMethod:LibraryPager.kt$@Composable fun LibraryPager( state: PagerState, contentPadding: PaddingValues, hasActiveFilters: Boolean, selectedManga: List<LibraryManga>, searchQuery: String?, onGlobalSearchClicked: () -> Unit, getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>, getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>, getLibraryForPage: (Int) -> List<LibraryItem>, onClickManga: (LibraryManga) -> Unit, onLongClickManga: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, ) + LongMethod:LibraryScreenModel.kt$LibraryScreenModel$private fun LibraryMap.applySort( // Map<MangaId, List<Track>> trackMap: Map<Long, List<Track>>, ): LibraryMap + LongMethod:LibraryScreenModel.kt$LibraryScreenModel$private suspend fun LibraryMap.applyFilters( trackMap: Map<Long, List<Track>>, loggedInTrackers: Map<Long, TriState>, ): LibraryMap + LongMethod:LibrarySettingsDialog.kt$@Composable private fun ColumnScope.DisplayPage( screenModel: LibrarySettingsScreenModel, ) + LongMethod:LibrarySettingsDialog.kt$@Composable private fun ColumnScope.FilterPage( screenModel: LibrarySettingsScreenModel, ) + LongMethod:LibraryTab.kt$LibraryTab$@Composable override fun Content() + LongMethod:LibraryUpdateJob.kt$LibraryUpdateJob$private suspend fun addMangaToQueue(categoryId: Long) + LongMethod:LibraryUpdateJob.kt$LibraryUpdateJob$private suspend fun updateChapterList() + LongMethod:MainActivity.kt$MainActivity$override fun onCreate(savedInstanceState: Bundle?) + LongMethod:MainActivity.kt$MainActivity$private fun handleIntentAction(intent: Intent, navigator: Navigator): Boolean + LongMethod:MangaBottomActionMenu.kt$@Composable fun LibraryBottomActionMenu( visible: Boolean, onChangeCategoryClicked: () -> Unit, onMarkAsReadClicked: () -> Unit, onMarkAsUnreadClicked: () -> Unit, onDownloadClicked: ((DownloadAction) -> Unit)?, onDeleteClicked: () -> Unit, modifier: Modifier = Modifier, ) + LongMethod:MangaBottomActionMenu.kt$@Composable fun MangaBottomActionMenu( visible: Boolean, modifier: Modifier = Modifier, onBookmarkClicked: (() -> Unit)? = null, onRemoveBookmarkClicked: (() -> Unit)? = null, onMarkAsReadClicked: (() -> Unit)? = null, onMarkAsUnreadClicked: (() -> Unit)? = null, onMarkPreviousAsReadClicked: (() -> Unit)? = null, onDownloadClicked: (() -> Unit)? = null, onDeleteClicked: (() -> Unit)? = null, ) + LongMethod:MangaChapterListItem.kt$@Composable fun MangaChapterListItem( title: String, date: String?, readProgress: String?, scanlator: String?, read: Boolean, bookmark: Boolean, selected: Boolean, downloadIndicatorEnabled: Boolean, downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onLongClick: () -> Unit, onClick: () -> Unit, onDownloadClick: ((ChapterDownloadAction) -> Unit)?, onChapterSwipe: (LibraryPreferences.ChapterSwipeAction) -> Unit, modifier: Modifier = Modifier, ) + LongMethod:MangaCoverDialog.kt$@Composable fun MangaCoverDialog( coverDataProvider: () -> Manga, isCustomCover: Boolean, snackbarHostState: SnackbarHostState, onShareClick: () -> Unit, onSaveClick: () -> Unit, onEditClick: ((EditCoverAction) -> Unit)?, onDismissRequest: () -> Unit, ) + LongMethod:MangaDialogs.kt$@Composable fun SetIntervalDialog( interval: Int, nextUpdate: Instant?, onDismissRequest: () -> Unit, onValueChanged: ((Int) -> Unit)? = null, ) + LongMethod:MangaInfoHeader.kt$@Composable fun ExpandableMangaDescription( defaultExpandState: Boolean, description: String?, tagsProvider: () -> List<String>?, onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, modifier: Modifier = Modifier, ) + LongMethod:MangaInfoHeader.kt$@Composable private fun ColumnScope.MangaContentInfo( title: String, doSearch: (query: String, global: Boolean) -> Unit, author: String?, artist: String?, status: Long, sourceName: String, isStubSource: Boolean, textAlign: TextAlign? = LocalTextStyle.current.textAlign, ) + LongMethod:MangaInfoHeader.kt$@Composable private fun MangaSummary( expandedDescription: String, shrunkDescription: String, expanded: Boolean, modifier: Modifier = Modifier, ) + LongMethod:MangaScreen.kt$@Composable fun MangaScreen( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, isTabletUi: Boolean, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onBackClicked: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onFilterButtonClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditFetchIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, // For bottom action menu onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List<Chapter>) -> Unit, // For chapter swipe onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) + LongMethod:MangaScreen.kt$@Composable fun MangaScreenLargeImpl( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onBackClicked: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onFilterButtonClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, // For bottom action menu onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List<Chapter>) -> Unit, // For swipe actions onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) + LongMethod:MangaScreen.kt$@Composable private fun MangaScreenSmallImpl( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onBackClicked: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onFilterClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, // For bottom action menu onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List<Chapter>) -> Unit, // For chapter swipe onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) + LongMethod:MangaScreen.kt$MangaScreen$@Composable override fun Content() + LongMethod:MangaScreen.kt$private fun LazyListScope.sharedChapterItems( manga: Manga, chapters: List<ChapterList>, isAnyChapterSelected: Boolean, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, ) + LongMethod:MangaToolbar.kt$@Composable fun MangaToolbar( title: String, titleAlphaProvider: () -> Float, hasFilters: Boolean, onBackClicked: () -> Unit, onClickFilter: () -> Unit, onClickShare: (() -> Unit)?, onClickDownload: ((DownloadAction) -> Unit)?, onClickEditCategory: (() -> Unit)?, onClickRefresh: () -> Unit, onClickMigrate: (() -> Unit)?, // For action mode actionModeCounter: Int, onSelectAll: () -> Unit, onInvertSelection: () -> Unit, modifier: Modifier = Modifier, backgroundAlphaProvider: () -> Float = titleAlphaProvider, ) + LongMethod:MigrateDialog.kt$@Composable internal fun MigrateDialog( oldManga: Manga, newManga: Manga, screenModel: MigrateDialogScreenModel, onDismissRequest: () -> Unit, onClickTitle: () -> Unit, onPopScreen: () -> Unit, ) + LongMethod:MigrateDialog.kt$MigrateDialogScreenModel$private suspend fun migrateMangaInternal( oldSource: Source?, newSource: Source, oldManga: Manga, newManga: Manga, sourceChapters: List<SChapter>, replace: Boolean, flags: Int, ) + LongMethod:MoreScreen.kt$@Composable fun MoreScreen( downloadQueueStateProvider: () -> DownloadQueueState, downloadedOnly: Boolean, onDownloadedOnlyChange: (Boolean) -> Unit, incognitoMode: Boolean, onIncognitoModeChange: (Boolean) -> Unit, isFDroid: Boolean, onClickDownloadQueue: () -> Unit, onClickCategories: () -> Unit, onClickStats: () -> Unit, onClickDataAndStorage: () -> Unit, onClickSettings: () -> Unit, onClickAbout: () -> Unit, ) + LongMethod:Notifications.kt$Notifications$fun createChannels(context: Context) + LongMethod:PreferenceItem.kt$@Composable internal fun PreferenceItem( item: Preference.PreferenceItem<*>, highlightKey: String?, ) + LongMethod:ReaderActivity.kt$ReaderActivity$override fun onCreate(savedInstanceState: Bundle?) + LongMethod:ReaderActivity.kt$ReaderActivity$private fun initializeMenu() + LongMethod:ReaderAppBars.kt$@Composable fun ReaderAppBars( visible: Boolean, fullscreen: Boolean, mangaTitle: String?, chapterTitle: String?, navigateUp: () -> Unit, onClickTopAppBar: () -> Unit, bookmarked: Boolean, onToggleBookmarked: () -> Unit, onOpenInWebView: (() -> Unit)?, onShare: (() -> Unit)?, viewer: Viewer?, onNextChapter: () -> Unit, enabledNext: Boolean, onPreviousChapter: () -> Unit, enabledPrevious: Boolean, currentPage: Int, totalPages: Int, onSliderValueChange: (Int) -> Unit, readingMode: ReadingMode, onClickReadingMode: () -> Unit, orientation: ReaderOrientation, onClickOrientation: () -> Unit, cropEnabled: Boolean, onClickCropBorder: () -> Unit, onClickSettings: () -> Unit, ) + LongMethod:ReadingModePage.kt$@Composable private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenModel) + LongMethod:Scaffold.kt$@Composable private fun ScaffoldLayout( fabPosition: FabPosition, topBar: @Composable () -> Unit, startBar: @Composable () -> Unit, content: @Composable (PaddingValues) -> Unit, snackbar: @Composable () -> Unit, fab: @Composable () -> Unit, contentWindowInsets: WindowInsets, bottomBar: @Composable () -> Unit, ) + LongMethod:ScanlatorFilterDialog.kt$@Composable fun ScanlatorFilterDialog( availableScanlators: Set<String>, excludedScanlators: Set<String>, onDismissRequest: () -> Unit, onConfirm: (Set<String>) -> Unit, ) + LongMethod:SettingsAdvancedScreen.kt$SettingsAdvancedScreen$@Composable private fun getExtensionsGroup( basePreferences: BasePreferences, ): Preference.PreferenceGroup + LongMethod:SettingsAdvancedScreen.kt$SettingsAdvancedScreen$@Composable private fun getNetworkGroup( networkPreferences: NetworkPreferences, ): Preference.PreferenceGroup + LongMethod:SettingsDataScreen.kt$SettingsDataScreen$@Composable private fun getBackupAndRestoreGroup(backupPreferences: BackupPreferences): Preference.PreferenceGroup + LongMethod:SettingsLibraryScreen.kt$SettingsLibraryScreen$@Composable private fun getGlobalUpdateGroup( allCategories: List<Category>, libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup + LongMethod:SettingsMainScreen.kt$SettingsMainScreen$@Composable fun Content(twoPane: Boolean) + LongMethod:SettingsReaderScreen.kt$SettingsReaderScreen$@Composable private fun getPagedGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup + LongMethod:SettingsReaderScreen.kt$SettingsReaderScreen$@Composable private fun getWebtoonGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup + LongMethod:SettingsSearchScreen.kt$@Composable private fun SearchResult( searchKey: String, modifier: Modifier = Modifier, listState: LazyListState = rememberLazyListState(), contentPadding: PaddingValues = PaddingValues(), onItemClick: (SearchResultItem) -> Unit, ) + LongMethod:SettingsSearchScreen.kt$SettingsSearchScreen$@Composable override fun Content() + LongMethod:SettingsTrackingScreen.kt$SettingsTrackingScreen$@Composable override fun getPreferences(): List<Preference> + LongMethod:SettingsTrackingScreen.kt$SettingsTrackingScreen$@Composable private fun TrackingLoginDialog( tracker: Tracker, uNameStringRes: StringResource, onDismissRequest: () -> Unit, ) + LongMethod:SourceFilterDialog.kt$@Composable private fun FilterItem(filter: Filter<*>, onUpdate: () -> Unit) + LongMethod:SourceSearchScreen.kt$SourceSearchScreen$@Composable override fun Content() + LongMethod:SyncChaptersWithSource.kt$SyncChaptersWithSource$suspend fun await( rawSourceChapters: List<SChapter>, manga: Manga, source: Source, manualFetch: Boolean = false, fetchWindow: Pair<Long, Long> = Pair(0, 0), ): List<Chapter> + LongMethod:TrackInfoDialog.kt$TrackInfoDialogHomeScreen$@Composable override fun Content() + LongMethod:TrackInfoDialog.kt$TrackerRemoveScreen$@Composable override fun Content() + LongMethod:TrackInfoDialogHome.kt$@Composable private fun TrackInfoItem( title: String, tracker: Tracker, status: StringResource?, onStatusClick: () -> Unit, chapters: String, onChaptersClick: () -> Unit, score: String?, onScoreClick: (() -> Unit)?, startDate: String?, onStartDateClick: (() -> Unit)?, endDate: String?, onEndDateClick: (() -> Unit)?, onNewSearch: () -> Unit, onOpenInBrowser: () -> Unit, onRemoved: () -> Unit, ) + LongMethod:TrackerSearch.kt$@Composable fun TrackerSearch( query: TextFieldValue, onQueryChange: (TextFieldValue) -> Unit, onDispatchQuery: () -> Unit, queryResult: Result<List<TrackSearch>>?, selected: TrackSearch?, onSelectedChange: (TrackSearch) -> Unit, onConfirmSelection: () -> Unit, onDismissRequest: () -> Unit, ) + LongMethod:TrackerSearch.kt$@Composable private fun SearchResultItem( trackSearch: TrackSearch, selected: Boolean, onClick: () -> Unit, ) + LongMethod:TriStateListDialog.kt$@Composable fun <T> TriStateListDialog( title: String, message: String? = null, items: List<T>, initialChecked: List<T>, initialInversed: List<T>, itemLabel: @Composable (T) -> String, onDismissRequest: () -> Unit, onValueChanged: (newIncluded: List<T>, newExcluded: List<T>) -> Unit, ) + LongMethod:UpdatesScreen.kt$@Composable fun UpdateScreen( state: UpdatesScreenModel.State, snackbarHostState: SnackbarHostState, lastUpdated: Long, onClickCover: (UpdatesItem) -> Unit, onSelectAll: (Boolean) -> Unit, onInvertSelection: () -> Unit, onUpdateLibrary: () -> Boolean, onDownloadChapter: (List<UpdatesItem>, ChapterDownloadAction) -> Unit, onMultiBookmarkClicked: (List<UpdatesItem>, bookmark: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<UpdatesItem>, read: Boolean) -> Unit, onMultiDeleteClicked: (List<UpdatesItem>) -> Unit, onUpdateSelected: (UpdatesItem, Boolean, Boolean, Boolean) -> Unit, onOpenChapter: (UpdatesItem) -> Unit, ) + LongMethod:UpdatesTab.kt$UpdatesTab$@Composable override fun Content() + LongMethod:UpdatesUiItem.kt$@Composable private fun UpdatesUiItem( update: UpdatesWithRelations, selected: Boolean, readProgress: String?, onClick: () -> Unit, onLongClick: () -> Unit, onClickCover: (() -> Unit)?, onDownloadChapter: ((ChapterDownloadAction) -> Unit)?, // Download Indicator downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, modifier: Modifier = Modifier, ) + LongMethod:UpdatesWidget.kt$@Composable fun UpdatesWidget( data: ImmutableList<Pair<Long, Bitmap?>>?, contentColor: ColorProvider, topPadding: Dp, bottomPadding: Dp, modifier: GlanceModifier = GlanceModifier, ) + LongMethod:VerticalFastScroller.kt$@Composable fun VerticalFastScroller( listState: LazyListState, modifier: Modifier = Modifier, thumbAllowed: () -> Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, content: @Composable () -> Unit, ) + LongMethod:VerticalFastScroller.kt$@Composable fun VerticalGridFastScroller( state: LazyGridState, columns: GridCells, arrangement: Arrangement.Horizontal, contentPadding: PaddingValues, modifier: Modifier = Modifier, thumbAllowed: () -> Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, content: @Composable () -> Unit, ) + LongMethod:WebViewScreenContent.kt$@Composable fun WebViewScreenContent( onNavigateUp: () -> Unit, initialTitle: String?, url: String, onShare: (String) -> Unit, onOpenInBrowser: (String) -> Unit, onClearCookies: (String) -> Unit, headers: Map<String, String> = emptyMap(), onUrlChange: (String) -> Unit = {}, ) + LongMethod:WebtoonRecyclerView.kt$WebtoonRecyclerView.Detector$override fun onTouchEvent(ev: MotionEvent): Boolean + LongMethod:WheelPicker.kt$@Composable private fun <T> WheelPicker( items: ImmutableList<T>, modifier: Modifier = Modifier, startIndex: Int = 0, size: DpSize = DpSize(128.dp, 128.dp), onSelectionChanged: (index: Int) -> Unit = {}, manualInputType: KeyboardType? = null, backgroundContent: (@Composable (size: DpSize) -> Unit)? = { WheelPickerDefaults.Background(size = it) }, itemContent: @Composable LazyItemScope.(item: T) -> Unit, ) + LongParameterList:BottomReaderBar.kt$( backgroundColor: Color, readingMode: ReadingMode, onClickReadingMode: () -> Unit, orientation: ReaderOrientation, onClickOrientation: () -> Unit, cropEnabled: Boolean, onClickCropBorder: () -> Unit, onClickSettings: () -> Unit, ) + LongParameterList:BrowseSourceScreen.kt$( source: Source?, mangaList: LazyPagingItems<StateFlow<Manga>>, columns: GridCells, displayMode: LibraryDisplayMode, snackbarHostState: SnackbarHostState, contentPadding: PaddingValues, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onLocalSourceHelpClick: () -> Unit, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) + LongParameterList:BrowseSourceToolbar.kt$( searchQuery: String?, onSearchQueryChange: (String?) -> Unit, source: Source?, displayMode: LibraryDisplayMode, onDisplayModeChange: (LibraryDisplayMode) -> Unit, navigateUp: () -> Unit, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onSettingsClick: () -> Unit, onSearch: (String) -> Unit, scrollBehavior: TopAppBarScrollBehavior? = null, ) + LongParameterList:CategoryListItem.kt$( category: Category, canMoveUp: Boolean, canMoveDown: Boolean, onMoveUp: (Category) -> Unit, onMoveDown: (Category) -> Unit, onRename: () -> Unit, onDelete: () -> Unit, modifier: Modifier = Modifier, ) + LongParameterList:CategoryScreen.kt$( categories: List<Category>, lazyListState: LazyListState, paddingValues: PaddingValues, onClickRename: (Category) -> Unit, onClickDelete: (Category) -> Unit, onMoveUp: (Category) -> Unit, onMoveDown: (Category) -> Unit, ) + LongParameterList:CategoryScreen.kt$( state: CategoryScreenState.Success, onClickCreate: () -> Unit, onClickSortAlphabetically: () -> Unit, onClickRename: (Category) -> Unit, onClickDelete: (Category) -> Unit, onClickMoveUp: (Category) -> Unit, onClickMoveDown: (Category) -> Unit, navigateUp: () -> Unit, ) + LongParameterList:ChapterNavigator.kt$( isRtl: Boolean, onNextChapter: () -> Unit, enabledNext: Boolean, onPreviousChapter: () -> Unit, enabledPrevious: Boolean, currentPage: Int, totalPages: Int, onSliderValueChange: (Int) -> Unit, ) + LongParameterList:ChapterRepositoryImpl.kt$ChapterRepositoryImpl$( id: Long, mangaId: Long, url: String, name: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, chapterNumber: Double, sourceOrder: Long, dateFetch: Long, dateUpload: Long, lastModifiedAt: Long, ) + LongParameterList:ChapterSettingsDialog.kt$( downloadFilter: TriState, onDownloadFilterChanged: ((TriState) -> Unit)?, unreadFilter: TriState, onUnreadFilterChanged: (TriState) -> Unit, bookmarkedFilter: TriState, onBookmarkedFilterChanged: (TriState) -> Unit, scanlatorFilterActive: Boolean, onScanlatorFilterClicked: (() -> Unit), ) + LongParameterList:ChapterSettingsDialog.kt$( onDismissRequest: () -> Unit, manga: Manga? = null, onDownloadFilterChanged: (TriState) -> Unit, onUnreadFilterChanged: (TriState) -> Unit, onBookmarkedFilterChanged: (TriState) -> Unit, scanlatorFilterActive: Boolean, onScanlatorFilterClicked: (() -> Unit), onSortModeChanged: (Long) -> Unit, onDisplayModeChanged: (Long) -> Unit, onSetAsDefault: (applyToExistingManga: Boolean) -> Unit, onResetToDefault: () -> Unit, ) + LongParameterList:ChapterTransition.kt$( topLabel: String, topChapter: Chapter?, topChapterDownloaded: Boolean, bottomLabel: String, bottomChapter: Chapter?, bottomChapterDownloaded: Boolean, fallbackLabel: String, chapterGap: Int, ) + LongParameterList:ExtensionDetailsScreen.kt$( contentPadding: PaddingValues, extension: Extension.Installed, sources: ImmutableList<ExtensionSourceItem>, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickUninstall: () -> Unit, onClickSource: (sourceId: Long) -> Unit, ) + LongParameterList:ExtensionDetailsScreen.kt$( navigateUp: () -> Unit, state: ExtensionDetailsScreenModel.State, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickEnableAll: () -> Unit, onClickDisableAll: () -> Unit, onClickClearCookies: () -> Unit, onClickUninstall: () -> Unit, onClickSource: (sourceId: Long) -> Unit, ) + LongParameterList:ExtensionsScreen.kt$( item: ExtensionUiModel.Item, onClickItem: (Extension) -> Unit, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onClickItemAction: (Extension) -> Unit, onClickItemSecondaryAction: (Extension) -> Unit, modifier: Modifier = Modifier, ) + LongParameterList:ExtensionsScreen.kt$( state: ExtensionsScreenModel.State, contentPadding: PaddingValues, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onOpenWebView: (Extension.Available) -> Unit, onInstallExtension: (Extension.Available) -> Unit, onUninstallExtension: (Extension) -> Unit, onUpdateExtension: (Extension.Installed) -> Unit, onTrustExtension: (Extension.Untrusted) -> Unit, onOpenExtension: (Extension.Installed) -> Unit, onClickUpdateAll: () -> Unit, ) + LongParameterList:ExtensionsScreen.kt$( state: ExtensionsScreenModel.State, contentPadding: PaddingValues, searchQuery: String?, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onOpenWebView: (Extension.Available) -> Unit, onInstallExtension: (Extension.Available) -> Unit, onUninstallExtension: (Extension) -> Unit, onUpdateExtension: (Extension.Installed) -> Unit, onTrustExtension: (Extension.Untrusted) -> Unit, onOpenExtension: (Extension.Installed) -> Unit, onClickUpdateAll: () -> Unit, onRefresh: () -> Unit, ) + LongParameterList:GlobalSearchScreen.kt$( items: Map<CatalogueSource, SearchItemResult>, contentPadding: PaddingValues, getManga: @Composable (Manga) -> State<Manga>, onClickSource: (CatalogueSource) -> Unit, onClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit, fromSourceId: Long? = null, ) + LongParameterList:GlobalSearchScreen.kt$( state: SearchScreenModel.State, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, onChangeSearchFilter: (SourceFilter) -> Unit, onToggleResults: () -> Unit, getManga: @Composable (Manga) -> State<Manga>, onClickSource: (CatalogueSource) -> Unit, onClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit, ) + LongParameterList:GlobalSearchToolbar.kt$( searchQuery: String?, progress: Int, total: Int, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, sourceFilter: SourceFilter, onChangeSearchFilter: (SourceFilter) -> Unit, onlyShowHasResults: Boolean, onToggleResults: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, ) + LongParameterList:HistoryMapper.kt$HistoryMapper$( historyId: Long, mangaId: Long, chapterId: Long, title: String, thumbnailUrl: String?, sourceId: Long, isFavorite: Boolean, coverLastModified: Long, chapterNumber: Double, readAt: Date?, readDuration: Long, ) + LongParameterList:HistoryScreen.kt$( state: HistoryScreenModel.State, snackbarHostState: SnackbarHostState, onSearchQueryChange: (String?) -> Unit, onClickCover: (mangaId: Long) -> Unit, onClickResume: (mangaId: Long, chapterId: Long) -> Unit, onDialogChange: (HistoryScreenModel.Dialog?) -> Unit, ) + LongParameterList:InfoScreen.kt$( icon: ImageVector, headingText: String, subtitleText: String, acceptText: String, onAcceptClick: () -> Unit, canAccept: Boolean = true, rejectText: String? = null, onRejectClick: (() -> Unit)? = null, content: @Composable ColumnScope.() -> Unit, ) + LongParameterList:LibraryComfortableGrid.kt$( items: List<LibraryItem>, columns: Int, contentPadding: PaddingValues, selection: List<LibraryManga>, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) + LongParameterList:LibraryCompactGrid.kt$( items: List<LibraryItem>, showTitle: Boolean, columns: Int, contentPadding: PaddingValues, selection: List<LibraryManga>, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) + LongParameterList:LibraryContent.kt$( categories: List<Category>, searchQuery: String?, selection: List<LibraryManga>, contentPadding: PaddingValues, currentPage: () -> Int, hasActiveFilters: Boolean, showPageTabs: Boolean, onChangeCurrentPage: (Int) -> Unit, onMangaClicked: (Long) -> Unit, onContinueReadingClicked: ((LibraryManga) -> Unit)?, onToggleSelection: (LibraryManga) -> Unit, onToggleRangeSelection: (LibraryManga) -> Unit, onRefresh: (Category?) -> Boolean, onGlobalSearchClicked: () -> Unit, getNumberOfMangaForCategory: (Category) -> Int?, getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>, getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>, getLibraryForPage: (Int) -> List<LibraryItem>, ) + LongParameterList:LibraryList.kt$( items: List<LibraryItem>, contentPadding: PaddingValues, selection: List<LibraryManga>, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) + LongParameterList:LibraryPager.kt$( state: PagerState, contentPadding: PaddingValues, hasActiveFilters: Boolean, selectedManga: List<LibraryManga>, searchQuery: String?, onGlobalSearchClicked: () -> Unit, getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>, getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>, getLibraryForPage: (Int) -> List<LibraryItem>, onClickManga: (LibraryManga) -> Unit, onLongClickManga: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, ) + LongParameterList:LibraryToolbar.kt$( hasActiveFilters: Boolean, selectedCount: Int, title: LibraryToolbarTitle, onClickUnselectAll: () -> Unit, onClickSelectAll: () -> Unit, onClickInvertSelection: () -> Unit, onClickFilter: () -> Unit, onClickRefresh: () -> Unit, onClickGlobalUpdate: () -> Unit, onClickOpenRandomManga: () -> Unit, searchQuery: String?, onSearchQueryChange: (String?) -> Unit, scrollBehavior: TopAppBarScrollBehavior?, ) + LongParameterList:LibraryToolbar.kt$( title: LibraryToolbarTitle, hasFilters: Boolean, searchQuery: String?, onSearchQueryChange: (String?) -> Unit, onClickFilter: () -> Unit, onClickRefresh: () -> Unit, onClickGlobalUpdate: () -> Unit, onClickOpenRandomManga: () -> Unit, scrollBehavior: TopAppBarScrollBehavior?, ) + LongParameterList:ListPreferenceWidget.kt$( value: T, title: String, subtitle: String?, icon: ImageVector?, entries: Map<out T, String>, onValueChange: (T) -> Unit, ) + LongParameterList:MangaBottomActionMenu.kt$( visible: Boolean, onChangeCategoryClicked: () -> Unit, onMarkAsReadClicked: () -> Unit, onMarkAsUnreadClicked: () -> Unit, onDownloadClicked: ((DownloadAction) -> Unit)?, onDeleteClicked: () -> Unit, modifier: Modifier = Modifier, ) + LongParameterList:MangaChapterListItem.kt$( action: LibraryPreferences.ChapterSwipeAction, read: Boolean, bookmark: Boolean, downloadState: Download.State, background: Color, onSwipe: () -> Unit, ) + LongParameterList:MangaChapterListItem.kt$( title: String, date: String?, readProgress: String?, scanlator: String?, read: Boolean, bookmark: Boolean, selected: Boolean, downloadIndicatorEnabled: Boolean, downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onLongClick: () -> Unit, onClick: () -> Unit, onDownloadClick: ((ChapterDownloadAction) -> Unit)?, onChapterSwipe: (LibraryPreferences.ChapterSwipeAction) -> Unit, modifier: Modifier = Modifier, ) + LongParameterList:MangaCoverDialog.kt$( coverDataProvider: () -> Manga, isCustomCover: Boolean, snackbarHostState: SnackbarHostState, onShareClick: () -> Unit, onSaveClick: () -> Unit, onEditClick: ((EditCoverAction) -> Unit)?, onDismissRequest: () -> Unit, ) + LongParameterList:MangaCoverFetcher.kt$MangaCoverFetcher$( private val url: String?, private val isLibraryManga: Boolean, private val options: Options, private val coverFileLazy: Lazy<File?>, private val customCoverFileLazy: Lazy<File>, private val diskCacheKeyLazy: Lazy<String>, private val sourceLazy: Lazy<HttpSource?>, private val callFactoryLazy: Lazy<Call.Factory>, private val diskCacheLazy: Lazy<DiskCache>, ) + LongParameterList:MangaInfoHeader.kt$( appBarPadding: Dp, coverDataProvider: () -> Manga, onCoverClick: () -> Unit, title: String, doSearch: (query: String, global: Boolean) -> Unit, author: String?, artist: String?, status: Long, sourceName: String, isStubSource: Boolean, ) + LongParameterList:MangaInfoHeader.kt$( favorite: Boolean, trackingCount: Int, nextUpdate: Instant?, isUserIntervalMode: Boolean, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, onEditIntervalClicked: (() -> Unit)?, onEditCategory: (() -> Unit)?, modifier: Modifier = Modifier, ) + LongParameterList:MangaInfoHeader.kt$( isTabletUi: Boolean, appBarPadding: Dp, title: String, author: String?, artist: String?, sourceName: String, isStubSource: Boolean, coverDataProvider: () -> Manga, status: Long, onCoverClick: () -> Unit, doSearch: (query: String, global: Boolean) -> Unit, modifier: Modifier = Modifier, ) + LongParameterList:MangaInfoHeader.kt$( title: String, doSearch: (query: String, global: Boolean) -> Unit, author: String?, artist: String?, status: Long, sourceName: String, isStubSource: Boolean, textAlign: TextAlign? = LocalTextStyle.current.textAlign, ) + LongParameterList:MangaMapper.kt$MangaMapper$( id: Long, source: Long, url: String, artist: String?, author: String?, description: String?, genre: List<String>?, title: String, status: Long, thumbnailUrl: String?, favorite: Boolean, lastUpdate: Long?, nextUpdate: Long?, initialized: Boolean, viewerFlags: Long, chapterFlags: Long, coverLastModified: Long, dateAdded: Long, updateStrategy: UpdateStrategy, calculateInterval: Long, lastModifiedAt: Long, favoriteModifiedAt: Long?, ) + LongParameterList:MangaMapper.kt$MangaMapper$( id: Long, source: Long, url: String, artist: String?, author: String?, description: String?, genre: List<String>?, title: String, status: Long, thumbnailUrl: String?, favorite: Boolean, lastUpdate: Long?, nextUpdate: Long?, initialized: Boolean, viewerFlags: Long, chapterFlags: Long, coverLastModified: Long, dateAdded: Long, updateStrategy: UpdateStrategy, calculateInterval: Long, lastModifiedAt: Long, favoriteModifiedAt: Long?, totalCount: Long, readCount: Double, latestUpload: Long, chapterFetchedAt: Long, lastRead: Long, bookmarkCount: Double, category: Long, ) + LongParameterList:MangaRestorer.kt$MangaRestorer$( manga: Manga, chapters: List<BackupChapter>, categories: List<Long>, backupCategories: List<BackupCategory>, history: List<BackupHistory>, tracks: List<BackupTracking>, excludedScanlators: List<String>, ) + LongParameterList:MangaScreen.kt$( manga: Manga, chapters: List<ChapterList>, isAnyChapterSelected: Boolean, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, ) + LongParameterList:MangaScreen.kt$( selected: List<ChapterList.Item>, onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onMultiDeleteClicked: (List<Chapter>) -> Unit, fillFraction: Float, modifier: Modifier = Modifier, ) + LongParameterList:MangaScreen.kt$( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onBackClicked: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onFilterButtonClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, // For bottom action menu onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List<Chapter>) -> Unit, // For swipe actions onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) + LongParameterList:MangaScreen.kt$( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onBackClicked: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onFilterClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, // For bottom action menu onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List<Chapter>) -> Unit, // For chapter swipe onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) + LongParameterList:MangaScreen.kt$( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, isTabletUi: Boolean, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onBackClicked: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onFilterButtonClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditFetchIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, // For bottom action menu onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List<Chapter>) -> Unit, // For chapter swipe onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) + LongParameterList:MangaToolbar.kt$( title: String, titleAlphaProvider: () -> Float, hasFilters: Boolean, onBackClicked: () -> Unit, onClickFilter: () -> Unit, onClickShare: (() -> Unit)?, onClickDownload: ((DownloadAction) -> Unit)?, onClickEditCategory: (() -> Unit)?, onClickRefresh: () -> Unit, onClickMigrate: (() -> Unit)?, // For action mode actionModeCounter: Int, onSelectAll: () -> Unit, onInvertSelection: () -> Unit, modifier: Modifier = Modifier, backgroundAlphaProvider: () -> Float = titleAlphaProvider, ) + LongParameterList:MigrateDialog.kt$( oldManga: Manga, newManga: Manga, screenModel: MigrateDialogScreenModel, onDismissRequest: () -> Unit, onClickTitle: () -> Unit, onPopScreen: () -> Unit, ) + LongParameterList:MigrateDialog.kt$MigrateDialogScreenModel$( oldSource: Source?, newSource: Source, oldManga: Manga, newManga: Manga, sourceChapters: List<SChapter>, replace: Boolean, flags: Int, ) + LongParameterList:MigrateSearchScreen.kt$( state: SearchScreenModel.State, fromSourceId: Long?, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, onChangeSearchFilter: (SourceFilter) -> Unit, onToggleResults: () -> Unit, getManga: @Composable (Manga) -> State<Manga>, onClickSource: (CatalogueSource) -> Unit, onClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit, ) + LongParameterList:MigrateSourceScreen.kt$( list: ImmutableList<Pair<Source, Long>>, contentPadding: PaddingValues, onClickItem: (Source) -> Unit, onLongClickItem: (Source) -> Unit, sortingMode: SetMigrateSorting.Mode, onToggleSortingMode: () -> Unit, sortingDirection: SetMigrateSorting.Direction, onToggleSortingDirection: () -> Unit, ) + LongParameterList:MoreScreen.kt$( downloadQueueStateProvider: () -> DownloadQueueState, downloadedOnly: Boolean, onDownloadedOnlyChange: (Boolean) -> Unit, incognitoMode: Boolean, onIncognitoModeChange: (Boolean) -> Unit, isFDroid: Boolean, onClickDownloadQueue: () -> Unit, onClickCategories: () -> Unit, onClickStats: () -> Unit, onClickDataAndStorage: () -> Unit, onClickSettings: () -> Unit, onClickAbout: () -> Unit, ) + LongParameterList:ReaderAppBars.kt$( visible: Boolean, fullscreen: Boolean, mangaTitle: String?, chapterTitle: String?, navigateUp: () -> Unit, onClickTopAppBar: () -> Unit, bookmarked: Boolean, onToggleBookmarked: () -> Unit, onOpenInWebView: (() -> Unit)?, onShare: (() -> Unit)?, viewer: Viewer?, onNextChapter: () -> Unit, enabledNext: Boolean, onPreviousChapter: () -> Unit, enabledPrevious: Boolean, currentPage: Int, totalPages: Int, onSliderValueChange: (Int) -> Unit, readingMode: ReadingMode, onClickReadingMode: () -> Unit, orientation: ReaderOrientation, onClickOrientation: () -> Unit, cropEnabled: Boolean, onClickCropBorder: () -> Unit, onClickSettings: () -> Unit, ) + LongParameterList:Scaffold.kt$( fabPosition: FabPosition, topBar: @Composable () -> Unit, startBar: @Composable () -> Unit, content: @Composable (PaddingValues) -> Unit, snackbar: @Composable () -> Unit, fab: @Composable () -> Unit, contentWindowInsets: WindowInsets, bottomBar: @Composable () -> Unit, ) + LongParameterList:Scrollbar.kt$( orientation: Orientation, reverseDirection: Boolean, atEnd: Boolean, showScrollbar: Boolean, thickness: Float, color: Color, alpha: () -> Float, thumbSize: Float, scrollOffset: Float, positionOffset: Float, ) + LongParameterList:SetMangaChapterFlags.kt$SetMangaChapterFlags$( mangaId: Long, unreadFilter: Long, downloadedFilter: Long, bookmarkedFilter: Long, sortingMode: Long, sortingDirection: Long, displayMode: Long, ) + LongParameterList:SyncChaptersWithSource.kt$SyncChaptersWithSource$( private val downloadManager: DownloadManager, private val downloadProvider: DownloadProvider, private val chapterRepository: ChapterRepository, private val shouldUpdateDbChapter: ShouldUpdateDbChapter, private val updateManga: UpdateManga, private val updateChapter: UpdateChapter, private val getChaptersByMangaId: GetChaptersByMangaId, private val getExcludedScanlators: GetExcludedScanlators, ) + LongParameterList:TrackInfoDialogHome.kt$( title: String, tracker: Tracker, status: StringResource?, onStatusClick: () -> Unit, chapters: String, onChaptersClick: () -> Unit, score: String?, onScoreClick: (() -> Unit)?, startDate: String?, onStartDateClick: (() -> Unit)?, endDate: String?, onEndDateClick: (() -> Unit)?, onNewSearch: () -> Unit, onOpenInBrowser: () -> Unit, onRemoved: () -> Unit, ) + LongParameterList:TrackInfoDialogHome.kt$( trackItems: List<TrackItem>, dateFormat: DateFormat, onStatusClick: (TrackItem) -> Unit, onChapterClick: (TrackItem) -> Unit, onScoreClick: (TrackItem) -> Unit, onStartDateEdit: (TrackItem) -> Unit, onEndDateEdit: (TrackItem) -> Unit, onNewSearch: (TrackItem) -> Unit, onOpenInBrowser: (TrackItem) -> Unit, onRemoved: (TrackItem) -> Unit, ) + LongParameterList:TrackInfoDialogSelector.kt$( title: String, initialSelectedDateMillis: Long, selectableDates: SelectableDates, onConfirm: (Long) -> Unit, onRemove: (() -> Unit)?, onDismissRequest: () -> Unit, ) + LongParameterList:TrackMapper.kt$TrackMapper$( id: Long, mangaId: Long, syncId: Long, remoteId: Long, libraryId: Long?, title: String, lastChapterRead: Double, totalChapters: Long, status: Long, score: Double, remoteUrl: String, startDate: Long, finishDate: Long, ) + LongParameterList:TrackerSearch.kt$( query: TextFieldValue, onQueryChange: (TextFieldValue) -> Unit, onDispatchQuery: () -> Unit, queryResult: Result<List<TrackSearch>>?, selected: TrackSearch?, onSelectedChange: (TrackSearch) -> Unit, onConfirmSelection: () -> Unit, onDismissRequest: () -> Unit, ) + LongParameterList:TriStateListDialog.kt$( title: String, message: String? = null, items: List<T>, initialChecked: List<T>, initialInversed: List<T>, itemLabel: @Composable (T) -> String, onDismissRequest: () -> Unit, onValueChanged: (newIncluded: List<T>, newExcluded: List<T>) -> Unit, ) + LongParameterList:UpdatesRepositoryImpl.kt$UpdatesRepositoryImpl$( mangaId: Long, mangaTitle: String, chapterId: Long, chapterName: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, sourceId: Long, favorite: Boolean, thumbnailUrl: String?, coverLastModified: Long, dateUpload: Long, dateFetch: Long, ) + LongParameterList:UpdatesScreen.kt$( onUpdateLibrary: () -> Unit, // For action mode actionModeCounter: Int, onSelectAll: () -> Unit, onInvertSelection: () -> Unit, onCancelActionMode: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, modifier: Modifier = Modifier, ) + LongParameterList:UpdatesScreen.kt$( state: UpdatesScreenModel.State, snackbarHostState: SnackbarHostState, lastUpdated: Long, onClickCover: (UpdatesItem) -> Unit, onSelectAll: (Boolean) -> Unit, onInvertSelection: () -> Unit, onUpdateLibrary: () -> Boolean, onDownloadChapter: (List<UpdatesItem>, ChapterDownloadAction) -> Unit, onMultiBookmarkClicked: (List<UpdatesItem>, bookmark: Boolean) -> Unit, onMultiMarkAsReadClicked: (List<UpdatesItem>, read: Boolean) -> Unit, onMultiDeleteClicked: (List<UpdatesItem>) -> Unit, onUpdateSelected: (UpdatesItem, Boolean, Boolean, Boolean) -> Unit, onOpenChapter: (UpdatesItem) -> Unit, ) + LongParameterList:UpdatesUiItem.kt$( uiModels: List<UpdatesUiModel>, selectionMode: Boolean, onUpdateSelected: (UpdatesItem, Boolean, Boolean, Boolean) -> Unit, onClickCover: (UpdatesItem) -> Unit, onClickUpdate: (UpdatesItem) -> Unit, onDownloadChapter: (List<UpdatesItem>, ChapterDownloadAction) -> Unit, ) + LongParameterList:UpdatesUiItem.kt$( update: UpdatesWithRelations, selected: Boolean, readProgress: String?, onClick: () -> Unit, onLongClick: () -> Unit, onClickCover: (() -> Unit)?, onDownloadChapter: ((ChapterDownloadAction) -> Unit)?, // Download Indicator downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, modifier: Modifier = Modifier, ) + LongParameterList:WebViewScreenContent.kt$( onNavigateUp: () -> Unit, initialTitle: String?, url: String, onShare: (String) -> Unit, onOpenInBrowser: (String) -> Unit, onClearCookies: (String) -> Unit, headers: Map<String, String> = emptyMap(), onUrlChange: (String) -> Unit = {}, ) + LongParameterList:WebtoonRecyclerView.kt$WebtoonRecyclerView$( fromRate: Float, toRate: Float, fromX: Float, toX: Float, fromY: Float, toY: Float, ) + LoopWithTooManyJumpStatements:DownloadStore.kt$DownloadStore$for + LoopWithTooManyJumpStatements:ImageUtil.kt$ImageUtil$for + LoopWithTooManyJumpStatements:Kavita.kt$Kavita$for + LoopWithTooManyJumpStatements:RateLimitInterceptor.kt$RateLimitInterceptor$while + LoopWithTooManyJumpStatements:UpdatesScreenModel.kt$UpdatesScreenModel$for + MagicNumber:AdaptiveSheet.kt$220 + MagicNumber:AdaptiveSheet.kt$90 + MagicNumber:Anilist.kt$Anilist$10 + MagicNumber:Anilist.kt$Anilist$10.0 + MagicNumber:Anilist.kt$Anilist$100 + MagicNumber:Anilist.kt$Anilist$10f + MagicNumber:Anilist.kt$Anilist$18 + MagicNumber:Anilist.kt$Anilist$20 + MagicNumber:Anilist.kt$Anilist$20.0 + MagicNumber:Anilist.kt$Anilist$25 + MagicNumber:Anilist.kt$Anilist$25.0 + MagicNumber:Anilist.kt$Anilist$35 + MagicNumber:Anilist.kt$Anilist$5 + MagicNumber:Anilist.kt$Anilist$60 + MagicNumber:AnilistApi.kt$AnilistApi$31536000000 + MagicNumber:AnilistModels.kt$10 + MagicNumber:AnilistModels.kt$30 + MagicNumber:AnilistModels.kt$35 + MagicNumber:AnilistModels.kt$50 + MagicNumber:AnilistModels.kt$60 + MagicNumber:AnilistModels.kt$70 + MagicNumber:AnilistModels.kt$90 + MagicNumber:App.kt$App$300 + MagicNumber:App.kt$App$8 + MagicNumber:AppThemePreferenceWidget.kt$0.3f + MagicNumber:AppThemePreferenceWidget.kt$0.5f + MagicNumber:AppThemePreferenceWidget.kt$0.6f + MagicNumber:AppThemePreferenceWidget.kt$0.7f + MagicNumber:AppThemePreferenceWidget.kt$0.8f + MagicNumber:AppThemePreferenceWidget.kt$16f + MagicNumber:AppThemePreferenceWidget.kt$9f + MagicNumber:AppUpdateDownloadJob.kt$AppUpdateDownloadJob.<no name provided>$100 + MagicNumber:AppUpdateDownloadJob.kt$AppUpdateDownloadJob.<no name provided>$200 + MagicNumber:AppUpdateNotifier.kt$AppUpdateNotifier$100 + MagicNumber:Backup.kt$Backup$100 + MagicNumber:Backup.kt$Backup$101 + MagicNumber:Backup.kt$Backup$104 + MagicNumber:Backup.kt$Backup$105 + MagicNumber:BackupCategory.kt$BackupCategory$100 + MagicNumber:BackupChapter.kt$BackupChapter$10 + MagicNumber:BackupChapter.kt$BackupChapter$11 + MagicNumber:BackupChapter.kt$BackupChapter$3 + MagicNumber:BackupChapter.kt$BackupChapter$4 + MagicNumber:BackupChapter.kt$BackupChapter$5 + MagicNumber:BackupChapter.kt$BackupChapter$6 + MagicNumber:BackupChapter.kt$BackupChapter$7 + MagicNumber:BackupChapter.kt$BackupChapter$8 + MagicNumber:BackupChapter.kt$BackupChapter$9 + MagicNumber:BackupCreateJob.kt$BackupCreateJob.Companion$10 + MagicNumber:BackupDecoder.kt$BackupDecoder$0x1f8b + MagicNumber:BackupHistory.kt$BackupHistory$3 + MagicNumber:BackupManga.kt$BackupManga$100 + MagicNumber:BackupManga.kt$BackupManga$101 + MagicNumber:BackupManga.kt$BackupManga$102 + MagicNumber:BackupManga.kt$BackupManga$103 + MagicNumber:BackupManga.kt$BackupManga$104 + MagicNumber:BackupManga.kt$BackupManga$105 + MagicNumber:BackupManga.kt$BackupManga$106 + MagicNumber:BackupManga.kt$BackupManga$107 + MagicNumber:BackupManga.kt$BackupManga$108 + MagicNumber:BackupManga.kt$BackupManga$13 + MagicNumber:BackupManga.kt$BackupManga$14 + MagicNumber:BackupManga.kt$BackupManga$16 + MagicNumber:BackupManga.kt$BackupManga$17 + MagicNumber:BackupManga.kt$BackupManga$18 + MagicNumber:BackupManga.kt$BackupManga$3 + MagicNumber:BackupManga.kt$BackupManga$4 + MagicNumber:BackupManga.kt$BackupManga$5 + MagicNumber:BackupManga.kt$BackupManga$6 + MagicNumber:BackupManga.kt$BackupManga$7 + MagicNumber:BackupManga.kt$BackupManga$8 + MagicNumber:BackupManga.kt$BackupManga$9 + MagicNumber:BackupPreferences.kt$BackupPreferences$12 + MagicNumber:BackupTracking.kt$BackupTracking$10 + MagicNumber:BackupTracking.kt$BackupTracking$100 + MagicNumber:BackupTracking.kt$BackupTracking$11 + MagicNumber:BackupTracking.kt$BackupTracking$3 + MagicNumber:BackupTracking.kt$BackupTracking$4 + MagicNumber:BackupTracking.kt$BackupTracking$5 + MagicNumber:BackupTracking.kt$BackupTracking$6 + MagicNumber:BackupTracking.kt$BackupTracking$7 + MagicNumber:BackupTracking.kt$BackupTracking$8 + MagicNumber:BackupTracking.kt$BackupTracking$9 + MagicNumber:Bangumi.kt$Bangumi$145 + MagicNumber:Bangumi.kt$Bangumi$153 + MagicNumber:Bangumi.kt$Bangumi$240 + MagicNumber:BangumiInterceptor.kt$BangumiInterceptor$1000 + MagicNumber:BangumiModels.kt$1000 + MagicNumber:BangumiModels.kt$3600 + MagicNumber:BangumiModels.kt$OAuth$1000 + MagicNumber:BasePreferenceWidget.kt$200 + MagicNumber:BrowseIcons.kt$0x1F888888 + MagicNumber:ChapterDownloadIndicator.kt$0.5f + MagicNumber:ChapterRecognition.kt$ChapterRecognition$10 + MagicNumber:ChapterRecognition.kt$ChapterRecognition$10.0 + MagicNumber:ChapterRecognition.kt$ChapterRecognition$2.0 + MagicNumber:ChapterRecognition.kt$ChapterRecognition$3 + MagicNumber:CircularProgressIndicator.kt$2000 + MagicNumber:ColorFilterPage.kt$16 + MagicNumber:ColorFilterPage.kt$24 + MagicNumber:ColorFilterPage.kt$8 + MagicNumber:CommonMangaItem.kt$0.33f + MagicNumber:CommonMangaItem.kt$0xAA000000 + MagicNumber:ContextExtensions.kt$3 + MagicNumber:ContextExtensions.kt$50 + MagicNumber:DateExtensions.kt$7 + MagicNumber:DelayedTrackingUpdateJob.kt$DelayedTrackingUpdateJob$3 + MagicNumber:DelayedTrackingUpdateJob.kt$DelayedTrackingUpdateJob.Companion$5 + MagicNumber:DeviceUtil.kt$DeviceUtil$1024 + MagicNumber:DeviceUtil.kt$DeviceUtil$3L + MagicNumber:DeviceUtil.kt$DeviceUtil$90000 + MagicNumber:DiskUtil.kt$DiskUtil$240 + MagicNumber:Download.kt$Download.State.DOWNLOADED$3 + MagicNumber:Download.kt$Download.State.ERROR$4 + MagicNumber:DownloadCache.kt$DownloadCache$1000 + MagicNumber:DownloadDropdownMenu.kt$10 + MagicNumber:DownloadDropdownMenu.kt$25 + MagicNumber:DownloadDropdownMenu.kt$5 + MagicNumber:DownloadHolder.kt$DownloadHolder$100 + MagicNumber:DownloadNotifier.kt$DownloadNotifier$15 + MagicNumber:DownloadNotifier.kt$DownloadNotifier$30 + MagicNumber:DownloadProvider.kt$DownloadProvider$4 + MagicNumber:DownloadQueueScreen.kt$DownloadQueueScreen$0.08f + MagicNumber:DownloadQueueScreen.kt$DownloadQueueScreen$0.12f + MagicNumber:DownloadQueueScreenModel.kt$DownloadQueueScreenModel$50 + MagicNumber:Downloader.kt$Downloader$100 + MagicNumber:Downloader.kt$Downloader$1000 + MagicNumber:Downloader.kt$Downloader$3 + MagicNumber:Downloader.kt$Downloader$5 + MagicNumber:DropdownMenu.kt$56 + MagicNumber:ExtensionDetailsScreen.kt$1.5f + MagicNumber:ExtensionInstallService.kt$ExtensionInstallService$100 + MagicNumber:FetchInterval.kt$FetchInterval$10 + MagicNumber:FetchInterval.kt$FetchInterval$1000 + MagicNumber:FetchInterval.kt$FetchInterval$3 + MagicNumber:FetchInterval.kt$FetchInterval$7 + MagicNumber:FetchInterval.kt$FetchInterval$8 + MagicNumber:GetApplicationRelease.kt$GetApplicationRelease$3 + MagicNumber:GlanceUtils.kt$10 + MagicNumber:GlanceUtils.kt$64 + MagicNumber:GlanceUtils.kt$95 + MagicNumber:GlobalSearchItem.kt$99f + MagicNumber:Hash.kt$Hash$15 + MagicNumber:Hash.kt$Hash$240 + MagicNumber:Hash.kt$Hash$4 + MagicNumber:HttpSource.kt$HttpSource$0xff + MagicNumber:HttpSource.kt$HttpSource$7 + MagicNumber:HttpSource.kt$HttpSource$8 + MagicNumber:ImageUtil.kt$ImageUtil$0.01 + MagicNumber:ImageUtil.kt$ImageUtil$0.0275 + MagicNumber:ImageUtil.kt$ImageUtil$100 + MagicNumber:ImageUtil.kt$ImageUtil$14 + MagicNumber:ImageUtil.kt$ImageUtil$18 + MagicNumber:ImageUtil.kt$ImageUtil$200 + MagicNumber:ImageUtil.kt$ImageUtil$22 + MagicNumber:ImageUtil.kt$ImageUtil$25 + MagicNumber:ImageUtil.kt$ImageUtil$3 + MagicNumber:ImageUtil.kt$ImageUtil$30 + MagicNumber:ImageUtil.kt$ImageUtil$32 + MagicNumber:ImageUtil.kt$ImageUtil$40 + MagicNumber:ImageUtil.kt$ImageUtil$5 + MagicNumber:ImageUtil.kt$ImageUtil$50 + MagicNumber:ImageUtil.kt$ImageUtil$6 + MagicNumber:ImageUtil.kt$ImageUtil$740 + MagicNumber:ImageUtil.kt$ImageUtil$9 + MagicNumber:Kavita.kt$Kavita$0xff + MagicNumber:Kavita.kt$Kavita$148 + MagicNumber:Kavita.kt$Kavita$198 + MagicNumber:Kavita.kt$Kavita$3 + MagicNumber:Kavita.kt$Kavita$7 + MagicNumber:Kavita.kt$Kavita$74 + MagicNumber:Kavita.kt$Kavita$8 + MagicNumber:KavitaApi.kt$KavitaApi$200 + MagicNumber:KavitaApi.kt$KavitaApi$204 + MagicNumber:KavitaApi.kt$KavitaApi$401 + MagicNumber:KavitaApi.kt$KavitaApi$500 + MagicNumber:KavitaModels.kt$OAuth$3 + MagicNumber:Kitsu.kt$Kitsu$20 + MagicNumber:Kitsu.kt$Kitsu$37 + MagicNumber:Kitsu.kt$Kitsu$50 + MagicNumber:Kitsu.kt$Kitsu$51 + MagicNumber:KitsuModels.kt$1000 + MagicNumber:KitsuModels.kt$3600 + MagicNumber:Komga.kt$Komga$37 + MagicNumber:Komga.kt$Komga$50 + MagicNumber:Komga.kt$Komga$51 + MagicNumber:LibraryScreenModel.kt$LibraryScreenModel$10 + MagicNumber:LibraryScreenModel.kt$LibraryScreenModel$25 + MagicNumber:LibraryScreenModel.kt$LibraryScreenModel$5 + MagicNumber:LibrarySortMode.kt$LibrarySort.Direction.Ascending$0b01000000 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.ChapterFetchDate$0b00011000 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.DateAdded$0b00011100 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.LastRead$0b00000100 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.LastUpdate$0b00001000 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.LatestChapter$0b00010100 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.TotalChapters$0b00010000 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.TrackerMean$0b000100000 + MagicNumber:LibrarySortMode.kt$LibrarySort.Type.UnreadCount$0b00001100 + MagicNumber:LibraryToolbar.kt$0.08f + MagicNumber:LibraryToolbar.kt$0.12f + MagicNumber:LibraryUpdateJob.kt$LibraryUpdateJob$5 + MagicNumber:LibraryUpdateJob.kt$LibraryUpdateJob.Companion$10 + MagicNumber:LibraryUpdateNotifier.kt$LibraryUpdateNotifier$40 + MagicNumber:MangaBottomActionMenu.kt$3 + MagicNumber:MangaBottomActionMenu.kt$4 + MagicNumber:MangaBottomActionMenu.kt$5 + MagicNumber:MangaBottomActionMenu.kt$6 + MagicNumber:MangaBottomActionMenu.kt$7 + MagicNumber:MangaCover.kt$MangaCover.Book$3f + MagicNumber:MangaInfoHeader.kt$0.2f + MagicNumber:MangaInfoHeader.kt$0.65f + MagicNumber:MangaScreenModel.kt$MangaScreenModel$10 + MagicNumber:MangaScreenModel.kt$MangaScreenModel$103 + MagicNumber:MangaScreenModel.kt$MangaScreenModel$25 + MagicNumber:MangaScreenModel.kt$MangaScreenModel$5 + MagicNumber:MangaUpdates.kt$MangaUpdates$146 + MagicNumber:MangaUpdates.kt$MangaUpdates$160 + MagicNumber:MangaUpdates.kt$MangaUpdates$173 + MagicNumber:MangaUpdatesApi.kt$MangaUpdatesApi$200 + MagicNumber:MetadataUpdateJob.kt$MetadataUpdateJob$5 + MagicNumber:Modifier.kt$0.16f + MagicNumber:Modifier.kt$0.22f + MagicNumber:MonetColorScheme.kt$MonetColorScheme.Companion$128 + MagicNumber:MyAnimeList.kt$MyAnimeList$162 + MagicNumber:MyAnimeList.kt$MyAnimeList$46 + MagicNumber:MyAnimeList.kt$MyAnimeList$81 + MagicNumber:MyAnimeListApi.kt$MyAnimeListApi$64 + MagicNumber:MyAnimeListInterceptor.kt$MyAnimeListInterceptor$401 + MagicNumber:MyAnimeListModels.kt$1000 + MagicNumber:NetworkHelper.kt$NetworkHelper$30 + MagicNumber:Page.kt$Page$100 + MagicNumber:PageIndicatorText.kt$235 + MagicNumber:PageIndicatorText.kt$45 + MagicNumber:PagerConfig.kt$PagerConfig$3 + MagicNumber:PagerConfig.kt$PagerConfig$4 + MagicNumber:PagerConfig.kt$PagerConfig$5 + MagicNumber:PagerPageHolder.kt$PagerPageHolder$16 + MagicNumber:PagerPageHolder.kt$PagerPageHolder$90f + MagicNumber:PagerViewer.kt$PagerViewer$5 + MagicNumber:PkceUtil.kt$PkceUtil$50 + MagicNumber:PullRefresh.kt$PullToRefreshStateImpl$4 + MagicNumber:ReaderActivity.kt$ReaderActivity$230 + MagicNumber:ReaderActivity.kt$ReaderActivity$242 + MagicNumber:ReaderActivity.kt$ReaderActivity.ReaderConfig$0.01f + MagicNumber:ReaderActivity.kt$ReaderActivity.ReaderConfig$100 + MagicNumber:ReaderActivity.kt$ReaderActivity.ReaderConfig$100f + MagicNumber:ReaderActivity.kt$ReaderActivity.ReaderConfig$255f + MagicNumber:ReaderActivity.kt$ReaderActivity.ReaderConfig$3 + MagicNumber:ReaderContentOverlay.kt$100f + MagicNumber:ReaderOrientation.kt$ReaderOrientation.FREE$0x00000008 + MagicNumber:ReaderOrientation.kt$ReaderOrientation.LANDSCAPE$0x00000018 + MagicNumber:ReaderOrientation.kt$ReaderOrientation.LOCKED_LANDSCAPE$0x00000028 + MagicNumber:ReaderOrientation.kt$ReaderOrientation.LOCKED_PORTRAIT$0x00000020 + MagicNumber:ReaderOrientation.kt$ReaderOrientation.PORTRAIT$0x00000010 + MagicNumber:ReaderOrientation.kt$ReaderOrientation.REVERSE_PORTRAIT$0x00000030 + MagicNumber:ReaderPageImageView.kt$ReaderPageImageView$180 + MagicNumber:ReaderPageImageView.kt$ReaderPageImageView$250 + MagicNumber:ReaderPageImageView.kt$ReaderPageImageView$500 + MagicNumber:ReaderPreferences.kt$ReaderPreferences$500 + MagicNumber:ReaderPreferences.kt$ReaderPreferences.ReaderHideThreshold.HIGH$13 + MagicNumber:ReaderPreferences.kt$ReaderPreferences.ReaderHideThreshold.HIGHEST$5 + MagicNumber:ReaderPreferences.kt$ReaderPreferences.ReaderHideThreshold.LOW$31 + MagicNumber:ReaderPreferences.kt$ReaderPreferences.ReaderHideThreshold.LOWEST$47 + MagicNumber:ReaderProgressIndicator.kt$ReaderProgressIndicator$100f + MagicNumber:ReaderSettingsDialog.kt$0.5f + MagicNumber:ReaderViewModel.kt$ReaderViewModel$0.25 + MagicNumber:ReadingMode.kt$ReadingMode.CONTINUOUS_VERTICAL$0x00000005 + MagicNumber:ReadingMode.kt$ReadingMode.VERTICAL$0x00000003 + MagicNumber:ReadingMode.kt$ReadingMode.WEBTOON$0x00000004 + MagicNumber:ReadingModePage.kt$100f + MagicNumber:ReadingModePage.kt$5 + MagicNumber:SaveImageNotifier.kt$SaveImageNotifier$1280 + MagicNumber:SaveImageNotifier.kt$SaveImageNotifier$720 + MagicNumber:Scaffold.kt$3 + MagicNumber:Scaffold.kt$4 + MagicNumber:Scaffold.kt$5 + MagicNumber:Scaffold.kt$6 + MagicNumber:Scaffold.kt$7 + MagicNumber:Scaffold.kt$8 + MagicNumber:Scaffold.kt$9 + MagicNumber:Scrollbar.kt$100 + MagicNumber:Scrollbar.kt$50 + MagicNumber:SecureActivityDelegate.kt$SecureActivityDelegate.Companion$60_000 + MagicNumber:SettingsDataScreen.kt$SettingsDataScreen$12 + MagicNumber:SettingsDataScreen.kt$SettingsDataScreen$168 + MagicNumber:SettingsDataScreen.kt$SettingsDataScreen$24 + MagicNumber:SettingsDataScreen.kt$SettingsDataScreen$48 + MagicNumber:SettingsDataScreen.kt$SettingsDataScreen$6 + MagicNumber:SettingsDownloadScreen.kt$SettingsDownloadScreen$10 + MagicNumber:SettingsDownloadScreen.kt$SettingsDownloadScreen$3 + MagicNumber:SettingsDownloadScreen.kt$SettingsDownloadScreen$4 + MagicNumber:SettingsDownloadScreen.kt$SettingsDownloadScreen$5 + MagicNumber:SettingsItems.kt$0.5f + MagicNumber:SettingsItems.kt$1.5f + MagicNumber:SettingsLibraryScreen.kt$SettingsLibraryScreen$12 + MagicNumber:SettingsLibraryScreen.kt$SettingsLibraryScreen$168 + MagicNumber:SettingsLibraryScreen.kt$SettingsLibraryScreen$24 + MagicNumber:SettingsLibraryScreen.kt$SettingsLibraryScreen$48 + MagicNumber:SettingsLibraryScreen.kt$SettingsLibraryScreen$72 + MagicNumber:SettingsMainScreen.kt$SettingsMainScreen$0.02f + MagicNumber:SettingsMainScreen.kt$SettingsMainScreen$0.05f + MagicNumber:SettingsMainScreen.kt$SettingsMainScreen$3 + MagicNumber:SettingsReaderScreen.kt$SettingsReaderScreen$100f + MagicNumber:SettingsReaderScreen.kt$SettingsReaderScreen$250 + MagicNumber:SettingsReaderScreen.kt$SettingsReaderScreen$3 + MagicNumber:SettingsReaderScreen.kt$SettingsReaderScreen$500 + MagicNumber:SettingsSearchScreen.kt$10 + MagicNumber:Shikimori.kt$Shikimori$40 + MagicNumber:ShikimoriModels.kt$1000 + MagicNumber:ShikimoriModels.kt$3600 + MagicNumber:Surface.kt$100f + MagicNumber:Surface.kt$4.5f + MagicNumber:Suwayomi.kt$Suwayomi$255 + MagicNumber:Suwayomi.kt$Suwayomi$35 + MagicNumber:Tabs.kt$0.08f + MagicNumber:Tabs.kt$0.12f + MagicNumber:TimeUtils.kt$4 + MagicNumber:TrackInfoDialog.kt$TrackChapterSelectorScreen.Model$10000 + MagicNumber:TrackInfoDialogSelector.kt$3L + MagicNumber:TrackInfoDialogSelector.kt$4L + MagicNumber:TrackInfoDialogSelector.kt$5L + MagicNumber:TrackInfoDialogSelector.kt$6L + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$10 + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$100 + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$1000L + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$100L + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$30 + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$365 + MagicNumber:TrackerSearchPreviewProvider.kt$TrackerSearchPreviewProvider$40 + MagicNumber:TrackingPreferenceWidget.kt$0xFF4CAF50 + MagicNumber:UniFileTempFileManager.kt$UniFileTempFileManager$3 + MagicNumber:UniFileTempFileManager.kt$UniFileTempFileManager$8192 + MagicNumber:UpdatesScreenModel.kt$UpdatesScreenModel$3 + MagicNumber:VerticalFastScroller.kt$100 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.LEFT$0x11 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.LEFT$0x28 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.LEFT$0x7D + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.LEFT$0xCC + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.MENU$0x81 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.MENU$0x8D + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.MENU$0x95 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.MENU$0xCC + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.NEXT$0x84 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.NEXT$0x96 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.NEXT$0xCC + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.NEXT$0xE2 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.PREV$0x33 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.PREV$0x77 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.PREV$0xCC + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.PREV$0xFF + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.RIGHT$0xA6 + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.RIGHT$0xCC + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.RIGHT$0xCF + MagicNumber:ViewerNavigation.kt$ViewerNavigation.NavigationRegion.RIGHT$0xD5 + MagicNumber:WebViewInterceptor.kt$WebViewInterceptor$30 + MagicNumber:WebtoonConfig.kt$WebtoonConfig$3 + MagicNumber:WebtoonConfig.kt$WebtoonConfig$4 + MagicNumber:WebtoonConfig.kt$WebtoonConfig$5 + MagicNumber:WebtoonPageHolder.kt$WebtoonPageHolder$0.8 + MagicNumber:WebtoonPageHolder.kt$WebtoonPageHolder$100f + MagicNumber:WebtoonPageHolder.kt$WebtoonPageHolder$16 + MagicNumber:WebtoonPageHolder.kt$WebtoonPageHolder$90f + MagicNumber:WebtoonRecyclerView.kt$WebtoonRecyclerView$0.4f + MagicNumber:WebtoonRecyclerView.kt$WebtoonRecyclerView$400 + MagicNumber:WebtoonRecyclerView.kt$WebtoonRecyclerView.Detector$0.5f + MagicNumber:WebtoonViewer.kt$WebtoonViewer$3 + MagicNumber:WebtoonViewer.kt$WebtoonViewer$5 + MagicNumber:WheelPicker.kt$0.2f + MagicNumber:WheelPicker.kt$1.2f + MagicNumber:WorkManagerExtensions.kt$500 + MatchingDeclarationName:ChapterDownloadIndicator.kt$ChapterDownloadAction + MatchingDeclarationName:CommonMangaItem.kt$CommonMangaItemDefaults + MatchingDeclarationName:EmptyScreen.kt$EmptyScreenAction + MatchingDeclarationName:LibrarySortMode.kt$LibrarySort : FlagWithMask + MatchingDeclarationName:MyAnimeListModels.kt$OAuth + MatchingDeclarationName:NetworkStateTracker.kt$NetworkState + MatchingDeclarationName:SettingsItems.kt$SettingsItemsPaddings + MatchingDeclarationName:ShikimoriModels.kt$OAuth + MatchingDeclarationName:TabbedDialog.kt$TabbedDialogPaddings + MaxLineLength:CoroutinesExtensions.kt$* + MaxLineLength:Downloader.kt$Downloader$. + MaxLineLength:LibraryUpdateJob.kt$LibraryUpdateJob$// failedUpdates will already have the source, don't need to copy it into the message + MaxLineLength:MainActivity.kt$MainActivity$// or the Google-specific search intent (triggered by saying or typing "search *query* on *Tachiyomi*" in Google Search/Google Assistant) + MaxLineLength:PreferenceScreen.kt$* + MaxLineLength:Scaffold.kt$* + MaxLineLength:SpecificHostRateLimitInterceptor.kt$* + MaxLineLength:WebViewUtil.kt$WebViewUtil$* + MemberNameEqualsClassName:ExtensionInstaller.kt$ExtensionInstaller$private val extensionInstaller = Injekt.get<BasePreferences>().extensionInstaller() + ModifierClickableOrder:ScanlatorFilterDialog.kt$clickable { if (isExcluded) { mutableExcludedScanlators.remove(scanlator) } else { mutableExcludedScanlators.add(scanlator) } } + ModifierMissing:AppBar.kt$AppBarActions + ModifierMissing:AppThemePreferenceWidget.kt$AppThemePreviewItem + ModifierMissing:BottomReaderBar.kt$BottomReaderBar + ModifierMissing:BrowseSourceComfortableGrid.kt$BrowseSourceComfortableGrid + ModifierMissing:BrowseSourceCompactGrid.kt$BrowseSourceCompactGrid + ModifierMissing:BrowseSourceList.kt$BrowseSourceList + ModifierMissing:BrowseSourceScreen.kt$BrowseSourceContent + ModifierMissing:BrowseSourceToolbar.kt$BrowseSourceToolbar + ModifierMissing:CategoryScreen.kt$CategoryScreen + ModifierMissing:ChapterNavigator.kt$ChapterNavigator + ModifierMissing:ChapterSettingsDialog.kt$ChapterSettingsDialog + ModifierMissing:ChapterSettingsDialog.kt$ScanlatorFilterItem + ModifierMissing:CollapsibleBox.kt$CollapsibleBox + ModifierMissing:CommonMangaItem.kt$MangaComfortableGridItem + ModifierMissing:CommonMangaItem.kt$MangaCompactGridItem + ModifierMissing:CommonMangaItem.kt$MangaListItem + ModifierMissing:CrashScreen.kt$CrashScreen + ModifierMissing:ExtensionDetailsScreen.kt$ExtensionDetailsScreen + ModifierMissing:ExtensionFilterScreen.kt$ExtensionFilterScreen + ModifierMissing:ExtensionReposScreen.kt$ExtensionReposScreen + ModifierMissing:ExtensionsScreen.kt$ExtensionScreen + ModifierMissing:GlobalSearchCardRow.kt$GlobalSearchCardRow + ModifierMissing:GlobalSearchResultItems.kt$GlobalSearchErrorResultItem + ModifierMissing:GlobalSearchResultItems.kt$GlobalSearchLoadingResultItem + ModifierMissing:GlobalSearchResultItems.kt$GlobalSearchResultItem + ModifierMissing:GlobalSearchScreen.kt$GlobalSearchScreen + ModifierMissing:GlobalSearchToolbar.kt$GlobalSearchToolbar + ModifierMissing:HistoryScreen.kt$HistoryScreen + ModifierMissing:HomeScreen.kt$HomeScreen$NavigationRailItem + ModifierMissing:InfoScreen.kt$InfoScreen + ModifierMissing:LibraryContent.kt$LibraryContent + ModifierMissing:LibraryPager.kt$LibraryPager + ModifierMissing:LibrarySettingsDialog.kt$LibrarySettingsDialog + ModifierMissing:LogoHeader.kt$LogoHeader + ModifierMissing:MangaCoverDialog.kt$MangaCoverDialog + ModifierMissing:MangaScreen.kt$MangaScreenLargeImpl + ModifierMissing:MigrateMangaScreen.kt$MigrateMangaScreen + ModifierMissing:MigrateSearchScreen.kt$MigrateSearchScreen + ModifierMissing:MigrateSourceScreen.kt$MigrateSourceScreen + ModifierMissing:ModeSelectionDialog.kt$ModeSelectionDialog + ModifierMissing:MoreScreen.kt$MoreScreen + ModifierMissing:NewUpdateScreen.kt$NewUpdateScreen + ModifierMissing:OnboardingScreen.kt$OnboardingScreen + ModifierMissing:PageIndicatorText.kt$PageIndicatorText + ModifierMissing:PreferenceGroupHeader.kt$PreferenceGroupHeader + ModifierMissing:PreferenceScaffold.kt$PreferenceScaffold + ModifierMissing:ReaderAppBars.kt$ReaderAppBars + ModifierMissing:ReaderPageActionsDialog.kt$ReaderPageActionsDialog + ModifierMissing:ReaderSettingsDialog.kt$ReaderSettingsDialog + ModifierMissing:SectionCard.kt$SectionCard + ModifierMissing:SettingsItems.kt$CheckboxItem + ModifierMissing:SettingsItems.kt$HeadingItem + ModifierMissing:SettingsItems.kt$IconItem + ModifierMissing:SettingsItems.kt$RadioItem + ModifierMissing:SettingsItems.kt$SelectItem + ModifierMissing:SettingsItems.kt$SettingsChipRow + ModifierMissing:SettingsItems.kt$SettingsIconGrid + ModifierMissing:SettingsItems.kt$SliderItem + ModifierMissing:SettingsItems.kt$SortItem + ModifierMissing:SettingsItems.kt$TextItem + ModifierMissing:SettingsItems.kt$TriStateItem + ModifierMissing:SettingsMainScreen.kt$SettingsMainScreen$Content + ModifierMissing:SourceFilterDialog.kt$SourceFilterDialog + ModifierMissing:SourcesFilterScreen.kt$SourcesFilterScreen + ModifierMissing:SourcesScreen.kt$SourcesScreen + ModifierMissing:StatsScreenContent.kt$StatsScreenContent + ModifierMissing:TabbedScreen.kt$TabbedScreen + ModifierMissing:Tabs.kt$TabText + ModifierMissing:TrackInfoDialogHome.kt$TrackInfoDialogHome + ModifierMissing:TrackInfoDialogSelector.kt$TrackChapterSelector + ModifierMissing:TrackInfoDialogSelector.kt$TrackDateSelector + ModifierMissing:TrackInfoDialogSelector.kt$TrackScoreSelector + ModifierMissing:TrackInfoDialogSelector.kt$TrackStatusSelector + ModifierMissing:TrackLogoIcon.kt$TrackLogoIcon + ModifierMissing:TrackerSearch.kt$TrackerSearch + ModifierMissing:UpdatesScreen.kt$UpdateScreen + ModifierMissing:WebViewScreenContent.kt$WebViewScreenContent + ModifierMissing:WheelPicker.kt$WheelPickerDefaults$Background + ModifierMissing:WheelPicker.kt$WheelPickerDefaults$Item + ModifierNotUsedAtRoot:DropdownMenu.kt$modifier = modifier + ModifierNotUsedAtRoot:MangaChapterListItem.kt$modifier = modifier .selectedBackground(selected) .combinedClickable( onClick = onClick, onLongClick = onLongClick, ) .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp) + ModifierNotUsedAtRoot:TrackingPreferenceWidget.kt$modifier = modifier .clickable(enabled = onClick != null, onClick = { onClick?.invoke() }) .fillMaxWidth() .padding(horizontal = PrefsHorizontalPadding, vertical = 8.dp) + NestedBlockDepth:Anilist.kt$Anilist$override suspend fun update(track: Track, didReadChapter: Boolean): Track + NestedBlockDepth:AppLanguageScreen.kt$AppLanguageScreen$private fun getLangs(context: Context): ImmutableList<Language> + NestedBlockDepth:BackupRestorer.kt$BackupRestorer$private fun writeErrorLog(): File + NestedBlockDepth:BrowseSourceScreenModel.kt$BrowseSourceScreenModel$fun searchGenre(genreName: String) + NestedBlockDepth:ChapterLoader.kt$ChapterLoader$private fun getPageLoader(chapter: ReaderChapter): PageLoader + NestedBlockDepth:CloseableExtensions.kt$inline fun <T : Closeable?> Array<T>.use(block: () -> Unit) + NestedBlockDepth:ContextExtensions.kt$fun Context.openInBrowser(uri: Uri, forceDefaultBrowser: Boolean = false) + NestedBlockDepth:DownloadQueueScreenModel.kt$DownloadQueueScreenModel.<no name provided>$override fun onMenuItemClick(position: Int, menuItem: MenuItem) + NestedBlockDepth:Downloader.kt$Downloader$private fun archiveChapter( mangaDir: UniFile, dirname: String, tmpDir: UniFile, ) + NestedBlockDepth:ExtensionInstaller.kt$ExtensionInstaller$fun installApk(downloadId: Long, uri: Uri) + NestedBlockDepth:ImageUtil.kt$ImageUtil$fun chooseBackground(context: Context, imageStream: InputStream): Drawable + NestedBlockDepth:KavitaApi.kt$KavitaApi$fun getNewToken(apiUrl: String, apiKey: String): String? + NestedBlockDepth:KavitaApi.kt$KavitaApi$private fun getLatestChapterRead(url: String): Double + NestedBlockDepth:Kitsu.kt$Kitsu$override suspend fun update(track: Track, didReadChapter: Boolean): Track + NestedBlockDepth:LibraryUpdateJob.kt$LibraryUpdateJob$private fun writeErrorFile(errors: List<Pair<Manga, String?>>): File + NestedBlockDepth:LocalSource.kt$LocalSource$private fun copyComicInfoFileFromArchive(chapterArchives: List<UniFile>, folderPath: String?): File? + NestedBlockDepth:LocalSource.kt$LocalSource$private fun updateCover(chapter: SChapter, manga: SManga): UniFile? + NestedBlockDepth:MyAnimeList.kt$MyAnimeList$override suspend fun update(track: Track, didReadChapter: Boolean): Track + NestedBlockDepth:SyncChaptersWithSource.kt$SyncChaptersWithSource$suspend fun await( rawSourceChapters: List<SChapter>, manga: Manga, source: Source, manualFetch: Boolean = false, fetchWindow: Pair<Long, Long> = Pair(0, 0), ): List<Chapter> + NestedBlockDepth:UniFileTempFileManager.kt$UniFileTempFileManager$fun createTempFile(file: UniFile): File + NestedBlockDepth:WebtoonRecyclerView.kt$WebtoonRecyclerView.Detector$override fun onTouchEvent(ev: MotionEvent): Boolean + NewLineAtEndOfFile:Commands.kt$.Commands.kt + NoConsecutiveBlankLines:LocalesConfigPlugin.kt$ + PreviewPublic:Scrollbar.kt$LazyListHorizontalScrollbarPreview + PreviewPublic:Scrollbar.kt$LazyListScrollbarPreview + RethrowCaughtException:LocalSource.kt$LocalSource$throw e + ReturnCount:AndroidDatabaseHandler.kt$AndroidDatabaseHandler$private suspend fun <T> dispatch(inTransaction: Boolean, block: suspend Database.() -> T): T + ReturnCount:AndroidSourceManager.kt$AndroidSourceManager$private suspend fun createStubSource(id: Long): StubSource + ReturnCount:BackupCreateJob.kt$BackupCreateJob$override suspend fun doWork(): Result + ReturnCount:ChapterRecognition.kt$ChapterRecognition$fun parseChapterNumber( mangaTitle: String, chapterName: String, chapterNumber: Double? = null, ): Double + ReturnCount:ChapterRecognition.kt$ChapterRecognition$private fun checkForDecimal(decimal: String?, alpha: String?): Double + ReturnCount:Download.kt$Download.Companion$suspend fun fromChapterId( chapterId: Long, getChapter: GetChapter = Injekt.get(), getManga: GetManga = Injekt.get(), sourceManager: SourceManager = Injekt.get(), ): Download? + ReturnCount:DownloadCache.kt$DownloadCache$fun isChapterDownloaded( chapterName: String, chapterScanlator: String?, mangaTitle: String, sourceId: Long, skipCache: Boolean, ): Boolean + ReturnCount:DownloadManager.kt$DownloadManager$fun renameSource(oldSource: Source, newSource: Source) + ReturnCount:Downloader.kt$Downloader$private fun isDownloadSuccessful( download: Download, tmpDir: UniFile, ): Boolean + ReturnCount:ExtensionInstallReceiver.kt$ExtensionInstallReceiver$override fun onReceive(context: Context, intent: Intent?) + ReturnCount:ExtensionInstallService.kt$ExtensionInstallService$override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int + ReturnCount:ExtensionInstaller.kt$ExtensionInstaller.DownloadCompletionReceiver$override fun onReceive(context: Context, intent: Intent?) + ReturnCount:ExtensionInstallerPreference.kt$ExtensionInstallerPreference$private fun check(value: ExtensionInstaller): ExtensionInstaller + ReturnCount:ExtensionLoader.kt$ExtensionLoader$fun installPrivateExtensionFile(context: Context, file: File): Boolean + ReturnCount:ExtensionLoader.kt$ExtensionLoader$private fun loadExtension(context: Context, extensionInfo: ExtensionInfo): LoadResult + ReturnCount:ExtensionLoader.kt$ExtensionLoader$private fun selectExtensionPackage(shared: ExtensionInfo?, private: ExtensionInfo?): ExtensionInfo? + ReturnCount:HttpPageLoader.kt$HttpPageLoader$private fun preloadNextPages(currentPage: ReaderPage, amount: Int): List<PriorityPage> + ReturnCount:ImageUtil.kt$ImageUtil$fun chooseBackground(context: Context, imageStream: InputStream): Drawable + ReturnCount:ImageUtil.kt$ImageUtil$fun isAnimatedAndSupported(stream: InputStream): Boolean + ReturnCount:ImageUtil.kt$ImageUtil$fun splitTallImage(tmpDir: UniFile, imageFile: UniFile, filenamePrefix: String): Boolean + ReturnCount:KavitaApi.kt$KavitaApi$fun getNewToken(apiUrl: String, apiKey: String): String? + ReturnCount:KavitaApi.kt$KavitaApi$private fun getLatestChapterRead(url: String): Double + ReturnCount:KitsuDateHelper.kt$KitsuDateHelper$fun parse(dateString: String?): Long + ReturnCount:LibraryUpdateJob.kt$LibraryUpdateJob$override suspend fun doWork(): Result + ReturnCount:LocalSource.kt$LocalSource$private fun copyComicInfoFileFromArchive(chapterArchives: List<UniFile>, folderPath: String?): File? + ReturnCount:MainActivity.kt$MainActivity$private fun handleIntentAction(intent: Intent, navigator: Navigator): Boolean + ReturnCount:MangaCoverFetcher.kt$MangaCoverFetcher$private suspend fun httpLoader(): FetchResult + ReturnCount:MangaExtensions.kt$fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSameUrl: Boolean): Manga + ReturnCount:MangaExtensions.kt$fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Manga + ReturnCount:MangaExtensions.kt$fun Manga.shouldDownloadNewChapters(dbCategories: List<Long>, preferences: DownloadPreferences): Boolean + ReturnCount:MangaScreen.kt$MangaScreen$private fun getMangaUrl(manga_: Manga?, source_: Source?): String? + ReturnCount:MissingChapters.kt$fun List<Double>.missingChaptersCount(): Int + ReturnCount:MissingChapters.kt$fun calculateChapterGap(higherChapter: Chapter?, lowerChapter: Chapter?): Int + ReturnCount:MyAnimeList.kt$MyAnimeList$override suspend fun search(query: String): List<TrackSearch> + ReturnCount:NetworkExtensions.kt$fun Context.isConnectedToWifi(): Boolean + ReturnCount:NetworkExtensions.kt$fun Context.isOnline(): Boolean + ReturnCount:PagerPageHolder.kt$PagerPageHolder$private fun process(page: ReaderPage, imageStream: BufferedInputStream): InputStream + ReturnCount:PagerViewer.kt$PagerViewer$override fun handleKeyEvent(event: KeyEvent): Boolean + ReturnCount:PagerViewer.kt$PagerViewer$private fun checkAllowPreload(page: ReaderPage?): Boolean + ReturnCount:PagerViewerAdapter.kt$PagerViewerAdapter$fun onPageSplit(currentPage: Any?, newPage: InsertPage) + ReturnCount:ReaderActivity.kt$ReaderActivity$override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean + ReturnCount:ReaderActivity.kt$ReaderActivity$private fun moveToPageIndex(index: Int) + ReturnCount:ReaderViewModel.kt$ReaderViewModel$fun getChapterUrl(): String? + ReturnCount:ReaderViewModel.kt$ReaderViewModel$fun setAsCover() + ReturnCount:ReaderViewModel.kt$ReaderViewModel$private fun downloadNextChapters() + ReturnCount:ReaderViewModel.kt$ReaderViewModel$private fun updateTrackChapterRead(readerChapter: ReaderChapter) + ReturnCount:ReaderViewModel.kt$ReaderViewModel$suspend fun preload(chapter: ReaderChapter) + ReturnCount:ViewExtensions.kt$fun View?.isVisibleOnScreen(): Boolean + ReturnCount:WebViewInterceptor.kt$WebViewInterceptor$override fun intercept(chain: Interceptor.Chain): Response + ReturnCount:WebViewInterceptor.kt$private fun isRequestHeaderSafe(_name: String, _value: String): Boolean + ReturnCount:WebtoonFrame.kt$WebtoonFrame$override fun dispatchTouchEvent(ev: MotionEvent): Boolean + ReturnCount:WebtoonPageHolder.kt$WebtoonPageHolder$private fun process(imageStream: BufferedInputStream): InputStream + ReturnCount:WebtoonRecyclerView.kt$WebtoonRecyclerView.Detector$override fun onTouchEvent(ev: MotionEvent): Boolean + ReturnCount:WebtoonViewer.kt$WebtoonViewer$override fun handleKeyEvent(event: KeyEvent): Boolean + ReturnCount:WebtoonViewer.kt$WebtoonViewer$private fun checkAllowPreload(page: ReaderPage?): Boolean + SerialVersionUIDInSerializableClass:Category.kt$Category : Serializable + SerialVersionUIDInSerializableClass:Manga.kt$Manga : Serializable + SpreadOperator:ChapterRepositoryImpl.kt$ChapterRepositoryImpl$(*chapterUpdates.toTypedArray()) + SpreadOperator:ChapterSanitizer.kt$ChapterSanitizer$(*CHAPTER_TRIM_CHARS) + SpreadOperator:LibraryScreenModel.kt$LibraryScreenModel$(*prefFlows) + SpreadOperator:MangaRepositoryImpl.kt$MangaRepositoryImpl$(*mangaUpdates.toTypedArray()) + SpreadOperator:SourcesScreenModel.kt$SourcesScreenModel$( SourceUiModel.Header(it.key), *it.value.map { source -> SourceUiModel.Item(source) }.toTypedArray(), ) + SpreadOperator:TrackRepositoryImpl.kt$TrackRepositoryImpl$(*tracks.toTypedArray()) + SwallowedException:AboutScreen.kt$AboutScreen$e: Exception + SwallowedException:AndroidPreference.kt$AndroidPreference$e: ClassCastException + SwallowedException:AndroidPreference.kt$AndroidPreference.Object$e: Exception + SwallowedException:Anilist.kt$Anilist$e: ClassCastException + SwallowedException:Anilist.kt$Anilist$e: Exception + SwallowedException:Anilist.kt$Anilist$e: Throwable + SwallowedException:AnilistModels.kt$ALManga$e: Exception + SwallowedException:BackupRestorer.kt$BackupRestorer$e: Exception + SwallowedException:Bangumi.kt$Bangumi$e: Exception + SwallowedException:Bangumi.kt$Bangumi$e: Throwable + SwallowedException:BrowseIcons.kt$e: Exception + SwallowedException:ChapterCache.kt$ChapterCache$e: IOException + SwallowedException:ChapterLoader.kt$ChapterLoader$e: UnsupportedRarV5Exception + SwallowedException:ContextExtensions.kt$e: Exception + SwallowedException:ContextExtensions.kt$e: PackageManager.NameNotFoundException + SwallowedException:CrashLogUtil.kt$CrashLogUtil$e: Throwable + SwallowedException:CreateBackupScreen.kt$CreateBackupScreen$e: ActivityNotFoundException + SwallowedException:DeviceUtil.kt$DeviceUtil$e: Exception + SwallowedException:DownloadPendingDeleter.kt$DownloadPendingDeleter$e: Exception + SwallowedException:DownloadStore.kt$DownloadStore$e: Exception + SwallowedException:Downloader.kt$Downloader$e: Throwable + SwallowedException:ExtensionLoader.kt$ExtensionLoader$error: PackageManager.NameNotFoundException + SwallowedException:GetChapterByUrlAndMangaId.kt$GetChapterByUrlAndMangaId$e: Exception + SwallowedException:HttpSource.kt$HttpSource$e: URISyntaxException + SwallowedException:ImageUtil.kt$ImageUtil$e: Exception + SwallowedException:Kavita.kt$Kavita$e: Exception + SwallowedException:KavitaApi.kt$KavitaApi$e: SocketTimeoutException + SwallowedException:Kitsu.kt$Kitsu$e: Exception + SwallowedException:KitsuModels.kt$KitsuSearchManga$e: IllegalArgumentException + SwallowedException:Komga.kt$Komga$e: Exception + SwallowedException:LibrarySortMode.kt$LibrarySort.Companion$e: Exception + SwallowedException:LocalSource.kt$LocalSource$e: Format.UnknownFormatException + SwallowedException:MangaScreen.kt$MangaScreen$e: Exception + SwallowedException:MangaUpdates.kt$MangaUpdates$e: Exception + SwallowedException:MangaUpdatesApi.kt$MangaUpdatesApi$e: Exception + SwallowedException:MetadataUpdateJob.kt$MetadataUpdateJob$e: Exception + SwallowedException:MyAnimeList.kt$MyAnimeList$e: Exception + SwallowedException:MyAnimeList.kt$MyAnimeList$e: Throwable + SwallowedException:MyAnimeListApi.kt$MyAnimeListApi$e: Exception + SwallowedException:OkHttpExtensions.kt$ex: Throwable + SwallowedException:Pager.kt$Pager$e: IllegalArgumentException + SwallowedException:Pager.kt$Pager$e: IndexOutOfBoundsException + SwallowedException:Pager.kt$Pager$e: NullPointerException + SwallowedException:PreferenceStore.kt$e: IllegalArgumentException + SwallowedException:RarPageLoader.kt$RarPageLoader$e: Exception + SwallowedException:ReaderActivity.kt$ReaderActivity$e: ArrayIndexOutOfBoundsException + SwallowedException:ReaderViewModel.kt$ReaderViewModel$e: Exception + SwallowedException:SettingsAdvancedScreen.kt$SettingsAdvancedScreen$e: ActivityNotFoundException + SwallowedException:SettingsDataScreen.kt$SettingsDataScreen$e: ActivityNotFoundException + SwallowedException:Shikimori.kt$Shikimori$e: Exception + SwallowedException:Shikimori.kt$Shikimori$e: Throwable + SwallowedException:StorageStep.kt$StorageStep$e: ActivityNotFoundException + SwallowedException:Suwayomi.kt$Suwayomi$e: Exception + SwallowedException:TrackInfoDialog.kt$TrackInfoDialogHomeScreen.Model$e: Exception + ThrowingExceptionsWithoutMessageOrCause:MangaScreenModel.kt$MangaScreenModel$IllegalStateException() + ThrowingExceptionsWithoutMessageOrCause:OkHttpExtensions.kt$Exception() + ThrowingExceptionsWithoutMessageOrCause:PackageInstallerInstaller.kt$PackageInstallerInstaller$IllegalStateException() + ThrowingExceptionsWithoutMessageOrCause:ShizukuInstaller.kt$ShizukuInstaller$IllegalStateException() + ThrowingExceptionsWithoutMessageOrCause:TrackInfoDialog.kt$TrackInfoDialogHomeScreen.Model$Exception() + ThrowsCount:BackupCreator.kt$BackupCreator$suspend fun backup(uri: Uri, options: BackupOptions): String + ThrowsCount:FileExtensions.kt$fun File.copyAndSetReadOnlyTo(target: File, overwrite: Boolean = false, bufferSize: Int = DEFAULT_BUFFER_SIZE): File + ThrowsCount:KavitaApi.kt$KavitaApi$fun getNewToken(apiUrl: String, apiKey: String): String? + ThrowsCount:LocalSource.kt$LocalSource$fun getFormat(chapter: SChapter): Format + TooGenericExceptionCaught:AboutScreen.kt$AboutScreen$e: Exception + TooGenericExceptionCaught:AddTracks.kt$AddTracks$e: Exception + TooGenericExceptionCaught:AndroidPreference.kt$AndroidPreference.Object$e: Exception + TooGenericExceptionCaught:Anilist.kt$Anilist$e: Exception + TooGenericExceptionCaught:Anilist.kt$Anilist$e: Throwable + TooGenericExceptionCaught:AnilistModels.kt$ALManga$e: Exception + TooGenericExceptionCaught:App.kt$App$e: Exception + TooGenericExceptionCaught:AppUpdateDownloadJob.kt$AppUpdateDownloadJob$e: Exception + TooGenericExceptionCaught:BackupCreateJob.kt$BackupCreateJob$e: Exception + TooGenericExceptionCaught:BackupCreator.kt$BackupCreator$e: Exception + TooGenericExceptionCaught:BackupFileValidator.kt$BackupFileValidator$e: Exception + TooGenericExceptionCaught:BackupRestoreJob.kt$BackupRestoreJob$e: Exception + TooGenericExceptionCaught:BackupRestorer.kt$BackupRestorer$e: Exception + TooGenericExceptionCaught:Bangumi.kt$Bangumi$e: Exception + TooGenericExceptionCaught:Bangumi.kt$Bangumi$e: Throwable + TooGenericExceptionCaught:BaseTracker.kt$BaseTracker$e: Exception + TooGenericExceptionCaught:BaseTracker.kt$BaseTracker$e: Throwable + TooGenericExceptionCaught:BrowseIcons.kt$e: Exception + TooGenericExceptionCaught:ChapterCache.kt$ChapterCache$e: Exception + TooGenericExceptionCaught:ChapterLoader.kt$ChapterLoader$e: Throwable + TooGenericExceptionCaught:ChapterRepositoryImpl.kt$ChapterRepositoryImpl$e: Exception + TooGenericExceptionCaught:CloseableExtensions.kt$closeException: Throwable + TooGenericExceptionCaught:CloseableExtensions.kt$e: Throwable + TooGenericExceptionCaught:CloudflareInterceptor.kt$CloudflareInterceptor$e: Exception + TooGenericExceptionCaught:ContextExtensions.kt$e: Exception + TooGenericExceptionCaught:ContextExtensions.kt$e: Throwable + TooGenericExceptionCaught:CrashLogUtil.kt$CrashLogUtil$e: Throwable + TooGenericExceptionCaught:CreateCategoryWithName.kt$CreateCategoryWithName$e: Exception + TooGenericExceptionCaught:DeleteCategory.kt$DeleteCategory$e: Exception + TooGenericExceptionCaught:DeleteTrack.kt$DeleteTrack$e: Exception + TooGenericExceptionCaught:DeviceUtil.kt$DeviceUtil$e: Exception + TooGenericExceptionCaught:DownloadCache.kt$DownloadCache$e: Throwable + TooGenericExceptionCaught:DownloadPendingDeleter.kt$DownloadPendingDeleter$e: Exception + TooGenericExceptionCaught:DownloadProvider.kt$DownloadProvider$e: Throwable + TooGenericExceptionCaught:DownloadStore.kt$DownloadStore$e: Exception + TooGenericExceptionCaught:Downloader.kt$Downloader$e: Exception + TooGenericExceptionCaught:Downloader.kt$Downloader$e: Throwable + TooGenericExceptionCaught:Downloader.kt$Downloader$error: Throwable + TooGenericExceptionCaught:ExtensionApi.kt$ExtensionApi$e: Throwable + TooGenericExceptionCaught:ExtensionDetailsScreenModel.kt$ExtensionDetailsScreenModel$e: Exception + TooGenericExceptionCaught:ExtensionInstallActivity.kt$ExtensionInstallActivity$error: Exception + TooGenericExceptionCaught:ExtensionInstaller.kt$ExtensionInstaller$e: Exception + TooGenericExceptionCaught:ExtensionLoader.kt$ExtensionLoader$e: Exception + TooGenericExceptionCaught:ExtensionLoader.kt$ExtensionLoader$e: Throwable + TooGenericExceptionCaught:ExtensionManager.kt$ExtensionManager$e: Exception + TooGenericExceptionCaught:GetChapter.kt$GetChapter$e: Exception + TooGenericExceptionCaught:GetChapterByUrlAndMangaId.kt$GetChapterByUrlAndMangaId$e: Exception + TooGenericExceptionCaught:GetChaptersByMangaId.kt$GetChaptersByMangaId$e: Exception + TooGenericExceptionCaught:GetManga.kt$GetManga$e: Exception + TooGenericExceptionCaught:GetTracks.kt$GetTracks$e: Exception + TooGenericExceptionCaught:GlobalExceptionHandler.kt$GlobalExceptionHandler.Companion$e: Exception + TooGenericExceptionCaught:HistoryRepositoryImpl.kt$HistoryRepositoryImpl$e: Exception + TooGenericExceptionCaught:HttpPageLoader.kt$HttpPageLoader$e: Throwable + TooGenericExceptionCaught:ImageSaver.kt$ImageSaver$e: Exception + TooGenericExceptionCaught:ImageUtil.kt$ImageUtil$e: Exception + TooGenericExceptionCaught:InsertTrack.kt$InsertTrack$e: Exception + TooGenericExceptionCaught:Kavita.kt$Kavita$e: Exception + TooGenericExceptionCaught:KavitaApi.kt$KavitaApi$e: Exception + TooGenericExceptionCaught:Kitsu.kt$Kitsu$e: Exception + TooGenericExceptionCaught:Komga.kt$Komga$e: Exception + TooGenericExceptionCaught:KomgaApi.kt$KomgaApi$e: Exception + TooGenericExceptionCaught:LibrarySortMode.kt$LibrarySort.Companion$e: Exception + TooGenericExceptionCaught:LibraryUpdateJob.kt$LibraryUpdateJob$e: Exception + TooGenericExceptionCaught:LibraryUpdateJob.kt$LibraryUpdateJob$e: Throwable + TooGenericExceptionCaught:LocalSource.kt$LocalSource$e: Exception + TooGenericExceptionCaught:LocalSource.kt$LocalSource$e: Throwable + TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception + TooGenericExceptionCaught:MangaCoverFetcher.kt$MangaCoverFetcher$e: Exception + TooGenericExceptionCaught:MangaCoverScreenModel.kt$MangaCoverScreenModel$e: Exception + TooGenericExceptionCaught:MangaCoverScreenModel.kt$MangaCoverScreenModel$e: Throwable + TooGenericExceptionCaught:MangaRepositoryImpl.kt$MangaRepositoryImpl$e: Exception + TooGenericExceptionCaught:MangaScreen.kt$MangaScreen$e: Exception + TooGenericExceptionCaught:MangaScreenModel.kt$MangaScreenModel$e: Throwable + TooGenericExceptionCaught:MangaUpdates.kt$MangaUpdates$e: Exception + TooGenericExceptionCaught:MangaUpdatesApi.kt$MangaUpdatesApi$e: Exception + TooGenericExceptionCaught:MetadataUpdateJob.kt$MetadataUpdateJob$e: Exception + TooGenericExceptionCaught:MetadataUpdateJob.kt$MetadataUpdateJob$e: Throwable + TooGenericExceptionCaught:MyAnimeList.kt$MyAnimeList$e: Exception + TooGenericExceptionCaught:MyAnimeList.kt$MyAnimeList$e: Throwable + TooGenericExceptionCaught:MyAnimeListApi.kt$MyAnimeListApi$e: Exception + TooGenericExceptionCaught:OkHttpExtensions.kt$<no name provided>$e: Exception + TooGenericExceptionCaught:OkHttpExtensions.kt$ex: Throwable + TooGenericExceptionCaught:OkioExtensions.kt$e: Exception + TooGenericExceptionCaught:PackageInstallerInstaller.kt$PackageInstallerInstaller$e: Exception + TooGenericExceptionCaught:Pager.kt$Pager$e: IndexOutOfBoundsException + TooGenericExceptionCaught:Pager.kt$Pager$e: NullPointerException + TooGenericExceptionCaught:PagerPageHolder.kt$PagerPageHolder$e: Throwable + TooGenericExceptionCaught:QueryPagingSource.kt$QueryPagingSource$e: Exception + TooGenericExceptionCaught:RarPageLoader.kt$RarPageLoader$e: Exception + TooGenericExceptionCaught:ReaderActivity.kt$ReaderActivity$e: ArrayIndexOutOfBoundsException + TooGenericExceptionCaught:ReaderViewModel.kt$ReaderViewModel$e: Exception + TooGenericExceptionCaught:ReaderViewModel.kt$ReaderViewModel$e: Throwable + TooGenericExceptionCaught:RefreshTracks.kt$RefreshTracks$e: Throwable + TooGenericExceptionCaught:RenameCategory.kt$RenameCategory$e: Exception + TooGenericExceptionCaught:ReorderCategory.kt$ReorderCategory$e: Exception + TooGenericExceptionCaught:RestoreBackupScreen.kt$RestoreBackupScreenModel$e: Exception + TooGenericExceptionCaught:SearchScreenModel.kt$SearchScreenModel$e: Exception + TooGenericExceptionCaught:SetMangaCategories.kt$SetMangaCategories$e: Exception + TooGenericExceptionCaught:SetReadStatus.kt$SetReadStatus$e: Exception + TooGenericExceptionCaught:SettingsAdvancedScreen.kt$SettingsAdvancedScreen$e: Throwable + TooGenericExceptionCaught:SettingsDataScreen.kt$SettingsDataScreen$e: Throwable + TooGenericExceptionCaught:SettingsTrackingScreen.kt$SettingsTrackingScreen$e: Throwable + TooGenericExceptionCaught:Shikimori.kt$Shikimori$e: Exception + TooGenericExceptionCaught:Shikimori.kt$Shikimori$e: Throwable + TooGenericExceptionCaught:ShizukuInstaller.kt$ShizukuInstaller$e: Exception + TooGenericExceptionCaught:SourcePagingSource.kt$SourcePagingSource$e: Exception + TooGenericExceptionCaught:Suwayomi.kt$Suwayomi$e: Exception + TooGenericExceptionCaught:SyncChapterProgressWithTrack.kt$SyncChapterProgressWithTrack$e: Throwable + TooGenericExceptionCaught:TrackChapter.kt$TrackChapter$e: Exception + TooGenericExceptionCaught:TrackInfoDialog.kt$TrackInfoDialogHomeScreen.Model$e: Exception + TooGenericExceptionCaught:TrackInfoDialog.kt$TrackerSearchScreen.Model$e: Throwable + TooGenericExceptionCaught:UncaughtExceptionInterceptor.kt$UncaughtExceptionInterceptor$e: Exception + TooGenericExceptionCaught:UpdateCategory.kt$UpdateCategory$e: Exception + TooGenericExceptionCaught:UpdateChapter.kt$UpdateChapter$e: Exception + TooGenericExceptionCaught:WebViewActivity.kt$WebViewActivity$e: Exception + TooGenericExceptionCaught:WebViewScreenModel.kt$WebViewScreenModel$e: Exception + TooGenericExceptionCaught:WebViewUtil.kt$WebViewUtil$e: Throwable + TooGenericExceptionCaught:WebtoonPageHolder.kt$WebtoonPageHolder$e: Throwable + TooGenericExceptionCaught:WidgetManager.kt$WidgetManager$e: Exception + TooGenericExceptionThrown:Anilist.kt$Anilist$throw Exception("$track not found on user library") + TooGenericExceptionThrown:Anilist.kt$Anilist$throw Exception("Unknown score type") + TooGenericExceptionThrown:AnilistApi.kt$AnilistApi$throw Exception("Could not find manga") + TooGenericExceptionThrown:AnilistInterceptor.kt$AnilistInterceptor$throw Exception("Not authenticated with Anilist") + TooGenericExceptionThrown:AppUpdateDownloadJob.kt$AppUpdateDownloadJob$throw Exception("Unsuccessful response") + TooGenericExceptionThrown:BangumiApi.kt$BangumiApi$throw Exception("Null Response") + TooGenericExceptionThrown:BangumiInterceptor.kt$BangumiInterceptor$throw Exception("Not authenticated with Bangumi") + TooGenericExceptionThrown:ChapterLoader.kt$ChapterLoader$throw Exception(context.stringResource(MR.strings.page_list_empty_error)) + TooGenericExceptionThrown:DownloadManager.kt$DownloadManager$throw Exception(context.stringResource(MR.strings.page_list_empty_error)) + TooGenericExceptionThrown:DownloadProvider.kt$DownloadProvider$throw Exception( context.stringResource( MR.strings.invalid_location, downloadsDir?.displayablePath ?: "", ), ) + TooGenericExceptionThrown:Downloader.kt$Downloader$throw Exception(context.stringResource(MR.strings.page_list_empty_error)) + TooGenericExceptionThrown:ExtensionLoader.kt$ExtensionLoader$throw Exception("Unknown source class type: ${obj.javaClass}") + TooGenericExceptionThrown:HttpSource.kt$HttpSource$throw RuntimeException(e) + TooGenericExceptionThrown:KitsuApi.kt$KitsuApi$throw Exception("Could not find manga") + TooGenericExceptionThrown:KitsuInterceptor.kt$KitsuInterceptor$throw Exception("Not authenticated with Kitsu") + TooGenericExceptionThrown:KitsuModels.kt$KitsuLibManga$throw Exception("Unknown status") + TooGenericExceptionThrown:KitsuModels.kt$throw Exception("Unknown status") + TooGenericExceptionThrown:LocalSource.kt$LocalSource$throw Exception(context.stringResource(MR.strings.chapter_not_found)) + TooGenericExceptionThrown:LocalSource.kt$LocalSource$throw Exception(context.stringResource(MR.strings.local_invalid_format)) + TooGenericExceptionThrown:MangaUpdates.kt$MangaUpdates$throw Throwable("Unable to login") + TooGenericExceptionThrown:ShikimoriApi.kt$ShikimoriApi$throw Exception("Too much mangas in response") + TooGenericExceptionThrown:ShikimoriInterceptor.kt$ShikimoriInterceptor$throw Exception("Not authenticated with Shikimori") + TooGenericExceptionThrown:ShizukuInstaller.kt$ShizukuInstaller$throw RuntimeException("Failed to commit install session $sessionId") + TooGenericExceptionThrown:ShizukuInstaller.kt$ShizukuInstaller$throw RuntimeException("Failed to create install session") + TooGenericExceptionThrown:ShizukuInstaller.kt$ShizukuInstaller$throw RuntimeException("Failed to write APK to session $sessionId") + TooGenericExceptionThrown:TrackInfoDialog.kt$TrackInfoDialogHomeScreen.Model$throw Exception() + TooManyFunctions:AndroidDatabaseHandler.kt$AndroidDatabaseHandler : DatabaseHandler + TooManyFunctions:Anilist.kt$Anilist : BaseTrackerDeletableTracker + TooManyFunctions:AnilistApi.kt$AnilistApi + TooManyFunctions:Bangumi.kt$Bangumi : BaseTracker + TooManyFunctions:BaseTracker.kt$BaseTracker : Tracker + TooManyFunctions:BrowseSourceScreenModel.kt$BrowseSourceScreenModel : StateScreenModel + TooManyFunctions:CategoryRepositoryImpl.kt$CategoryRepositoryImpl : CategoryRepository + TooManyFunctions:ChapterRepository.kt$ChapterRepository + TooManyFunctions:ChapterRepositoryImpl.kt$ChapterRepositoryImpl : ChapterRepository + TooManyFunctions:ChapterTransition.kt$eu.kanade.presentation.reader.ChapterTransition.kt + TooManyFunctions:DohProviders.kt$eu.kanade.tachiyomi.network.DohProviders.kt + TooManyFunctions:DownloadCache.kt$DownloadCache + TooManyFunctions:DownloadManager.kt$DownloadManager + TooManyFunctions:DownloadPreferences.kt$DownloadPreferences + TooManyFunctions:DownloadProvider.kt$DownloadProvider + TooManyFunctions:DownloadQueueScreenModel.kt$DownloadQueueScreenModel : ScreenModel + TooManyFunctions:Downloader.kt$Downloader + TooManyFunctions:EpubFile.kt$EpubFile : Closeable + TooManyFunctions:ExtensionLoader.kt$ExtensionLoader + TooManyFunctions:ExtensionManager.kt$ExtensionManager + TooManyFunctions:ExtensionsScreenModel.kt$ExtensionsScreenModel : StateScreenModel + TooManyFunctions:HttpSource.kt$HttpSource : CatalogueSource + TooManyFunctions:ImageUtil.kt$ImageUtil + TooManyFunctions:Kavita.kt$Kavita : BaseTrackerEnhancedTracker + TooManyFunctions:Kitsu.kt$Kitsu : BaseTrackerDeletableTracker + TooManyFunctions:Komga.kt$Komga : BaseTrackerEnhancedTracker + TooManyFunctions:LibraryPreferences.kt$LibraryPreferences + TooManyFunctions:LibraryScreenModel.kt$LibraryScreenModel : StateScreenModel + TooManyFunctions:LocalSource.kt$LocalSource : CatalogueSourceUnmeteredSource + TooManyFunctions:MangaCoverFetcher.kt$MangaCoverFetcher : Fetcher + TooManyFunctions:MangaRepository.kt$MangaRepository + TooManyFunctions:MangaRepositoryImpl.kt$MangaRepositoryImpl : MangaRepository + TooManyFunctions:MangaRestorer.kt$MangaRestorer + TooManyFunctions:MangaScreenModel.kt$MangaScreenModel : StateScreenModel + TooManyFunctions:MangaUpdates.kt$MangaUpdates : BaseTrackerDeletableTracker + TooManyFunctions:MyAnimeList.kt$MyAnimeList : BaseTrackerDeletableTracker + TooManyFunctions:MyAnimeListApi.kt$MyAnimeListApi + TooManyFunctions:NotificationReceiver.kt$NotificationReceiver : BroadcastReceiver + TooManyFunctions:NotificationReceiver.kt$NotificationReceiver$Companion + TooManyFunctions:PagerPageHolder.kt$PagerPageHolder : ReaderPageImageViewPositionableView + TooManyFunctions:PagerViewer.kt$PagerViewer : Viewer + TooManyFunctions:ParsedHttpSource.kt$ParsedHttpSource : HttpSource + TooManyFunctions:ReaderActivity.kt$ReaderActivity : BaseActivity + TooManyFunctions:ReaderPageImageView.kt$ReaderPageImageView : FrameLayout + TooManyFunctions:ReaderPreferences.kt$ReaderPreferences + TooManyFunctions:ReaderViewModel.kt$ReaderViewModel : ViewModel + TooManyFunctions:SettingsItems.kt$tachiyomi.presentation.core.components.SettingsItems.kt + TooManyFunctions:SharedPreferencesDataStore.kt$SharedPreferencesDataStore : PreferenceDataStore + TooManyFunctions:Shikimori.kt$Shikimori : BaseTrackerDeletableTracker + TooManyFunctions:SourcePreferences.kt$SourcePreferences + TooManyFunctions:Suwayomi.kt$Suwayomi : BaseTrackerEnhancedTracker + TooManyFunctions:Tracker.kt$Tracker + TooManyFunctions:UpdatesScreenModel.kt$UpdatesScreenModel : StateScreenModel + TooManyFunctions:WebtoonPageHolder.kt$WebtoonPageHolder : WebtoonBaseHolder + TooManyFunctions:WebtoonRecyclerView.kt$WebtoonRecyclerView : RecyclerView + TooManyFunctions:WebtoonViewer.kt$WebtoonViewer : Viewer + TopLevelPropertyNaming:App.kt$private const val ACTION_DISABLE_INCOGNITO_MODE = "tachi.action.DISABLE_INCOGNITO_MODE" + TopLevelPropertyNaming:AppBar.kt$const val SEARCH_DEBOUNCE_MILLIS = 250L + TopLevelPropertyNaming:BackupCreateJob.kt$private const val IS_AUTO_BACKUP_KEY = "is_auto_backup" // Boolean + TopLevelPropertyNaming:BackupCreateJob.kt$private const val LOCATION_URI_KEY = "location_uri" // String + TopLevelPropertyNaming:BackupCreateJob.kt$private const val OPTIONS_KEY = "options" // BooleanArray + TopLevelPropertyNaming:BackupCreateJob.kt$private const val TAG_AUTO = "BackupCreator" + TopLevelPropertyNaming:BackupCreateJob.kt$private const val TAG_MANUAL = "$TAG_AUTO:manual" + TopLevelPropertyNaming:BackupRestoreJob.kt$private const val LOCATION_URI_KEY = "location_uri" // String + TopLevelPropertyNaming:BackupRestoreJob.kt$private const val OPTIONS_KEY = "options" // BooleanArray + TopLevelPropertyNaming:BackupRestoreJob.kt$private const val SYNC_KEY = "sync" // Boolean + TopLevelPropertyNaming:ChapterCache.kt$/** Application cache version. */ private const val PARAMETER_APP_VERSION = 1 + TopLevelPropertyNaming:ChapterCache.kt$/** The maximum number of bytes this cache should use to store. */ private const val PARAMETER_CACHE_SIZE = 100L * 1024 * 1024 + TopLevelPropertyNaming:ChapterCache.kt$/** The number of values per cache entry. Must be positive. */ private const val PARAMETER_VALUE_COUNT = 1 + TopLevelPropertyNaming:ColorFilterPage.kt$private const val ALPHA_MASK: Long = 0xFF000000 + TopLevelPropertyNaming:ColorFilterPage.kt$private const val BLUE_MASK: Long = 0x000000FF + TopLevelPropertyNaming:ColorFilterPage.kt$private const val GREEN_MASK: Long = 0x0000FF00 + TopLevelPropertyNaming:ColorFilterPage.kt$private const val RED_MASK: Long = 0x00FF0000 + TopLevelPropertyNaming:ComicInfo.kt$const val COMIC_INFO_FILE = "ComicInfo.xml" + TopLevelPropertyNaming:DatabaseAdapter.kt$private const val LIST_OF_STRINGS_SEPARATOR = ", " + TopLevelPropertyNaming:DateExtensions.kt$private const val MILLISECONDS_IN_DAY = 86_400_000L + TopLevelPropertyNaming:DisplayExtensions.kt$// make sure icons on the nav rail fit private const val TABLET_UI_MIN_SCREEN_WIDTH_LANDSCAPE_DP = 600 + TopLevelPropertyNaming:DisplayExtensions.kt$// some tablets have screen width like 711dp = 1600px / 2.25 private const val TABLET_UI_MIN_SCREEN_WIDTH_PORTRAIT_DP = 700 + TopLevelPropertyNaming:DisplayExtensions.kt$private const val TABLET_UI_REQUIRED_SCREEN_WIDTH_DP = 720 + TopLevelPropertyNaming:DohProviders.kt$/** * Based on https://github.com/square/okhttp/blob/ef5d0c83f7bbd3a0c0534e7ca23cbc4ee7550f3b/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DohProviders.java */ const val PREF_DOH_CLOUDFLARE = 1 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_360 = 7 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_ADGUARD = 3 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_ALIDNS = 5 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_CONTROLD = 10 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_DNSPOD = 6 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_GOOGLE = 2 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_MULLVAD = 9 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_NJALLA = 11 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_QUAD101 = 8 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_QUAD9 = 4 + TopLevelPropertyNaming:DohProviders.kt$const val PREF_DOH_SHECAN = 12 + TopLevelPropertyNaming:Downloader.kt$// Arbitrary minimum required space to start a download: 200 MB private const val MIN_DISK_SPACE = 200L * 1024 * 1024 + TopLevelPropertyNaming:ExtensionInstallActivity.kt$private const val INSTALL_REQUEST_CODE = 500 + TopLevelPropertyNaming:GLUtil.kt$// Safe minimum default size private const val IMAGE_MAX_BITMAP_DIMENSION = 2048 + TopLevelPropertyNaming:GuidesStep.kt$const val GETTING_STARTED_URL = "https://mihon.app/docs/guides/getting-started" + TopLevelPropertyNaming:KomgaApi.kt$private const val READLIST_API = "/api/v1/readlists" + TopLevelPropertyNaming:LibraryUpdateNotifier.kt$private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 + TopLevelPropertyNaming:LibraryUpdateNotifier.kt$private const val NOTIF_ICON_SIZE = 192 + TopLevelPropertyNaming:LibraryUpdateNotifier.kt$private const val NOTIF_MAX_CHAPTERS = 5 + TopLevelPropertyNaming:LibraryUpdateNotifier.kt$private const val NOTIF_TITLE_MAX_LEN = 45 + TopLevelPropertyNaming:LocalCoverManager.kt$private const val DEFAULT_COVER_NAME = "cover.jpg" + TopLevelPropertyNaming:MainActivity.kt$// Splash screen private const val SPLASH_MIN_DURATION = 500 // ms + TopLevelPropertyNaming:MainActivity.kt$private const val SPLASH_EXIT_ANIM_DURATION = 400L // ms + TopLevelPropertyNaming:MainActivity.kt$private const val SPLASH_MAX_DURATION = 5000 // ms + TopLevelPropertyNaming:PackageInstallerInstaller.kt$private const val INSTALL_ACTION = "PackageInstallerInstaller.INSTALL_ACTION" + TopLevelPropertyNaming:ReaderNavigationOverlayView.kt$private const val FADE_DURATION = 1000L + TopLevelPropertyNaming:ReaderPageImageView.kt$private const val MAX_ZOOM_SCALE = 5F + TopLevelPropertyNaming:ShizukuInstaller.kt$private const val SHIZUKU_PERMISSION_REQUEST_CODE = 14045 + TopLevelPropertyNaming:StorageManager.kt$private const val AUTOMATIC_BACKUPS_PATH = "autobackup" + TopLevelPropertyNaming:StorageManager.kt$private const val DOWNLOADS_PATH = "downloads" + TopLevelPropertyNaming:StorageManager.kt$private const val LOCAL_SOURCE_PATH = "local" + TopLevelPropertyNaming:SuwayomiApi.kt$private const val ADDRESS_DEFAULT = "" + TopLevelPropertyNaming:SuwayomiApi.kt$private const val ADDRESS_TITLE = "Server URL Address" + TopLevelPropertyNaming:SuwayomiApi.kt$private const val LOGIN_DEFAULT = "" + TopLevelPropertyNaming:SuwayomiApi.kt$private const val LOGIN_TITLE = "Login (Basic Auth)" + TopLevelPropertyNaming:SuwayomiApi.kt$private const val PASSWORD_DEFAULT = "" + TopLevelPropertyNaming:SuwayomiApi.kt$private const val PASSWORD_TITLE = "Password (Basic Auth)" + TopLevelPropertyNaming:WebtoonAdapter.kt$/** * View holder type of a chapter page view. */ private const val PAGE_VIEW = 0 + TopLevelPropertyNaming:WebtoonAdapter.kt$/** * View holder type of a chapter transition view. */ private const val TRANSITION_VIEW = 1 + TopLevelPropertyNaming:WebtoonRecyclerView.kt$private const val ANIMATOR_DURATION_TIME = 200 + TopLevelPropertyNaming:WebtoonRecyclerView.kt$private const val DEFAULT_RATE = 1f + TopLevelPropertyNaming:WebtoonRecyclerView.kt$private const val MAX_SCALE_RATE = 3f + TopLevelPropertyNaming:WebtoonRecyclerView.kt$private const val MIN_RATE = 0.5f + UnstableCollections:CategoryScreen.kt$List<Category> + UnstableCollections:Commons.kt$List<Category> + UnstableCollections:Commons.kt$Set<String> + UnstableCollections:GlobalSearchCardRow.kt$List<Manga> + UnstableCollections:GlobalSearchScreen.kt$Map<CatalogueSource, SearchItemResult> + UnstableCollections:HistoryScreen.kt$List<HistoryUiModel> + UnstableCollections:LibraryComfortableGrid.kt$List<LibraryItem> + UnstableCollections:LibraryComfortableGrid.kt$List<LibraryManga> + UnstableCollections:LibraryCompactGrid.kt$List<LibraryItem> + UnstableCollections:LibraryCompactGrid.kt$List<LibraryManga> + UnstableCollections:LibraryContent.kt$List<Category> + UnstableCollections:LibraryContent.kt$List<LibraryManga> + UnstableCollections:LibraryList.kt$List<LibraryItem> + UnstableCollections:LibraryList.kt$List<LibraryManga> + UnstableCollections:LibraryPager.kt$List<LibraryManga> + UnstableCollections:LibraryTabs.kt$List<Category> + UnstableCollections:ListPreferenceWidget.kt$Map<out T, String> + UnstableCollections:MangaScreen.kt$List<ChapterList.Item> + UnstableCollections:MultiSelectListPreferenceWidget.kt$Set<String> + UnstableCollections:PreferenceScreen.kt$List<Preference> + UnstableCollections:ScanlatorFilterDialog.kt$Set<String> + UnstableCollections:SettingsDownloadScreen.kt$SettingsDownloadScreen$List<Category> + UnstableCollections:SettingsLibraryScreen.kt$SettingsLibraryScreen$List<Category> + UnstableCollections:TrackInfoDialogHome.kt$List<TrackItem> + UnstableCollections:TrackInfoDialogSelector.kt$Map<Long, StringResource?> + UnstableCollections:TriStateListDialog.kt$List<T> + UnstableCollections:UpdatesScreen.kt$List<UpdatesItem> + UnstableCollections:WebViewScreenContent.kt$Map<String, String> + UnusedParameter:UpdatesRepositoryImpl.kt$UpdatesRepositoryImpl$dateUpload: Long + UnusedPrivateMember:AppThemePreferenceWidget.kt$@PreviewLightDark @Composable private fun AppThemesListPreview() + UnusedPrivateMember:ChapterTransition.kt$@PreviewLightDark @Composable private fun TransitionTextLongTitlePreview() + UnusedPrivateMember:ChapterTransition.kt$@PreviewLightDark @Composable private fun TransitionTextNoNextPreview() + UnusedPrivateMember:ChapterTransition.kt$@PreviewLightDark @Composable private fun TransitionTextNoPreviousPreview() + UnusedPrivateMember:ChapterTransition.kt$@PreviewLightDark @Composable private fun TransitionTextPreview() + UnusedPrivateMember:ChapterTransition.kt$@PreviewLightDark @Composable private fun TransitionTextWithGapPreview() + UnusedPrivateMember:CrashScreen.kt$@PreviewLightDark @Composable private fun CrashScreenPreview() + UnusedPrivateMember:EmptyScreen.kt$@PreviewLightDark @Composable private fun NoActionPreview() + UnusedPrivateMember:EmptyScreen.kt$@PreviewLightDark @Composable private fun WithActionPreview() + UnusedPrivateMember:GuidesStep.kt$@PreviewLightDark @Composable private fun GuidesStepPreview() + UnusedPrivateMember:HistoryDialogs.kt$@PreviewLightDark @Composable private fun HistoryDeleteDialogPreview() + UnusedPrivateMember:HistoryItem.kt$@PreviewLightDark @Composable private fun HistoryItemPreviews( @PreviewParameter(HistoryWithRelationsProvider::class) historyWithRelations: HistoryWithRelations, ) + UnusedPrivateMember:InfoScreen.kt$@PreviewLightDark @Composable private fun InfoScaffoldPreview() + UnusedPrivateMember:InfoWidget.kt$@PreviewLightDark @Composable private fun InfoWidgetPreview() + UnusedPrivateMember:LibraryBadges.kt$@PreviewLightDark @Composable private fun BadgePreview() + UnusedPrivateMember:MissingChapterCountListItem.kt$@PreviewLightDark @Composable private fun Preview() + UnusedPrivateMember:ModeSelectionDialog.kt$@PreviewLightDark @Composable private fun Preview() + UnusedPrivateMember:NewUpdateScreen.kt$@PreviewLightDark @Composable private fun NewUpdateScreenPreview() + UnusedPrivateMember:OrientationSelectDialog.kt$@PreviewLightDark @Composable private fun DialogContentPreview() + UnusedPrivateMember:PageIndicatorText.kt$@PreviewLightDark @Composable private fun PageIndicatorTextPreview() + UnusedPrivateMember:PermissionStep.kt$PermissionStep$@Composable private fun SectionHeader( text: String, modifier: Modifier = Modifier, ) + UnusedPrivateMember:ReadingModeSelectDialog.kt$@PreviewLightDark @Composable private fun DialogContentPreview() + UnusedPrivateMember:SwitchPreferenceWidget.kt$@PreviewLightDark @Composable private fun SwitchPreferenceWidgetPreview() + UnusedPrivateMember:TextPreferenceWidget.kt$@PreviewLightDark @Composable private fun TextPreferenceWidgetPreview() + UnusedPrivateMember:TrackInfoDialogHome.kt$@PreviewLightDark @Composable private fun TrackInfoDialogHomePreviews( @PreviewParameter(TrackInfoDialogHomePreviewProvider::class) content: @Composable () -> Unit, ) + UnusedPrivateMember:TrackInfoDialogSelector.kt$@PreviewLightDark @Composable private fun TrackStatusSelectorPreviews() + UnusedPrivateMember:TrackLogoIcon.kt$@PreviewLightDark @Composable private fun TrackLogoIconPreviews( @PreviewParameter(TrackLogoIconPreviewProvider::class) tracker: Tracker, ) + UnusedPrivateMember:TrackerSearch.kt$@PreviewLightDark @Composable private fun TrackerSearchPreviews( @PreviewParameter(TrackerSearchPreviewProvider::class) content: @Composable () -> Unit, ) + UnusedPrivateProperty:JavaScriptEngine.kt$JavaScriptEngine$context: Context + UnusedPrivateProperty:LibraryUpdateJob.kt$LibraryUpdateJob.Companion$private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 + UnusedPrivateProperty:MainActivity.kt$MainActivity$private val sourcePreferences: SourcePreferences by injectLazy() + UnusedPrivateProperty:MainActivity.kt$MainActivity$private val uiPreferences: UiPreferences by injectLazy() + UnusedPrivateProperty:MetadataUpdateJob.kt$MetadataUpdateJob.Companion$private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 + UseCheckOrError:CatalogueSource.kt$CatalogueSource$throw IllegalStateException("Not used") + UseCheckOrError:MangaScreenModel.kt$MangaScreenModel$throw IllegalStateException() + UseCheckOrError:PackageInstallerInstaller.kt$PackageInstallerInstaller$throw IllegalStateException() + UseCheckOrError:ReadingMode.kt$ReadingMode.Companion$throw IllegalStateException("Preference value must be resolved: $preference") + UseCheckOrError:ShizukuInstaller.kt$ShizukuInstaller$throw IllegalStateException() + UseCheckOrError:Source.kt$Source$throw IllegalStateException("Not used") + UseCheckOrError:SourceFilterDialog.kt$throw IllegalStateException("Unknown TriState state: $this") + UseCheckOrError:TransactionContext.kt$TransactionElement$throw IllegalStateException("Transaction was never started or was already released") + VariableNaming:Chapter.kt$Chapter$var date_fetch: Long + VariableNaming:Chapter.kt$Chapter$var last_modified: Long + VariableNaming:Chapter.kt$Chapter$var last_page_read: Int + VariableNaming:Chapter.kt$Chapter$var manga_id: Long? + VariableNaming:Chapter.kt$Chapter$var source_order: Int + VariableNaming:LocalSource.kt$LocalSource$private val LATEST_FILTERS = FilterList(OrderBy.Latest(context)) + VariableNaming:LocalSource.kt$LocalSource$private val POPULAR_FILTERS = FilterList(OrderBy.Popular(context)) + VariableNaming:SChapter.kt$SChapter$var chapter_number: Float + VariableNaming:SChapter.kt$SChapter$var date_upload: Long + VariableNaming:SManga.kt$SManga$var thumbnail_url: String? + VariableNaming:SManga.kt$SManga$var update_strategy: UpdateStrategy + VariableNaming:Track.kt$Track$var finished_reading_date: Long + VariableNaming:Track.kt$Track$var last_chapter_read: Double + VariableNaming:Track.kt$Track$var library_id: Long? + VariableNaming:Track.kt$Track$var manga_id: Long + VariableNaming:Track.kt$Track$var remote_id: Long + VariableNaming:Track.kt$Track$var started_reading_date: Long + VariableNaming:Track.kt$Track$var total_chapters: Long + VariableNaming:Track.kt$Track$var tracker_id: Long + VariableNaming:Track.kt$Track$var tracking_url: String + VariableNaming:TrackSearch.kt$TrackSearch$var cover_url: String = "" + VariableNaming:TrackSearch.kt$TrackSearch$var publishing_status: String = "" + VariableNaming:TrackSearch.kt$TrackSearch$var publishing_type: String = "" + VariableNaming:TrackSearch.kt$TrackSearch$var start_date: String = "" + + diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml new file mode 100644 index 0000000000..112fcf3f08 --- /dev/null +++ b/config/detekt/detekt.yml @@ -0,0 +1,19 @@ +naming: + FunctionNaming: + functionPattern: '[a-z][a-zA-Z0-9]*' + ignoreAnnotated: [ 'Composable' ] + TopLevelPropertyNaming: + constantPattern: '[A-Z][A-Za-z0-9]*' + +complexity: + LongParameterList: + functionThreshold: 6 + constructorThreshold: 7 + ignoreDefaultParameters: true + +style: + MagicNumber: + ignorePropertyDeclaration: true + ignoreCompanionObjectPropertyDeclaration: true + UnusedPrivateMember: + ignoreAnnotated: [ 'Preview' ] diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml index 86338364ac..dd963d0d6b 100644 --- a/gradle/compose.versions.toml +++ b/gradle/compose.versions.toml @@ -23,5 +23,3 @@ glance = "androidx.glance:glance-appwidget:1.0.0" accompanist-webview = { module = "com.google.accompanist:accompanist-webview", version.ref = "accompanist" } accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } - -lintchecks = { module = "com.slack.lint.compose:compose-lint-checks", version = "1.2.0" } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 479c3b44a7..576d08176b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,8 @@ shizuku_version = "12.2.0" sqldelight = "2.0.0" sqlite = "2.4.0" voyager = "1.0.0" +detekt = "1.23.1" +detektCompose = "0.3.11" [libraries] desugar = "com.android.tools:desugar_jdk_libs:2.0.4" @@ -93,7 +95,9 @@ voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", vers voyager-tab-navigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" } voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } -ktlint = "org.jlleitschuh.gradle:ktlint-gradle:12.0.3" +detekt-gradlePlugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } +detekt-rules-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } +detekt-rules-compose = { module = "io.nlopez.compose.rules:detekt", version.ref = "detektCompose" } [bundles] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] diff --git a/presentation-core/build.gradle.kts b/presentation-core/build.gradle.kts index f36ca3857b..59a97d0fec 100644 --- a/presentation-core/build.gradle.kts +++ b/presentation-core/build.gradle.kts @@ -36,7 +36,6 @@ dependencies { debugImplementation(compose.ui.tooling) implementation(compose.ui.tooling.preview) implementation(compose.ui.util) - lintChecks(compose.lintchecks) implementation(kotlinx.immutables) } diff --git a/presentation-widget/build.gradle.kts b/presentation-widget/build.gradle.kts index d3e56e3734..21a0a4bbdf 100644 --- a/presentation-widget/build.gradle.kts +++ b/presentation-widget/build.gradle.kts @@ -27,7 +27,6 @@ dependencies { api(projects.i18n) implementation(compose.glance) - lintChecks(compose.lintchecks) implementation(kotlinx.immutables)