package com.stoutner.privacybrowser.fragments;
import android.annotation.SuppressLint;
+import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
-import android.preference.Preference;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceFragmentCompat;
+
import com.stoutner.privacybrowser.R;
import com.stoutner.privacybrowser.activities.MainWebViewActivity;
-public class SettingsFragment extends PreferenceFragment {
+public class SettingsFragment extends PreferenceFragmentCompat {
+ // Define the class variables.
private SharedPreferences.OnSharedPreferenceChangeListener preferencesListener;
private SharedPreferences savedPreferences;
@Override
- public void onCreate(Bundle savedInstanceState) {
- // Run the default commands.
- super.onCreate(savedInstanceState);
-
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
// Load the preferences from the XML file.
- addPreferencesFromResource(R.xml.preferences);
+ setPreferencesFromResource(R.xml.preferences, rootKey);
+
+ // Get a handle for the activity.
+ Activity activity = getActivity();
+
+ // Remove the lint warning below that `getApplicationContext()` might produce a null pointer exception.
+ assert activity != null;
// Get a handle for the context.
- Context context = getActivity().getApplicationContext();
+ Context context = activity.getApplicationContext();
// Initialize savedPreferences.
savedPreferences = getPreferenceScreen().getSharedPreferences();
Preference easyPrivacyPreference = findPreference("easyprivacy");
Preference fanboyAnnoyanceListPreference = findPreference("fanboys_annoyance_list");
Preference fanboySocialBlockingListPreference = findPreference("fanboys_social_blocking_list");
+ Preference ultraListPreference = findPreference("ultralist");
Preference ultraPrivacyPreference = findPreference("ultraprivacy");
Preference blockAllThirdPartyRequestsPreference = findPreference("block_all_third_party_requests");
Preference googleAnalyticsPreference = findPreference("google_analytics");
Preference facebookClickIdsPreference = findPreference("facebook_click_ids");
+ Preference twitterAmpRedirectsPreference = findPreference("twitter_amp_redirects");
Preference proxyThroughOrbotPreference = findPreference("proxy_through_orbot");
Preference torHomepagePreference = findPreference("tor_homepage");
Preference torSearchPreference = findPreference("tor_search");
Preference downloadWithExternalAppPreference = findPreference("download_with_external_app");
Preference darkThemePreference = findPreference("dark_theme");
Preference nightModePreference = findPreference("night_mode");
+ Preference wideViewportPreference = findPreference("wide_viewport");
Preference displayWebpageImagesPreference = findPreference("display_webpage_images");
+ // Remove the lint warnings below that the preferences might be null.
+ assert javaScriptPreference != null;
+ assert firstPartyCookiesPreference != null;
+ assert thirdPartyCookiesPreference != null;
+ assert domStoragePreference != null;
+ assert formDataPreference != null;
+ assert userAgentPreference != null;
+ assert customUserAgentPreference != null;
+ assert incognitoModePreference != null;
+ assert doNotTrackPreference != null;
+ assert allowScreenshotsPreference != null;
+ assert easyListPreference != null;
+ assert easyPrivacyPreference != null;
+ assert fanboyAnnoyanceListPreference != null;
+ assert fanboySocialBlockingListPreference != null;
+ assert ultraListPreference != null;
+ assert ultraPrivacyPreference != null;
+ assert blockAllThirdPartyRequestsPreference != null;
+ assert googleAnalyticsPreference != null;
+ assert facebookClickIdsPreference != null;
+ assert twitterAmpRedirectsPreference != null;
+ assert proxyThroughOrbotPreference != null;
+ assert torHomepagePreference != null;
+ assert torSearchPreference != null;
+ assert torSearchCustomURLPreference != null;
+ assert searchPreference != null;
+ assert searchCustomURLPreference != null;
+ assert fullScreenBrowsingModePreference != null;
+ assert hideAppBarPreference != null;
+ assert clearEverythingPreference != null;
+ assert clearCookiesPreference != null;
+ assert clearDomStoragePreference != null;
+ assert clearFormDataPreference != null;
+ assert clearCachePreference != null;
+ assert homepagePreference != null;
+ assert fontSizePreference != null;
+ assert openIntentsInNewTabPreference != null;
+ assert swipeToRefreshPreference != null;
+ assert scrollAppBarPreference != null;
+ assert displayAdditionalAppBarIconsPreference != null;
+ assert downloadWithExternalAppPreference != null;
+ assert darkThemePreference != null;
+ assert nightModePreference != null;
+ assert wideViewportPreference != null;
+ assert displayWebpageImagesPreference != null;
+
// Set dependencies.
torHomepagePreference.setDependency("proxy_through_orbot");
torSearchPreference.setDependency("proxy_through_orbot");
// Remove the form data preferences if the API is >= 26 as they no longer do anything.
if (Build.VERSION.SDK_INT >= 26) {
// Get the categories.
- PreferenceCategory privacyCategory = (PreferenceCategory) findPreference("privacy");
- PreferenceCategory clearAndExitCategory = (PreferenceCategory) findPreference("clear_and_exit");
+ PreferenceCategory privacyCategory = findPreference("privacy");
+ PreferenceCategory clearAndExitCategory = findPreference("clear_and_exit");
+
+ // Remove the lint warnings below that the preference categories might be null.
+ assert privacyCategory != null;
+ assert clearAndExitCategory != null;
// Remove the form data preferences.
privacyCategory.removePreference(formDataPreference);
homepagePreference.setSummary(savedPreferences.getString("homepage", getString(R.string.homepage_default_value)));
// Set the font size as the summary text for the preference.
- fontSizePreference.setSummary(savedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%%");
+ fontSizePreference.setSummary(savedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%");
// Disable the JavaScript preference if Night Mode is enabled. JavaScript will be enabled for all web pages.
javaScriptPreference.setEnabled(!nightMode);
}
}
+ // Set the UltraList icon.
+ if (savedPreferences.getBoolean("ultralist", true)){
+ if (darkTheme) {
+ ultraListPreference.setIcon(R.drawable.block_ads_enabled_dark);
+ } else {
+ ultraListPreference.setIcon(R.drawable.block_ads_enabled_light);
+ }
+ } else {
+ if (darkTheme) {
+ ultraListPreference.setIcon(R.drawable.block_ads_disabled_dark);
+ } else {
+ ultraListPreference.setIcon(R.drawable.block_ads_disabled_light);
+ }
+ }
+
// Set the UltraPrivacy icon.
if (savedPreferences.getBoolean("ultraprivacy", true)) {
if (darkTheme) {
}
}
+ // Set the Twitter AMP redirects icon according to the theme.
+ if (savedPreferences.getBoolean("twitter_amp_redirects", true)) {
+ if (darkTheme) {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_enabled_dark);
+ } else {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_enabled_light);
+ }
+ } else {
+ if (darkTheme) {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_disabled_dark);
+ } else {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_disabled_light);
+ }
+ }
+
// Set the Tor icons according to the theme.
if (proxyThroughOrbot) { // Proxying is enabled.
if (darkTheme) {
}
}
+ // Set the wide viewport preference icon.
+ if (savedPreferences.getBoolean("wide_viewport", true)) {
+ if (darkTheme) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_dark);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_light);
+ }
+ } else {
+ if (darkTheme) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_dark);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_light);
+ }
+ }
+
// Set the display webpage images preference icon.
if (savedPreferences.getBoolean("display_webpage_images", true)) {
if (darkTheme) {
System.exit(0);
};
- // Restart the activity after 100 milliseconds, so that the app has enough time to save the change to the preference.
- allowScreenshotsRestartHandler.postDelayed(allowScreenshotsRestartRunnable, 100);
+ // Restart the activity after 150 milliseconds, so that the app has enough time to save the change to the preference.
+ allowScreenshotsRestartHandler.postDelayed(allowScreenshotsRestartRunnable, 150);
break;
case "easylist":
}
break;
+ case "ultralist":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("ultralist", true)) {
+ if (darkTheme) {
+ ultraListPreference.setIcon(R.drawable.block_ads_enabled_dark);
+ } else {
+ ultraListPreference.setIcon(R.drawable.block_ads_enabled_light);
+ }
+ } else {
+ if (darkTheme) {
+ ultraListPreference.setIcon(R.drawable.block_ads_disabled_dark);
+ } else {
+ ultraListPreference.setIcon(R.drawable.block_ads_disabled_light);
+ }
+ }
+ break;
+
case "ultraprivacy":
// Update the icon.
if (sharedPreferences.getBoolean("ultraprivacy", true)) {
}
break;
+ case "twitter_amp_redirects":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("twitter_amp_redirects", true)) {
+ if (darkTheme) {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_enabled_dark);
+ } else {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_enabled_light);
+ }
+ } else {
+ if (darkTheme) {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_disabled_dark);
+ } else {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_disabled_light);
+ }
+ }
+ break;
+
case "proxy_through_orbot":
// Get current settings.
boolean currentProxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
case "font_size":
// Update the font size summary text.
- fontSizePreference.setSummary(sharedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%%");
+ fontSizePreference.setSummary(sharedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%");
break;
case "open_intents_in_new_tab":
System.exit(0);
};
- // Restart the activity after 100 milliseconds, so that the app has enough time to save the change to the preference.
- changeThemeRestartHandler.postDelayed(changeThemeRestartRunnable, 100);
+ // Restart the activity after 150 milliseconds, so that the app has enough time to save the change to the preference.
+ changeThemeRestartHandler.postDelayed(changeThemeRestartRunnable, 150);
break;
case "night_mode":
}
break;
+ case "wide_viewport":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("wide_viewport", true)) {
+ if (darkTheme) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_dark);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_light);
+ }
+ } else {
+ if (darkTheme) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_dark);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_light);
+ }
+ }
+ break;
+
case "display_webpage_images":
+ // Update the icon.
if (sharedPreferences.getBoolean("display_webpage_images", true)) {
- // Update the icon.
if (darkTheme) {
displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_dark);
} else {
displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_light);
}
} else {
- // Update the icon.
if (darkTheme) {
displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_dark);
} else {
super.onResume();
savedPreferences.registerOnSharedPreferenceChangeListener(preferencesListener);
}
-}
+}
\ No newline at end of file