From 8386a22ce5c73f6aefa88a4c00c1fc130cd2d910 Mon Sep 17 00:00:00 2001 From: Abdul Wadood Date: Sat, 24 Feb 2018 20:07:40 +0530 Subject: [PATCH] Fix app language preference for RTL languages. Use radio button to show language preference. --- .../settings/KiwixSettingsActivity.java | 96 +++++++++---------- app/src/main/res/values-v19/styles.xml | 2 +- app/src/main/res/values-v21/styles.xml | 2 +- app/src/main/res/values/styles.xml | 4 +- app/src/main/res/xml/preferences.xml | 2 +- 5 files changed, 49 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java index e3ff8e5e6..88d2a6377 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java @@ -26,6 +26,7 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.os.Environment; import android.preference.EditTextPreference; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; @@ -46,12 +47,12 @@ import org.kiwix.kiwixmobile.database.KiwixDatabase; import org.kiwix.kiwixmobile.database.RecentSearchDao; import org.kiwix.kiwixmobile.utils.LanguageUtils; import org.kiwix.kiwixmobile.utils.StyleUtils; -import org.kiwix.kiwixmobile.views.LanguageSelectDialog; import org.kiwix.kiwixmobile.views.SliderPreference; import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryUtils; import java.io.File; import java.util.Calendar; +import java.util.List; import java.util.Locale; import eu.mhutti1.utils.storage.StorageDevice; @@ -75,8 +76,6 @@ import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle; public class KiwixSettingsActivity extends AppCompatActivity { - public static String zimFile; - public static boolean allHistoryCleared = false; private static final int DAWN_HOUR = 6; @@ -85,7 +84,7 @@ public class KiwixSettingsActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { - if(nightMode(PreferenceManager.getDefaultSharedPreferences(this))){ + if (nightMode(PreferenceManager.getDefaultSharedPreferences(this))) { setTheme(R.style.AppTheme_Night); } getWindow().setWindowAnimations(R.style.WindowAnimationTransition); @@ -124,13 +123,13 @@ public class KiwixSettingsActivity extends AppCompatActivity { toolbar.setNavigationOnClickListener(v -> onBackPressed()); } - public static boolean nightMode(SharedPreferences preferences){ + public static boolean nightMode(SharedPreferences preferences) { boolean autoNightMode = preferences.getBoolean(PREF_AUTONIGHTMODE, false); - if(autoNightMode){ + if (autoNightMode) { Calendar cal = Calendar.getInstance(); int hour = cal.get(Calendar.HOUR_OF_DAY); return hour < DAWN_HOUR || hour > DUSK_HOUR; - } else{ + } else { return preferences.getBoolean(PREF_NIGHTMODE, false); } } @@ -147,24 +146,24 @@ public class KiwixSettingsActivity extends AppCompatActivity { addPreferencesFromResource(R.xml.preferences); boolean auto_night_mode = PreferenceManager.getDefaultSharedPreferences(getActivity()) - .getBoolean(PREF_AUTONIGHTMODE, false); + .getBoolean(PREF_AUTONIGHTMODE, false); - if(auto_night_mode){ + if (auto_night_mode) { getPreferenceScreen().findPreference(PREF_NIGHTMODE).setEnabled(false); } if (BuildConfig.ENFORCED_LANG.equals("")) { setUpLanguageChooser(PREF_LANG); } else { - getPreferenceScreen().removePreference(getPrefrence("pref_language")); + getPreferenceScreen().removePreference(findPreference("pref_language")); } if (BuildConfig.IS_CUSTOM_APP) { PreferenceCategory notificationsCategory = (PreferenceCategory) findPreference("pref_extras"); - notificationsCategory.removePreference(getPrefrence("pref_wifi_only")); + notificationsCategory.removePreference(findPreference("pref_wifi_only")); } - mSlider = (SliderPreference) getPrefrence(PREF_ZOOM); + mSlider = (SliderPreference) findPreference(PREF_ZOOM); setSliderState(); setStorage(); setUpSettings(); @@ -177,18 +176,18 @@ public class KiwixSettingsActivity extends AppCompatActivity { recentSearchDao.deleteSearchHistory(); } - private void setStorage(){ + private void setStorage() { if (BuildConfig.IS_CUSTOM_APP) { - getPreferenceScreen().removePreference(getPrefrence("pref_storage")); + getPreferenceScreen().removePreference(findPreference("pref_storage")); } else { if (Environment.isExternalStorageEmulated()) { - getPrefrence(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity()) + findPreference(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity()) .getString(PREF_STORAGE_TITLE, "Internal")); } else { - getPrefrence(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity()) + findPreference(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity()) .getString(PREF_STORAGE_TITLE, "External")); } - getPrefrence(PREF_STORAGE).setSummary(LibraryUtils.bytesToHuman( new File(PreferenceManager.getDefaultSharedPreferences(getActivity()) + findPreference(PREF_STORAGE).setSummary(LibraryUtils.bytesToHuman(new File(PreferenceManager.getDefaultSharedPreferences(getActivity()) .getString(PREF_STORAGE, Environment.getExternalStorageDirectory().getPath())).getFreeSpace())); } } @@ -222,11 +221,32 @@ public class KiwixSettingsActivity extends AppCompatActivity { } private void setUpLanguageChooser(String preferenceId) { - Preference languagePref = getPrefrence(preferenceId); + ListPreference languagePref = (ListPreference) findPreference(preferenceId); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); - String selectedLang = sharedPreferences.getString(PREF_LANG, Locale.getDefault().toString()); - + String selectedLang = sharedPreferences.getString(PREF_LANG, Locale.getDefault().getLanguage()); + List languageCodeList = new LanguageUtils(getActivity()).getKeys(); + selectedLang = languageCodeList.contains(selectedLang) ? selectedLang : "en"; + String code[] = languageCodeList.toArray(new String[languageCodeList.size()]); + String[] entries = new String[code.length]; + for (int index = 0; index < code.length; index++) { + Locale locale = new Locale(code[index]); + entries[index] = locale.getDisplayLanguage() + " (" + locale.getDisplayLanguage(locale) + ") "; + } + languagePref.setEntries(entries); + languagePref.setEntryValues(code); + languagePref.setDefaultValue(selectedLang); + languagePref.setValue(selectedLang); languagePref.setTitle(new Locale(selectedLang).getDisplayLanguage()); + languagePref.setOnPreferenceChangeListener((preference, newValue) -> { + String languageCode = (String) newValue; + LanguageUtils.handleLocaleChange(getActivity(), languageCode); + preference.setTitle(new Locale(languageCode).getLanguage()); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString(PREF_LANG, languageCode); + editor.apply(); + restartActivity(); + return true; + }); } private void restartActivity() { @@ -243,10 +263,6 @@ public class KiwixSettingsActivity extends AppCompatActivity { versionPref.setSummary(version); } - private Preference getPrefrence(String preferenceId) { - return PrefsFragment.this.findPreference(preferenceId); - } - @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { @@ -266,7 +282,7 @@ public class KiwixSettingsActivity extends AppCompatActivity { if (key.equals(PREF_WIFI_ONLY)) { KiwixMobileActivity.wifiOnly = sharedPreferences.getBoolean(PREF_WIFI_ONLY, true); } - if(key.equals(PREF_AUTONIGHTMODE)){ + if (key.equals(PREF_AUTONIGHTMODE)) { KiwixMobileActivity.refresh = true; KiwixMobileActivity.nightMode = nightMode(sharedPreferences); getActivity().finish(); @@ -292,7 +308,7 @@ public class KiwixSettingsActivity extends AppCompatActivity { .show(); } - public void openCredits(){ + public void openCredits() { WebView view = (WebView) LayoutInflater.from(getActivity()).inflate(R.layout.credits_webview, null); view.loadUrl("file:///android_asset/credits.html"); new AlertDialog.Builder(getActivity(), dialogStyle()) @@ -313,34 +329,10 @@ public class KiwixSettingsActivity extends AppCompatActivity { if (preference.getKey().equalsIgnoreCase(PREF_STORAGE)) openFolderSelect(); - if (preference.getKey().equalsIgnoreCase(PREF_LANG)) - openLanguageSelect(); - return true; } - public void openLanguageSelect() { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); - LanguageUtils languageUtils = new LanguageUtils(getActivity()); - String selectedLang = sharedPreferences.getString(PREF_LANG, Locale.getDefault().toString()); - - new LanguageSelectDialog.Builder(getActivity(), dialogStyle()) - .setLanguages(languageUtils.getLanguageList()) - .setSingleSelect(true) - .setSelectedLanguage(selectedLang) - .setOnLanguageSelectedListener((languageCode -> { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(PREF_LANG, languageCode); - editor.apply(); - - LanguageUtils.handleLocaleChange(getActivity(), languageCode); - // Request a restart when the user returns to the Activity, that called this Activity - restartActivity(); - })) - .show(); - } - - public void openFolderSelect(){ + public void openFolderSelect() { FragmentManager fm = getFragmentManager(); StorageSelectDialog dialogFragment = new StorageSelectDialog(); Bundle b = new Bundle(); @@ -358,7 +350,7 @@ public class KiwixSettingsActivity extends AppCompatActivity { findPreference(PREF_STORAGE).setSummary(storageDevice.getSize()); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(PREF_STORAGE,storageDevice.getName()); + editor.putString(PREF_STORAGE, storageDevice.getName()); if (storageDevice.isInternal()) { findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.internal_storage)); editor.putString(PREF_STORAGE_TITLE, getResources().getString(R.string.internal_storage)); diff --git a/app/src/main/res/values-v19/styles.xml b/app/src/main/res/values-v19/styles.xml index 70ebdda22..7731c2594 100644 --- a/app/src/main/res/values-v19/styles.xml +++ b/app/src/main/res/values-v19/styles.xml @@ -24,7 +24,7 @@ @color/primary @color/primary @color/primary - @color/white + @color/accent true \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 4dd50c45d..5f8ca6f9b 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -26,7 +26,7 @@ @color/primary @color/primary true - @color/white + @color/accent @color/greyed_out_selected @android:color/transparent diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 852fffbcd..33faf191f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -27,7 +27,7 @@ @color/primary @color/primary @color/primary - @color/white + @color/accent