cloudstream/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt

259 lines
11 KiB
Kotlin
Raw Normal View History

2021-06-10 23:00:22 +00:00
package com.lagradost.cloudstream3.ui.settings
import android.os.Bundle
import android.widget.Toast
2021-09-07 19:16:12 +00:00
import androidx.appcompat.app.AlertDialog
2021-08-07 01:53:45 +00:00
import androidx.preference.Preference
2021-06-10 23:00:22 +00:00
import androidx.preference.PreferenceFragmentCompat
2021-08-30 21:42:58 +00:00
import androidx.preference.PreferenceManager
import com.lagradost.cloudstream3.APIHolder.apis
2021-09-12 14:10:22 +00:00
import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings
import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings
2021-10-02 17:10:50 +00:00
import com.lagradost.cloudstream3.APIHolder.getApiSettings
import com.lagradost.cloudstream3.APIHolder.restrictedApis
2021-09-12 14:10:22 +00:00
import com.lagradost.cloudstream3.DubStatus
2021-09-02 14:06:43 +00:00
import com.lagradost.cloudstream3.MainActivity.Companion.setLocale
import com.lagradost.cloudstream3.MainActivity.Companion.showToast
2021-06-10 23:00:22 +00:00
import com.lagradost.cloudstream3.R
2021-09-02 14:06:43 +00:00
import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.network.initRequestClient
2021-09-12 14:10:22 +00:00
import com.lagradost.cloudstream3.ui.APIRepository
2021-08-07 01:53:45 +00:00
import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment
import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate
2021-09-04 11:38:35 +00:00
import com.lagradost.cloudstream3.utils.Qualities
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
2021-09-02 14:06:43 +00:00
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
2021-09-12 14:10:22 +00:00
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
import com.lagradost.cloudstream3.utils.SubtitleHelper
2021-08-04 13:30:34 +00:00
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
import kotlin.concurrent.thread
2021-06-10 23:00:22 +00:00
2021-09-02 14:06:43 +00:00
2021-06-10 23:00:22 +00:00
class SettingsFragment : PreferenceFragmentCompat() {
2021-09-04 11:38:35 +00:00
private var beneneCount = 0
2021-09-19 22:52:39 +00:00
// idk, if you find a way of automating this it would be great
2021-09-04 11:38:35 +00:00
private val languages = arrayListOf(
2021-09-20 21:11:36 +00:00
Triple("\uD83C\uDDEA\uD83C\uDDF8", "Spanish", "es"),
2021-09-04 11:38:35 +00:00
Triple("\uD83C\uDDEC\uD83C\uDDE7", "English", "en"),
2021-09-13 10:36:18 +00:00
Triple("\uD83C\uDDFB\uD83C\uDDF3", "Viet Nam", "vi"),
2021-09-04 11:38:35 +00:00
Triple("\uD83C\uDDF3\uD83C\uDDF1", "Dutch", "nl"),
Triple("\uD83C\uDDEB\uD83C\uDDF7", "French", "fr"),
Triple("\uD83C\uDDEC\uD83C\uDDF7", "Greek", "gr"),
Triple("\uD83C\uDDF8\uD83C\uDDEA", "Swedish", "sv"),
Triple("\uD83C\uDDF5\uD83C\uDDED", "Tagalog", "tl"),
2021-09-12 14:10:22 +00:00
Triple("\uD83C\uDDF5\uD83C\uDDF1", "Polish", "pl"),
2021-09-06 10:22:06 +00:00
Triple("\uD83C\uDDEE\uD83C\uDDF3", "Hindi", "hi"),
2021-09-06 17:49:52 +00:00
Triple("\uD83C\uDDEE\uD83C\uDDF3", "Malayalam", "ml"),
2021-10-23 11:59:14 +00:00
Triple("\uD83C\uDDF3\uD83C\uDDF4", "Norsk", "no"),
2021-10-23 16:33:46 +00:00
Triple("\ud83c\udde9\ud83c\uddea", "German", "de"),
2021-10-25 14:01:54 +00:00
Triple("🇱🇧", "Arabic", "ar"),
2021-09-19 22:52:39 +00:00
).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top
2021-08-30 21:42:58 +00:00
2021-06-10 23:00:22 +00:00
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
2021-08-04 13:30:34 +00:00
hideKeyboard()
2021-06-10 23:00:22 +00:00
setPreferencesFromResource(R.xml.settings, rootKey)
2021-09-02 14:06:43 +00:00
val updatePreference = findPreference<Preference>(getString(R.string.manual_check_update_key))!!
val localePreference = findPreference<Preference>(getString(R.string.locale_key))!!
val benenePreference = findPreference<Preference>(getString(R.string.benene_count))!!
2021-09-04 11:38:35 +00:00
val watchQualityPreference = findPreference<Preference>(getString(R.string.quality_pref_key))!!
val dnsPreference = findPreference<Preference>(getString(R.string.dns_key))!!
2021-09-07 19:16:12 +00:00
val legalPreference = findPreference<Preference>(getString(R.string.legal_notice_key))!!
2021-09-12 14:10:22 +00:00
val subdubPreference = findPreference<Preference>(getString(R.string.display_sub_key))!!
val providerLangPreference = findPreference<Preference>(getString(R.string.provider_lang_key))!!
2021-09-07 19:16:12 +00:00
legalPreference.setOnPreferenceClickListener {
val builder: AlertDialog.Builder = AlertDialog.Builder(it.context)
builder.setTitle(R.string.legal_notice)
builder.setMessage(R.string.legal_notice_text)
builder.show()
return@setOnPreferenceClickListener true
}
2021-09-04 11:38:35 +00:00
2021-09-12 14:10:22 +00:00
subdubPreference.setOnPreferenceClickListener {
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
activity?.getApiDubstatusSettings()?.let { current ->
val dublist = DubStatus.values()
val names = dublist.map { it.name }
val currentList = ArrayList<Int>()
for (i in current) {
currentList.add(dublist.indexOf(i))
}
context?.showMultiDialog(
names,
currentList,
getString(R.string.display_subbed_dubbed_settings),
{}) { selectedList ->
APIRepository.dubStatusActive = selectedList.map { dublist[it] }.toHashSet()
settingsManager.edit().putStringSet(
this.getString(R.string.display_sub_key),
selectedList.map { names[it] }.toMutableSet()
).apply()
}
}
return@setOnPreferenceClickListener true
}
providerLangPreference.setOnPreferenceClickListener {
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
activity?.getApiProviderLangSettings()?.let { current ->
val allLangs = HashSet<String>()
for (api in apis) {
allLangs.add(api.lang)
}
for (api in restrictedApis) {
allLangs.add(api.lang)
}
val currentList = ArrayList<Int>()
for (i in current) {
currentList.add(allLangs.indexOf(i))
}
2021-09-12 14:10:22 +00:00
val names = allLangs.mapNotNull {
val fullName = SubtitleHelper.fromTwoLettersToLanguage(it)
if (fullName.isNullOrEmpty()) {
return@mapNotNull null
}
Pair(it, fullName)
}
context?.showMultiDialog(
names.map { it.second },
currentList,
getString(R.string.provider_lang_settings),
{}) { selectedList ->
settingsManager.edit().putStringSet(
this.getString(R.string.provider_lang_key),
selectedList.map { names[it].first }.toMutableSet()
).apply()
2021-10-02 17:10:50 +00:00
APIRepository.providersActive = it.context.getApiSettings()
}
}
2021-09-12 14:10:22 +00:00
return@setOnPreferenceClickListener true
}
2021-09-04 11:38:35 +00:00
watchQualityPreference.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.quality_pref)
val prefValues = resources.getIntArray(R.array.quality_pref_values)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
2021-09-12 14:10:22 +00:00
val currentQuality =
settingsManager.getInt(getString(R.string.watch_quality_pref), Qualities.values().last().value)
2021-09-04 11:38:35 +00:00
context?.showBottomDialog(
prefNames.toList(),
prefValues.indexOf(currentQuality),
getString(R.string.watch_quality_pref),
true,
{}) {
settingsManager.edit().putInt(getString(R.string.watch_quality_pref), prefValues[it]).apply()
}
return@setOnPreferenceClickListener true
}
2021-08-30 21:58:09 +00:00
dnsPreference.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.dns_pref)
val prefValues = resources.getIntArray(R.array.dns_pref_values)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
val currentDns =
settingsManager.getInt(getString(R.string.dns_pref), 0)
context?.showBottomDialog(
prefNames.toList(),
prefValues.indexOf(currentDns),
getString(R.string.dns_pref),
true,
{}) {
settingsManager.edit().putInt(getString(R.string.dns_pref), prefValues[it]).apply()
context?.initRequestClient()
}
return@setOnPreferenceClickListener true
}
2021-08-30 22:07:39 +00:00
try {
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
2021-09-04 11:38:35 +00:00
beneneCount = settingsManager.getInt(getString(R.string.benene_count), 0)
2021-09-01 12:02:32 +00:00
2021-09-02 14:06:43 +00:00
benenePreference.summary =
2021-09-04 11:38:35 +00:00
if (beneneCount <= 0) getString(R.string.benene_count_text_none) else getString(R.string.benene_count_text).format(
beneneCount
2021-08-30 22:07:39 +00:00
)
2021-09-02 14:06:43 +00:00
benenePreference.setOnPreferenceClickListener {
2021-08-30 22:07:39 +00:00
try {
2021-09-04 11:38:35 +00:00
beneneCount++
settingsManager.edit().putInt(getString(R.string.benene_count), beneneCount).apply()
it.summary = getString(R.string.benene_count_text).format(beneneCount)
2021-08-30 22:07:39 +00:00
} catch (e: Exception) {
e.printStackTrace()
2021-08-30 21:42:58 +00:00
}
2021-08-30 22:07:39 +00:00
return@setOnPreferenceClickListener true
2021-08-30 21:42:58 +00:00
}
2021-08-30 22:07:39 +00:00
} catch (e: Exception) {
e.printStackTrace()
2021-08-30 21:42:58 +00:00
}
2021-09-02 14:06:43 +00:00
updatePreference.setOnPreferenceClickListener {
thread {
if (!requireActivity().runAutoUpdate(false)) {
activity?.runOnUiThread {
2021-09-02 14:06:43 +00:00
showToast(activity, R.string.no_update_found, Toast.LENGTH_SHORT)
}
}
}
return@setOnPreferenceClickListener true
}
2021-09-02 14:06:43 +00:00
localePreference.setOnPreferenceClickListener { pref ->
2021-09-19 22:52:39 +00:00
val tempLangs = languages.toMutableList()
2021-09-04 11:38:35 +00:00
if (beneneCount > 100) {
tempLangs.add(Triple("\uD83E\uDD8D", "mmmm... monke", "mo"))
2021-09-02 22:13:44 +00:00
}
2021-09-02 14:06:43 +00:00
val current = getCurrentLocale()
2021-09-04 11:38:35 +00:00
val languageCodes = tempLangs.map { it.third }
val languageNames = tempLangs.map { "${it.first} ${it.second}" }
2021-09-02 14:06:43 +00:00
val index = languageCodes.indexOf(current)
pref?.context?.showDialog(
languageNames, index, getString(R.string.app_language), true, { }
) { languageIndex ->
try {
val code = languageCodes[languageIndex]
setLocale(activity, code)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(pref.context)
settingsManager.edit().putString(getString(R.string.locale_key), code).apply()
activity?.recreate()
} catch (e: Exception) {
logError(e)
}
}
return@setOnPreferenceClickListener true
}
}
private fun getCurrentLocale(): String {
val res = context!!.resources
// Change locale settings in the app.
// val dm = res.displayMetrics
val conf = res.configuration
return conf?.locale?.language ?: "en"
2021-06-10 23:00:22 +00:00
}
2021-08-07 01:53:45 +00:00
override fun onPreferenceTreeClick(preference: Preference?): Boolean {
if (preference != null) {
2021-09-04 11:38:35 +00:00
if (preference.key == getString(R.string.subtitle_settings_key)) {
2021-08-07 01:53:45 +00:00
SubtitlesFragment.push(activity, false)
}
}
return super.onPreferenceTreeClick(preference)
}
2021-09-03 17:25:50 +00:00
}