mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Reinstate in-app language picker (#7493)
Also add required config for android 13 system picker
This commit is contained in:
		| @@ -27,8 +27,8 @@ | ||||
|         android:hardwareAccelerated="true" | ||||
|         android:icon="@mipmap/ic_launcher" | ||||
|         android:label="@string/app_name" | ||||
|         android:localeConfig="@xml/locales_config" | ||||
|         android:largeHeap="true" | ||||
|         android:localeConfig="@xml/locales_config" | ||||
|         android:requestLegacyExternalStorage="true" | ||||
|         android:roundIcon="@mipmap/ic_launcher_round" | ||||
|         android:theme="@style/Theme.Tachiyomi" | ||||
| @@ -201,6 +201,15 @@ | ||||
|         <service android:name=".extension.util.ExtensionInstallService" | ||||
|             android:exported="false" /> | ||||
|  | ||||
|         <service | ||||
|             android:name="androidx.appcompat.app.AppLocalesMetadataHolderService" | ||||
|             android:enabled="false" | ||||
|             android:exported="false"> | ||||
|             <meta-data | ||||
|                 android:name="autoStoreLocales" | ||||
|                 android:value="true" /> | ||||
|         </service> | ||||
|  | ||||
|         <provider | ||||
|             android:name="androidx.core.content.FileProvider" | ||||
|             android:authorities="${applicationId}.provider" | ||||
|   | ||||
| @@ -3,14 +3,20 @@ package eu.kanade.tachiyomi.ui.setting | ||||
| import android.content.Intent | ||||
| import android.os.Build | ||||
| import android.provider.Settings | ||||
| import androidx.appcompat.app.AppCompatDelegate | ||||
| import androidx.core.os.LocaleListCompat | ||||
| import androidx.preference.PreferenceScreen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.util.preference.bindTo | ||||
| import eu.kanade.tachiyomi.util.preference.defaultValue | ||||
| import eu.kanade.tachiyomi.util.preference.listPreference | ||||
| import eu.kanade.tachiyomi.util.preference.onChange | ||||
| import eu.kanade.tachiyomi.util.preference.onClick | ||||
| import eu.kanade.tachiyomi.util.preference.preference | ||||
| import eu.kanade.tachiyomi.util.preference.switchPreference | ||||
| import eu.kanade.tachiyomi.util.preference.titleRes | ||||
| import eu.kanade.tachiyomi.util.system.LocaleHelper | ||||
| import org.xmlpull.v1.XmlPullParser | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys | ||||
|  | ||||
| class SettingsGeneralController : SettingsController() { | ||||
| @@ -39,5 +45,44 @@ class SettingsGeneralController : SettingsController() { | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         listPreference { | ||||
|             key = "app_lang" | ||||
|             isPersistent = false | ||||
|             titleRes = R.string.pref_app_language | ||||
|  | ||||
|             val langs = mutableListOf<Pair<String, String>>() | ||||
|  | ||||
|             val parser = context.resources.getXml(R.xml.locales_config) | ||||
|             var eventType = parser.eventType | ||||
|             while (eventType != XmlPullParser.END_DOCUMENT) { | ||||
|                 if (eventType == XmlPullParser.START_TAG && parser.name == "locale") { | ||||
|                     for (i in 0 until parser.attributeCount) { | ||||
|                         if (parser.getAttributeName(i) == "name") { | ||||
|                             val langTag = parser.getAttributeValue(i) | ||||
|                             langs.add(Pair(langTag, LocaleHelper.getDisplayName(langTag))) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 eventType = parser.next() | ||||
|             } | ||||
|  | ||||
|             langs.sortBy { it.second } | ||||
|             langs.add(0, Pair("", context.getString(R.string.label_default))) | ||||
|  | ||||
|             entryValues = langs.map { it.first }.toTypedArray() | ||||
|             entries = langs.map { it.second }.toTypedArray() | ||||
|             summary = "%s" | ||||
|             value = AppCompatDelegate.getApplicationLocales().get(0)?.toLanguageTag() ?: "" | ||||
|  | ||||
|             onChange { newValue -> | ||||
|                 val locale = if ((newValue as String).isEmpty()) { | ||||
|                     LocaleListCompat.getEmptyLocaleList() | ||||
|                 } else { | ||||
|                     LocaleListCompat.forLanguageTags(newValue) | ||||
|                 } | ||||
|                 AppCompatDelegate.setApplicationLocales(locale) | ||||
|                 true | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user