mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Move call to setApplicationLocales
This commit is contained in:
		| @@ -190,6 +190,8 @@ public class MainActivity extends AppCompatActivity { | ||||
|                 && ReleaseVersionUtil.INSTANCE.isReleaseApk()) { | ||||
|             UpdateSettingsFragment.askForConsentToUpdateChecks(this); | ||||
|         } | ||||
|  | ||||
|         Localization.migrateAppLanguageSettingIfNecessary(getApplicationContext()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -6,12 +6,9 @@ import android.content.Context; | ||||
| import android.content.SharedPreferences; | ||||
| import android.os.Build; | ||||
| import android.os.Environment; | ||||
| import android.util.Log; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.StringRes; | ||||
| import androidx.appcompat.app.AppCompatDelegate; | ||||
| import androidx.core.os.LocaleListCompat; | ||||
| import androidx.preference.PreferenceManager; | ||||
|  | ||||
| import org.schabi.newpipe.App; | ||||
| @@ -45,7 +42,6 @@ import java.util.Set; | ||||
|  * Helper class for global settings. | ||||
|  */ | ||||
| public final class NewPipeSettings { | ||||
|     private static final String TAG = NewPipeSettings.class.toString(); | ||||
|     private NewPipeSettings() { } | ||||
|  | ||||
|     public static void initSettings(final Context context) { | ||||
| @@ -68,7 +64,6 @@ public final class NewPipeSettings { | ||||
|         saveDefaultAudioDownloadDirectory(context); | ||||
|  | ||||
|         disableMediaTunnelingIfNecessary(context); | ||||
|         migrateAppLanguageSettingIfNecessary(context); | ||||
|     } | ||||
|  | ||||
|     static void saveDefaultVideoDownloadDirectory(final Context context) { | ||||
| @@ -189,32 +184,4 @@ public final class NewPipeSettings { | ||||
|                             DeviceUtils.MEDIA_TUNNELING_DEVICE_BLACKLIST_VERSION).apply(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static void migrateAppLanguageSettingIfNecessary(@NonNull final Context context) { | ||||
|         // Starting with pull request #12093, NewPipe on Android 13+ exclusively uses Android's | ||||
|         // public per-app language APIs to read and set the UI language for NewPipe. | ||||
|         // If running on Android 13+, the following migration will move any existing custom | ||||
|         // app language in SharedPreferences to use the public per-app language APIs instead. | ||||
|         if (Build.VERSION.SDK_INT >= 33) { | ||||
|             final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); | ||||
|             final String appLanguageKey = context.getString(R.string.app_language_key); | ||||
|             final String appLanguageValue = sp.getString(appLanguageKey, null); | ||||
|             if (appLanguageValue != null) { | ||||
|                 sp.edit().remove(appLanguageKey).apply(); | ||||
|                 final String appLanguageDefaultValue = | ||||
|                         context.getString(R.string.default_localization_key); | ||||
|                 if (!appLanguageValue.equals(appLanguageDefaultValue)) { | ||||
|                     try { | ||||
|                         AppCompatDelegate.setApplicationLocales( | ||||
|                                 LocaleListCompat.forLanguageTags(appLanguageValue) | ||||
|                         ); | ||||
|                     } catch (final RuntimeException e) { | ||||
|                         Log.e(TAG, "Failed to migrate previous custom app language " | ||||
|                                 + "setting to public per-app language APIs" | ||||
|                         ); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -12,6 +12,7 @@ import android.os.Build; | ||||
| import android.text.TextUtils; | ||||
| import android.text.format.DateUtils; | ||||
| import android.util.DisplayMetrics; | ||||
| import android.util.Log; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| @@ -19,6 +20,7 @@ import androidx.annotation.PluralsRes; | ||||
| import androidx.annotation.StringRes; | ||||
| import androidx.appcompat.app.AppCompatDelegate; | ||||
| import androidx.core.math.MathUtils; | ||||
| import androidx.core.os.LocaleListCompat; | ||||
| import androidx.preference.PreferenceManager; | ||||
|  | ||||
| import org.ocpsoft.prettytime.PrettyTime; | ||||
| @@ -65,6 +67,7 @@ import java.util.stream.Collectors; | ||||
|  */ | ||||
|  | ||||
| public final class Localization { | ||||
|     private static final String TAG = Localization.class.toString(); | ||||
|     public static final String DOT_SEPARATOR = " • "; | ||||
|     private static PrettyTime prettyTime; | ||||
|  | ||||
| @@ -433,4 +436,32 @@ public final class Localization { | ||||
|         final int safeCount = (int) MathUtils.clamp(count, Integer.MIN_VALUE, Integer.MAX_VALUE); | ||||
|         return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); | ||||
|     } | ||||
|  | ||||
|     public static void migrateAppLanguageSettingIfNecessary(@NonNull final Context context) { | ||||
|         // Starting with pull request #12093, NewPipe on Android 13+ exclusively uses Android's | ||||
|         // public per-app language APIs to read and set the UI language for NewPipe. | ||||
|         // If running on Android 13+, the following code will migrate any existing custom | ||||
|         // app language in SharedPreferences to use the public per-app language APIs instead. | ||||
|         if (Build.VERSION.SDK_INT >= 33) { | ||||
|             final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); | ||||
|             final String appLanguageKey = context.getString(R.string.app_language_key); | ||||
|             final String appLanguageValue = sp.getString(appLanguageKey, null); | ||||
|             if (appLanguageValue != null) { | ||||
|                 sp.edit().remove(appLanguageKey).apply(); | ||||
|                 final String appLanguageDefaultValue = | ||||
|                         context.getString(R.string.default_localization_key); | ||||
|                 if (!appLanguageValue.equals(appLanguageDefaultValue)) { | ||||
|                     try { | ||||
|                         AppCompatDelegate.setApplicationLocales( | ||||
|                                 LocaleListCompat.forLanguageTags(appLanguageValue) | ||||
|                         ); | ||||
|                     } catch (final RuntimeException e) { | ||||
|                         Log.e(TAG, "Failed to migrate previous custom app language " | ||||
|                                 + "setting to public per-app language APIs" | ||||
|                         ); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Miles Krell
					Miles Krell