Fix app language preference for RTL languages.

Use radio button to show language preference.
This commit is contained in:
Abdul Wadood 2018-02-24 20:07:40 +05:30 committed by Isaac Hutt
parent 149088ee0f
commit 8386a22ce5
5 changed files with 49 additions and 57 deletions

View File

@ -26,6 +26,7 @@ import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.preference.EditTextPreference; import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceCategory; import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
@ -46,12 +47,12 @@ import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.database.RecentSearchDao; import org.kiwix.kiwixmobile.database.RecentSearchDao;
import org.kiwix.kiwixmobile.utils.LanguageUtils; import org.kiwix.kiwixmobile.utils.LanguageUtils;
import org.kiwix.kiwixmobile.utils.StyleUtils; import org.kiwix.kiwixmobile.utils.StyleUtils;
import org.kiwix.kiwixmobile.views.LanguageSelectDialog;
import org.kiwix.kiwixmobile.views.SliderPreference; import org.kiwix.kiwixmobile.views.SliderPreference;
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryUtils; import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryUtils;
import java.io.File; import java.io.File;
import java.util.Calendar; import java.util.Calendar;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import eu.mhutti1.utils.storage.StorageDevice; import eu.mhutti1.utils.storage.StorageDevice;
@ -75,8 +76,6 @@ import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class KiwixSettingsActivity extends AppCompatActivity { public class KiwixSettingsActivity extends AppCompatActivity {
public static String zimFile;
public static boolean allHistoryCleared = false; public static boolean allHistoryCleared = false;
private static final int DAWN_HOUR = 6; private static final int DAWN_HOUR = 6;
@ -85,7 +84,7 @@ public class KiwixSettingsActivity extends AppCompatActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
if(nightMode(PreferenceManager.getDefaultSharedPreferences(this))){ if (nightMode(PreferenceManager.getDefaultSharedPreferences(this))) {
setTheme(R.style.AppTheme_Night); setTheme(R.style.AppTheme_Night);
} }
getWindow().setWindowAnimations(R.style.WindowAnimationTransition); getWindow().setWindowAnimations(R.style.WindowAnimationTransition);
@ -124,13 +123,13 @@ public class KiwixSettingsActivity extends AppCompatActivity {
toolbar.setNavigationOnClickListener(v -> onBackPressed()); toolbar.setNavigationOnClickListener(v -> onBackPressed());
} }
public static boolean nightMode(SharedPreferences preferences){ public static boolean nightMode(SharedPreferences preferences) {
boolean autoNightMode = preferences.getBoolean(PREF_AUTONIGHTMODE, false); boolean autoNightMode = preferences.getBoolean(PREF_AUTONIGHTMODE, false);
if(autoNightMode){ if (autoNightMode) {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY); int hour = cal.get(Calendar.HOUR_OF_DAY);
return hour < DAWN_HOUR || hour > DUSK_HOUR; return hour < DAWN_HOUR || hour > DUSK_HOUR;
} else{ } else {
return preferences.getBoolean(PREF_NIGHTMODE, false); return preferences.getBoolean(PREF_NIGHTMODE, false);
} }
} }
@ -147,24 +146,24 @@ public class KiwixSettingsActivity extends AppCompatActivity {
addPreferencesFromResource(R.xml.preferences); addPreferencesFromResource(R.xml.preferences);
boolean auto_night_mode = PreferenceManager.getDefaultSharedPreferences(getActivity()) 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); getPreferenceScreen().findPreference(PREF_NIGHTMODE).setEnabled(false);
} }
if (BuildConfig.ENFORCED_LANG.equals("")) { if (BuildConfig.ENFORCED_LANG.equals("")) {
setUpLanguageChooser(PREF_LANG); setUpLanguageChooser(PREF_LANG);
} else { } else {
getPreferenceScreen().removePreference(getPrefrence("pref_language")); getPreferenceScreen().removePreference(findPreference("pref_language"));
} }
if (BuildConfig.IS_CUSTOM_APP) { if (BuildConfig.IS_CUSTOM_APP) {
PreferenceCategory notificationsCategory = (PreferenceCategory) findPreference("pref_extras"); 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(); setSliderState();
setStorage(); setStorage();
setUpSettings(); setUpSettings();
@ -177,18 +176,18 @@ public class KiwixSettingsActivity extends AppCompatActivity {
recentSearchDao.deleteSearchHistory(); recentSearchDao.deleteSearchHistory();
} }
private void setStorage(){ private void setStorage() {
if (BuildConfig.IS_CUSTOM_APP) { if (BuildConfig.IS_CUSTOM_APP) {
getPreferenceScreen().removePreference(getPrefrence("pref_storage")); getPreferenceScreen().removePreference(findPreference("pref_storage"));
} else { } else {
if (Environment.isExternalStorageEmulated()) { if (Environment.isExternalStorageEmulated()) {
getPrefrence(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity()) findPreference(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity())
.getString(PREF_STORAGE_TITLE, "Internal")); .getString(PREF_STORAGE_TITLE, "Internal"));
} else { } else {
getPrefrence(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity()) findPreference(PREF_STORAGE).setTitle(PreferenceManager.getDefaultSharedPreferences(getActivity())
.getString(PREF_STORAGE_TITLE, "External")); .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())); .getString(PREF_STORAGE, Environment.getExternalStorageDirectory().getPath())).getFreeSpace()));
} }
} }
@ -222,11 +221,32 @@ public class KiwixSettingsActivity extends AppCompatActivity {
} }
private void setUpLanguageChooser(String preferenceId) { private void setUpLanguageChooser(String preferenceId) {
Preference languagePref = getPrefrence(preferenceId); ListPreference languagePref = (ListPreference) findPreference(preferenceId);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
String selectedLang = sharedPreferences.getString(PREF_LANG, Locale.getDefault().toString()); String selectedLang = sharedPreferences.getString(PREF_LANG, Locale.getDefault().getLanguage());
List<String> 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.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() { private void restartActivity() {
@ -243,10 +263,6 @@ public class KiwixSettingsActivity extends AppCompatActivity {
versionPref.setSummary(version); versionPref.setSummary(version);
} }
private Preference getPrefrence(String preferenceId) {
return PrefsFragment.this.findPreference(preferenceId);
}
@Override @Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
@ -266,7 +282,7 @@ public class KiwixSettingsActivity extends AppCompatActivity {
if (key.equals(PREF_WIFI_ONLY)) { if (key.equals(PREF_WIFI_ONLY)) {
KiwixMobileActivity.wifiOnly = sharedPreferences.getBoolean(PREF_WIFI_ONLY, true); KiwixMobileActivity.wifiOnly = sharedPreferences.getBoolean(PREF_WIFI_ONLY, true);
} }
if(key.equals(PREF_AUTONIGHTMODE)){ if (key.equals(PREF_AUTONIGHTMODE)) {
KiwixMobileActivity.refresh = true; KiwixMobileActivity.refresh = true;
KiwixMobileActivity.nightMode = nightMode(sharedPreferences); KiwixMobileActivity.nightMode = nightMode(sharedPreferences);
getActivity().finish(); getActivity().finish();
@ -292,7 +308,7 @@ public class KiwixSettingsActivity extends AppCompatActivity {
.show(); .show();
} }
public void openCredits(){ public void openCredits() {
WebView view = (WebView) LayoutInflater.from(getActivity()).inflate(R.layout.credits_webview, null); WebView view = (WebView) LayoutInflater.from(getActivity()).inflate(R.layout.credits_webview, null);
view.loadUrl("file:///android_asset/credits.html"); view.loadUrl("file:///android_asset/credits.html");
new AlertDialog.Builder(getActivity(), dialogStyle()) new AlertDialog.Builder(getActivity(), dialogStyle())
@ -313,34 +329,10 @@ public class KiwixSettingsActivity extends AppCompatActivity {
if (preference.getKey().equalsIgnoreCase(PREF_STORAGE)) if (preference.getKey().equalsIgnoreCase(PREF_STORAGE))
openFolderSelect(); openFolderSelect();
if (preference.getKey().equalsIgnoreCase(PREF_LANG))
openLanguageSelect();
return true; return true;
} }
public void openLanguageSelect() { public void openFolderSelect() {
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(){
FragmentManager fm = getFragmentManager(); FragmentManager fm = getFragmentManager();
StorageSelectDialog dialogFragment = new StorageSelectDialog(); StorageSelectDialog dialogFragment = new StorageSelectDialog();
Bundle b = new Bundle(); Bundle b = new Bundle();
@ -358,7 +350,7 @@ public class KiwixSettingsActivity extends AppCompatActivity {
findPreference(PREF_STORAGE).setSummary(storageDevice.getSize()); findPreference(PREF_STORAGE).setSummary(storageDevice.getSize());
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = sharedPreferences.edit(); SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_STORAGE,storageDevice.getName()); editor.putString(PREF_STORAGE, storageDevice.getName());
if (storageDevice.isInternal()) { if (storageDevice.isInternal()) {
findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.internal_storage)); findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.internal_storage));
editor.putString(PREF_STORAGE_TITLE, getResources().getString(R.string.internal_storage)); editor.putString(PREF_STORAGE_TITLE, getResources().getString(R.string.internal_storage));

View File

@ -24,7 +24,7 @@
<item name="android:textColorPrimary">@color/primary</item> <item name="android:textColorPrimary">@color/primary</item>
<item name="android:textColorSecondary">@color/primary</item> <item name="android:textColorSecondary">@color/primary</item>
<item name="android:textColorTertiary">@color/primary</item> <item name="android:textColorTertiary">@color/primary</item>
<item name="colorControlNormal">@color/white</item> <item name="colorControlNormal">@color/accent</item>
<item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentStatus">true</item>
</style> </style>
</resources> </resources>

View File

@ -26,7 +26,7 @@
<item name="android:textColorSecondary">@color/primary</item> <item name="android:textColorSecondary">@color/primary</item>
<item name="android:textColorTertiary">@color/primary</item> <item name="android:textColorTertiary">@color/primary</item>
<item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentStatus">true</item>
<item name="colorControlNormal">@color/white</item> <item name="colorControlNormal">@color/accent</item>
<item name="android:progressBackgroundTint">@color/greyed_out_selected</item> <item name="android:progressBackgroundTint">@color/greyed_out_selected</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
</style> </style>

View File

@ -27,7 +27,7 @@
<item name="android:textColorPrimary">@color/primary</item> <item name="android:textColorPrimary">@color/primary</item>
<item name="android:textColorSecondary">@color/primary</item> <item name="android:textColorSecondary">@color/primary</item>
<item name="android:textColorTertiary">@color/primary</item> <item name="android:textColorTertiary">@color/primary</item>
<item name="colorControlNormal">@color/white</item> <item name="colorControlNormal">@color/accent</item>
</style> </style>
<style name="AppTheme.Night" parent="AppTheme.Base"> <style name="AppTheme.Night" parent="AppTheme.Base">
@ -43,7 +43,7 @@
<item name="android:textColorPrimary">@color/primary_light</item> <item name="android:textColorPrimary">@color/primary_light</item>
<item name="android:textColorSecondary">@color/primary_light</item> <item name="android:textColorSecondary">@color/primary_light</item>
<item name="android:textColorTertiary">@color/primary_light</item> <item name="android:textColorTertiary">@color/primary_light</item>
<item name="colorControlNormal">@color/white</item> <item name="colorControlNormal">@color/accent</item>
</style> </style>
<style name="WindowAnimationTransition"> <style name="WindowAnimationTransition">

View File

@ -109,7 +109,7 @@
android:key="pref_language" android:key="pref_language"
android:title="@string/pref_language_title"> android:title="@string/pref_language_title">
<Preference <ListPreference
android:key="pref_language_chooser" android:key="pref_language_chooser"
android:summary="@string/pref_language_chooser" android:summary="@string/pref_language_chooser"
android:title="@string/pref_language_title" /> android:title="@string/pref_language_title" />