From 0f450e65af956123898e81bad6116a8f6a055e3e Mon Sep 17 00:00:00 2001
From: Jakub Grzywacz <kontakt@jakubgrzywacz.pl>
Date: Mon, 11 Nov 2024 18:21:21 +0100
Subject: [PATCH 1/3] feat: introduce setDefaultLanguage

---
 src/NativeLocalizationSettings.ts |  1 +
 src/api.ts                        | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/src/NativeLocalizationSettings.ts b/src/NativeLocalizationSettings.ts
index fff6ecb..5230edf 100644
--- a/src/NativeLocalizationSettings.ts
+++ b/src/NativeLocalizationSettings.ts
@@ -4,6 +4,7 @@ import { TurboModuleRegistry } from 'react-native';
 export interface Spec extends TurboModule {
   getLanguage(): Promise<string>;
   setLanguage(lang: string): void;
+  setDefaultLanguage(): void;
   getConstants(): {
     language: string;
   };
diff --git a/src/api.ts b/src/api.ts
index 67d5509..40991c6 100644
--- a/src/api.ts
+++ b/src/api.ts
@@ -72,3 +72,13 @@ export function getLanguageAsync(fallback?: string): Promise<string> {
 export function setLanguage(language: string): void {
   LocalizationSettings.setLanguage(language);
 }
+
+/**
+ * Set default language (unset previously set language)
+ * @example
+ * Usage:
+ * setDefaultLanguage()
+ */
+export function setDefaultLanguage(): void {
+  LocalizationSettings.setDefaultLanguage();
+}

From 9937df9c4becd77d2f88bee4f9365d83ac93b000 Mon Sep 17 00:00:00 2001
From: Jakub Grzywacz <kontakt@jakubgrzywacz.pl>
Date: Mon, 11 Nov 2024 18:21:46 +0100
Subject: [PATCH 2/3] feat: implement setDefaultLanguage on Android

---
 .../LocalizationSettingsModule.kt             | 33 ++++++++++++++++---
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt b/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt
index 67fffcf..6f83aee 100644
--- a/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt
+++ b/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt
@@ -41,14 +41,13 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC
   private fun getCurrentLanguage(): String? {
     // If API version is >= 33, then use per-app language settings
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-      val currentLocaleName = if (!AppCompatDelegate.getApplicationLocales().isEmpty) {
+      if (!AppCompatDelegate.getApplicationLocales().isEmpty) {
         // get per-app language
-        AppCompatDelegate.getApplicationLocales()[0]?.toLanguageTag()
+        return AppCompatDelegate.getApplicationLocales()[0]?.toLanguageTag()
       } else {
         // Fallback to the default System Locale
-        Locale.getDefault().toLanguageTag()
+        return Locale.getDefault().toLanguageTag()
       }
-      return currentLocaleName
     }
     // if API is < 33, then use SharedPreferences with fallback to default System Locale
     if (getPreferences().getString("languageFrom", null) == Locale.getDefault().language) {
@@ -79,6 +78,27 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC
     }
   }
 
+  /**
+   * Set default language
+   *  If API version >= 33, use native per-app language feature
+   *  else, fallback to SharedPreferences
+   **/
+  private fun unsetLanguage() {
+    // use per-app language settings
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+      val defaultLocales = LocaleListCompat.getEmptyLocaleList()
+      AppCompatDelegate.setApplicationLocales(defaultLocales)
+      val test = Locale.getDefault()
+      val test2 = Locale.getDefault()
+    } else {
+      // use SharedPreferences language
+      val editor = getEditor();
+      editor.putString("languageFrom", Locale.getDefault().language)
+      editor.putString("language", Locale.getDefault().language)
+      editor.apply()
+    }
+  }
+
 
   /**
    * Expose functions to react-native
@@ -93,6 +113,11 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC
     setCurrentLanguage(language)
   }
 
+  @ReactMethod
+  override fun setDefaultLanguage() {
+    unsetLanguage()
+  }
+
   /**
    * Expose constants to react-native
    **/

From 362ea44cf7a6fda8bcb956d51652b3793e579ca7 Mon Sep 17 00:00:00 2001
From: Jakub Grzywacz <kontakt@jakubgrzywacz.pl>
Date: Mon, 11 Nov 2024 18:22:12 +0100
Subject: [PATCH 3/3] docs: add to example app

---
 example/App.tsx | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/example/App.tsx b/example/App.tsx
index 55b79a0..3afca03 100644
--- a/example/App.tsx
+++ b/example/App.tsx
@@ -6,6 +6,7 @@ import {
   createLanguageDetector,
   getLanguage,
   getLanguageAsync,
+  setDefaultLanguage,
 } from 'react-native-localization-settings';
 
 const languageDetector = createLanguageDetector();
@@ -53,6 +54,7 @@ export default function App() {
       <Button title={'change to pl'} onPress={changeLanguage('pl-PL')} />
       <Button title={'change to en'} onPress={changeLanguage('en-US')} />
       <Button title={'change to fr'} onPress={changeLanguage('fr-FR')} />
+      <Button title={'unset'} onPress={setDefaultLanguage} />
       <Button
         title={'get language sync'}
         onPress={() => console.log(getLanguage())}