diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt index b29a89808..864a14179 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/RemoteMangaRepository.kt @@ -5,6 +5,7 @@ import org.koitharu.kotatsu.core.model.MangaPage import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.model.MangaTag import org.koitharu.kotatsu.core.model.SortOrder +import org.koitharu.kotatsu.core.prefs.SourceSettings abstract class RemoteMangaRepository( protected val loaderContext: MangaLoaderContext @@ -24,7 +25,9 @@ abstract class RemoteMangaRepository( override suspend fun getTags(): Set = emptySet() - abstract fun onCreatePreferences(): Set + open fun onCreatePreferences(map: MutableMap) { + map[SourceSettings.KEY_DOMAIN] = defaultDomain + } protected fun getDomain() = conf.getDomain(defaultDomain) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/ChanRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/ChanRepository.kt index 9bba6011c..dc293ff87 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/ChanRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/ChanRepository.kt @@ -1,11 +1,9 @@ package org.koitharu.kotatsu.core.parser.site -import androidx.collection.arraySetOf import org.koitharu.kotatsu.base.domain.MangaLoaderContext import org.koitharu.kotatsu.core.exceptions.ParseException import org.koitharu.kotatsu.core.model.* import org.koitharu.kotatsu.core.parser.RemoteMangaRepository -import org.koitharu.kotatsu.core.prefs.SourceSettings import org.koitharu.kotatsu.utils.ext.* import java.util.* @@ -136,8 +134,6 @@ abstract class ChanRepository(loaderContext: MangaLoaderContext) : RemoteMangaRe } } - override fun onCreatePreferences() = arraySetOf(SourceSettings.KEY_DOMAIN) - private fun getSortKey(sortOrder: SortOrder?) = when (sortOrder ?: sortOrders.minByOrNull { it.ordinal }) { SortOrder.ALPHABETICAL -> "catalog" diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/DesuMeRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/DesuMeRepository.kt index fadf2af99..5a3f81af1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/DesuMeRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/DesuMeRepository.kt @@ -1,11 +1,9 @@ package org.koitharu.kotatsu.core.parser.site -import androidx.collection.arraySetOf import org.koitharu.kotatsu.base.domain.MangaLoaderContext import org.koitharu.kotatsu.core.exceptions.ParseException import org.koitharu.kotatsu.core.model.* import org.koitharu.kotatsu.core.parser.RemoteMangaRepository -import org.koitharu.kotatsu.core.prefs.SourceSettings import org.koitharu.kotatsu.utils.ext.* import java.util.* import kotlin.collections.ArrayList @@ -127,8 +125,6 @@ class DesuMeRepository(loaderContext: MangaLoaderContext) : RemoteMangaRepositor } } - override fun onCreatePreferences() = arraySetOf(SourceSettings.KEY_DOMAIN) - private fun getSortKey(sortOrder: SortOrder?) = when (sortOrder) { SortOrder.ALPHABETICAL -> "name" diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt index d293172d3..cc497999b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt @@ -173,8 +173,6 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) : } } - override fun onCreatePreferences() = arraySetOf(SourceSettings.KEY_DOMAIN) - private fun getSortKey(sortOrder: SortOrder?) = when (sortOrder ?: sortOrders.minByOrNull { it.ordinal }) { SortOrder.ALPHABETICAL -> "name" diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaLibRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaLibRepository.kt index bb5aedb96..27541b2f1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaLibRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaLibRepository.kt @@ -72,8 +72,6 @@ open class MangaLibRepository(loaderContext: MangaLoaderContext) : } } - override fun onCreatePreferences() = arraySetOf(SourceSettings.KEY_DOMAIN) - override suspend fun getDetails(manga: Manga): Manga { val fullUrl = manga.url.withDomain() val doc = loaderContext.httpGet("$fullUrl?section=info").parseHtml() diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt index 5177f60bd..4f7df80bd 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.core.parser.site -import androidx.collection.arraySetOf import org.intellij.lang.annotations.Language import org.koitharu.kotatsu.base.domain.MangaLoaderContext import org.koitharu.kotatsu.core.exceptions.ParseException @@ -160,11 +159,10 @@ class MangaTownRepository(loaderContext: MangaLoaderContext) : } } - - override fun onCreatePreferences() = arraySetOf( - SourceSettings.KEY_DOMAIN, - SourceSettings.KEY_USE_SSL - ) + override fun onCreatePreferences(map: MutableMap) { + super.onCreatePreferences(map) + map[SourceSettings.KEY_USE_SSL] = true + } private fun String.parseTagKey() = split('/').findLast { TAG_REGEX matches it } diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt index 89d61b546..2a07a1b32 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt @@ -159,8 +159,6 @@ class MangareadRepository( } } - override fun onCreatePreferences() = arraySetOf(SourceSettings.KEY_DOMAIN) - private companion object { private const val PAGE_SIZE = 12 diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt index 89432a879..4c2630666 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.core.parser.site -import androidx.collection.arraySetOf import org.json.JSONArray import org.json.JSONException import org.json.JSONObject @@ -8,7 +7,6 @@ import org.koitharu.kotatsu.base.domain.MangaLoaderContext import org.koitharu.kotatsu.core.exceptions.ParseException import org.koitharu.kotatsu.core.model.* import org.koitharu.kotatsu.core.parser.RemoteMangaRepository -import org.koitharu.kotatsu.core.prefs.SourceSettings import org.koitharu.kotatsu.utils.ext.* import java.util.* import kotlin.collections.ArrayList @@ -158,8 +156,6 @@ class RemangaRepository(loaderContext: MangaLoaderContext) : RemoteMangaReposito } } - override fun onCreatePreferences() = arraySetOf(SourceSettings.KEY_DOMAIN) - private fun getSortKey(order: SortOrder?) = when (order) { SortOrder.UPDATED -> "-chapter_date" SortOrder.POPULARITY -> "-rating" diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/SettingsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/settings/SettingsActivity.kt index 174a23057..5382630a7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/SettingsActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/SettingsActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import androidx.core.graphics.Insets import androidx.core.view.updatePadding import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.commit import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat @@ -52,6 +53,7 @@ class SettingsActivity : BaseActivity(), private fun openFragment(fragment: Fragment) { supportFragmentManager.commit { + setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) replace(R.id.container, fragment) setReorderingAllowed(true) addToBackStack(null) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsFragment.kt index 70c05516e..4bccaf8e2 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsFragment.kt @@ -1,22 +1,25 @@ package org.koitharu.kotatsu.settings import android.os.Bundle -import android.view.View +import android.util.ArrayMap +import android.view.inputmethod.EditorInfo import androidx.preference.EditTextPreference +import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import androidx.preference.TwoStatePreference import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.parser.RemoteMangaRepository import org.koitharu.kotatsu.core.prefs.SourceSettings -import org.koitharu.kotatsu.settings.utils.EditTextSummaryProvider +import org.koitharu.kotatsu.settings.utils.EditTextBindListener +import org.koitharu.kotatsu.settings.utils.EditTextDefaultSummaryProvider import org.koitharu.kotatsu.utils.ext.mangaRepositoryOf +import org.koitharu.kotatsu.utils.ext.parcelableArgument import org.koitharu.kotatsu.utils.ext.withArgs class SourceSettingsFragment : PreferenceFragmentCompat() { - private val source by lazy(LazyThreadSafetyMode.NONE) { - requireArguments().getParcelable(EXTRA_SOURCE)!! - } + private val source by parcelableArgument(EXTRA_SOURCE) override fun onResume() { super.onResume() @@ -26,18 +29,39 @@ class SourceSettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.sharedPreferencesName = source.name val repo = mangaRepositoryOf(source) as? RemoteMangaRepository ?: return - val keys = repo.onCreatePreferences() addPreferencesFromResource(R.xml.pref_source) - for (i in 0 until preferenceScreen.preferenceCount) { - val pref = preferenceScreen.getPreference(i) - pref.isVisible = pref.key in keys + val screen = preferenceScreen + val prefsMap = ArrayMap(screen.preferenceCount) + repo.onCreatePreferences(prefsMap) + for (i in 0 until screen.preferenceCount) { + val pref = screen.getPreference(i) + val defValue = prefsMap[pref.key] + pref.isVisible = defValue != null + if (defValue != null) { + initPreferenceWithDefaultValue(pref, defValue) + } } } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - findPreference(SourceSettings.KEY_DOMAIN)?.summaryProvider = - EditTextSummaryProvider(R.string._default) + private fun initPreferenceWithDefaultValue(preference: Preference, defaultValue: Any) { + when(preference) { + is EditTextPreference -> { + preference.summaryProvider = EditTextDefaultSummaryProvider(defaultValue.toString()) + when(preference.key) { + SourceSettings.KEY_DOMAIN -> preference.setOnBindEditTextListener( + EditTextBindListener( + EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_URI, + defaultValue.toString() + ) + ) + } + } + is TwoStatePreference -> { + if (defaultValue is Boolean) { + preference.isChecked = defaultValue + } + } + } } companion object { diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/utils/EditTextBindListener.kt b/app/src/main/java/org/koitharu/kotatsu/settings/utils/EditTextBindListener.kt new file mode 100644 index 000000000..0390bceaa --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/settings/utils/EditTextBindListener.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.settings.utils + +import android.widget.EditText +import androidx.preference.EditTextPreference + +class EditTextBindListener( + private val inputType: Int, + private val hint: String +) : EditTextPreference.OnBindEditTextListener { + + override fun onBindEditText(editText: EditText) { + editText.inputType = inputType + editText.hint = hint + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/utils/EditTextDefaultSummaryProvider.kt b/app/src/main/java/org/koitharu/kotatsu/settings/utils/EditTextDefaultSummaryProvider.kt new file mode 100644 index 000000000..7083b6bdb --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/settings/utils/EditTextDefaultSummaryProvider.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.settings.utils + +import androidx.preference.EditTextPreference +import androidx.preference.Preference +import org.koitharu.kotatsu.R + +class EditTextDefaultSummaryProvider( + private val defaultValue: String +) : Preference.SummaryProvider { + + override fun provideSummary(preference: EditTextPreference): CharSequence { + return if (preference.text.isNullOrEmpty()) { + preference.context.getString(R.string.default_s, defaultValue) + } else { + preference.text + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/FragmentExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/FragmentExt.kt index 9cea220ad..1f50a6013 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/FragmentExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/FragmentExt.kt @@ -16,11 +16,13 @@ val Fragment.viewLifecycleScope get() = viewLifecycleOwner.lifecycle.coroutineScope @Suppress("NOTHING_TO_INLINE") -inline fun Fragment.parcelableArgument(name: String) = - lazy(LazyThreadSafetyMode.NONE) { - requireArguments().getParcelable(name) - ?: error("No argument $name passed in ${javaClass.simpleName}") +inline fun Fragment.parcelableArgument(name: String): Lazy { + return lazy(LazyThreadSafetyMode.NONE) { + requireNotNull(arguments?.getParcelable(name)) { + "No argument $name passed into ${javaClass.simpleName}" + } } +} @Suppress("NOTHING_TO_INLINE") inline fun Fragment.stringArgument(name: String) = lazy(LazyThreadSafetyMode.NONE) { diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c47672f94..df1439358 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -199,4 +199,5 @@ В обратном порядке Войти Для просмотра этого контента требуется авторизация + По умолчанию: %s \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6bc13ea1b..f11bb380c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -201,4 +201,5 @@ Reverse Sign in You should authorize to view this content + Default: %s \ No newline at end of file