save recently used languages

This commit is contained in:
sk
2022-12-09 20:48:51 +01:00
parent 4e6ba84bb3
commit 9667a32e44
4 changed files with 41 additions and 15 deletions

View File

@@ -2,12 +2,35 @@ package org.joinmastodon.android;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Build;
import android.os.LocaleList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
public class GlobalUserPreferences{ public class GlobalUserPreferences{
public static boolean playGifs; public static boolean playGifs;
public static boolean useCustomTabs; public static boolean useCustomTabs;
public static boolean trueBlackTheme; public static boolean trueBlackTheme;
public static ThemePreference theme; public static ThemePreference theme;
public static List<String> recentLanguages;
private static String defaultRecentLanguages;
static {
List<Locale> systemLocales = new ArrayList<>();;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
systemLocales.add(Resources.getSystem().getConfiguration().locale);
} else {
LocaleList localeList = Resources.getSystem().getConfiguration().getLocales();
for (int i = 0; i < localeList.size(); i++) systemLocales.add(localeList.get(i));
}
defaultRecentLanguages = systemLocales.stream().map(Locale::getLanguage).collect(Collectors.joining(","));
}
private static SharedPreferences getPrefs(){ private static SharedPreferences getPrefs(){
return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE); return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE);
@@ -19,6 +42,7 @@ public class GlobalUserPreferences{
useCustomTabs=prefs.getBoolean("useCustomTabs", true); useCustomTabs=prefs.getBoolean("useCustomTabs", true);
trueBlackTheme=prefs.getBoolean("trueBlackTheme", false); trueBlackTheme=prefs.getBoolean("trueBlackTheme", false);
theme=ThemePreference.values()[prefs.getInt("theme", 0)]; theme=ThemePreference.values()[prefs.getInt("theme", 0)];
recentLanguages=Arrays.stream(prefs.getString("recentLanguages", defaultRecentLanguages).split(",")).filter(s->!s.isEmpty()).collect(Collectors.toList());
} }
public static void save(){ public static void save(){
@@ -27,6 +51,7 @@ public class GlobalUserPreferences{
.putBoolean("useCustomTabs", useCustomTabs) .putBoolean("useCustomTabs", useCustomTabs)
.putBoolean("trueBlackTheme", trueBlackTheme) .putBoolean("trueBlackTheme", trueBlackTheme)
.putInt("theme", theme.ordinal()) .putInt("theme", theme.ordinal())
.putString("recentLanguages", String.join(",", recentLanguages))
.apply(); .apply();
} }

View File

@@ -7,7 +7,6 @@ import android.content.ClipData;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Outline; import android.graphics.Outline;
@@ -20,7 +19,6 @@ import android.media.MediaMetadataRetriever;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.LocaleList;
import android.os.Parcelable; import android.os.Parcelable;
import android.provider.OpenableColumns; import android.provider.OpenableColumns;
import android.text.Editable; import android.text.Editable;
@@ -57,6 +55,7 @@ import android.widget.Toast;
import com.twitter.twittertext.TwitterTextEmojiRegex; import com.twitter.twittertext.TwitterTextEmojiRegex;
import org.joinmastodon.android.E; import org.joinmastodon.android.E;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.api.MastodonAPIController; import org.joinmastodon.android.api.MastodonAPIController;
@@ -633,22 +632,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
Menu languageMenu = languagePopup.getMenu(); Menu languageMenu = languagePopup.getMenu();
// TODO: add recently used languages for (String recentLanguage : GlobalUserPreferences.recentLanguages) {
Locale loc = new Locale(recentLanguage);
List<Locale> systemLocales = new ArrayList<>();;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
systemLocales.add(Resources.getSystem().getConfiguration().locale);
} else {
LocaleList localeList = Resources.getSystem().getConfiguration().getLocales();
for (int i = 0; i < localeList.size(); i++) systemLocales.add(localeList.get(i));
}
for (int i = 0; i < systemLocales.size(); i++) {
Locale loc = new Locale(systemLocales.get(i).getLanguage());
languageMenu.add(0, allIsoLanguages.indexOf(loc), Menu.NONE, loc.getDisplayLanguage(Locale.getDefault())); languageMenu.add(0, allIsoLanguages.indexOf(loc), Menu.NONE, loc.getDisplayLanguage(Locale.getDefault()));
} }
SubMenu allLanguagesMenu = languageMenu.addSubMenu(0, -1, Menu.NONE, R.string.all_languages); SubMenu allLanguagesMenu = languageMenu.addSubMenu(R.string.all_languages);
for (int i = 0; i < allIsoLanguages.size(); i++) { for (int i = 0; i < allIsoLanguages.size(); i++) {
Locale loc = allIsoLanguages.get(i); Locale loc = allIsoLanguages.get(i);
allLanguagesMenu.add(0, i, Menu.NONE, loc.getDisplayLanguage(Locale.getDefault())); allLanguagesMenu.add(0, i, Menu.NONE, loc.getDisplayLanguage(Locale.getDefault()));
@@ -805,6 +794,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
.setCallback(resCallback) .setCallback(resCallback)
.exec(accountID); .exec(accountID);
} }
List<String> recentLanguages = new ArrayList<>(GlobalUserPreferences.recentLanguages);
recentLanguages.remove(language);
recentLanguages.add(0, language);
GlobalUserPreferences.recentLanguages = recentLanguages.stream().limit(4).collect(Collectors.toList());
GlobalUserPreferences.save();
} }
private boolean hasDraft(){ private boolean hasDraft(){

View File

@@ -120,6 +120,10 @@ public class SettingsFragment extends MastodonToolbarFragment{
items.add(new RedHeaderItem(R.string.settings_spicy)); items.add(new RedHeaderItem(R.string.settings_spicy));
items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache)); items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache));
items.add(new TextItem(R.string.clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.clear_recent_languages, R.string.confirm_clear_recent_languages, R.string.clear, ()->{
GlobalUserPreferences.recentLanguages.clear();
GlobalUserPreferences.save();
})));
items.add(new TextItem(R.string.log_out, this::confirmLogOut)); items.add(new TextItem(R.string.log_out, this::confirmLogOut));
items.add(new FooterItem(getString(R.string.settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE))); items.add(new FooterItem(getString(R.string.settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)));

View File

@@ -407,4 +407,6 @@
<string name="welcome_page3_text">Different people choose different servers for any number of reasons. art.example is a great place for artists, while glasgow.example might be a good pick for Scots.\n\nYou cant go wrong with any of our recommend servers, so regardless of which one you pick (or if you enter your own in the server search bar), youll never miss a beat anywhere.</string> <string name="welcome_page3_text">Different people choose different servers for any number of reasons. art.example is a great place for artists, while glasgow.example might be a good pick for Scots.\n\nYou cant go wrong with any of our recommend servers, so regardless of which one you pick (or if you enter your own in the server search bar), youll never miss a beat anywhere.</string>
<string name="post_language">Language: %s</string> <string name="post_language">Language: %s</string>
<string name="all_languages">All languages</string> <string name="all_languages">All languages</string>
<string name="clear_recent_languages">Clear recent languages</string>
<string name="confirm_clear_recent_languages">Are you sure you want to clear your recently used languages?</string>
</resources> </resources>