diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationBottomSheetDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationBottomSheetDialog.kt deleted file mode 100644 index f8643f72e..000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationBottomSheetDialog.kt +++ /dev/null @@ -1,201 +0,0 @@ -package eu.kanade.tachiyomi.ui.browse.migration.advanced.design - -import android.view.LayoutInflater -import android.widget.CompoundButton -import android.widget.RadioButton -import android.widget.RadioGroup -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.State -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState -import androidx.compose.ui.Modifier -import androidx.compose.ui.viewinterop.AndroidView -import androidx.core.view.isVisible -import eu.kanade.domain.source.service.SourcePreferences -import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.presentation.theme.colorscheme.AndroidViewColorScheme -import eu.kanade.tachiyomi.databinding.MigrationBottomSheetBinding -import mihon.domain.migration.models.MigrationFlag -import tachiyomi.core.common.i18n.stringResource -import tachiyomi.core.common.preference.Preference -import tachiyomi.core.common.util.lang.toLong -import tachiyomi.i18n.MR -import uy.kohesive.injekt.injectLazy - -@Composable -fun MigrationBottomSheetDialog( - onDismissRequest: () -> Unit, - onStartMigration: (extraParam: String?) -> Unit, - // KMK --> - fullSettings: Boolean = true, - // KMK <-- -) { - val startMigration = rememberUpdatedState(onStartMigration) - val state = remember { - MigrationBottomSheetDialogState( - startMigration, - // KMK --> - fullSettings, - // KMK <-- - ) - } - - // KMK --> - val colorScheme = AndroidViewColorScheme(MaterialTheme.colorScheme) - // KMK <-- - - AdaptiveSheet(onDismissRequest = onDismissRequest) { - // Wrap AndroidView in a scrollable Column using verticalScroll - Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) - .fillMaxWidth(), - ) { - AndroidView( - factory = { factoryContext -> - val binding = MigrationBottomSheetBinding.inflate(LayoutInflater.from(factoryContext)) - state.initPreferences(binding) - // KMK --> - with(binding) { - migrateBtn.setBackgroundColor(colorScheme.primary) - dataLabel.setTextColor(colorScheme.primary) - optionsLabel.setTextColor(colorScheme.primary) - - listOf( - migChapters, - migCategories, - migTracking, - migCustomCover, - migExtra, - migDeleteDownloaded, - radioButton, - radioButton2, - ).forEach { - it.buttonTintList = colorScheme.checkboxTintList - } - - listOf( - useSmartSearch, - extraSearchParam, - hideNotFoundManga, - onlyShowUpdates, - ).forEach { - it.trackTintList = colorScheme.trackTintList - it.thumbTintList = colorScheme.thumbTintList - } - - colorScheme.setTextInputLayoutColor(extraSearchParamInputLayout) - colorScheme.setEditTextColor(extraSearchParamText) - } - // KMK <-- - binding.root - }, - ) - } - } -} - -class MigrationBottomSheetDialogState( - private val onStartMigration: State<(extraParam: String?) -> Unit>, - // KMK --> - private val fullSettings: Boolean = true, - // KMK <-- -) { - private val preferences: SourcePreferences by injectLazy() - - /** - * Init general reader preferences. - */ - fun initPreferences(binding: MigrationBottomSheetBinding) { - val flags = preferences.migrationFlags().get() - - with(binding) { - migChapters.isChecked = MigrationFlag.CHAPTER in flags - migCategories.isChecked = MigrationFlag.CATEGORY in flags - migTracking.isChecked = MigrationFlag.TRACK in flags - migCustomCover.isChecked = MigrationFlag.CUSTOM_COVER in flags - migExtra.isChecked = MigrationFlag.EXTRA in flags - migDeleteDownloaded.isChecked = MigrationFlag.REMOVE_DOWNLOAD in flags - - listOf( - migChapters, - migCategories, - migTracking, - migCustomCover, - migExtra, - migDeleteDownloaded, - ).forEach { checkBox -> - checkBox.setOnCheckedChangeListener { _, _ -> setFlags(binding) } - } - - useSmartSearch.bindToPreference(preferences.migrationDeepSearchMode()) - extraSearchParamInputLayout.isVisible = false - extraSearchParam.setOnCheckedChangeListener { _, isChecked -> - extraSearchParamInputLayout.isVisible = isChecked - } - sourceGroup.bindToPreference(preferences.migrationPrioritizeByChapters()) - - hideNotFoundManga.isChecked = preferences.migrationHideUnmatched().get() - onlyShowUpdates.isChecked = preferences.migrationHideWithoutUpdates().get() - - migrateBtn.setOnClickListener { - preferences.migrationHideUnmatched().set(hideNotFoundManga.isChecked) - preferences.migrationHideWithoutUpdates().set(onlyShowUpdates.isChecked) - onStartMigration.value( - if (useSmartSearch.isChecked && !extraSearchParamText.text.isNullOrBlank()) { - extraSearchParamText.text.toString() - } else { - null - }, - ) - } - - // KMK --> - if (!fullSettings) { - useSmartSearch.isVisible = false - extraSearchParam.isVisible = false - extraSearchParamInputLayout.isVisible = false - sourceGroup.isVisible = false - migrateBtn.text = root.context.stringResource(MR.strings.action_save) - } - // KMK <-- - } - } - - private fun setFlags(binding: MigrationBottomSheetBinding) { - val flags = mutableSetOf() - with(binding) { - if (migChapters.isChecked) flags.add(MigrationFlag.CHAPTER) - if (migCategories.isChecked) flags.add(MigrationFlag.CATEGORY) - if (migTracking.isChecked) flags.add(MigrationFlag.TRACK) - if (migCustomCover.isChecked) flags.add(MigrationFlag.CUSTOM_COVER) - if (migExtra.isChecked) flags.add(MigrationFlag.EXTRA) - if (migDeleteDownloaded.isChecked) flags.add(MigrationFlag.REMOVE_DOWNLOAD) - } - preferences.migrationFlags().set(flags) - } - - /** - * Binds a checkbox or switch view with a boolean preference. - */ - private fun CompoundButton.bindToPreference(pref: Preference) { - isChecked = pref.get() - setOnCheckedChangeListener { _, isChecked -> pref.set(isChecked) } - } - - /** - * Binds a radio group with a boolean preference. - */ - private fun RadioGroup.bindToPreference(pref: Preference) { - (getChildAt(pref.get().toLong().toInt()) as RadioButton).isChecked = true - setOnCheckedChangeListener { _, value -> - val index = indexOfChild(findViewById(value)) - pref.set(index == 1) - } - } -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreen.kt index 9c4bad310..421d15582 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreen.kt @@ -14,7 +14,6 @@ import eu.kanade.presentation.browse.components.MigrationExitDialog import eu.kanade.presentation.browse.components.MigrationMangaDialog import eu.kanade.presentation.browse.components.MigrationProgressDialog import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.ui.browse.migration.advanced.design.MigrationBottomSheetDialog import eu.kanade.tachiyomi.ui.browse.migration.search.MigrateSearchScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.util.system.toast @@ -22,6 +21,7 @@ import exh.util.overEq import exh.util.underEq import kotlinx.collections.immutable.persistentListOf import mihon.feature.migration.config.MigrationConfigScreen +import mihon.feature.migration.config.MigrationConfigScreenSheet import tachiyomi.core.common.i18n.pluralStringResource import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.i18n.sy.SYMR @@ -142,7 +142,8 @@ class MigrationListScreen(private val config: MigrationProcedureConfig) : Screen } // KMK --> MigrationListScreenModel.Dialog.MigrationOptionsDialog -> { - MigrationBottomSheetDialog( + MigrationConfigScreenSheet( + preferences = screenModel.preferences, onDismissRequest = onDismissRequest, onStartMigration = { _ -> onDismissRequest() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreenModel.kt index 686518b2a..e98056d02 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreenModel.kt @@ -49,7 +49,7 @@ import java.util.concurrent.atomic.AtomicInteger class MigrationListScreenModel( private val config: MigrationProcedureConfig, - private val preferences: SourcePreferences = Injekt.get(), + val preferences: SourcePreferences = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), diff --git a/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt b/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt index 74918151e..3f3000e3c 100644 --- a/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt +++ b/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt @@ -51,6 +51,9 @@ fun MigrationConfigScreenSheet( preferences: SourcePreferences, onDismissRequest: () -> Unit, onStartMigration: (extraSearchQuery: String?) -> Unit, + // KMK --> + fullSettings: Boolean = true, + // KMK <-- ) { var extraSearchQuery by rememberSaveable { mutableStateOf("") } val migrationFlags by preferences.migrationFlags().collectAsState() @@ -124,21 +127,25 @@ fun MigrationConfigScreenSheet( }, ) MigrationSheetDividerItem() - OutlinedTextField( - value = extraSearchQuery, - onValueChange = { extraSearchQuery = it }, - label = { Text(stringResource(MR.strings.migrationConfigScreen_additionalSearchQueryLabel)) }, - supportingText = { - Text(stringResource(MR.strings.migrationConfigScreen_additionalSearchQuerySupportingText)) - }, - singleLine = true, - modifier = Modifier - .fillMaxWidth() - .padding( - horizontal = MaterialTheme.padding.medium, - vertical = MaterialTheme.padding.extraSmall, - ), - ) + // KMK --> + if (fullSettings) { + // KMK <-- + OutlinedTextField( + value = extraSearchQuery, + onValueChange = { extraSearchQuery = it }, + label = { Text(stringResource(MR.strings.migrationConfigScreen_additionalSearchQueryLabel)) }, + supportingText = { + Text(stringResource(MR.strings.migrationConfigScreen_additionalSearchQuerySupportingText)) + }, + singleLine = true, + modifier = Modifier + .fillMaxWidth() + .padding( + horizontal = MaterialTheme.padding.medium, + vertical = MaterialTheme.padding.extraSmall, + ), + ) + } MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_hideUnmatchedTitle), subtitle = null, @@ -149,18 +156,22 @@ fun MigrationConfigScreenSheet( subtitle = stringResource(MR.strings.migrationConfigScreen_hideWithoutUpdatesSubtitle), preference = preferences.migrationHideWithoutUpdates(), ) - MigrationSheetDividerItem() - MigrationSheetWarningItem(stringResource(MR.strings.migrationConfigScreen_enhancedOptionsWarning)) - MigrationSheetSwitchItem( - title = stringResource(MR.strings.migrationConfigScreen_deepSearchModeTitle), - subtitle = stringResource(MR.strings.migrationConfigScreen_deepSearchModeSubtitle), - preference = preferences.migrationDeepSearchMode(), - ) - MigrationSheetSwitchItem( - title = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersTitle), - subtitle = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersSubtitle), - preference = preferences.migrationPrioritizeByChapters(), - ) + // KMK --> + if (fullSettings) { + // KMK <-- + MigrationSheetDividerItem() + MigrationSheetWarningItem(stringResource(MR.strings.migrationConfigScreen_enhancedOptionsWarning)) + MigrationSheetSwitchItem( + title = stringResource(MR.strings.migrationConfigScreen_deepSearchModeTitle), + subtitle = stringResource(MR.strings.migrationConfigScreen_deepSearchModeSubtitle), + preference = preferences.migrationDeepSearchMode(), + ) + MigrationSheetSwitchItem( + title = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersTitle), + subtitle = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersSubtitle), + preference = preferences.migrationPrioritizeByChapters(), + ) + } } HorizontalDivider() Button( @@ -175,7 +186,17 @@ fun MigrationConfigScreenSheet( vertical = MaterialTheme.padding.small, ), ) { - Text(text = stringResource(MR.strings.migrationConfigScreen_continueButtonText)) + Text( + text = stringResource( + // KMK --> + if (!fullSettings) { + MR.strings.action_save + } else { + // KMK <-- + MR.strings.migrationConfigScreen_continueButtonText + }, + ), + ) } } } diff --git a/app/src/main/res/layout/migration_bottom_sheet.xml b/app/src/main/res/layout/migration_bottom_sheet.xml deleted file mode 100644 index e89cfb997..000000000 --- a/app/src/main/res/layout/migration_bottom_sheet.xml +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -