From 9667a32e44ede1dc2b94b6c367748f992b8bc2bb Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 9 Dec 2022 20:48:51 +0100 Subject: [PATCH] save recently used languages --- .../android/GlobalUserPreferences.java | 25 +++++++++++++++++++ .../android/fragments/ComposeFragment.java | 25 ++++++++----------- .../android/fragments/SettingsFragment.java | 4 +++ mastodon/src/main/res/values/strings.xml | 2 ++ 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 5ffa48d54..f46d0e832 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -2,12 +2,35 @@ package org.joinmastodon.android; import android.content.Context; 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 static boolean playGifs; public static boolean useCustomTabs; public static boolean trueBlackTheme; public static ThemePreference theme; + public static List recentLanguages; + + private static String defaultRecentLanguages; + + static { + List 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(){ return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE); @@ -19,6 +42,7 @@ public class GlobalUserPreferences{ useCustomTabs=prefs.getBoolean("useCustomTabs", true); trueBlackTheme=prefs.getBoolean("trueBlackTheme", false); 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(){ @@ -27,6 +51,7 @@ public class GlobalUserPreferences{ .putBoolean("useCustomTabs", useCustomTabs) .putBoolean("trueBlackTheme", trueBlackTheme) .putInt("theme", theme.ordinal()) + .putString("recentLanguages", String.join(",", recentLanguages)) .apply(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 00e264a8a..b0dc03654 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -7,7 +7,6 @@ import android.content.ClipData; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; -import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Outline; @@ -20,7 +19,6 @@ import android.media.MediaMetadataRetriever; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.LocaleList; import android.os.Parcelable; import android.provider.OpenableColumns; import android.text.Editable; @@ -57,6 +55,7 @@ import android.widget.Toast; import com.twitter.twittertext.TwitterTextEmojiRegex; import org.joinmastodon.android.E; +import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIController; @@ -633,22 +632,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr Menu languageMenu = languagePopup.getMenu(); - // TODO: add recently used languages - - List 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()); + for (String recentLanguage : GlobalUserPreferences.recentLanguages) { + Locale loc = new Locale(recentLanguage); 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++) { Locale loc = allIsoLanguages.get(i); allLanguagesMenu.add(0, i, Menu.NONE, loc.getDisplayLanguage(Locale.getDefault())); @@ -805,6 +794,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr .setCallback(resCallback) .exec(accountID); } + + List 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(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index cc642d9a5..e98a6107d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -120,6 +120,10 @@ public class SettingsFragment extends MastodonToolbarFragment{ 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.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 FooterItem(getString(R.string.settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE))); diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 2c89ed9da..b3b3a0ba1 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -407,4 +407,6 @@ 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 can’t 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), you’ll never miss a beat anywhere. Language: %s All languages + Clear recent languages + Are you sure you want to clear your recently used languages? \ No newline at end of file