mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-22 12:03:09 -04:00
#1383 move prefsFragment to own class
This commit is contained in:
parent
ba7275b775
commit
5ff8d8d590
@ -33,7 +33,7 @@ import org.kiwix.kiwixmobile.downloader.DownloadService;
|
|||||||
import org.kiwix.kiwixmobile.language.LanguageActivity;
|
import org.kiwix.kiwixmobile.language.LanguageActivity;
|
||||||
import org.kiwix.kiwixmobile.main.KiwixWebView;
|
import org.kiwix.kiwixmobile.main.KiwixWebView;
|
||||||
import org.kiwix.kiwixmobile.search.AutoCompleteAdapter;
|
import org.kiwix.kiwixmobile.search.AutoCompleteAdapter;
|
||||||
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
|
import org.kiwix.kiwixmobile.settings.PrefsFragment;
|
||||||
import org.kiwix.kiwixmobile.zim_manager.DownloadNotificationClickedReceiver;
|
import org.kiwix.kiwixmobile.zim_manager.DownloadNotificationClickedReceiver;
|
||||||
import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity;
|
import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ public interface ApplicationComponent {
|
|||||||
|
|
||||||
void inject(KiwixWebView kiwixWebView);
|
void inject(KiwixWebView kiwixWebView);
|
||||||
|
|
||||||
void inject(KiwixSettingsActivity.PrefsFragment prefsFragment);
|
void inject(PrefsFragment prefsFragment);
|
||||||
|
|
||||||
void inject(AutoCompleteAdapter autoCompleteAdapter);
|
void inject(AutoCompleteAdapter autoCompleteAdapter);
|
||||||
|
|
||||||
|
@ -19,55 +19,14 @@
|
|||||||
|
|
||||||
package org.kiwix.kiwixmobile.settings;
|
package org.kiwix.kiwixmobile.settings;
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.os.Bundle;
|
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;
|
|
||||||
import android.preference.PreferenceScreen;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.webkit.WebView;
|
|
||||||
import android.widget.BaseAdapter;
|
|
||||||
import android.widget.Toast;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import eu.mhutti1.utils.storage.StorageDevice;
|
|
||||||
import eu.mhutti1.utils.storage.StorageSelectDialog;
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import kotlin.Unit;
|
|
||||||
import kotlin.io.FilesKt;
|
|
||||||
import org.kiwix.kiwixmobile.BuildConfig;
|
|
||||||
import org.kiwix.kiwixmobile.KiwixApplication;
|
|
||||||
import org.kiwix.kiwixmobile.R;
|
import org.kiwix.kiwixmobile.R;
|
||||||
import org.kiwix.kiwixmobile.base.BaseActivity;
|
import org.kiwix.kiwixmobile.base.BaseActivity;
|
||||||
import org.kiwix.kiwixmobile.extensions.ContextExtensionsKt;
|
|
||||||
import org.kiwix.kiwixmobile.main.AddNoteDialog;
|
|
||||||
import org.kiwix.kiwixmobile.main.MainActivity;
|
|
||||||
import org.kiwix.kiwixmobile.utils.LanguageUtils;
|
|
||||||
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
|
|
||||||
|
|
||||||
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_WEBVIEWS_LIST;
|
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_WEBVIEWS_LIST;
|
||||||
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_HISTORY_CLEARED;
|
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_HISTORY_CLEARED;
|
||||||
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_RESTART;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_AUTONIGHTMODE;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_LANG;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_NIGHTMODE;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_STORAGE;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_WIFI_ONLY;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_ZOOM;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_ZOOM_ENABLED;
|
|
||||||
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
|
|
||||||
|
|
||||||
public class KiwixSettingsActivity extends BaseActivity {
|
public class KiwixSettingsActivity extends BaseActivity {
|
||||||
|
|
||||||
@ -109,292 +68,4 @@ public class KiwixSettingsActivity extends BaseActivity {
|
|||||||
|
|
||||||
toolbar.setNavigationOnClickListener(v -> onBackPressed());
|
toolbar.setNavigationOnClickListener(v -> onBackPressed());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PrefsFragment extends PreferenceFragment implements
|
|
||||||
SettingsContract.View,
|
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
|
||||||
|
|
||||||
public static final String PREF_VERSION = "pref_version";
|
|
||||||
public static final String PREF_CLEAR_ALL_HISTORY = "pref_clear_all_history";
|
|
||||||
public static final String PREF_CLEAR_ALL_NOTES = "pref_clear_all_notes";
|
|
||||||
public static final String PREF_CREDITS = "pref_credits";
|
|
||||||
@Inject
|
|
||||||
SettingsPresenter presenter;
|
|
||||||
@Inject
|
|
||||||
SharedPreferenceUtil sharedPreferenceUtil;
|
|
||||||
@Inject
|
|
||||||
StorageCalculator storageCalculator;
|
|
||||||
|
|
||||||
private SliderPreference mSlider;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
KiwixApplication.getApplicationComponent().inject(this);
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
addPreferencesFromResource(R.xml.preferences);
|
|
||||||
|
|
||||||
boolean auto_night_mode = sharedPreferenceUtil.getPrefAutoNightMode();
|
|
||||||
|
|
||||||
if (auto_night_mode) {
|
|
||||||
getPreferenceScreen().findPreference(PREF_NIGHTMODE).setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BuildConfig.ENFORCED_LANG.equals("")) {
|
|
||||||
setUpLanguageChooser(PREF_LANG);
|
|
||||||
} else {
|
|
||||||
getPreferenceScreen().removePreference(findPreference("pref_language"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BuildConfig.IS_CUSTOM_APP) {
|
|
||||||
PreferenceCategory notificationsCategory =
|
|
||||||
(PreferenceCategory) findPreference("pref_extras");
|
|
||||||
notificationsCategory.removePreference(findPreference("pref_wifi_only"));
|
|
||||||
}
|
|
||||||
|
|
||||||
mSlider = (SliderPreference) findPreference(PREF_ZOOM);
|
|
||||||
setSliderState();
|
|
||||||
setStorage();
|
|
||||||
setUpSettings();
|
|
||||||
new LanguageUtils(getActivity()).changeFont(getActivity().getLayoutInflater(),
|
|
||||||
sharedPreferenceUtil);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setStorage() {
|
|
||||||
if (BuildConfig.IS_CUSTOM_APP) {
|
|
||||||
getPreferenceScreen().removePreference(findPreference("pref_storage"));
|
|
||||||
} else {
|
|
||||||
if (Environment.isExternalStorageEmulated()) {
|
|
||||||
findPreference(PREF_STORAGE).setTitle(
|
|
||||||
sharedPreferenceUtil.getPrefStorageTitle("Internal"));
|
|
||||||
} else {
|
|
||||||
findPreference(PREF_STORAGE).setTitle(
|
|
||||||
sharedPreferenceUtil.getPrefStorageTitle("External"));
|
|
||||||
}
|
|
||||||
findPreference(PREF_STORAGE).setSummary(
|
|
||||||
storageCalculator.calculateAvailableSpace(new File(sharedPreferenceUtil.getPrefStorage()))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setSliderState() {
|
|
||||||
boolean enabled = getPreferenceManager().getSharedPreferences().getBoolean(
|
|
||||||
PREF_ZOOM_ENABLED, false);
|
|
||||||
if (enabled) {
|
|
||||||
mSlider.setEnabled(true);
|
|
||||||
} else {
|
|
||||||
mSlider.setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
getPreferenceScreen().getSharedPreferences()
|
|
||||||
.registerOnSharedPreferenceChangeListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
getPreferenceScreen().getSharedPreferences()
|
|
||||||
.unregisterOnSharedPreferenceChangeListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUpSettings() {
|
|
||||||
setAppVersionNumber();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpLanguageChooser(String preferenceId) {
|
|
||||||
ListPreference languagePref = (ListPreference) findPreference(preferenceId);
|
|
||||||
String selectedLang = sharedPreferenceUtil.getPrefLanguage(Locale.getDefault().toString());
|
|
||||||
List<String> languageCodeList = new LanguageUtils(getActivity()).getKeys();
|
|
||||||
selectedLang = languageCodeList.contains(selectedLang) ? selectedLang : "en";
|
|
||||||
String code[] = languageCodeList.toArray(new String[0]);
|
|
||||||
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());
|
|
||||||
sharedPreferenceUtil.putPrefLanguage(languageCode);
|
|
||||||
restartActivity();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void restartActivity() {
|
|
||||||
getActivity().setResult(RESULT_RESTART);
|
|
||||||
getActivity().finish();
|
|
||||||
getActivity().startActivity(new Intent(getActivity(), getActivity().getClass()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setAppVersionNumber() {
|
|
||||||
EditTextPreference versionPref = (EditTextPreference) findPreference(PREF_VERSION);
|
|
||||||
versionPref.setSummary(BuildConfig.VERSION_NAME + " Build: " + getVersionCode());
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getVersionCode() {
|
|
||||||
try {
|
|
||||||
return getActivity().getPackageManager()
|
|
||||||
.getPackageInfo(getActivity().getPackageName(), 0).versionCode;
|
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
|
||||||
|
|
||||||
if (key.equals(PREF_ZOOM_ENABLED)) {
|
|
||||||
setSliderState();
|
|
||||||
}
|
|
||||||
if (key.equals(PREF_ZOOM)) {
|
|
||||||
mSlider.setSummary(mSlider.getSummary());
|
|
||||||
((BaseAdapter) getPreferenceScreen().getRootAdapter()).notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
if (key.equals(PREF_NIGHTMODE)) {
|
|
||||||
MainActivity.refresh = true;
|
|
||||||
MainActivity.nightMode = sharedPreferenceUtil.nightMode();
|
|
||||||
getActivity().finish();
|
|
||||||
startActivity(new Intent(getActivity(), KiwixSettingsActivity.class));
|
|
||||||
getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
|
|
||||||
}
|
|
||||||
if (key.equals(PREF_WIFI_ONLY)) {
|
|
||||||
MainActivity.wifiOnly = sharedPreferences.getBoolean(PREF_WIFI_ONLY, true);
|
|
||||||
}
|
|
||||||
if (key.equals(PREF_AUTONIGHTMODE)) {
|
|
||||||
MainActivity.refresh = true;
|
|
||||||
MainActivity.nightMode = sharedPreferenceUtil.nightMode();
|
|
||||||
getActivity().finish();
|
|
||||||
startActivity(new Intent(getActivity(), KiwixSettingsActivity.class));
|
|
||||||
getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void clearAllHistoryDialog() {
|
|
||||||
int warningResId;
|
|
||||||
if (sharedPreferenceUtil.nightMode()) {
|
|
||||||
warningResId = R.drawable.ic_warning_white;
|
|
||||||
} else {
|
|
||||||
warningResId = R.drawable.ic_warning_black;
|
|
||||||
}
|
|
||||||
new AlertDialog.Builder(getActivity(), dialogStyle())
|
|
||||||
.setTitle(getResources().getString(R.string.clear_all_history_dialog_title))
|
|
||||||
.setMessage(getResources().getString(R.string.clear_recent_and_tabs_history_dialog))
|
|
||||||
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
|
|
||||||
presenter.clearHistory();
|
|
||||||
allHistoryCleared = true;
|
|
||||||
Toast.makeText(getActivity(),
|
|
||||||
getResources().getString(R.string.all_history_cleared_toast), Toast.LENGTH_SHORT)
|
|
||||||
.show();
|
|
||||||
})
|
|
||||||
.setNegativeButton(android.R.string.no, (dialog, which) -> {
|
|
||||||
// do nothing
|
|
||||||
})
|
|
||||||
.setIcon(warningResId)
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showClearAllNotesDialog() {
|
|
||||||
AlertDialog.Builder builder;
|
|
||||||
if (sharedPreferenceUtil.nightMode()) { // Night Mode support
|
|
||||||
builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_Dialog_Night);
|
|
||||||
} else {
|
|
||||||
builder = new AlertDialog.Builder(getActivity());
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.setMessage(R.string.delete_notes_confirmation_msg)
|
|
||||||
.setNegativeButton(android.R.string.cancel, null) // Do nothing for 'Cancel' button
|
|
||||||
.setPositiveButton(R.string.yes, (dialog, which) -> clearAllNotes())
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void clearAllNotes() {
|
|
||||||
if (KiwixApplication.getInstance().isExternalStorageWritable()) {
|
|
||||||
if (ContextCompat.checkSelfPermission(getActivity(),
|
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
|
||||||
ContextExtensionsKt.toast(getActivity(), R.string.ext_storage_permission_not_granted,
|
|
||||||
Toast.LENGTH_LONG);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FilesKt.deleteRecursively(new File(AddNoteDialog.NOTES_DIRECTORY))) {
|
|
||||||
ContextExtensionsKt.toast(getActivity(), R.string.notes_deletion_successful,
|
|
||||||
Toast.LENGTH_SHORT);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ContextExtensionsKt.toast(getActivity(), R.string.notes_deletion_unsuccessful,
|
|
||||||
Toast.LENGTH_SHORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void openCredits() {
|
|
||||||
WebView view =
|
|
||||||
(WebView) LayoutInflater.from(getActivity()).inflate(R.layout.credits_webview, null);
|
|
||||||
view.loadUrl("file:///android_asset/credits.html");
|
|
||||||
if (sharedPreferenceUtil.nightMode()) {
|
|
||||||
view.getSettings().setJavaScriptEnabled(true);
|
|
||||||
view.setBackgroundColor(0);
|
|
||||||
}
|
|
||||||
new AlertDialog.Builder(getActivity(), dialogStyle())
|
|
||||||
.setView(view)
|
|
||||||
.setPositiveButton(android.R.string.ok, null)
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
|
|
||||||
Preference preference) {
|
|
||||||
if (preference.getKey().equalsIgnoreCase(PREF_CLEAR_ALL_HISTORY)) {
|
|
||||||
clearAllHistoryDialog();
|
|
||||||
}
|
|
||||||
if (preference.getKey().equalsIgnoreCase(PREF_CLEAR_ALL_NOTES)) {
|
|
||||||
showClearAllNotesDialog();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preference.getKey().equalsIgnoreCase(PREF_CREDITS)) {
|
|
||||||
openCredits();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preference.getKey().equalsIgnoreCase(PREF_STORAGE)) {
|
|
||||||
openFolderSelect();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void openFolderSelect() {
|
|
||||||
StorageSelectDialog dialogFragment = new StorageSelectDialog();
|
|
||||||
dialogFragment.setOnSelectListener(this::onStorageDeviceSelected);
|
|
||||||
dialogFragment.show(((AppCompatActivity) getActivity()).getSupportFragmentManager(),
|
|
||||||
getResources().getString(R.string.pref_storage));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Unit onStorageDeviceSelected(StorageDevice storageDevice) {
|
|
||||||
findPreference(PREF_STORAGE).setSummary(
|
|
||||||
storageCalculator.calculateAvailableSpace(storageDevice.getFile())
|
|
||||||
);
|
|
||||||
sharedPreferenceUtil.putPrefStorage(storageDevice.getName());
|
|
||||||
if (storageDevice.isInternal()) {
|
|
||||||
findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.internal_storage));
|
|
||||||
sharedPreferenceUtil.putPrefStorageTitle(
|
|
||||||
getResources().getString(R.string.internal_storage));
|
|
||||||
} else {
|
|
||||||
findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.external_storage));
|
|
||||||
sharedPreferenceUtil.putPrefStorageTitle(
|
|
||||||
getResources().getString(R.string.external_storage));
|
|
||||||
}
|
|
||||||
return Unit.INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,337 @@
|
|||||||
|
package org.kiwix.kiwixmobile.settings;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
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;
|
||||||
|
import android.preference.PreferenceScreen;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.webkit.WebView;
|
||||||
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import eu.mhutti1.utils.storage.StorageDevice;
|
||||||
|
import eu.mhutti1.utils.storage.StorageSelectDialog;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import kotlin.Unit;
|
||||||
|
import kotlin.io.FilesKt;
|
||||||
|
import org.kiwix.kiwixmobile.BuildConfig;
|
||||||
|
import org.kiwix.kiwixmobile.KiwixApplication;
|
||||||
|
import org.kiwix.kiwixmobile.R;
|
||||||
|
import org.kiwix.kiwixmobile.extensions.ContextExtensionsKt;
|
||||||
|
import org.kiwix.kiwixmobile.main.AddNoteDialog;
|
||||||
|
import org.kiwix.kiwixmobile.main.MainActivity;
|
||||||
|
import org.kiwix.kiwixmobile.utils.LanguageUtils;
|
||||||
|
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
|
||||||
|
|
||||||
|
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_RESTART;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_AUTONIGHTMODE;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_LANG;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_NIGHTMODE;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_STORAGE;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_WIFI_ONLY;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_ZOOM;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_ZOOM_ENABLED;
|
||||||
|
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
|
||||||
|
|
||||||
|
public class PrefsFragment extends PreferenceFragment implements
|
||||||
|
SettingsContract.View,
|
||||||
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
public static final String PREF_VERSION = "pref_version";
|
||||||
|
public static final String PREF_CLEAR_ALL_HISTORY = "pref_clear_all_history";
|
||||||
|
public static final String PREF_CLEAR_ALL_NOTES = "pref_clear_all_notes";
|
||||||
|
public static final String PREF_CREDITS = "pref_credits";
|
||||||
|
@Inject
|
||||||
|
SettingsPresenter presenter;
|
||||||
|
@Inject
|
||||||
|
SharedPreferenceUtil sharedPreferenceUtil;
|
||||||
|
@Inject
|
||||||
|
StorageCalculator storageCalculator;
|
||||||
|
|
||||||
|
private SliderPreference mSlider;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
KiwixApplication.getApplicationComponent().inject(this);
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
addPreferencesFromResource(R.xml.preferences);
|
||||||
|
|
||||||
|
boolean auto_night_mode = sharedPreferenceUtil.getPrefAutoNightMode();
|
||||||
|
|
||||||
|
if (auto_night_mode) {
|
||||||
|
getPreferenceScreen().findPreference(PREF_NIGHTMODE).setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BuildConfig.ENFORCED_LANG.equals("")) {
|
||||||
|
setUpLanguageChooser(PREF_LANG);
|
||||||
|
} else {
|
||||||
|
getPreferenceScreen().removePreference(findPreference("pref_language"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BuildConfig.IS_CUSTOM_APP) {
|
||||||
|
PreferenceCategory notificationsCategory =
|
||||||
|
(PreferenceCategory) findPreference("pref_extras");
|
||||||
|
notificationsCategory.removePreference(findPreference("pref_wifi_only"));
|
||||||
|
}
|
||||||
|
|
||||||
|
mSlider = (SliderPreference) findPreference(PREF_ZOOM);
|
||||||
|
setSliderState();
|
||||||
|
setStorage();
|
||||||
|
setUpSettings();
|
||||||
|
new LanguageUtils(getActivity()).changeFont(getActivity().getLayoutInflater(),
|
||||||
|
sharedPreferenceUtil);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setStorage() {
|
||||||
|
if (BuildConfig.IS_CUSTOM_APP) {
|
||||||
|
getPreferenceScreen().removePreference(findPreference("pref_storage"));
|
||||||
|
} else {
|
||||||
|
if (Environment.isExternalStorageEmulated()) {
|
||||||
|
findPreference(PREF_STORAGE).setTitle(
|
||||||
|
sharedPreferenceUtil.getPrefStorageTitle("Internal"));
|
||||||
|
} else {
|
||||||
|
findPreference(PREF_STORAGE).setTitle(
|
||||||
|
sharedPreferenceUtil.getPrefStorageTitle("External"));
|
||||||
|
}
|
||||||
|
findPreference(PREF_STORAGE).setSummary(
|
||||||
|
storageCalculator.calculateAvailableSpace(new File(sharedPreferenceUtil.getPrefStorage()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSliderState() {
|
||||||
|
boolean enabled = getPreferenceManager().getSharedPreferences().getBoolean(
|
||||||
|
PREF_ZOOM_ENABLED, false);
|
||||||
|
if (enabled) {
|
||||||
|
mSlider.setEnabled(true);
|
||||||
|
} else {
|
||||||
|
mSlider.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
getPreferenceScreen().getSharedPreferences()
|
||||||
|
.registerOnSharedPreferenceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
getPreferenceScreen().getSharedPreferences()
|
||||||
|
.unregisterOnSharedPreferenceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpSettings() {
|
||||||
|
setAppVersionNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUpLanguageChooser(String preferenceId) {
|
||||||
|
ListPreference languagePref = (ListPreference) findPreference(preferenceId);
|
||||||
|
String selectedLang = sharedPreferenceUtil.getPrefLanguage(Locale.getDefault().toString());
|
||||||
|
List<String> languageCodeList = new LanguageUtils(getActivity()).getKeys();
|
||||||
|
selectedLang = languageCodeList.contains(selectedLang) ? selectedLang : "en";
|
||||||
|
String code[] = languageCodeList.toArray(new String[0]);
|
||||||
|
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());
|
||||||
|
sharedPreferenceUtil.putPrefLanguage(languageCode);
|
||||||
|
restartActivity();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restartActivity() {
|
||||||
|
getActivity().setResult(RESULT_RESTART);
|
||||||
|
getActivity().finish();
|
||||||
|
getActivity().startActivity(new Intent(getActivity(), getActivity().getClass()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setAppVersionNumber() {
|
||||||
|
EditTextPreference versionPref = (EditTextPreference) findPreference(PREF_VERSION);
|
||||||
|
versionPref.setSummary(BuildConfig.VERSION_NAME + " Build: " + getVersionCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getVersionCode() {
|
||||||
|
try {
|
||||||
|
return getActivity().getPackageManager()
|
||||||
|
.getPackageInfo(getActivity().getPackageName(), 0).versionCode;
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
|
||||||
|
if (key.equals(PREF_ZOOM_ENABLED)) {
|
||||||
|
setSliderState();
|
||||||
|
}
|
||||||
|
if (key.equals(PREF_ZOOM)) {
|
||||||
|
mSlider.setSummary(mSlider.getSummary());
|
||||||
|
((BaseAdapter) getPreferenceScreen().getRootAdapter()).notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
if (key.equals(PREF_NIGHTMODE)) {
|
||||||
|
MainActivity.refresh = true;
|
||||||
|
MainActivity.nightMode = sharedPreferenceUtil.nightMode();
|
||||||
|
getActivity().finish();
|
||||||
|
startActivity(new Intent(getActivity(), KiwixSettingsActivity.class));
|
||||||
|
getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
|
||||||
|
}
|
||||||
|
if (key.equals(PREF_WIFI_ONLY)) {
|
||||||
|
MainActivity.wifiOnly = sharedPreferences.getBoolean(PREF_WIFI_ONLY, true);
|
||||||
|
}
|
||||||
|
if (key.equals(PREF_AUTONIGHTMODE)) {
|
||||||
|
MainActivity.refresh = true;
|
||||||
|
MainActivity.nightMode = sharedPreferenceUtil.nightMode();
|
||||||
|
getActivity().finish();
|
||||||
|
startActivity(new Intent(getActivity(), KiwixSettingsActivity.class));
|
||||||
|
getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearAllHistoryDialog() {
|
||||||
|
int warningResId;
|
||||||
|
if (sharedPreferenceUtil.nightMode()) {
|
||||||
|
warningResId = R.drawable.ic_warning_white;
|
||||||
|
} else {
|
||||||
|
warningResId = R.drawable.ic_warning_black;
|
||||||
|
}
|
||||||
|
new AlertDialog.Builder(getActivity(), dialogStyle())
|
||||||
|
.setTitle(getResources().getString(R.string.clear_all_history_dialog_title))
|
||||||
|
.setMessage(getResources().getString(R.string.clear_recent_and_tabs_history_dialog))
|
||||||
|
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
|
||||||
|
presenter.clearHistory();
|
||||||
|
KiwixSettingsActivity.allHistoryCleared = true;
|
||||||
|
Toast.makeText(getActivity(),
|
||||||
|
getResources().getString(R.string.all_history_cleared_toast), Toast.LENGTH_SHORT)
|
||||||
|
.show();
|
||||||
|
})
|
||||||
|
.setNegativeButton(android.R.string.no, (dialog, which) -> {
|
||||||
|
// do nothing
|
||||||
|
})
|
||||||
|
.setIcon(warningResId)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showClearAllNotesDialog() {
|
||||||
|
AlertDialog.Builder builder;
|
||||||
|
if (sharedPreferenceUtil.nightMode()) { // Night Mode support
|
||||||
|
builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_Dialog_Night);
|
||||||
|
} else {
|
||||||
|
builder = new AlertDialog.Builder(getActivity());
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.setMessage(R.string.delete_notes_confirmation_msg)
|
||||||
|
.setNegativeButton(android.R.string.cancel, null) // Do nothing for 'Cancel' button
|
||||||
|
.setPositiveButton(R.string.yes, (dialog, which) -> clearAllNotes())
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearAllNotes() {
|
||||||
|
if (KiwixApplication.getInstance().isExternalStorageWritable()) {
|
||||||
|
if (ContextCompat.checkSelfPermission(getActivity(),
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
|
ContextExtensionsKt.toast(getActivity(), R.string.ext_storage_permission_not_granted,
|
||||||
|
Toast.LENGTH_LONG);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FilesKt.deleteRecursively(new File(AddNoteDialog.NOTES_DIRECTORY))) {
|
||||||
|
ContextExtensionsKt.toast(getActivity(), R.string.notes_deletion_successful,
|
||||||
|
Toast.LENGTH_SHORT);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ContextExtensionsKt.toast(getActivity(), R.string.notes_deletion_unsuccessful,
|
||||||
|
Toast.LENGTH_SHORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetJavaScriptEnabled")
|
||||||
|
public void openCredits() {
|
||||||
|
WebView view =
|
||||||
|
(WebView) LayoutInflater.from(getActivity()).inflate(R.layout.credits_webview, null);
|
||||||
|
view.loadUrl("file:///android_asset/credits.html");
|
||||||
|
if (sharedPreferenceUtil.nightMode()) {
|
||||||
|
view.getSettings().setJavaScriptEnabled(true);
|
||||||
|
view.setBackgroundColor(0);
|
||||||
|
}
|
||||||
|
new AlertDialog.Builder(getActivity(), dialogStyle())
|
||||||
|
.setView(view)
|
||||||
|
.setPositiveButton(android.R.string.ok, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
|
||||||
|
Preference preference) {
|
||||||
|
if (preference.getKey().equalsIgnoreCase(PREF_CLEAR_ALL_HISTORY)) {
|
||||||
|
clearAllHistoryDialog();
|
||||||
|
}
|
||||||
|
if (preference.getKey().equalsIgnoreCase(PREF_CLEAR_ALL_NOTES)) {
|
||||||
|
showClearAllNotesDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preference.getKey().equalsIgnoreCase(PREF_CREDITS)) {
|
||||||
|
openCredits();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preference.getKey().equalsIgnoreCase(PREF_STORAGE)) {
|
||||||
|
openFolderSelect();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openFolderSelect() {
|
||||||
|
StorageSelectDialog dialogFragment = new StorageSelectDialog();
|
||||||
|
dialogFragment.setOnSelectListener(this::onStorageDeviceSelected);
|
||||||
|
dialogFragment.show(((AppCompatActivity) getActivity()).getSupportFragmentManager(),
|
||||||
|
getResources().getString(R.string.pref_storage));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Unit onStorageDeviceSelected(StorageDevice storageDevice) {
|
||||||
|
findPreference(PREF_STORAGE).setSummary(
|
||||||
|
storageCalculator.calculateAvailableSpace(storageDevice.getFile())
|
||||||
|
);
|
||||||
|
sharedPreferenceUtil.putPrefStorage(storageDevice.getName());
|
||||||
|
if (storageDevice.isInternal()) {
|
||||||
|
findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.internal_storage));
|
||||||
|
sharedPreferenceUtil.putPrefStorageTitle(
|
||||||
|
getResources().getString(R.string.internal_storage));
|
||||||
|
} else {
|
||||||
|
findPreference(PREF_STORAGE).setTitle(getResources().getString(R.string.external_storage));
|
||||||
|
sharedPreferenceUtil.putPrefStorageTitle(
|
||||||
|
getResources().getString(R.string.external_storage));
|
||||||
|
}
|
||||||
|
return Unit.INSTANCE;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user