Skip to content

Commit 87693a2

Browse files
committed
Redirect to per-app language settings on Android 13+
1 parent b888dc7 commit 87693a2

4 files changed

Lines changed: 40 additions & 0 deletions

File tree

app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package org.schabi.newpipe.settings;
22

33
import android.content.Context;
4+
import android.content.Intent;
5+
import android.net.Uri;
6+
import android.os.Build;
47
import android.os.Bundle;
8+
import android.provider.Settings;
59
import android.util.Log;
610
import android.widget.Toast;
711

12+
import androidx.appcompat.app.AppCompatDelegate;
813
import androidx.preference.Preference;
914

1015
import org.schabi.newpipe.DownloaderImpl;
@@ -17,6 +22,7 @@
1722
import org.schabi.newpipe.util.image.PreferredImageQuality;
1823

1924
import java.io.IOException;
25+
import java.util.Locale;
2026

2127
public class ContentSettingsFragment extends BasePreferenceFragment {
2228
private String youtubeRestrictedModeEnabledKey;
@@ -37,6 +43,26 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
3743
.getPreferredContentCountry(requireContext());
3844
initialLanguage = defaultPreferences.getString(getString(R.string.app_language_key), "en");
3945

46+
if (Build.VERSION.SDK_INT >= 33) {
47+
requirePreference(R.string.app_language_key).setVisible(false);
48+
final Preference newAppLanguagePref =
49+
requirePreference(R.string.app_language_android_13_and_up_key);
50+
newAppLanguagePref.setSummaryProvider(preference -> {
51+
final Locale customLocale = AppCompatDelegate.getApplicationLocales().get(0);
52+
if (customLocale != null) {
53+
return customLocale.getDisplayName();
54+
}
55+
return getString(R.string.systems_language);
56+
});
57+
newAppLanguagePref.setOnPreferenceClickListener(preference -> {
58+
final Intent intent = new Intent(Settings.ACTION_APP_LOCALE_SETTINGS)
59+
.setData(Uri.fromParts("package", requireContext().getPackageName(), null));
60+
startActivity(intent);
61+
return true;
62+
});
63+
newAppLanguagePref.setVisible(true);
64+
}
65+
4066
final Preference imageQualityPreference = requirePreference(R.string.image_quality_key);
4167
imageQualityPreference.setOnPreferenceChangeListener(
4268
(preference, newValue) -> {

app/src/main/java/org/schabi/newpipe/util/Localization.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import androidx.annotation.Nullable;
1818
import androidx.annotation.PluralsRes;
1919
import androidx.annotation.StringRes;
20+
import androidx.appcompat.app.AppCompatDelegate;
2021
import androidx.core.math.MathUtils;
2122
import androidx.preference.PreferenceManager;
2223

@@ -39,6 +40,7 @@
3940
import java.util.Arrays;
4041
import java.util.List;
4142
import java.util.Locale;
43+
import java.util.Objects;
4244
import java.util.stream.Collectors;
4345

4446

@@ -101,6 +103,10 @@ public static Locale getPreferredLocale(@NonNull final Context context) {
101103
}
102104

103105
public static Locale getAppLocale(@NonNull final Context context) {
106+
if (Build.VERSION.SDK_INT >= 33) {
107+
final Locale customLocale = AppCompatDelegate.getApplicationLocales().get(0);
108+
return Objects.requireNonNullElseGet(customLocale, Locale::getDefault);
109+
}
104110
return getLocaleFromPrefs(context, R.string.app_language_key);
105111
}
106112

app/src/main/res/values/settings_keys.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@
353353
<string name="playback_skip_silence_key">playback_skip_silence_key</string>
354354

355355
<string name="app_language_key">app_language_key</string>
356+
<string name="app_language_android_13_and_up_key">app_language_android_13_and_up_key</string>
356357

357358
<string name="feed_update_threshold_key">feed_update_threshold_key</string>
358359
<string name="feed_update_threshold_default_value">300</string>

app/src/main/res/xml/content_settings.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
app:iconSpaceReserved="false"
1414
app:useSimpleSummaryProvider="true" />
1515

16+
<Preference
17+
android:key="@string/app_language_android_13_and_up_key"
18+
android:title="@string/app_language_title"
19+
app:isPreferenceVisible="false"
20+
app:singleLineTitle="false"
21+
app:iconSpaceReserved="false" />
22+
1623
<ListPreference
1724
android:defaultValue="@string/default_localization_key"
1825
android:entries="@array/language_names"

0 commit comments

Comments
 (0)