From 8386a22ce5c73f6aefa88a4c00c1fc130cd2d910 Mon Sep 17 00:00:00 2001 From: Abdul Wadood Date: Sat, 24 Feb 2018 20:07:40 +0530 Subject: [PATCH 01/29] 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 e3ff8e5e6e..88d2a63772 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.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.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 @@ 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 @@ private void setUpToolbar() { 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 void onCreate(Bundle savedInstanceState) { 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 @@ private void deleteSearchHistoryFromDb() { 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 void setUpSettings() { } 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 @@ private void setAppVersionNumber() { 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 void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin 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 void onClick(DialogInterface dialog, int which) { .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 boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 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 void selectionCallback(StorageDevice storageDevice) { 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 70ebdda224..7731c2594f 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 4dd50c45d2..5f8ca6f9b0 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 852fffbcd2..33faf191f5 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 + + + + From 1977294bdb4ab9585f361585d9ece39dbc4c41b3 Mon Sep 17 00:00:00 2001 From: Harshvardhan Takawale Date: Fri, 2 Mar 2018 13:20:13 +0530 Subject: [PATCH 28/29] Italicized text Italicized problem fixed --- .../kiwix/kiwixmobile/TabDrawerAdapter.java | 14 ++++++++++- .../bookmarks_view/BookmarksActivity.java | 25 ++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/TabDrawerAdapter.java b/app/src/main/java/org/kiwix/kiwixmobile/TabDrawerAdapter.java index f98068b1a4..546357c037 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/TabDrawerAdapter.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/TabDrawerAdapter.java @@ -18,6 +18,7 @@ package org.kiwix.kiwixmobile; import android.support.v7.widget.RecyclerView; +import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -31,6 +32,9 @@ import butterknife.BindView; import butterknife.ButterKnife; +import static android.os.Build.VERSION.SDK_INT; +import static android.os.Build.VERSION_CODES.N; + public class TabDrawerAdapter extends RecyclerView.Adapter { private TabClickListener listener; private List webViews; @@ -50,7 +54,7 @@ public TabDrawerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int view @Override public void onBindViewHolder(ViewHolder holder, int position) { KiwixWebView webView = webViews.get(position); - holder.title.setText(webView.getTitle()); + holder.title.setText(stripHtml(webView.getTitle())); holder.exit.setOnClickListener(v -> listener.onCloseTab(v, position)); holder.itemView.setOnClickListener(v -> { listener.onSelectTab(v, position); @@ -93,4 +97,12 @@ public ViewHolder(View v) { ButterKnife.bind(this, v); } } + + public String stripHtml(String html) { + if (SDK_INT >= N) { + return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY).toString(); + } else { + return Html.fromHtml(html).toString(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/kiwix/kiwixmobile/bookmarks_view/BookmarksActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/bookmarks_view/BookmarksActivity.java index 43eb525781..52fb59f754 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/bookmarks_view/BookmarksActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/bookmarks_view/BookmarksActivity.java @@ -30,6 +30,7 @@ import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; import android.support.v7.widget.Toolbar; +import android.text.Html; import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.LayoutInflater; @@ -62,6 +63,8 @@ import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_BOOKMARK_CLICKED; import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_CHOSE_X_TITLE; import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_CHOSE_X_URL; +import static android.os.Build.VERSION.SDK_INT; +import static android.os.Build.VERSION_CODES.N; public class BookmarksActivity extends BaseActivity implements AdapterView.OnItemClickListener, BookmarksViewCallback { @@ -145,6 +148,24 @@ private void setUpToolbar() { toolbar.setNavigationOnClickListener(v -> onBackPressed()); } + public ArrayList stripHtml(ArrayList html) { + ArrayList parsed = new ArrayList<>(); + if (html.size() != 0) { + if (SDK_INT >= N) { + for (int i = 0; i < html.size(); i++) { + parsed.add(i, Html.fromHtml(html.get(i), Html.FROM_HTML_MODE_LEGACY).toString()); + } + } else { + for (int i = 0; i < html.size(); i++) { + parsed.add(i, Html.fromHtml(html.get(i)).toString()); + } + } + return parsed; + } else { + return null; + } + } + @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent intent = new Intent(this, KiwixMobileActivity.class); @@ -183,7 +204,9 @@ public void onBackPressed() { public void showBookmarks(ArrayList bookmarks, ArrayList bookmarkUrls) { this.bookmarks.clear(); this.bookmarkUrls.clear(); - this.bookmarks.addAll(bookmarks); + ArrayList parsedBookmarks = new ArrayList<>(); + parsedBookmarks = stripHtml(bookmarks); + this.bookmarks.addAll(parsedBookmarks); this.bookmarkUrls.addAll(bookmarkUrls); adapter.notifyDataSetChanged(); setNoBookmarksState(); From 6d6dbf8d866b791fb32bf645142d608998f1d647 Mon Sep 17 00:00:00 2001 From: RohanBh Date: Wed, 7 Mar 2018 00:48:12 +0530 Subject: [PATCH 29/29] Fix #345 --- .../java/org/kiwix/kiwixmobile/utils/NetworkUtils.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java index f8a23bc24a..e4c7351f8b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/NetworkUtils.java @@ -85,8 +85,13 @@ public static String getFileNameFromUrl(String url) { public static String parseURL(Context context, String url) { String details; try { - details = url.substring(url.lastIndexOf("/") + 1, url.length() - 10); - details = details.substring(details.indexOf("_", details.indexOf("_") + 1) + 1, details.lastIndexOf("_")); + details = url.substring(url.lastIndexOf("/") + 1); + int beginIndex = details.indexOf("_", details.indexOf("_") + 1) + 1; + int endIndex = details.lastIndexOf("_"); + if (beginIndex < 0 || endIndex > details.length() || beginIndex > endIndex) { + return ""; + } + details = details.substring(beginIndex, endIndex); details = details.replaceAll("_", " "); details = details.replaceAll("all", ""); details = details.replaceAll("nopic", context.getString(R.string.zim_nopic));