summaryrefslogtreecommitdiffstats
path: root/app/src
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2022-07-19 18:18:03 +0200
committerThomas <tschneider.ac@gmail.com>2022-07-19 18:18:03 +0200
commit18c3424ed3d3a4ed3ffefd2d38aa5e6596726d13 (patch)
treecbf083c1481f1a321ee3820a9a3d04e0aefbf121 /app/src
parenteaac079d8973245c6f011fefc3760d67d4f05571 (diff)
Fix issue #244 - Add support for setting post language
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/assets/languages/iso_639_1.json730
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ComposeActivity.java44
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/app/Languages.java62
-rw-r--r--app/src/main/java/app/fedilab/android/jobs/NotificationsWorker.java2
-rw-r--r--app/src/main/java/app/fedilab/android/jobs/ScheduleThreadWorker.java2
-rw-r--r--app/src/main/java/app/fedilab/android/services/PostMessageService.java7
-rw-r--r--app/src/main/java/app/fedilab/android/services/ThreadMessageService.java3
-rw-r--r--app/src/main/res/drawable/ic_baseline_language_24.xml10
-rw-r--r--app/src/main/res/menu/menu_compose.xml5
-rw-r--r--app/src/main/res/values/strings.xml2
10 files changed, 864 insertions, 3 deletions
diff --git a/app/src/main/assets/languages/iso_639_1.json b/app/src/main/assets/languages/iso_639_1.json
new file mode 100644
index 000000000..00199b74c
--- /dev/null
+++ b/app/src/main/assets/languages/iso_639_1.json
@@ -0,0 +1,730 @@
+[
+ {
+ "code": "aa",
+ "language": "Afaraf"
+ },
+ {
+ "code": "ab",
+ "language": "аҧсуа бызшәа"
+ },
+ {
+ "code": "ae",
+ "language": "avesta"
+ },
+ {
+ "code": "af",
+ "language": "Afrikaans"
+ },
+ {
+ "code": "ak",
+ "language": "Akan"
+ },
+ {
+ "code": "am",
+ "language": "አማርኛ"
+ },
+ {
+ "code": "an",
+ "language": "aragonés"
+ },
+ {
+ "code": "ar",
+ "language": "اللغة العربية"
+ },
+ {
+ "code": "as",
+ "language": "অসমীয়া"
+ },
+ {
+ "code": "av",
+ "language": "авар мацӀ"
+ },
+ {
+ "code": "ay",
+ "language": "aymar aru"
+ },
+ {
+ "code": "az",
+ "language": "azərbaycan dili"
+ },
+ {
+ "code": "ba",
+ "language": "башҡорт теле"
+ },
+ {
+ "code": "be",
+ "language": "беларуская мова"
+ },
+ {
+ "code": "bg",
+ "language": "български език"
+ },
+ {
+ "code": "bh",
+ "language": "भोजपुरी"
+ },
+ {
+ "code": "bi",
+ "language": "Bislama"
+ },
+ {
+ "code": "bm",
+ "language": "bamanankan"
+ },
+ {
+ "code": "bn",
+ "language": "বাংলা"
+ },
+ {
+ "code": "bo",
+ "language": "བོད་ཡིག"
+ },
+ {
+ "code": "br",
+ "language": "brezhoneg"
+ },
+ {
+ "code": "bs",
+ "language": "bosanski jezik"
+ },
+ {
+ "code": "ca",
+ "language": "Català"
+ },
+ {
+ "code": "ce",
+ "language": "нохчийн мотт"
+ },
+ {
+ "code": "ch",
+ "language": "Chamoru"
+ },
+ {
+ "code": "co",
+ "language": "corsu"
+ },
+ {
+ "code": "cr",
+ "language": "ᓀᐦᐃᔭᐍᐏᐣ"
+ },
+ {
+ "code": "cs",
+ "language": "čeština"
+ },
+ {
+ "code": "cu",
+ "language": "ѩзыкъ словѣньскъ"
+ },
+ {
+ "code": "cv",
+ "language": "чӑваш чӗлхи"
+ },
+ {
+ "code": "cy",
+ "language": "Cymraeg"
+ },
+ {
+ "code": "da",
+ "language": "dansk"
+ },
+ {
+ "code": "de",
+ "language": "Deutsch"
+ },
+ {
+ "code": "dv",
+ "language": "Dhivehi"
+ },
+ {
+ "code": "dz",
+ "language": "རྫོང་ཁ"
+ },
+ {
+ "code": "ee",
+ "language": "Eʋegbe"
+ },
+ {
+ "code": "el",
+ "language": "Ελληνικά"
+ },
+ {
+ "code": "en",
+ "language": "English"
+ },
+ {
+ "code": "eo",
+ "language": "Esperanto"
+ },
+ {
+ "code": "es",
+ "language": "Español"
+ },
+ {
+ "code": "et",
+ "language": "eesti"
+ },
+ {
+ "code": "eu",
+ "language": "euskara"
+ },
+ {
+ "code": "fa",
+ "language": "فارسی"
+ },
+ {
+ "code": "ff",
+ "language": "Fulfulde"
+ },
+ {
+ "code": "fi",
+ "language": "suomi"
+ },
+ {
+ "code": "fj",
+ "language": "Vakaviti"
+ },
+ {
+ "code": "fo",
+ "language": "føroyskt"
+ },
+ {
+ "code": "fr",
+ "language": "Français"
+ },
+ {
+ "code": "fy",
+ "language": "Frysk"
+ },
+ {
+ "code": "ga",
+ "language": "Gaeilge"
+ },
+ {
+ "code": "gd",
+ "language": "Gàidhlig"
+ },
+ {
+ "code": "gl",
+ "language": "galego"
+ },
+ {
+ "code": "gu",
+ "language": "ગુજરાતી"
+ },
+ {
+ "code": "gv",
+ "language": "Gaelg"
+ },
+ {
+ "code": "ha",
+ "language": "هَوُسَ"
+ },
+ {
+ "code": "he",
+ "language": "עברית"
+ },
+ {
+ "code": "hi",
+ "language": "हिन्दी"
+ },
+ {
+ "code": "ho",
+ "language": "Hiri Motu"
+ },
+ {
+ "code": "hr",
+ "language": "Hrvatski"
+ },
+ {
+ "code": "ht",
+ "language": "Kreyòl ayisyen"
+ },
+ {
+ "code": "hu",
+ "language": "magyar"
+ },
+ {
+ "code": "hy",
+ "language": "Հայերեն"
+ },
+ {
+ "code": "hz",
+ "language": "Otjiherero"
+ },
+ {
+ "code": "ia",
+ "language": "Interlingua"
+ },
+ {
+ "code": "id",
+ "language": "Bahasa Indonesia"
+ },
+ {
+ "code": "ie",
+ "language": "Interlingue"
+ },
+ {
+ "code": "ig",
+ "language": "Asụsụ Igbo"
+ },
+ {
+ "code": "ii",
+ "language": "ꆈꌠ꒿ Nuosuhxop"
+ },
+ {
+ "code": "ik",
+ "language": "Iñupiaq"
+ },
+ {
+ "code": "io",
+ "language": "Ido"
+ },
+ {
+ "code": "is",
+ "language": "Íslenska"
+ },
+ {
+ "code": "it",
+ "language": "Italiano"
+ },
+ {
+ "code": "iu",
+ "language": "ᐃᓄᒃᑎᑐᑦ"
+ },
+ {
+ "code": "ja",
+ "language": "日本語"
+ },
+ {
+ "code": "jv",
+ "language": "basa Jawa"
+ },
+ {
+ "code": "ka",
+ "language": "ქართული"
+ },
+ {
+ "code": "kg",
+ "language": "Kikongo"
+ },
+ {
+ "code": "ki",
+ "language": "Gĩkũyũ"
+ },
+ {
+ "code": "kj",
+ "language": "Kuanyama"
+ },
+ {
+ "code": "kk",
+ "language": "қазақ тілі"
+ },
+ {
+ "code": "kl",
+ "language": "kalaallisut"
+ },
+ {
+ "code": "km",
+ "language": "ខេមរភាសា"
+ },
+ {
+ "code": "kn",
+ "language": "ಕನ್ನಡ"
+ },
+ {
+ "code": "ko",
+ "language": "한국어"
+ },
+ {
+ "code": "kr",
+ "language": "Kanuri"
+ },
+ {
+ "code": "ks",
+ "language": "कश्मीरी"
+ },
+ {
+ "code": "ku",
+ "language": "Kurmancî"
+ },
+ {
+ "code": "kv",
+ "language": "коми кыв"
+ },
+ {
+ "code": "kw",
+ "language": "Kernewek"
+ },
+ {
+ "code": "ky",
+ "language": "Кыргызча"
+ },
+ {
+ "code": "la",
+ "language": "latine"
+ },
+ {
+ "code": "lb",
+ "language": "Lëtzebuergesch"
+ },
+ {
+ "code": "lg",
+ "language": "Luganda"
+ },
+ {
+ "code": "li",
+ "language": "Limburgs"
+ },
+ {
+ "code": "ln",
+ "language": "Lingála"
+ },
+ {
+ "code": "lo",
+ "language": "ພາສາ"
+ },
+ {
+ "code": "lt",
+ "language": "lietuvių kalba"
+ },
+ {
+ "code": "lu",
+ "language": "Tshiluba"
+ },
+ {
+ "code": "lv",
+ "language": "latviešu valoda"
+ },
+ {
+ "code": "mg",
+ "language": "fiteny malagasy"
+ },
+ {
+ "code": "mh",
+ "language": "Kajin M̧ajeļ"
+ },
+ {
+ "code": "mi",
+ "language": "te reo Māori"
+ },
+ {
+ "code": "mk",
+ "language": "македонски јазик"
+ },
+ {
+ "code": "ml",
+ "language": "മലയാളം"
+ },
+ {
+ "code": "mn",
+ "language": "Монгол хэл"
+ },
+ {
+ "code": "mr",
+ "language": "मराठी"
+ },
+ {
+ "code": "ms",
+ "language": "Bahasa Melayu"
+ },
+ {
+ "code": "mt",
+ "language": "Malti"
+ },
+ {
+ "code": "my",
+ "language": "ဗမာစာ"
+ },
+ {
+ "code": "na",
+ "language": "Ekakairũ Naoero"
+ },
+ {
+ "code": "nb",
+ "language": "Norsk bokmål"
+ },
+ {
+ "code": "nd",
+ "language": "isiNdebele"
+ },
+ {
+ "code": "ne",
+ "language": "नेपाली"
+ },
+ {
+ "code": "ng",
+ "language": "Owambo"
+ },
+ {
+ "code": "nl",
+ "language": "Nederlands"
+ },
+ {
+ "code": "nn",
+ "language": "Norsk Nynorsk"
+ },
+ {
+ "code": "no",
+ "language": "Norsk"
+ },
+ {
+ "code": "nr",
+ "language": "isiNdebele"
+ },
+ {
+ "code": "nv",
+ "language": "Diné bizaad"
+ },
+ {
+ "code": "ny",
+ "language": "chiCheŵa"
+ },
+ {
+ "code": "oc",
+ "language": "occitan"
+ },
+ {
+ "code": "oj",
+ "language": "ᐊᓂᔑᓈᐯᒧᐎᓐ"
+ },
+ {
+ "code": "om",
+ "language": "Afaan Oromoo"
+ },
+ {
+ "code": "or",
+ "language": "ଓଡ଼ିଆ"
+ },
+ {
+ "code": "os",
+ "language": "ирон æвзаг"
+ },
+ {
+ "code": "pa",
+ "language": "ਪੰਜਾਬੀ"
+ },
+ {
+ "code": "pi",
+ "language": "पाऴि"
+ },
+ {
+ "code": "pl",
+ "language": "Polski"
+ },
+ {
+ "code": "ps",
+ "language": "پښتو"
+ },
+ {
+ "code": "pt",
+ "language": "Português"
+ },
+ {
+ "code": "qu",
+ "language": "Runa Simi"
+ },
+ {
+ "code": "rm",
+ "language": "rumantsch grischun"
+ },
+ {
+ "code": "rn",
+ "language": "Ikirundi"
+ },
+ {
+ "code": "ro",
+ "language": "Română"
+ },
+ {
+ "code": "ru",
+ "language": "Русский"
+ },
+ {
+ "code": "rw",
+ "language": "Ikinyarwanda"
+ },
+ {
+ "code": "sa",
+ "language": "संस्कृतम्"
+ },
+ {
+ "code": "sc",
+ "language": "sardu"
+ },
+ {
+ "code": "sd",
+ "language": "सिन्धी"
+ },
+ {
+ "code": "se",
+ "language": "Davvisámegiella"
+ },
+ {
+ "code": "sg",
+ "language": "yângâ tî sängö"
+ },
+ {
+ "code": "si",
+ "language": "සිංහල"
+ },
+ {
+ "code": "sk",
+ "language": "slovenčina"
+ },
+ {
+ "code": "sl",
+ "language": "slovenščina"
+ },
+ {
+ "code": "sn",
+ "language": "chiShona"
+ },
+ {
+ "code": "so",
+ "language": "Soomaaliga"
+ },
+ {
+ "code": "sq",
+ "language": "Shqip"
+ },
+ {
+ "code": "sr",
+ "language": "српски језик"
+ },
+ {
+ "code": "ss",
+ "language": "SiSwati"
+ },
+ {
+ "code": "st",
+ "language": "Sesotho"
+ },
+ {
+ "code": "su",
+ "language": "Basa Sunda"
+ },
+ {
+ "code": "sv",
+ "language": "Svenska"
+ },
+ {
+ "code": "sw",
+ "language": "Kiswahili"
+ },
+ {
+ "code": "ta",
+ "language": "தமிழ்"
+ },
+ {
+ "code": "te",
+ "language": "తెలుగు"
+ },
+ {
+ "code": "tg",
+ "language": "тоҷикӣ"
+ },
+ {
+ "code": "th",
+ "language": "ไทย"
+ },
+ {
+ "code": "ti",
+ "language": "ትግርኛ"
+ },
+ {
+ "code": "tk",
+ "language": "Türkmen"
+ },
+ {
+ "code": "tl",
+ "language": "Wikang Tagalog"
+ },
+ {
+ "code": "tn",
+ "language": "Setswana"
+ },
+ {
+ "code": "to",
+ "language": "faka Tonga"
+ },
+ {
+ "code": "tr",
+ "language": "Türkçe"
+ },
+ {
+ "code": "ts",
+ "language": "Xitsonga"
+ },
+ {
+ "code": "tt",
+ "language": "татар теле"
+ },
+ {
+ "code": "tw",
+ "language": "Twi"
+ },
+ {
+ "code": "ty",
+ "language": "Reo Tahiti"
+ },
+ {
+ "code": "ug",
+ "language": "ئۇيغۇرچە‎"
+ },
+ {
+ "code": "uk",
+ "language": "Українська"
+ },
+ {
+ "code": "ur",
+ "language": "اردو"
+ },
+ {
+ "code": "uz",
+ "language": "Ўзбек"
+ },
+ {
+ "code": "ve",
+ "language": "Tshivenḓa"
+ },
+ {
+ "code": "vi",
+ "language": "Tiếng Việt"
+ },
+ {
+ "code": "vo",
+ "language": "Volapük"
+ },
+ {
+ "code": "wa",
+ "language": "walon"
+ },
+ {
+ "code": "wo",
+ "language": "Wollof"
+ },
+ {
+ "code": "xh",
+ "language": "isiXhosa"
+ },
+ {
+ "code": "yi",
+ "language": "ייִדיש"
+ },
+ {
+ "code": "yo",
+ "language": "Yorùbá"
+ },
+ {
+ "code": "za",
+ "language": "Saɯ cueŋƅ"
+ },
+ {
+ "code": "zh",
+ "language": "中文"
+ },
+ {
+ "code": "zu",
+ "language": "isiZulu"
+ }
+] \ No newline at end of file
diff --git a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
index 36143c30d..5df7503a2 100644
--- a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
@@ -76,6 +76,7 @@ import app.fedilab.android.client.entities.api.Mention;
import app.fedilab.android.client.entities.api.ScheduledStatus;
import app.fedilab.android.client.entities.api.Status;
import app.fedilab.android.client.entities.app.BaseAccount;
+import app.fedilab.android.client.entities.app.Languages;
import app.fedilab.android.client.entities.app.StatusDraft;
import app.fedilab.android.databinding.ActivityPaginationBinding;
import app.fedilab.android.databinding.PopupContactBinding;
@@ -577,6 +578,46 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
} else {
Toasty.info(ComposeActivity.this, getString(R.string.toot_error_no_content), Toasty.LENGTH_SHORT).show();
}
+ } else if (item.getItemId() == R.id.action_language) {
+ final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ComposeActivity.this);
+ List<Languages.Language> languages = Languages.get(ComposeActivity.this);
+ 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()];
+ 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));
+
+ builder.setSingleChoiceItems(languagesArr, selection, null);
+ String[] finalCodesArr = codesArr;
+ builder.setPositiveButton(R.string.validate, (dialog, which) -> {
+ int selectedPosition = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
+ editor.putString(getString(R.string.SET_COMPOSE_LANGUAGE) + account.user_id + account.instance, finalCodesArr[selectedPosition]);
+ editor.apply();
+ dialog.dismiss();
+ });
+ builder.setNegativeButton(R.string.reset, (dialog, which) -> {
+ editor.putString(getString(R.string.SET_COMPOSE_LANGUAGE) + account.user_id + account.instance, null);
+ editor.apply();
+ dialog.dismiss();
+ });
+ builder.create().show();
}
return true;
}
@@ -751,6 +792,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft);
intent.putExtra(Helper.ARG_INSTANCE, instance);
intent.putExtra(Helper.ARG_TOKEN, token);
+ intent.putExtra(Helper.ARG_USER_ID, account.user_id);
intent.putExtra(Helper.ARG_SCHEDULED_DATE, scheduledDate);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
@@ -758,7 +800,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
startService(intent);
}
} else {
- new ThreadMessageService(ComposeActivity.this, instance, token, statusDraft, scheduledDate);
+ new ThreadMessageService(ComposeActivity.this, instance, account.user_id, token, statusDraft, scheduledDate);
}
finish();
}
diff --git a/app/src/main/java/app/fedilab/android/client/entities/app/Languages.java b/app/src/main/java/app/fedilab/android/client/entities/app/Languages.java
new file mode 100644
index 000000000..23445a9a3
--- /dev/null
+++ b/app/src/main/java/app/fedilab/android/client/entities/app/Languages.java
@@ -0,0 +1,62 @@
+package app.fedilab.android.client.entities.app;
+/* Copyright 2022 Thomas Schneider
+ *
+ * This file is a part of Fedilab
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Fedilab; if not,
+ * see <http://www.gnu.org/licenses>. */
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.google.gson.Gson;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.reflect.TypeToken;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+
+public class Languages implements Serializable {
+
+ @SerializedName("languages")
+ public List<Language> languages;
+
+ public static List<Language> get(AppCompatActivity activity) {
+ try {
+ InputStream is = activity.getAssets().open("languages/iso_639_1.json");
+ int size = is.available();
+ byte[] buffer = new byte[size];
+ is.read(buffer);
+ is.close();
+ String json = new String(buffer, StandardCharsets.UTF_8);
+ Gson gson = new Gson();
+ try {
+ return gson.fromJson(json, new TypeToken<List<Language>>() {
+ }.getType());
+ } catch (Exception e) {
+ return null;
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ return null;
+ }
+ }
+
+ public static class Language implements Serializable {
+ @SerializedName("code")
+ public String code;
+ @SerializedName("language")
+ public String language;
+ }
+}
diff --git a/app/src/main/java/app/fedilab/android/jobs/NotificationsWorker.java b/app/src/main/java/app/fedilab/android/jobs/NotificationsWorker.java
index 620941170..c9566e9c7 100644
--- a/app/src/main/java/app/fedilab/android/jobs/NotificationsWorker.java
+++ b/app/src/main/java/app/fedilab/android/jobs/NotificationsWorker.java
@@ -75,6 +75,7 @@ public class NotificationsWorker extends Worker {
String instance = getInputData().getString(Helper.ARG_INSTANCE);
String token = getInputData().getString(Helper.ARG_TOKEN);
String statusDraftId = getInputData().getString(Helper.ARG_STATUS_DRAFT_ID);
+ String userId = getInputData().getString(Helper.ARG_USER_ID);
StatusDraft statusDraft;
try {
statusDraft = new StatusDraft(getApplicationContext()).geStatusDraft(statusDraftId);
@@ -82,6 +83,7 @@ public class NotificationsWorker extends Worker {
intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft);
intent.putExtra(Helper.ARG_INSTANCE, instance);
intent.putExtra(Helper.ARG_TOKEN, token);
+ intent.putExtra(Helper.ARG_USER_ID, userId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
getApplicationContext().startForegroundService(intent);
} else {
diff --git a/app/src/main/java/app/fedilab/android/jobs/ScheduleThreadWorker.java b/app/src/main/java/app/fedilab/android/jobs/ScheduleThreadWorker.java
index 5f1275901..5a6da3ba0 100644
--- a/app/src/main/java/app/fedilab/android/jobs/ScheduleThreadWorker.java
+++ b/app/src/main/java/app/fedilab/android/jobs/ScheduleThreadWorker.java
@@ -74,6 +74,7 @@ public class ScheduleThreadWorker extends Worker {
Data outputData;
String instance = getInputData().getString(Helper.ARG_INSTANCE);
String token = getInputData().getString(Helper.ARG_TOKEN);
+ String userId = getInputData().getString(Helper.ARG_USER_ID);
String statusDraftId = getInputData().getString(Helper.ARG_STATUS_DRAFT_ID);
StatusDraft statusDraft;
try {
@@ -82,6 +83,7 @@ public class ScheduleThreadWorker extends Worker {
intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft);
intent.putExtra(Helper.ARG_INSTANCE, instance);
intent.putExtra(Helper.ARG_TOKEN, token);
+ intent.putExtra(Helper.ARG_USER_ID, userId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
getApplicationContext().startForegroundService(intent);
} else {
diff --git a/app/src/main/java/app/fedilab/android/services/PostMessageService.java b/app/src/main/java/app/fedilab/android/services/PostMessageService.java
index a4a73ab20..f622a3ae7 100644
--- a/app/src/main/java/app/fedilab/android/services/PostMessageService.java
+++ b/app/src/main/java/app/fedilab/android/services/PostMessageService.java
@@ -202,9 +202,10 @@ public class PostMessageService extends IntentService {
if (error) {
return;
}
+ String language = sharedPreferences.getString(context.getString(R.string.SET_COMPOSE_LANGUAGE) + dataPost.userId + dataPost.instance, null);
if (dataPost.scheduledDate == null) {
statusCall = mastodonStatusesService.createStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in,
- poll_multiple, poll_hide_totals, in_reply_to_status, statuses.get(i).sensitive, statuses.get(i).spoiler_text, statuses.get(i).visibility.toLowerCase(), statuses.get(i).language);
+ poll_multiple, poll_hide_totals, in_reply_to_status, statuses.get(i).sensitive, statuses.get(i).spoiler_text, statuses.get(i).visibility.toLowerCase(), language);
try {
Response<Status> statusResponse = statusCall.execute();
if (statusResponse.isSuccessful()) {
@@ -339,11 +340,13 @@ public class PostMessageService extends IntentService {
StatusDraft statusDraft = null;
String token = null, instance = null;
String scheduledDate = null;
+ String userId = null;
if (intent != null && intent.getExtras() != null) {
Bundle b = intent.getExtras();
statusDraft = (StatusDraft) b.getSerializable(Helper.ARG_STATUS_DRAFT);
token = b.getString(Helper.ARG_TOKEN);
instance = b.getString(Helper.ARG_INSTANCE);
+ userId = b.getString(Helper.ARG_USER_ID);
scheduledDate = b.getString(Helper.ARG_SCHEDULED_DATE);
}
//Should not be null, but a simple security
@@ -356,6 +359,7 @@ public class PostMessageService extends IntentService {
DataPost dataPost = new DataPost();
dataPost.instance = instance;
dataPost.token = token;
+ dataPost.userId = userId;
dataPost.statusDraft = statusDraft;
dataPost.scheduledDate = scheduledDate;
dataPost.notificationBuilder = notificationBuilder;
@@ -367,6 +371,7 @@ public class PostMessageService extends IntentService {
static class DataPost {
String instance;
String token;
+ String userId;
StatusDraft statusDraft;
int messageToSend;
int messageSent;
diff --git a/app/src/main/java/app/fedilab/android/services/ThreadMessageService.java b/app/src/main/java/app/fedilab/android/services/ThreadMessageService.java
index aba6d9777..a6fa0596a 100644
--- a/app/src/main/java/app/fedilab/android/services/ThreadMessageService.java
+++ b/app/src/main/java/app/fedilab/android/services/ThreadMessageService.java
@@ -22,9 +22,10 @@ import app.fedilab.android.client.entities.app.StatusDraft;
public class ThreadMessageService {
- public ThreadMessageService(Context context, String instance, String token, StatusDraft statusDraft, String scheduledDate) {
+ public ThreadMessageService(Context context, String instance, String userId, String token, StatusDraft statusDraft, String scheduledDate) {
PostMessageService.DataPost dataPost = new PostMessageService.DataPost();
dataPost.instance = instance;
+ dataPost.userId = userId;
dataPost.token = token;
dataPost.scheduledDate = scheduledDate;
dataPost.statusDraft = statusDraft;
diff --git a/app/src/main/res/drawable/ic_baseline_language_24.xml b/app/src/main/res/drawable/ic_baseline_language_24.xml
new file mode 100644
index 000000000..b0fd1af38
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_language_24.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:tint="#FFFFFF"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z" />
+</vector>
diff --git a/app/src/main/res/menu/menu_compose.xml b/app/src/main/res/menu/menu_compose.xml
index 8fc21461c..88ed2086f 100644
--- a/app/src/main/res/menu/menu_compose.xml
+++ b/app/src/main/res/menu/menu_compose.xml
@@ -12,6 +12,11 @@
android:title="@string/contact"
app:showAsAction="ifRoom" />
<item
+ android:id="@+id/action_language"
+ android:icon="@drawable/ic_baseline_language_24"
+ android:title="@string/languages"
+ app:showAsAction="ifRoom" />
+ <item
android:id="@+id/action_microphone"
android:icon="@drawable/ic_baseline_mic_24"
android:title="@string/voice_message"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 726ab01d3..32a3f6d88 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -864,6 +864,7 @@
<string name="SET_TIME_FROM" translatable="false">SET_TIME_FROM</string>
<string name="SET_TIME_TO" translatable="false">SET_TIME_TO</string>
<string name="SET_MED_DESC_TIMEOUT" translatable="false">SET_MED_DESC_TIMEOUT</string>
+ <string name="SET_COMPOSE_LANGUAGE" translatable="false">SET_COMPOSE_LANGUAGE</string>
<string name="SET_NOTIF_FOLLOW" translatable="false">SET_NOTIF_FOLLOW</string>
@@ -980,6 +981,7 @@
<string name="clear_cache">Clear cache</string>
<string name="delete_cache_message">Are you sure you want to delete cache? If you have drafts with media, the attached media will be lost.</string>
<string name="default_system_lan