Commit 18c3424e authored by Thomas's avatar Thomas
Browse files

Fix issue #244 - Add support for setting post language

parent eaac079d
Loading
Loading
Loading
Loading
+730 −0
Original line number Diff line number Diff line
[
  {
    "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
+43 −1
Original line number Diff line number Diff line
@@ -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();
            }
+62 −0
Original line number Diff line number Diff line
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;
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -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 {
+2 −0
Original line number Diff line number Diff line
@@ -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 {
Loading