11package org .schabi .newpipe .settings ;
22
33import android .content .Context ;
4+ import android .content .Intent ;
5+ import android .net .Uri ;
6+ import android .os .Build ;
47import android .os .Bundle ;
8+ import android .provider .Settings ;
59import android .util .Log ;
610import android .widget .Toast ;
711
12+ import androidx .appcompat .app .AppCompatDelegate ;
813import androidx .preference .Preference ;
914
1015import org .schabi .newpipe .DownloaderImpl ;
1722import org .schabi .newpipe .util .image .PreferredImageQuality ;
1823
1924import java .io .IOException ;
25+ import java .util .Locale ;
2026
2127public class ContentSettingsFragment extends BasePreferenceFragment {
2228 private String youtubeRestrictedModeEnabledKey ;
2329
24- private Localization initialSelectedLocalization ;
25- private ContentCountry initialSelectedContentCountry ;
2630 private String initialLanguage ;
2731
2832 @ Override
@@ -31,12 +35,28 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
3135
3236 addPreferencesFromResourceRegistry ();
3337
34- initialSelectedLocalization = org .schabi .newpipe .util .Localization
35- .getPreferredLocalization (requireContext ());
36- initialSelectedContentCountry = org .schabi .newpipe .util .Localization
37- .getPreferredContentCountry (requireContext ());
3838 initialLanguage = defaultPreferences .getString (getString (R .string .app_language_key ), "en" );
3939
40+ if (Build .VERSION .SDK_INT >= 33 ) {
41+ requirePreference (R .string .app_language_key ).setVisible (false );
42+ final Preference newAppLanguagePref =
43+ requirePreference (R .string .app_language_android_13_and_up_key );
44+ newAppLanguagePref .setSummaryProvider (preference -> {
45+ final Locale customLocale = AppCompatDelegate .getApplicationLocales ().get (0 );
46+ if (customLocale != null ) {
47+ return customLocale .getDisplayName ();
48+ }
49+ return getString (R .string .systems_language );
50+ });
51+ newAppLanguagePref .setOnPreferenceClickListener (preference -> {
52+ final Intent intent = new Intent (Settings .ACTION_APP_LOCALE_SETTINGS )
53+ .setData (Uri .fromParts ("package" , requireContext ().getPackageName (), null ));
54+ startActivity (intent );
55+ return true ;
56+ });
57+ newAppLanguagePref .setVisible (true );
58+ }
59+
4060 final Preference imageQualityPreference = requirePreference (R .string .image_quality_key );
4161 imageQualityPreference .setOnPreferenceChangeListener (
4262 (preference , newValue ) -> {
@@ -72,19 +92,21 @@ public boolean onPreferenceTreeClick(final Preference preference) {
7292 public void onDestroy () {
7393 super .onDestroy ();
7494
75- final Localization selectedLocalization = org .schabi .newpipe .util .Localization
76- .getPreferredLocalization (requireContext ());
77- final ContentCountry selectedContentCountry = org .schabi .newpipe .util .Localization
78- .getPreferredContentCountry (requireContext ());
7995 final String selectedLanguage =
8096 defaultPreferences .getString (getString (R .string .app_language_key ), "en" );
8197
82- if (!selectedLocalization .equals (initialSelectedLocalization )
83- || !selectedContentCountry .equals (initialSelectedContentCountry )
84- || !selectedLanguage .equals (initialLanguage )) {
85- Toast .makeText (requireContext (), R .string .localization_changes_requires_app_restart ,
86- Toast .LENGTH_LONG ).show ();
87-
98+ if (!selectedLanguage .equals (initialLanguage )) {
99+ if (Build .VERSION .SDK_INT < 33 ) {
100+ Toast .makeText (
101+ requireContext (),
102+ R .string .localization_changes_requires_app_restart ,
103+ Toast .LENGTH_LONG
104+ ).show ();
105+ }
106+ final Localization selectedLocalization = org .schabi .newpipe .util .Localization
107+ .getPreferredLocalization (requireContext ());
108+ final ContentCountry selectedContentCountry = org .schabi .newpipe .util .Localization
109+ .getPreferredContentCountry (requireContext ());
88110 NewPipe .setupLocalization (selectedLocalization , selectedContentCountry );
89111 }
90112 }
0 commit comments