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.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<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.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));

View File

@ -24,7 +24,7 @@
<item name="android:textColorPrimary">@color/primary</item>
<item name="android:textColorSecondary">@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>
</style>
</resources>

View File

@ -26,7 +26,7 @@
<item name="android:textColorSecondary">@color/primary</item>
<item name="android:textColorTertiary">@color/primary</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:statusBarColor">@android:color/transparent</item>
</style>

View File

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

View File

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