From 532a845c95ccc05de63422f68f7323d562d801fd Mon Sep 17 00:00:00 2001 From: LagradOst Date: Thu, 2 Sep 2021 16:06:43 +0200 Subject: [PATCH] switch lang --- .../lagradost/cloudstream3/MainActivity.kt | 18 +++++- .../ui/settings/SettingsFragment.kt | 58 ++++++++++++++----- .../res/drawable/ic_baseline_language_24.xml | 5 ++ app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/settings.xml | 2 +- 5 files changed, 70 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable/ic_baseline_language_24.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 7a0aab62..45a14279 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -6,6 +6,7 @@ import android.content.ComponentName import android.content.Intent import android.content.pm.PackageManager import android.content.res.ColorStateList +import android.content.res.Configuration import android.os.Build import android.os.Bundle import android.view.* @@ -42,6 +43,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.shouldShowPIPMode import com.lagradost.cloudstream3.utils.UIHelper.toPx import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_result.* +import java.util.* import kotlin.concurrent.thread @@ -111,6 +113,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } + + fun setLocale(activity: Activity?, languageCode: String?) { + if (activity == null || languageCode == null) return + val locale = Locale(languageCode) + Locale.setDefault(locale) + val resources = activity.resources + val config: Configuration = resources.configuration + config.setLocale(locale) + resources.updateConfiguration(config, resources.displayMetrics) + } } private fun enterPIPMode() { @@ -227,6 +239,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { true ) // THEME IS SET BEFORE VIEW IS CREATED TO APPLY THE THEME TO THE MAIN VIEW + val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + val localeCode = settingsManager.getString(getString(R.string.locale_key), null) + setLocale(this, localeCode) + super.onCreate(savedInstanceState) window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) @@ -359,7 +375,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val count = settingsManager.getInt(getString(R.string.benene_count), 0) if (count > 30) apis.addAll(restrictedApis) - } catch (e : Exception) { + } catch (e: Exception) { e.printStackTrace() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index feea7c23..e84288b5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -5,39 +5,37 @@ import android.widget.Toast import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import com.lagradost.cloudstream3.MainActivity.Companion.setLocale import com.lagradost.cloudstream3.MainActivity.Companion.showToast import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment -import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate +import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import java.util.* -import kotlin.Exception import kotlin.concurrent.thread + class SettingsFragment : PreferenceFragmentCompat() { var count = 0 override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() setPreferencesFromResource(R.xml.settings, rootKey) - val updatePrefrence = findPreference(getString(R.string.manual_check_update_key))!! - - val benenePref = findPreference(getString(R.string.benene_count))!! + val updatePreference = findPreference(getString(R.string.manual_check_update_key))!! + val localePreference = findPreference(getString(R.string.locale_key))!! + val benenePreference = findPreference(getString(R.string.benene_count))!! try { val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) count = settingsManager.getInt(getString(R.string.benene_count), 0) - benenePref.summary = + benenePreference.summary = if (count <= 0) getString(R.string.benene_count_text_none) else getString(R.string.benene_count_text).format( count ) - benenePref.setOnPreferenceClickListener { + benenePreference.setOnPreferenceClickListener { try { count++ settingsManager.edit().putInt(getString(R.string.benene_count), count).apply() @@ -52,16 +50,50 @@ class SettingsFragment : PreferenceFragmentCompat() { e.printStackTrace() } - updatePrefrence.setOnPreferenceClickListener { + updatePreference.setOnPreferenceClickListener { thread { if (!requireActivity().runAutoUpdate(false)) { activity?.runOnUiThread { - showToast(activity, "No Update Found", Toast.LENGTH_SHORT) + showToast(activity, R.string.no_update_found, Toast.LENGTH_SHORT) } } } return@setOnPreferenceClickListener true } + + localePreference.setOnPreferenceClickListener { pref -> + val languages = listOf( + Triple("\uD83C\uDDEC\uD83C\uDDE7", "English", "en"), + Triple("\uD83C\uDDF3\uD83C\uDDF1", "Dutch", "nl"), + Triple("\uD83C\uDDEC\uD83C\uDDF7", "Greek", "gr"), + ) // idk, if you find a way of automating this it would be great + val current = getCurrentLocale() + val languageCodes = languages.map { it.third } + val languageNames = languages.map { "${it.first} ${it.second}" } + 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" } override fun onPreferenceTreeClick(preference: Preference?): Boolean { diff --git a/app/src/main/res/drawable/ic_baseline_language_24.xml b/app/src/main/res/drawable/ic_baseline_language_24.xml new file mode 100644 index 00000000..0335ca0b --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_language_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97201254..4ee71804 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -212,4 +212,6 @@ Auto Download Download Mirror Reload Links + + "No Update Found" diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 287ae141..00c6dddd 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -80,7 +80,7 @@ + android:icon="@drawable/ic_baseline_language_24">