save recently used languages
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(){
|
||||||
|
|||||||
@@ -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)));
|
||||||
|
|||||||
@@ -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 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.</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 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.</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>
|
||||||
Reference in New Issue
Block a user