/*
- * Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2022 Soren Stoutner <soren@stoutner.com>.
*
- * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
*
- * Privacy Browser is free software: you can redistribute it and/or modify
+ * Privacy Browser Android is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
- * Privacy Browser is distributed in the hope that it will be useful,
+ * Privacy Browser Android is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>.
+ * along with Privacy Browser Android. If not, see <http://www.gnu.org/licenses/>.
*/
package com.stoutner.privacybrowser.fragments;
private Preference swipeToRefreshPreference;
private Preference downloadWithExternalAppPreference;
private Preference scrollAppBarPreference;
+ private Preference bottomAppBarPreference;
private Preference displayAdditionalAppBarIconsPreference;
private Preference appThemePreference;
private Preference webViewThemePreference;
// Get the current theme status.
currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
- // // Get a handle for the shared preferences.
+ // Get a handle for the shared preferences.
SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
// Get handles for the preferences.
searchPreference = findPreference("search");
searchCustomURLPreference = findPreference("search_custom_url");
proxyPreference = findPreference("proxy");
- proxyCustomUrlPreference = findPreference("proxy_custom_url");
+ proxyCustomUrlPreference = findPreference(getString(R.string.proxy_custom_url_key));
fullScreenBrowsingModePreference = findPreference("full_screen_browsing_mode");
hideAppBarPreference = findPreference("hide_app_bar");
clearEverythingPreference = findPreference("clear_everything");
openIntentsInNewTabPreference = findPreference("open_intents_in_new_tab");
swipeToRefreshPreference = findPreference("swipe_to_refresh");
downloadWithExternalAppPreference = findPreference(getString(R.string.download_with_external_app_key));
- scrollAppBarPreference = findPreference("scroll_app_bar");
+ scrollAppBarPreference = findPreference(getString(R.string.scroll_app_bar_key));
+ bottomAppBarPreference = findPreference(getString(R.string.bottom_app_bar_key));
displayAdditionalAppBarIconsPreference = findPreference(getString(R.string.display_additional_app_bar_icons_key));
appThemePreference = findPreference("app_theme");
webViewThemePreference = findPreference("webview_theme");
assert swipeToRefreshPreference != null;
assert downloadWithExternalAppPreference != null;
assert scrollAppBarPreference != null;
+ assert bottomAppBarPreference != null;
assert displayAdditionalAppBarIconsPreference != null;
assert appThemePreference != null;
assert webViewThemePreference != null;
break;
case ProxyHelper.TOR:
- if (Build.VERSION.SDK_INT == 19) { // Proxying through SOCKS doesn't work on Android KitKat.
- proxyPreference.setSummary(getString(R.string.tor_enabled_kitkat));
- } else {
- proxyPreference.setSummary(getString(R.string.tor_enabled));
- }
+ proxyPreference.setSummary(getString(R.string.tor_enabled));
break;
case ProxyHelper.I2P:
}
// Set the summary text for the custom proxy URL.
- proxyCustomUrlPreference.setSummary(sharedPreferences.getString("proxy_custom_url", getString(R.string.proxy_custom_url_default_value)));
+ proxyCustomUrlPreference.setSummary(sharedPreferences.getString(getString(R.string.proxy_custom_url_key), getString(R.string.proxy_custom_url_default_value)));
// Only enable the custom proxy URL if a custom proxy is selected.
- proxyCustomUrlPreference.setEnabled(proxyString.equals("Custom"));
+ proxyCustomUrlPreference.setEnabled(proxyString.equals(ProxyHelper.CUSTOM));
// Set the status of the clear and exit preferences.
webViewThemeEntryNumber = 0;
}
- // Set the visibility of the WebView theme preference.
- if (Build.VERSION.SDK_INT < 21) { // The device is running API 19.
- // Get a handle for the general category.
- PreferenceCategory generalCategory = findPreference("general");
-
- // Remove the incorrect lint warning below that the general preference category might be null.
- assert generalCategory != null;
-
- // Remove the WebView theme preference.
- generalCategory.removePreference(webViewThemePreference);
- } else { // The device is running API >= 21
- // Set the current theme as the summary text for the preference.
- webViewThemePreference.setSummary(webViewThemeEntriesStringArray[webViewThemeEntryNumber]);
- }
+ // Set the current theme as the summary text for the preference.
+ webViewThemePreference.setSummary(webViewThemeEntriesStringArray[webViewThemeEntryNumber]);
// Set the JavaScript icon.
}
// Set the Proxy icons according to the theme and status.
- if (proxyString.equals("None")) { // Proxying is disabled.
+ if (proxyString.equals(ProxyHelper.NONE)) { // Proxying is disabled.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { // Dark theme.
// Set the main proxy icon to be disabled.
proxyPreference.setIcon(R.drawable.proxy_disabled_night);
}
// Set the scroll app bar preference icon.
- if (sharedPreferences.getBoolean("scroll_app_bar", true)) {
+ if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), true)) {
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled_day);
} else {
}
}
+ // Set the bottom app bar preference icon.
+ if (sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled_day);
+ } else {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled_night);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled_day);
+ } else {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled_night);
+ }
+ }
+
// Set the display additional app bar icons preference icon.
if (sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false)) {
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_day);
}
}
-
- // Get the shared preferences change listener.
- sharedPreferenceChangeListener = getSharedPreferencesChangeListener(requireContext());
-
- // Register the listener.
- sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
// The listener should be unregistered when the app is paused.
// Get a handle for the shared preferences.
SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
- // Unregister the shared preferences listener.
+ // Unregister the shared preference listener.
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
// Run the default commands.
super.onResume();
- // Get a new shared preferences change listener.
- sharedPreferenceChangeListener = getSharedPreferencesChangeListener(requireContext());
+ // Get a new shared preference change listener.
+ sharedPreferenceChangeListener = getSharedPreferenceChangeListener(requireContext());
// Get a handle for the shared preferences.
SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
- // Re-register the shared preferences listener.
+ // Re-register the shared preference listener.
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
// The context must be passed to the shared preference change listener or else any calls to the system `getString()` will crash if the app has been restarted.
- private SharedPreferences.OnSharedPreferenceChangeListener getSharedPreferencesChangeListener(Context context) {
+ // This can be removed at some future point, perhaps after the switch to PreferenceScreenCompat. It isn't an issue in Privacy Cell.
+ private SharedPreferences.OnSharedPreferenceChangeListener getSharedPreferenceChangeListener(Context context) {
// Return the shared preference change listener.
return (SharedPreferences sharedPreferences, String key) -> {
switch (key) {
}
}
- // Create an intent to restart Privacy Browser.
- Intent allowScreenshotsRestartIntent = requireActivity().getParentActivityIntent();
-
- // Assert that the intent is not null to remove the lint error below.
- assert allowScreenshotsRestartIntent != null;
-
- // `Intent.FLAG_ACTIVITY_CLEAR_TASK` removes all activities from the stack. It requires `Intent.FLAG_ACTIVITY_NEW_TASK`.
- allowScreenshotsRestartIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
-
- // Create a handler to restart the activity.
- Handler allowScreenshotsRestartHandler = new Handler(Looper.getMainLooper());
-
- // Create a runnable to restart the activity.
- Runnable allowScreenshotsRestartRunnable = () -> {
- // Restart the activity.
- startActivity(allowScreenshotsRestartIntent);
-
- // Kill this instance of Privacy Browser. Otherwise, the app exhibits sporadic behavior after the restart.
- System.exit(0);
- };
-
- // Restart the activity after 150 milliseconds, so that the app has enough time to save the change to the preference.
- allowScreenshotsRestartHandler.postDelayed(allowScreenshotsRestartRunnable, 150);
+ // Restart Privacy Browser.
+ restartPrivacyBrowser();
break;
case "easylist":
break;
case ProxyHelper.TOR:
- if (Build.VERSION.SDK_INT == 19) { // Proxying through SOCKS doesn't work on Android KitKat.
- proxyPreference.setSummary(context.getString(R.string.tor_enabled_kitkat));
- } else {
- proxyPreference.setSummary(context.getString(R.string.tor_enabled));
- }
+ proxyPreference.setSummary(context.getString(R.string.tor_enabled));
break;
case ProxyHelper.I2P:
}
// Update the status of the custom URL preference.
- proxyCustomUrlPreference.setEnabled(currentProxyString.equals("Custom"));
+ proxyCustomUrlPreference.setEnabled(currentProxyString.equals(ProxyHelper.CUSTOM));
// Update the icons.
- if (currentProxyString.equals("None")) { // Proxying is disabled.
+ if (currentProxyString.equals(ProxyHelper.NONE)) { // Proxying is disabled.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { // Dark theme.
// Set the main proxy icon to be disabled
proxyPreference.setIcon(R.drawable.proxy_disabled_night);
case "proxy_custom_url":
// Set the summary text for the proxy custom URL.
- proxyCustomUrlPreference.setSummary(sharedPreferences.getString("proxy_custom_url", context.getString(R.string.proxy_custom_url_default_value)));
+ proxyCustomUrlPreference.setSummary(sharedPreferences.getString(context.getString(R.string.proxy_custom_url_key), context.getString(R.string.proxy_custom_url_default_value)));
break;
case "full_screen_browsing_mode":
case "scroll_app_bar":
// Update the icon.
- if (sharedPreferences.getBoolean("scroll_app_bar", true)) {
+ if (sharedPreferences.getBoolean(context.getString(R.string.scroll_app_bar_key), true)) {
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled_day);
} else {
}
break;
+ case "bottom_app_bar":
+ // Update the icon.
+ if (sharedPreferences.getBoolean(context.getString(R.string.bottom_app_bar_key), false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled_day);
+ } else {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled_night);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled_day);
+ } else {
+ bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled_night);
+ }
+ }
+
+ // Restart Privacy Browser.
+ restartPrivacyBrowser();
+ break;
+
case "display_additional_app_bar_icons":
// Update the icon.
if (sharedPreferences.getBoolean(context.getString(R.string.display_additional_app_bar_icons_key), false)) {
}
};
}
-}
\ No newline at end of file
+
+ private void restartPrivacyBrowser() {
+ // Create an intent to restart Privacy Browser.
+ Intent restartIntent = requireActivity().getParentActivityIntent();
+
+ // Assert that the intent is not null to remove the lint error below.
+ assert restartIntent != null;
+
+ // `Intent.FLAG_ACTIVITY_CLEAR_TASK` removes all activities from the stack. It requires `Intent.FLAG_ACTIVITY_NEW_TASK`.
+ restartIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+ // Create a handler to restart the activity.
+ Handler restartHandler = new Handler(Looper.getMainLooper());
+
+ // Create a runnable to restart the activity.
+ Runnable restartRunnable = () -> {
+ // Restart the activity.
+ startActivity(restartIntent);
+
+ // Kill this instance of Privacy Browser. Otherwise, the app exhibits sporadic behavior after the restart.
+ System.exit(0);
+ };
+
+ // Restart the activity after 400 milliseconds, so that the app has enough time to save the change to the preference.
+ restartHandler.postDelayed(restartRunnable, 400);
+ }
+}