Fix issue #418 - Define favorite languages in settings to reduce the list when composing

This commit is contained in:
Thomas 2022-11-14 18:47:14 +01:00
parent cdaba2f34d
commit 510ba7ba47
7 changed files with 451 additions and 12 deletions

View File

@ -64,6 +64,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
@ -384,26 +385,41 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
}
} else if (item.getItemId() == R.id.action_language) {
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ComposeActivity.this);
List<Languages.Language> languages = Languages.get(ComposeActivity.this);
Set<String> storedLanguages = sharedpreferences.getStringSet(getString(R.string.SET_SELECTED_LANGUAGE), null);
String[] codesArr = new String[0];
String[] languagesArr = new String[0];
String currentCode = sharedpreferences.getString(getString(R.string.SET_COMPOSE_LANGUAGE) + account.user_id + account.instance, null);
int selection = 0;
if (languages != null) {
codesArr = new String[languages.size()];
languagesArr = new String[languages.size()];
if (storedLanguages != null && storedLanguages.size() > 0) {
int i = 0;
for (Languages.Language language : languages) {
codesArr[i] = language.code;
languagesArr[i] = language.language;
if (currentCode != null && currentCode.equalsIgnoreCase(language.code)) {
codesArr = new String[storedLanguages.size()];
languagesArr = new String[storedLanguages.size()];
for (String language : storedLanguages) {
codesArr[i] = language;
languagesArr[i] = language;
if (currentCode != null && currentCode.equalsIgnoreCase(language)) {
selection = i;
}
i++;
}
} else {
List<Languages.Language> languages = Languages.get(ComposeActivity.this);
if (languages != null) {
codesArr = new String[languages.size()];
languagesArr = new String[languages.size()];
int i = 0;
for (Languages.Language language : languages) {
codesArr[i] = language.code;
languagesArr[i] = language.language;
if (currentCode != null && currentCode.equalsIgnoreCase(language.code)) {
selection = i;
}
i++;
}
}
}
SharedPreferences.Editor editor = sharedpreferences.edit();
AlertDialog.Builder builder = new AlertDialog.Builder(ComposeActivity.this, Helper.dialogStyle());
builder.setTitle(getString(R.string.message_language));

View File

@ -18,6 +18,7 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.preference.EditTextPreference;
import androidx.preference.MultiSelectListPreference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import androidx.preference.SwitchPreferenceCompat;
@ -45,6 +46,11 @@ public class FragmentComposeSettings extends PreferenceFragmentCompat implements
String val = sharedPreferences.getString(getString(R.string.SET_WATERMARK_TEXT) + BaseMainActivity.currentUserID + BaseMainActivity.currentInstance, sharedPreferences.getString(getString(R.string.SET_WATERMARK_TEXT), null));
SET_WATERMARK_TEXT.setText(val);
}
MultiSelectListPreference SET_SELECTED_LANGUAGE = findPreference(getString(R.string.SET_SELECTED_LANGUAGE));
if (SET_SELECTED_LANGUAGE != null) {
SET_SELECTED_LANGUAGE.getContext().setTheme(Helper.dialogStyle());
}
}
@Override

View File

@ -61,6 +61,21 @@ public class FragmentMastodonConversation extends Fragment implements Conversati
private boolean isViewInitialized;
private Conversations initialConversations;
//Allow to recreate data when detaching/attaching fragment
public void recreate() {
initialConversations = null;
if (conversationList != null && conversationList.size() > 0) {
int count = conversationList.size();
conversationList.clear();
conversationList = new ArrayList<>();
if (conversationAdapter != null) {
conversationAdapter.notifyItemRangeRemoved(0, count);
max_id = null;
flagLoading = false;
route(null, false);
}
}
}
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {

View File

@ -113,6 +113,22 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
private NotificationTypeEnum notificationType;
private boolean aggregateNotification;
//Allow to recreate data when detaching/attaching fragment
public void recreate() {
initialNotifications = null;
if (notificationList != null && notificationList.size() > 0) {
int count = notificationList.size();
notificationList.clear();
notificationList = new ArrayList<>();
if (notificationAdapter != null) {
notificationAdapter.notifyItemRangeRemoved(0, count);
max_id = null;
flagLoading = false;
route(null, false);
}
}
}
/**
* Return the position of the status in the ArrayList
*
@ -324,6 +340,8 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
isViewInitialized = true;
if (initialNotifications != null) {
initializeNotificationView(initialNotifications);
} else {
recreate();
}
}
}

View File

@ -170,9 +170,8 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
//Allow to recreate data when detaching/attaching fragment
public void recreate() {
initialStatuses = null;
int count = 0;
if (timelineStatuses != null && timelineStatuses.size() > 0) {
count = timelineStatuses.size();
int count = timelineStatuses.size();
timelineStatuses.clear();
timelineStatuses = new ArrayList<>();
if (statusAdapter != null) {
@ -200,6 +199,8 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
isViewInitialized = true;
if (initialStatuses != null) {
initializeStatusesCommonView(initialStatuses);
} else {
recreate();
}
}
if (timelineStatuses != null && timelineStatuses.size() > 0) {

View File

@ -865,6 +865,376 @@
</string-array>
<string-array name="SET_SELECTED_LANGUAGE_ENTRIES" translatable="false">
<item>aa</item>
<item>ab</item>
<item>ae</item>
<item>af</item>
<item>ak</item>
<item>am</item>
<item>an</item>
<item>ar</item>
<item>as</item>
<item>av</item>
<item>ay</item>
<item>az</item>
<item>ba</item>
<item>be</item>
<item>bg</item>
<item>bh</item>
<item>bi</item>
<item>bm</item>
<item>bn</item>
<item>bo</item>
<item>br</item>
<item>bs</item>
<item>ca</item>
<item>ce</item>
<item>ch</item>
<item>co</item>
<item>cr</item>
<item>cs</item>
<item>cu</item>
<item>cv</item>
<item>cy</item>
<item>da</item>
<item>de</item>
<item>dv</item>
<item>dz</item>
<item>ee</item>
<item>el</item>
<item>en</item>
<item>eo</item>
<item>es</item>
<item>et</item>
<item>eu</item>
<item>fa</item>
<item>ff</item>
<item>fi</item>
<item>fj</item>
<item>fo</item>
<item>fr</item>
<item>fy</item>
<item>ga</item>
<item>gd</item>
<item>gl</item>
<item>gu</item>
<item>gv</item>
<item>ha</item>
<item>he</item>
<item>hi</item>
<item>ho</item>
<item>hr</item>
<item>ht</item>
<item>hu</item>
<item>hy</item>
<item>hz</item>
<item>ia</item>
<item>id</item>
<item>ie</item>
<item>ig</item>
<item>ii</item>
<item>ik</item>
<item>io</item>
<item>is</item>
<item>it</item>
<item>iu</item>
<item>ja</item>
<item>jv</item>
<item>ka</item>
<item>kg</item>
<item>ki</item>
<item>kj</item>
<item>kk</item>
<item>kl</item>
<item>km</item>
<item>kn</item>
<item>ko</item>
<item>kr</item>
<item>ks</item>
<item>ku</item>
<item>kv</item>
<item>kw</item>
<item>ky</item>
<item>la</item>
<item>lb</item>
<item>lg</item>
<item>li</item>
<item>ln</item>
<item>lo</item>
<item>lt</item>
<item>lu</item>
<item>lv</item>
<item>mg</item>
<item>mh</item>
<item>mi</item>
<item>mk</item>
<item>ml</item>
<item>mn</item>
<item>mr</item>
<item>ms</item>
<item>mt</item>
<item>my</item>
<item>na</item>
<item>nb</item>
<item>nd</item>
<item>ne</item>
<item>ng</item>
<item>nl</item>
<item>nn</item>
<item>no</item>
<item>nr</item>
<item>nv</item>
<item>ny</item>
<item>oc</item>
<item>oj</item>
<item>om</item>
<item>or</item>
<item>os</item>
<item>pa</item>
<item>pi</item>
<item>pl</item>
<item>ps</item>
<item>pt</item>
<item>qu</item>
<item>rm</item>
<item>rn</item>
<item>ro</item>
<item>ru</item>
<item>rw</item>
<item>sa</item>
<item>sc</item>
<item>sd</item>
<item>se</item>
<item>sg</item>
<item>si</item>
<item>sk</item>
<item>sl</item>
<item>sn</item>
<item>so</item>
<item>sq</item>
<item>sr</item>
<item>ss</item>
<item>st</item>
<item>su</item>
<item>sv</item>
<item>sw</item>
<item>ta</item>
<item>te</item>
<item>tg</item>
<item>th</item>
<item>ti</item>
<item>tk</item>
<item>tl</item>
<item>tn</item>
<item>to</item>
<item>tr</item>
<item>ts</item>
<item>tt</item>
<item>tw</item>
<item>ty</item>
<item>ug</item>
<item>uk</item>
<item>ur</item>
<item>uz</item>
<item>ve</item>
<item>vi</item>
<item>vo</item>
<item>wa</item>
<item>wo</item>
<item>xh</item>
<item>yi</item>
<item>yo</item>
<item>za</item>
<item>zh</item>
<item>zu</item>
</string-array>
<string-array name="SET_SELECTED_LANGUAGE_VALUES" translatable="false">
<item>Afaraf</item>
<item>аҧсуа бызшәа</item>
<item>avesta</item>
<item>Afrikaans</item>
<item>Akan</item>
<item>አማርኛ</item>
<item>aragonés</item>
<item>اللغة العربية</item>
<item>অসমীয়া</item>
<item>авар мацӀ</item>
<item>aymar aru</item>
<item>azərbaycan dili</item>
<item>башҡорт теле</item>
<item>беларуская мова</item>
<item>български език</item>
<item>भोजपुरी</item>
<item>Bislama</item>
<item>bamanankan</item>
<item>বাংলা</item>
<item>བོད་ཡིག</item>
<item>brezhoneg</item>
<item>bosanski jezik</item>
<item>Català</item>
<item>нохчийн мотт</item>
<item>Chamoru</item>
<item>corsu</item>
<item>ᓀᐦᐃᔭᐍᐏᐣ</item>
<item>čeština</item>
<item>ѩзыкъ словѣньскъ</item>
<item>чӑваш чӗлхи</item>
<item>Cymraeg</item>
<item>dansk</item>
<item>Deutsch</item>
<item>Dhivehi</item>
<item>རྫོང་ཁ</item>
<item>Eʋegbe</item>
<item>Ελληνικά</item>
<item>English</item>
<item>Esperanto</item>
<item>Español</item>
<item>eesti</item>
<item>euskara</item>
<item>فارسی</item>
<item>Fulfulde</item>
<item>suomi</item>
<item>Vakaviti</item>
<item>føroyskt</item>
<item>Français</item>
<item>Frysk</item>
<item>Gaeilge</item>
<item>Gàidhlig</item>
<item>galego</item>
<item>ગુજરાતી</item>
<item>Gaelg</item>
<item>هَوُسَ</item>
<item>עברית</item>
<item>हिन्दी</item>
<item>Hiri Motu</item>
<item>Hrvatski</item>
<item>Kreyòl ayisyen</item>
<item>magyar</item>
<item>Հայերեն</item>
<item>Otjiherero</item>
<item>Interlingua</item>
<item>Bahasa Indonesia</item>
<item>Interlingue</item>
<item>Asụsụ Igbo</item>
<item>ꆈꌠ꒿ Nuosuhxop</item>
<item>Iñupiaq</item>
<item>Ido</item>
<item>Íslenska</item>
<item>Italiano</item>
<item>ᐃᓄᒃᑎᑐᑦ</item>
<item>日本語</item>
<item>basa Jawa</item>
<item>ქართული</item>
<item>Kikongo</item>
<item>Gĩkũyũ</item>
<item>Kuanyama</item>
<item>қазақ тілі</item>
<item>kalaallisut</item>
<item>ខេមរភាសា</item>
<item>ಕನ್ನಡ</item>
<item>한국어</item>
<item>Kanuri</item>
<item>कश्मीरी</item>
<item>Kurmancî</item>
<item>коми кыв</item>
<item>Kernewek</item>
<item>Кыргызча</item>
<item>latine</item>
<item>Lëtzebuergesch</item>
<item>Luganda</item>
<item>Limburgs</item>
<item>Lingála</item>
<item>ພາສາ</item>
<item>lietuvių kalba</item>
<item>Tshiluba</item>
<item>latviešu valoda</item>
<item>fiteny malagasy</item>
<item>Kajin M̧ajeļ</item>
<item>te reo Māori</item>
<item>македонски јазик</item>
<item>മലയാളം</item>
<item>Монгол хэл</item>
<item>मराठी</item>
<item>Bahasa Melayu</item>
<item>Malti</item>
<item>ဗမာစာ</item>
<item>Ekakairũ Naoero</item>
<item>Norsk bokmål</item>
<item>isiNdebele</item>
<item>नेपाली</item>
<item>Owambo</item>
<item>Nederlands</item>
<item>Norsk Nynorsk</item>
<item>Norsk</item>
<item>isiNdebele</item>
<item>Diné bizaad</item>
<item>chiCheŵa</item>
<item>occitan</item>
<item>ᐊᓂᔑᓈᐯᒧᐎᓐ</item>
<item>Afaan Oromoo</item>
<item>ଓଡ଼ିଆ</item>
<item>ирон æвзаг</item>
<item>ਪੰਜਾਬੀ</item>
<item>पाऴि</item>
<item>Polski</item>
<item>پښتو</item>
<item>Português</item>
<item>Runa Simi</item>
<item>rumantsch grischun</item>
<item>Ikirundi</item>
<item>Română</item>
<item>Русский</item>
<item>Ikinyarwanda</item>
<item>संस्कृतम्</item>
<item>sardu</item>
<item>सिन्धी</item>
<item>Davvisámegiella</item>
<item>yângâ tî sängö</item>
<item>සිංහල</item>
<item>slovenčina</item>
<item>slovenščina</item>
<item>chiShona</item>
<item>Soomaaliga</item>
<item>Shqip</item>
<item>српски језик</item>
<item>SiSwati</item>
<item>Sesotho</item>
<item>Basa Sunda</item>
<item>Svenska</item>
<item>Kiswahili</item>
<item>தமிழ்</item>
<item>తెలుగు</item>
<item>тоҷикӣ</item>
<item>ไทย</item>
<item>ትግርኛ</item>
<item>Türkmen</item>
<item>Wikang Tagalog</item>
<item>Setswana</item>
<item>faka Tonga</item>
<item>Türkçe</item>
<item>Xitsonga</item>
<item>татар теле</item>
<item>Twi</item>
<item>Reo Tahiti</item>
<item>ئۇيغۇرچە‎</item>
<item>Українська</item>
<item>اردو</item>
<item>Ўзбек</item>
<item>Tshivenḓa</item>
<item>Tiếng Việt</item>
<item>Volapük</item>
<item>walon</item>
<item>Wollof</item>
<item>isiXhosa</item>
<item>ייִדיש</item>
<item>Yorùbá</item>
<item>Saɯ cueŋƅ</item>
<item>中文</item>
<item>isiZulu</item>
</string-array>
<string-array name="SET_LIVE_TRANSLATE_ENTRIES" translatable="false">
<item>default</item>
<item>en</item>
@ -997,6 +1367,8 @@
<string name="SET_VIDEO_CACHE" translatable="false">SET_VIDEO_CACHE</string>
<string name="SET_WATERMARK" translatable="false">SET_WATERMARK</string>
<string name="SET_UNLISTED_REPLIES" translatable="false">SET_UNLISTED_REPLIES</string>
<string name="SET_SELECTED_LANGUAGE" translatable="false">SET_SELECTED_LANGUAGE</string>
<string name="SET_WATERMARK_TEXT" translatable="false">SET_WATERMARK_TEXT</string>
<string name="SET_PROXY_PASSWORD" translatable="false">SET_PROXY_PASSWORD</string>
@ -1600,4 +1972,6 @@
<string name="restart_the_app">Restart the app?</string>
<string name="restart">Restart</string>
<string name="restart_the_app_theme">You should restart the application to apply changes.</string>
<string name="set_language_picker_title">Languages in picker</string>
<string name="set_language_picker">Allow to reduce the list of languages in the picker when composing a message.</string>
</resources>

View File

@ -38,6 +38,15 @@
app:summary="@string/set_unlisted_replies_indication"
app:title="@string/set_unlisted_replies" />
<MultiSelectListPreference
app:entries="@array/SET_SELECTED_LANGUAGE_VALUES"
app:entryValues="@array/SET_SELECTED_LANGUAGE_ENTRIES"
app:iconSpaceReserved="false"
app:key="@string/SET_SELECTED_LANGUAGE"
app:summary="@string/set_language_picker"
app:title="@string/set_language_picker_title"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:iconSpaceReserved="false"