diff --git a/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java b/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java index 421440ea7..93640756e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java +++ b/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java @@ -6,9 +6,12 @@ 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; @@ -42,6 +45,7 @@ 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) { @@ -64,6 +68,7 @@ public final class NewPipeSettings { saveDefaultAudioDownloadDirectory(context); disableMediaTunnelingIfNecessary(context); + migrateAppLanguageSettingIfNecessary(context); } static void saveDefaultVideoDownloadDirectory(final Context context) { @@ -184,4 +189,32 @@ 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" + ); + } + } + } + } + } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingMigrations.java b/app/src/main/java/org/schabi/newpipe/settings/SettingMigrations.java index ce5e3a341..d731f2f5e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingMigrations.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingMigrations.java @@ -2,12 +2,9 @@ package org.schabi.newpipe.settings; import android.content.Context; import android.content.SharedPreferences; -import android.os.Build; import android.util.Log; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.core.os.LocaleListCompat; import androidx.preference.PreferenceManager; import org.schabi.newpipe.App; @@ -146,36 +143,6 @@ public final class SettingMigrations { } }; - public static final Migration MIGRATION_6_7 = new Migration(6, 7) { - @Override - protected void migrate(@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 String appLanguageDefaultValue = - context.getString(R.string.default_localization_key); - final String appLanguageKey = context.getString(R.string.app_language_key); - final String appLanguageCurrentValue = sp.getString(appLanguageKey, null); - if (appLanguageCurrentValue != null) { - sp.edit().remove(appLanguageKey).apply(); - if (!appLanguageCurrentValue.equals(appLanguageDefaultValue)) { - try { - AppCompatDelegate.setApplicationLocales( - LocaleListCompat.forLanguageTags(appLanguageCurrentValue) - ); - } catch (final RuntimeException e) { - Log.e(TAG, "Failed to migrate previous custom app language " - + "setting to public per-app language APIs" - ); - } - } - } - } - } - }; - /** * List of all implemented migrations. *
@@ -189,13 +156,12 @@ public final class SettingMigrations { MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6, - MIGRATION_6_7, }; /** * Version number for preferences. Must be incremented every time a migration is necessary. */ - private static final int VERSION = 7; + private static final int VERSION = 6; public static void runMigrationsIfNeeded(@NonNull final Context context) {