From 80d205fd74132cc7912f9876baf253056aebc206 Mon Sep 17 00:00:00 2001 From: Matthieu <24-artectrex@users.noreply.shinice.net> Date: Fri, 25 Nov 2022 16:50:46 +0100 Subject: [PATCH 1/4] Use native language chooser --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 12 + .../java/org/pixeldroid/app/LoginActivity.kt | 5 +- .../app/settings/SettingsActivity.kt | 64 +- .../org/pixeldroid/app/utils/BaseActivity.kt | 38 - app/src/main/res/values/arrays.xml | 57 - app/src/main/res/xml/locales_config.xml | 27 + app/src/main/res/xml/root_preferences.xml | 7 +- gradle.properties | 1 + gradle/verification-metadata.xml | 5141 ----------------- 10 files changed, 104 insertions(+), 5250 deletions(-) create mode 100644 app/src/main/res/xml/locales_config.xml delete mode 100644 gradle/verification-metadata.xml diff --git a/app/build.gradle b/app/build.gradle index ea65893e..428d36be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -125,7 +125,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.0' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.0' /** * AndroidX dependencies: diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8d057857..cb465e7b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ + + + + + + { - recreateWithRestartStatus() - } "theme" -> { setThemeFromPreferences(sharedPreferences, resources) recreateWithRestartStatus() @@ -88,6 +92,8 @@ class SettingsActivity : BaseThemedWithBarActivity(), SharedPreferences.OnShared var dialogFragment: DialogFragment? = null if (preference is ColorPreference) { dialogFragment = ColorPreferenceDialog((preference as ColorPreference?)!!) + } else if(preference.key == "language"){ + dialogFragment = LanguageSettingFragment() } if (dialogFragment != null) { dialogFragment.setTargetFragment(this, 0) @@ -100,12 +106,60 @@ class SettingsActivity : BaseThemedWithBarActivity(), SharedPreferences.OnShared override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.root_preferences, rootKey) + findPreference("language")?.let { + it.setSummaryProvider { + val locale = AppCompatDelegate.getApplicationLocales().get(0) + locale?.getDisplayName(locale) ?: getString(R.string.default_system) + } + } + //Hide Notification setting for Android versions where it doesn't work if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - preferenceManager.findPreference("notification") + findPreference("notification") ?.let { preferenceScreen.removePreference(it) } } } } -} \ No newline at end of file +} +class LanguageSettingFragment : DialogFragment() { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val list: MutableList = mutableListOf() + resources.getXml(R.xml.locales_config).use { + var eventType = it.eventType + while (eventType != XmlResourceParser.END_DOCUMENT) { + when (eventType) { + XmlResourceParser.START_TAG -> { + if (it.name == "locale") { + list.add(it.getAttributeValue(0)) + } + } + } + eventType = it.next() + } + } + val locales = AppCompatDelegate.getApplicationLocales() + val checkedItem: Int = + if(locales.isEmpty) 0 + else { + val index = list.indexOf(locales.get(0)?.toLanguageTag()) + // If found, we want to compensate for the first in the list being the default + if(index == -1) -1 + else index + 1 + } + + return AlertDialog.Builder(requireContext()).apply { + setIcon(R.drawable.translate_black_24dp) + setTitle(R.string.language) + setSingleChoiceItems((mutableListOf(getString(R.string.default_system)) + list.map { + val appLocale = LocaleListCompat.forLanguageTags(it) + appLocale.get(0)!!.getDisplayName(appLocale.get(0)!!) + }).toTypedArray(), checkedItem) { dialog, which -> + val languageTag = if(which in 1..list.size) list[which - 1] else null + AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(languageTag)) + dialog.dismiss() + } + setNegativeButton(android.R.string.ok) { _, _ -> } + }.create() + } +} diff --git a/app/src/main/java/org/pixeldroid/app/utils/BaseActivity.kt b/app/src/main/java/org/pixeldroid/app/utils/BaseActivity.kt index 87c5ed98..f47d5e48 100644 --- a/app/src/main/java/org/pixeldroid/app/utils/BaseActivity.kt +++ b/app/src/main/java/org/pixeldroid/app/utils/BaseActivity.kt @@ -1,15 +1,9 @@ package org.pixeldroid.app.utils -import android.content.Context -import android.content.res.Configuration -import android.content.res.Resources -import android.os.Build import android.os.Bundle import androidx.appcompat.app.AppCompatActivity -import androidx.preference.PreferenceManager import org.pixeldroid.app.utils.db.AppDatabase import org.pixeldroid.app.utils.di.PixelfedAPIHolder -import java.util.* import javax.inject.Inject open class BaseActivity : AppCompatActivity() { @@ -24,40 +18,8 @@ open class BaseActivity : AppCompatActivity() { (this.application as PixelDroidApplication).getAppComponent().inject(this) } - override fun attachBaseContext(base: Context) { - super.attachBaseContext(updateBaseContextLocale(base)) - } - override fun onSupportNavigateUp(): Boolean { onBackPressed() return true } - - private fun updateBaseContextLocale(context: Context): Context { - val language = PreferenceManager.getDefaultSharedPreferences(context).getString("language", "default") ?: "default" - if(language == "default"){ - return context - } - val locale = Locale.forLanguageTag(language) - Locale.setDefault(locale) - return if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) { - updateResourcesLocale(context, locale) - } else updateResourcesLocaleLegacy(context, locale) - } - - private fun updateResourcesLocale(context: Context, locale: Locale): Context = - context.createConfigurationContext( - Configuration(context.resources.configuration) - .apply { setLocale(locale) } - ) - - @Suppress("DEPRECATION") - private fun updateResourcesLocaleLegacy(context: Context, locale: Locale): Context { - val resources: Resources = context.resources - val configuration: Configuration = resources.configuration - configuration.locale = locale - resources.updateConfiguration(configuration, resources.displayMetrics) - return context - } - } \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index e5d5d537..162feaea 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -10,61 +10,4 @@ @string/light_theme @string/dark_theme - - - - @string/default_system - العربية - বাংলা (বাংলাদেশ) - Català - Čeština - Deutsch - Español - Euskara - English - فارسی - Suomi - Français - Gaeilge - Magyar - bahasa Indonesia - Italiano - 日本語 - മലയാളം - Nederlands - Polski - Português (Brasil) - Русский - Svenska - Українська - 中文(简体) - - - - default - ar - bn-bd - ca - cs - de - es - eu - en - fa - fi - fr - gl - hu - id - it - ja - ml - nl - pl - pt-br - ru - sv - uk - zh-CN - \ No newline at end of file diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml new file mode 100644 index 00000000..e5d422c9 --- /dev/null +++ b/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 08aff2c9..11ed9ee1 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -19,12 +19,8 @@ + app:icon="@drawable/note" /> - - - true - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 366410e31c3484fd99d650a037aa865c43b5a533 Mon Sep 17 00:00:00 2001 From: Matthieu <24-artectrex@users.noreply.shinice.net> Date: Fri, 25 Nov 2022 17:00:13 +0100 Subject: [PATCH 2/4] Dependencies --- app/build.gradle | 6 +- gradle/verification-metadata.xml | 468 +++++++++++++++++++++++++++++++ 2 files changed, 472 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 428d36be..83f404fb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,6 +35,8 @@ android { versionCode 19 versionName "1.0.beta" + versionCode + //TODO add resConfigs("en", "fr", "ja",...) ? + testInstrumentationRunner "org.pixeldroid.app.testUtility.TestRunner" testInstrumentationRunnerArguments clearPackageData: 'true' } @@ -125,12 +127,12 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.0' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.0' /** * AndroidX dependencies: */ - implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'androidx.appcompat:appcompat:1.6.0-rc01' implementation 'androidx.core:core-splashscreen:1.0.0' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.preference:preference-ktx:1.2.0' diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 74d5606a..b47a93df 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -398,6 +398,17 @@ + + + + + + + + + + + @@ -409,6 +420,14 @@ + + + + + + + + @@ -417,6 +436,14 @@ + + + + + + + + @@ -425,6 +452,14 @@ + + + + + + + + @@ -433,6 +468,17 @@ + + + + + + + + + + + @@ -444,6 +490,17 @@ + + + + + + + + + + + @@ -455,6 +512,17 @@ + + + + + + + + + + + @@ -1682,6 +1750,14 @@ + + + + + + + + @@ -1690,6 +1766,14 @@ + + + + + + + + @@ -1698,6 +1782,14 @@ + + + + + + + + @@ -1786,6 +1878,14 @@ + + + + + + + + @@ -1794,6 +1894,14 @@ + + + + + + + + @@ -1818,6 +1926,14 @@ + + + + + + + + @@ -1826,6 +1942,14 @@ + + + + + + + + @@ -1834,6 +1958,14 @@ + + + + + + + + @@ -1842,6 +1974,14 @@ + + + + + + + + @@ -1850,6 +1990,14 @@ + + + + + + + + @@ -1858,6 +2006,14 @@ + + + + + + + + @@ -1866,6 +2022,14 @@ + + + + + + + + @@ -1874,6 +2038,14 @@ + + + + + + + + @@ -1882,6 +2054,14 @@ + + + + + + + + @@ -1890,6 +2070,14 @@ + + + + + + + + @@ -1898,6 +2086,14 @@ + + + + + + + + @@ -1906,6 +2102,14 @@ + + + + + + + + @@ -1914,6 +2118,14 @@ + + + + + + + + @@ -1922,6 +2134,14 @@ + + + + + + + + @@ -1930,6 +2150,14 @@ + + + + + + + + @@ -1938,6 +2166,14 @@ + + + + + + + + @@ -1946,6 +2182,14 @@ + + + + + + + + @@ -1962,6 +2206,14 @@ + + + + + + + + @@ -1970,6 +2222,14 @@ + + + + + + + + @@ -1978,6 +2238,14 @@ + + + + + + + + @@ -1986,6 +2254,14 @@ + + + + + + + + @@ -2018,6 +2294,14 @@ + + + + + + + + @@ -2026,6 +2310,14 @@ + + + + + + + + @@ -2034,6 +2326,14 @@ + + + + + + + + @@ -2042,6 +2342,14 @@ + + + + + + + + @@ -2050,6 +2358,14 @@ + + + + + + + + @@ -2058,6 +2374,14 @@ + + + + + + + + @@ -2066,6 +2390,14 @@ + + + + + + + + @@ -2074,6 +2406,14 @@ + + + + + + + + @@ -2082,6 +2422,14 @@ + + + + + + + + @@ -2090,6 +2438,14 @@ + + + + + + + + @@ -2098,6 +2454,14 @@ + + + + + + + + @@ -2106,6 +2470,14 @@ + + + + + + + + @@ -2114,6 +2486,14 @@ + + + + + + + + @@ -2122,6 +2502,14 @@ + + + + + + + + @@ -2130,6 +2518,14 @@ + + + + + + + + @@ -2138,6 +2534,14 @@ + + + + + + + + @@ -2146,6 +2550,14 @@ + + + + + + + + @@ -2205,6 +2617,11 @@ + + + + + @@ -2514,6 +2931,14 @@ + + + + + + + + @@ -2766,11 +3191,24 @@ + + + + + + + + + + + + + @@ -2779,6 +3217,14 @@ + + + + + + + + @@ -2787,6 +3233,11 @@ + + + + + @@ -4815,17 +5266,34 @@ + + + + + + + + + + + + + + + + + From 1d6b3c47e7852265965d0d38636870279e889a2e Mon Sep 17 00:00:00 2001 From: Matthieu <24-artectrex@users.noreply.shinice.net> Date: Fri, 25 Nov 2022 18:34:34 +0100 Subject: [PATCH 3/4] Fix permissions issue on Android 13 --- app/src/main/AndroidManifest.xml | 1 - .../app/postCreation/camera/CameraFragment.kt | 14 ++++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 214cbc4a..4f56a2f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,6 @@ - = Build.VERSION_CODES.TIRAMISU) Manifest.permission.READ_MEDIA_IMAGES + else Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED ) { updateGalleryThumbnail() } else if (!filePermissionDialogLaunched) { // Ask for external storage permission. - updateGalleryThumbnailPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE) + updateGalleryThumbnailPermissionLauncher.launch( + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + Manifest.permission.READ_MEDIA_IMAGES + } else Manifest.permission.READ_EXTERNAL_STORAGE + ) } cameraLifecycleOwner.resume() @@ -273,14 +279,14 @@ class CameraFragment : BaseFragment() { // Find the last picture val projection = arrayOf( MediaStore.Images.ImageColumns._ID, - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) MediaStore.Images.ImageColumns.DATE_TAKEN + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) MediaStore.Images.ImageColumns.DATE_TAKEN else MediaStore.Images.ImageColumns.DATE_MODIFIED, ) val cursor = requireContext().contentResolver .query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, - (if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) MediaStore.Images.ImageColumns.DATE_TAKEN + (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) MediaStore.Images.ImageColumns.DATE_TAKEN else MediaStore.Images.ImageColumns.DATE_MODIFIED) + " DESC" ) if (cursor != null && cursor.moveToFirst()) { From e64c2d63995be92d422e244da55bc32e7e73934d Mon Sep 17 00:00:00 2001 From: Matthieu <24-artectrex@users.noreply.shinice.net> Date: Fri, 25 Nov 2022 22:01:36 +0100 Subject: [PATCH 4/4] Fix some bugs --- .../java/org/pixeldroid/app/settings/SettingsActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/pixeldroid/app/settings/SettingsActivity.kt b/app/src/main/java/org/pixeldroid/app/settings/SettingsActivity.kt index 83d41d7d..a413384e 100644 --- a/app/src/main/java/org/pixeldroid/app/settings/SettingsActivity.kt +++ b/app/src/main/java/org/pixeldroid/app/settings/SettingsActivity.kt @@ -142,7 +142,9 @@ class LanguageSettingFragment : DialogFragment() { val checkedItem: Int = if(locales.isEmpty) 0 else { - val index = list.indexOf(locales.get(0)?.toLanguageTag()) + // For some reason we get a bit inconsistent language tags. This normalises it for + // the currently used languages, but it might break in the future if we add some + val index = list.indexOf(locales.get(0)?.toLanguageTag()?.lowercase()?.replace('_', '-')) // If found, we want to compensate for the first in the list being the default if(index == -1) -1 else index + 1 @@ -156,8 +158,8 @@ class LanguageSettingFragment : DialogFragment() { appLocale.get(0)!!.getDisplayName(appLocale.get(0)!!) }).toTypedArray(), checkedItem) { dialog, which -> val languageTag = if(which in 1..list.size) list[which - 1] else null - AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(languageTag)) dialog.dismiss() + AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(languageTag)) } setNegativeButton(android.R.string.ok) { _, _ -> } }.create()