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()