diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt index 1feb53737..51b21e2ce 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt @@ -11,8 +11,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.AlertDialogFragment -import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener import org.koitharu.kotatsu.databinding.DialogOnboardBinding +import org.koitharu.kotatsu.settings.onboard.adapter.SourceLocaleListener import org.koitharu.kotatsu.settings.onboard.adapter.SourceLocalesAdapter import org.koitharu.kotatsu.settings.onboard.model.SourceLocale import org.koitharu.kotatsu.utils.ext.showAllowStateLoss @@ -21,8 +21,7 @@ import org.koitharu.kotatsu.utils.ext.withArgs @AndroidEntryPoint class OnboardDialogFragment : AlertDialogFragment(), - OnListItemClickListener, - DialogInterface.OnClickListener { + DialogInterface.OnClickListener, SourceLocaleListener { private val viewModel by viewModels() private var isWelcome: Boolean = false @@ -63,8 +62,8 @@ class OnboardDialogFragment : } } - override fun onItemClick(item: SourceLocale, view: View) { - viewModel.setItemChecked(item.key, !item.isChecked) + override fun onItemCheckedChanged(item: SourceLocale, isChecked: Boolean) { + viewModel.setItemChecked(item.key, isChecked) } override fun onClick(dialog: DialogInterface?, which: Int) { diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt index 77ba1aaf5..1672657fd 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardViewModel.kt @@ -1,11 +1,8 @@ package org.koitharu.kotatsu.settings.onboard -import androidx.collection.ArraySet import androidx.core.os.LocaleListCompat import androidx.lifecycle.MutableLiveData import dagger.hilt.android.lifecycle.HiltViewModel -import java.util.* -import javax.inject.Inject import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.prefs.AppSettings @@ -15,6 +12,8 @@ import org.koitharu.kotatsu.parsers.util.toTitleCase import org.koitharu.kotatsu.settings.onboard.model.SourceLocale import org.koitharu.kotatsu.utils.ext.map import org.koitharu.kotatsu.utils.ext.mapToSet +import java.util.Locale +import javax.inject.Inject @HiltViewModel class OnboardViewModel @Inject constructor( @@ -23,9 +22,9 @@ class OnboardViewModel @Inject constructor( private val allSources = settings.remoteMangaSources - private val locales = allSources.mapTo(ArraySet()) { it.locale } + private val locales = allSources.groupBy { it.locale } - private val selectedLocales = locales.toMutableSet() + private val selectedLocales = locales.keys.toMutableSet() val list = MutableLiveData?>() @@ -64,13 +63,14 @@ class OnboardViewModel @Inject constructor( } private fun rebuildList() { - list.value = locales.map { key -> + list.value = locales.map { (key, srcs) -> val locale = if (key != null) { Locale(key) } else null SourceLocale( key = key, title = locale?.getDisplayLanguage(locale)?.toTitleCase(locale), + summary = srcs.joinToString { it.title }, isChecked = key in selectedLocales, ) }.sortedWith(SourceLocaleComparator()) @@ -87,11 +87,12 @@ class OnboardViewModel @Inject constructor( a?.key == null -> 1 b?.key == null -> -1 else -> { - val index = deviceLocales.indexOf(a.key) - if (index == -1) { + val indexA = deviceLocales.indexOf(a.key) + val indexB = deviceLocales.indexOf(b.key) + if (indexA == -1 && indexB == -1) { compareValues(a.title, b.title) } else { - -2 - index + -2 - (indexA - indexB) } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt index d46bafd3d..8357e3eff 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt @@ -2,22 +2,23 @@ package org.koitharu.kotatsu.settings.onboard.adapter import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import org.koitharu.kotatsu.R -import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener import org.koitharu.kotatsu.databinding.ItemSourceLocaleBinding import org.koitharu.kotatsu.settings.onboard.model.SourceLocale +import org.koitharu.kotatsu.utils.ext.textAndVisible fun sourceLocaleAD( - clickListener: OnListItemClickListener + listener: SourceLocaleListener, ) = adapterDelegateViewBinding( - { inflater, parent -> ItemSourceLocaleBinding.inflate(inflater, parent, false) } + { inflater, parent -> ItemSourceLocaleBinding.inflate(inflater, parent, false) }, ) { - binding.root.setOnClickListener { - clickListener.onItemClick(item, it) + binding.switchToggle.setOnCheckedChangeListener { _, isChecked -> + listener.onItemCheckedChanged(item, isChecked) } bind { - binding.root.text = item.title ?: getString(R.string.other) - binding.root.isChecked = item.isChecked + binding.textViewTitle.text = item.title ?: getString(R.string.different_languages) + binding.textViewDescription.textAndVisible = item.summary + binding.switchToggle.isChecked = item.isChecked } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleListener.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleListener.kt new file mode 100644 index 000000000..087849a0c --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleListener.kt @@ -0,0 +1,8 @@ +package org.koitharu.kotatsu.settings.onboard.adapter + +import org.koitharu.kotatsu.settings.onboard.model.SourceLocale + +interface SourceLocaleListener { + + fun onItemCheckedChanged(item: SourceLocale, isChecked: Boolean) +} diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocalesAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocalesAdapter.kt index 0d4112f31..0bfac9dda 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocalesAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocalesAdapter.kt @@ -2,15 +2,14 @@ package org.koitharu.kotatsu.settings.onboard.adapter import androidx.recyclerview.widget.DiffUtil import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter -import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener import org.koitharu.kotatsu.settings.onboard.model.SourceLocale class SourceLocalesAdapter( - clickListener: OnListItemClickListener, + listener: SourceLocaleListener, ) : AsyncListDifferDelegationAdapter(DiffCallback()) { init { - delegatesManager.addDelegate(sourceLocaleAD(clickListener)) + delegatesManager.addDelegate(sourceLocaleAD(listener)) } private class DiffCallback : DiffUtil.ItemCallback() { @@ -25,4 +24,4 @@ class SourceLocalesAdapter( newItem: SourceLocale, ): Boolean = oldItem == newItem } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/model/SourceLocale.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/model/SourceLocale.kt index c2bce3718..e4f8aefa8 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/model/SourceLocale.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/model/SourceLocale.kt @@ -1,10 +1,11 @@ package org.koitharu.kotatsu.settings.onboard.model -import java.util.* +import java.util.Locale data class SourceLocale( val key: String?, val title: String?, + val summary: String?, val isChecked: Boolean, ) : Comparable { diff --git a/app/src/main/res/layout/item_source_locale.xml b/app/src/main/res/layout/item_source_locale.xml index 86297669a..6d99d5781 100644 --- a/app/src/main/res/layout/item_source_locale.xml +++ b/app/src/main/res/layout/item_source_locale.xml @@ -1,15 +1,47 @@ - \ No newline at end of file + android:minHeight="?android:listPreferredItemHeightSmall" + android:orientation="horizontal"> + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fca55785f..c074709fc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -392,4 +392,5 @@ Show page switching slider Webtoon zoom Allow zoom in/zoom out gesture in webtoon mode (beta) + Different languages