diff --git a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java index c5642a6c..e054ba6e 100644 --- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java @@ -8,6 +8,7 @@ import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.notifications.Notifications; +import java.util.Locale; /** * Author M M Arif @@ -77,7 +78,13 @@ public abstract class BaseActivity extends AppCompatActivity { } - AppUtil.setAppLocale(getResources(), tinyDB.getString("locale")); + String locale = tinyDB.getString("locale"); + if (locale.isEmpty()) { + AppUtil.setAppLocale(getResources(), Locale.getDefault().getLanguage()); + } + else { + AppUtil.setAppLocale(getResources(), locale); + } Notifications.startWorker(appCtx); } diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index 3760ab8a..2deae15a 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -569,7 +569,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt } TinyDB tinyDb = TinyDB.getInstance(appCtx); - final String locale = tinyDb.getString("locale"); + final String locale = getResources().getConfiguration().locale.getLanguage(); final String timeFormat = tinyDb.getString("dateFormat"); tinyDb.putString("issueState", singleIssue.getState()); tinyDb.putString("issueTitle", singleIssue.getTitle()); diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsTranslationActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsTranslationActivity.java index 45b3e8ac..8a40543d 100644 --- a/app/src/main/java/org/mian/gitnex/activities/SettingsTranslationActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/SettingsTranslationActivity.java @@ -11,6 +11,9 @@ import androidx.appcompat.app.AlertDialog; import org.mian.gitnex.R; import org.mian.gitnex.databinding.ActivitySettingsTranslationBinding; import org.mian.gitnex.helpers.Toasty; +import java.util.LinkedHashMap; +import java.util.Locale; +import java.util.TreeMap; /** * Author M M Arif @@ -20,8 +23,6 @@ public class SettingsTranslationActivity extends BaseActivity { private View.OnClickListener onClickListener; - private static String[] langList = {"English", "Arabic", "Chinese", "Czech", "Finnish", "French", "German", "Italian", "Latvian", "Persian", - "Polish", "Portuguese/Brazilian", "Russian", "Serbian", "Spanish", "Turkish", "Ukrainian"}; private static int langSelectedChoice = 0; @Override @@ -29,6 +30,12 @@ public class SettingsTranslationActivity extends BaseActivity { super.onCreate(savedInstanceState); + LinkedHashMap langs = new LinkedHashMap<>(); + langs.put("", getString(R.string.settingsLanguageSystem)); + for(String langCode : getResources().getStringArray(R.array.languages)) { + langs.put(langCode, getLanguageDisplayName(langCode)); + } + ActivitySettingsTranslationBinding activitySettingsTranslationBinding = ActivitySettingsTranslationBinding.inflate(getLayoutInflater()); setContentView(activitySettingsTranslationBinding.getRoot()); @@ -52,15 +59,9 @@ public class SettingsTranslationActivity extends BaseActivity { }); - if(!tinyDB.getString("localeStr").isEmpty()) { + tvLanguageSelected.setText(tinyDB.getString("localeStr")); - tvLanguageSelected.setText(tinyDB.getString("localeStr")); - } - - if(langSelectedChoice == 0) { - - langSelectedChoice = tinyDB.getInt("langId"); - } + langSelectedChoice = tinyDB.getInt("langId"); // language dialog langFrame.setOnClickListener(view -> { @@ -70,89 +71,18 @@ public class SettingsTranslationActivity extends BaseActivity { lBuilder.setTitle(R.string.settingsLanguageSelectorDialogTitle); lBuilder.setCancelable(langSelectedChoice != -1); - lBuilder.setSingleChoiceItems(langList, langSelectedChoice, (dialogInterface, i) -> { + lBuilder.setSingleChoiceItems(langs.values().toArray(new String[0]), langSelectedChoice, (dialogInterface, i) -> { - langSelectedChoice = i; - tvLanguageSelected.setText(langList[i]); - tinyDB.putString("localeStr", langList[i]); + String selectedLanguage = langs.keySet().toArray(new String[0])[i]; + tinyDB.putString("localeStr", langs.get(selectedLanguage)); tinyDB.putInt("langId", i); - - switch(langList[i]) { - case "Arabic": - - tinyDB.putString("locale", "ar"); - break; - case "Chinese": - - tinyDB.putString("locale", "zh"); - break; - case "Czech": - - tinyDB.putString("locale", "cs"); - break; - case "Finnish": - - tinyDB.putString("locale", "fi"); - break; - case "French": - - tinyDB.putString("locale", "fr"); - break; - case "German": - - tinyDB.putString("locale", "de"); - break; - case "Italian": - - tinyDB.putString("locale", "it"); - break; - case "Latvian": - - tinyDB.putString("locale", "lv"); - break; - case "Persian": - - tinyDB.putString("locale", "fa"); - break; - case "Polish": - - tinyDB.putString("locale", "pl"); - break; - case "Portuguese/Brazilian": - - tinyDB.putString("locale", "pt"); - break; - case "Russian": - - tinyDB.putString("locale", "ru"); - break; - case "Serbian": - - tinyDB.putString("locale", "sr"); - break; - case "Spanish": - - tinyDB.putString("locale", "es"); - break; - case "Turkish": - - tinyDB.putString("locale", "tr"); - break; - case "Ukrainian": - - tinyDB.putString("locale", "uk"); - break; - default: - - tinyDB.putString("locale", "en"); - break; - } + tinyDB.putString("locale", selectedLanguage); tinyDB.putBoolean("refreshParent", true); - this.recreate(); this.overridePendingTransition(0, 0); dialogInterface.dismiss(); Toasty.success(appCtx, getResources().getString(R.string.settingsSave)); + this.recreate(); }); lBuilder.setNeutralButton(getString(R.string.cancelButton), null); @@ -167,4 +97,10 @@ public class SettingsTranslationActivity extends BaseActivity { onClickListener = view -> finish(); } + private static String getLanguageDisplayName(String langCode) { + Locale english = new Locale("en"); + Locale translated = new Locale(langCode); + return String.format("%s (%s)", translated.getDisplayName(translated), translated.getDisplayName(english)); + } + } diff --git a/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java index cb53bff4..c8be42c4 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java @@ -44,7 +44,7 @@ public class AdminCronTasksAdapter extends RecyclerView.Adapter TimeHelper.customDateFormatForToastDateFormat(issueComment.getCreated_at())); } else if(timeFormat.equals("normal")) { - informationBuilder = new StringBuilder(TimeHelper.formatTime(issueComment.getCreated_at(), Locale.getDefault(), "normal", context)); + informationBuilder = new StringBuilder(TimeHelper.formatTime(issueComment.getCreated_at(), context.getResources().getConfiguration().locale, "normal", context)); } if(!issueComment.getCreated_at().equals(issueComment.getUpdated_at())) { diff --git a/app/src/main/java/org/mian/gitnex/adapters/IssuesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/IssuesAdapter.java index 4a53a42c..6931df10 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/IssuesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/IssuesAdapter.java @@ -135,7 +135,7 @@ public class IssuesAdapter extends RecyclerView.Adapter void bindData(Issues issue) { TinyDB tinyDb = TinyDB.getInstance(context); - String locale = tinyDb.getString("locale"); + String locale = context.getResources().getConfiguration().locale.getLanguage(); String timeFormat = tinyDb.getString("dateFormat"); int imgRadius = AppUtil.getPixelsFromDensity(context, 3); diff --git a/app/src/main/java/org/mian/gitnex/adapters/MilestonesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/MilestonesAdapter.java index f805e570..6c5f4a96 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/MilestonesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/MilestonesAdapter.java @@ -148,7 +148,7 @@ public class MilestonesAdapter extends RecyclerView.Adapter + + en + ar + zh + cs + fi + fr + de + it + lv + fa + pl + pt + ru + ru + sr + es + tr + uk + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3574f267..9aff1aef 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -223,6 +223,7 @@ Translation + System Security Delete Trusted Certificates Delete Trusted Certificates?