import android.net.http.SslCertificate;
import android.os.Build;
import android.os.Bundle;
-// We have to use `android.support.v4.app.Fragment` until minimum API >= 23. Otherwise we cannot call `getContext()`.
+// `android.support.v4.app.Fragment` must be used until minimum API >= 23. Otherwise `getContext()` does not work.
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
// Store the default settings.
- final String defaultUserAgentName = sharedPreferences.getString("user_agent", "Privacy Browser");
- final String defaultCustomUserAgentString = sharedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0");
- String defaultFontSizeString = sharedPreferences.getString("default_font_size", "100");
- final boolean defaultDisplayWebpageImagesBoolean = sharedPreferences.getBoolean("display_website_images", true);
- final boolean defaultNightModeBoolean = sharedPreferences.getBoolean("night_mode", false);
+ final String defaultUserAgentName = sharedPreferences.getString("user_agent", getString(R.string.user_agent_default_value));
+ final String defaultCustomUserAgentString = sharedPreferences.getString("custom_user_agent", getString(R.string.custom_user_agent_default_value));
+ String defaultFontSizeString = sharedPreferences.getString("font_size", getString(R.string.font_size_default_value));
+ boolean defaultSwipeToRefresh = sharedPreferences.getBoolean("swipe_to_refresh", true);
+ final boolean defaultNightMode = sharedPreferences.getBoolean("night_mode", false);
+ final boolean defaultDisplayWebpageImages = sharedPreferences.getBoolean("display_webpage_images", true);
// Get handles for the views in the fragment.
final EditText domainNameEditText = domainSettingsView.findViewById(R.id.domain_settings_name_edittext);
final ImageView thirdPartyCookiesImageView = domainSettingsView.findViewById(R.id.domain_settings_third_party_cookies_imageview);
final Switch domStorageEnabledSwitch = domainSettingsView.findViewById(R.id.domain_settings_dom_storage_switch);
final ImageView domStorageImageView = domainSettingsView.findViewById(R.id.domain_settings_dom_storage_imageview);
- Switch formDataEnabledSwitch = domainSettingsView.findViewById(R.id.domain_settings_form_data_switch);
- final ImageView formDataImageView = domainSettingsView.findViewById(R.id.domain_settings_form_data_imageview);
+ Switch formDataEnabledSwitch = domainSettingsView.findViewById(R.id.domain_settings_form_data_switch); // The form data views can be remove once the minimum API >= 26.
+ final ImageView formDataImageView = domainSettingsView.findViewById(R.id.domain_settings_form_data_imageview); // The form data views can be remove once the minimum API >= 26.
Switch easyListSwitch = domainSettingsView.findViewById(R.id.domain_settings_easylist_switch);
ImageView easyListImageView = domainSettingsView.findViewById(R.id.domain_settings_easylist_imageview);
Switch easyPrivacySwitch = domainSettingsView.findViewById(R.id.domain_settings_easyprivacy_switch);
ImageView fanboysAnnoyanceListImageView = domainSettingsView.findViewById(R.id.domain_settings_fanboys_annoyance_list_imageview);
Switch fanboysSocialBlockingListSwitch = domainSettingsView.findViewById(R.id.domain_settings_fanboys_social_blocking_list_switch);
ImageView fanboysSocialBlockingListImageView = domainSettingsView.findViewById(R.id.domain_settings_fanboys_social_blocking_list_imageview);
+ Switch ultraPrivacySwitch = domainSettingsView.findViewById(R.id.domain_settings_ultraprivacy_switch);
+ ImageView ultraPrivacyImageView = domainSettingsView.findViewById(R.id.domain_settings_ultraprivacy_imageview);
+ Switch blockAllThirdPartyRequestsSwitch = domainSettingsView.findViewById(R.id.domain_settings_block_all_third_party_requests_switch);
+ ImageView blockAllThirdPartyRequestsImageView = domainSettingsView.findViewById(R.id.domain_settings_block_all_third_party_requests_imageview);
final Spinner userAgentSpinner = domainSettingsView.findViewById(R.id.domain_settings_user_agent_spinner);
final TextView userAgentTextView = domainSettingsView.findViewById(R.id.domain_settings_user_agent_textview);
final EditText customUserAgentEditText = domainSettingsView.findViewById(R.id.domain_settings_custom_user_agent_edittext);
final Spinner fontSizeSpinner = domainSettingsView.findViewById(R.id.domain_settings_font_size_spinner);
final TextView fontSizeTextView = domainSettingsView.findViewById(R.id.domain_settings_font_size_textview);
- final ImageView displayWebpageImagesImageView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_imageview);
- final Spinner displayWebpageImagesSpinner = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_spinner);
- final TextView displayImagesTextView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_textview);
+ final ImageView swipeToRefreshImageView = domainSettingsView.findViewById(R.id.domain_settings_swipe_to_refresh_imageview);
+ final Spinner swipeToRefreshSpinner = domainSettingsView.findViewById(R.id.domain_settings_swipe_to_refresh_spinner);
+ final TextView swipeToRefreshTextView = domainSettingsView.findViewById(R.id.domain_settings_swipe_to_refresh_textview);
final ImageView nightModeImageView = domainSettingsView.findViewById(R.id.domain_settings_night_mode_imageview);
final Spinner nightModeSpinner = domainSettingsView.findViewById(R.id.domain_settings_night_mode_spinner);
final TextView nightModeTextView = domainSettingsView.findViewById(R.id.domain_settings_night_mode_textview);
+ final ImageView displayWebpageImagesImageView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_imageview);
+ final Spinner displayWebpageImagesSpinner = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_spinner);
+ final TextView displayImagesTextView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_textview);
final ImageView pinnedSslCertificateImageView = domainSettingsView.findViewById(R.id.domain_settings_pinned_ssl_certificate_imageview);
Switch pinnedSslCertificateSwitch = domainSettingsView.findViewById(R.id.domain_settings_pinned_ssl_certificate_switch);
final LinearLayout savedSslCertificateLinearLayout = domainSettingsView.findViewById(R.id.saved_ssl_certificate_linearlayout);
int firstPartyCookiesEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES));
int thirdPartyCookiesEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES));
final int domStorageEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_DOM_STORAGE));
- int formDataEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FORM_DATA));
+ int formDataEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FORM_DATA)); // Form data can be remove once the minimum API >= 26.
int easyListEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_EASYLIST));
int easyPrivacyEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_EASYPRIVACY));
int fanboysAnnoyanceListInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FANBOYS_ANNOYANCE_LIST));
int fanboysSocialBlockingListInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST));
+ int ultraPrivacyEnabledInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_ULTRAPRIVACY));
+ int blockAllThirdPartyRequestsInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.BLOCK_ALL_THIRD_PARTY_REQUESTS));
final String currentUserAgentName = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.USER_AGENT));
int fontSizeInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.FONT_SIZE));
- int displayImagesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.DISPLAY_IMAGES));
+ int swipeToRefreshInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.SWIPE_TO_REFRESH));
int nightModeInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.NIGHT_MODE));
+ int displayImagesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.DISPLAY_IMAGES));
int pinnedSslCertificateInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.PINNED_SSL_CERTIFICATE));
final String savedSslCertificateIssuedToCNameString = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.SSL_ISSUED_TO_COMMON_NAME));
String savedSslCertificateIssuedToONameString = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.SSL_ISSUED_TO_ORGANIZATION));
savedSslCertificateEndDate = new Date(domainCursor.getLong(domainCursor.getColumnIndex(DomainsDatabaseHelper.SSL_END_DATE)));
}
- // Create `ArrayAdapters` for the `Spinners`and their `entry values`.
- ArrayAdapter<CharSequence> translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(context, R.array.translated_domain_settings_user_agent_names, R.layout.domain_settings_spinner_item);
- ArrayAdapter<CharSequence> fontSizeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.domain_settings_font_size_entries, R.layout.domain_settings_spinner_item);
- ArrayAdapter<CharSequence> fontSizeEntryValuesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.domain_settings_font_size_entry_values, R.layout.domain_settings_spinner_item);
- final ArrayAdapter<CharSequence> displayImagesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.display_webpage_images_array, R.layout.domain_settings_spinner_item);
- ArrayAdapter<CharSequence> nightModeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.night_mode_array, R.layout.domain_settings_spinner_item);
-
- // Set the `DropDownViewResource` on the `Spinners`.
- translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item);
- fontSizeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item);
- displayImagesArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item);
- nightModeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item);
-
- // Set the `ArrayAdapters` for the `Spinners`.
+ // Create array adapters for the spinners.
+ ArrayAdapter<CharSequence> translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(context, R.array.translated_domain_settings_user_agent_names, R.layout.spinner_item);
+ ArrayAdapter<CharSequence> fontSizeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.domain_settings_font_size_entries, R.layout.spinner_item);
+ ArrayAdapter<CharSequence> fontSizeEntryValuesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.domain_settings_font_size_entry_values, R.layout.spinner_item);
+ ArrayAdapter<CharSequence> swipeToRefreshArrayAdapter = ArrayAdapter.createFromResource(context, R.array.swipe_to_refresh_array, R.layout.spinner_item);
+ ArrayAdapter<CharSequence> nightModeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.night_mode_array, R.layout.spinner_item);
+ ArrayAdapter<CharSequence> displayImagesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.display_webpage_images_array, R.layout.spinner_item);
+
+ // Set the drop down view resource on the spinners.
+ translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items);
+ fontSizeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items);
+ swipeToRefreshArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items);
+ nightModeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items);
+ displayImagesArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items);
+
+ // Set the array adapters for the spinners.
userAgentSpinner.setAdapter(translatedUserAgentArrayAdapter);
fontSizeSpinner.setAdapter(fontSizeArrayAdapter);
- displayWebpageImagesSpinner.setAdapter(displayImagesArrayAdapter);
+ swipeToRefreshSpinner.setAdapter(swipeToRefreshArrayAdapter);
nightModeSpinner.setAdapter(nightModeArrayAdapter);
+ displayWebpageImagesSpinner.setAdapter(displayImagesArrayAdapter);
- // Create a `SpannableStringBuilder` for each `TextView` that needs multiple colors of text.
+ // Create a spannable string builder for each TextView that needs multiple colors of text.
SpannableStringBuilder savedSslCertificateIssuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + savedSslCertificateIssuedToCNameString);
SpannableStringBuilder savedSslCertificateIssuedToONameStringBuilder = new SpannableStringBuilder(oNameLabel + savedSslCertificateIssuedToONameString);
SpannableStringBuilder savedSslCertificateIssuedToUNameStringBuilder = new SpannableStringBuilder(uNameLabel + savedSslCertificateIssuedToUNameString);
});
// Create a `boolean` to track if night mode is enabled.
- boolean nightModeEnabled = (nightModeInt == DomainsDatabaseHelper.NIGHT_MODE_ENABLED) || ((nightModeInt == DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT) && defaultNightModeBoolean);
+ boolean nightModeEnabled = (nightModeInt == DomainsDatabaseHelper.NIGHT_MODE_ENABLED) || ((nightModeInt == DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT) && defaultNightMode);
- // Disable the JavaScript `Switch` if night mode is enabled.
+ // Disable the JavaScript switch if night mode is enabled.
if (nightModeEnabled) {
javaScriptEnabledSwitch.setEnabled(false);
} else {
javaScriptImageView.setImageDrawable(resources.getDrawable(R.drawable.privacy_mode));
}
- // Set the JavaScript `Switch` status.
+ // Set the JavaScript switch status.
if (javaScriptEnabledInt == 1) { // JavaScript is enabled.
javaScriptEnabledSwitch.setChecked(true);
} else { // JavaScript is disabled.
}
}
} else { // Third-party cookies cannot be configured for API <= 21.
- // Hide the `LinearLayout` for third-party cookies.
+ // Hide the LinearLayout for third-party cookies.
thirdPartyCookiesLinearLayout.setVisibility(View.GONE);
}
}
}
- // Set the form data status. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
- if (formDataEnabledInt == 1) { // Form data is on.
- formDataEnabledSwitch.setChecked(true);
- formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_enabled));
- } else { // Form data is off.
- // Turn the form data switch to off.
- formDataEnabledSwitch.setChecked(false);
+ // Set the form data status. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. Form data can be removed once the minimum API >= 26.
+ if (Build.VERSION.SDK_INT >= 26) { // Form data no longer applies to newer versions of Android.
+ // Hide the form data switch.
+ formDataEnabledSwitch.setVisibility(View.GONE);
+ } else { // Form data should be displayed because this is an older version of Android.
+ if (formDataEnabledInt == 1) { // Form data is on.
+ formDataEnabledSwitch.setChecked(true);
+ formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_enabled));
+ } else { // Form data is off.
+ // Turn the form data switch to off.
+ formDataEnabledSwitch.setChecked(false);
- // Set the icon according to the theme.
- if (MainWebViewActivity.darkTheme) {
- formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_dark));
- } else {
- formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_light));
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_dark));
+ } else {
+ formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_light));
+ }
}
}
}
}
+ // Set the UltraPrivacy status. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
+ if (ultraPrivacyEnabledInt == 1) { // UltraPrivacy is on.
+ // Turn the switch on.
+ ultraPrivacySwitch.setChecked(true);
+
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_enabled_dark));
+ } else {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_enabled_light));
+ }
+ } else { // EasyPrivacy is off.
+ // Turn the switch off.
+ ultraPrivacySwitch.setChecked(false);
+
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_disabled_dark));
+ } else {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_disabled_light));
+ }
+ }
+
+ // Set the third-party resource blocking status. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
+ if (blockAllThirdPartyRequestsInt == 1) { // Blocking all third-party requests is on.
+ // Turn the switch on.
+ blockAllThirdPartyRequestsSwitch.setChecked(true);
+
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_enabled_dark));
+ } else {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_enabled_light));
+ }
+ } else { // Blocking all third-party requests is off.
+ // Turn the switch off.
+ blockAllThirdPartyRequestsSwitch.setChecked(false);
+
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_disabled_dark));
+ } else {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_disabled_light));
+ }
+ }
+
// Inflated a WebView to get the default user agent.
// `@SuppressLint("InflateParams")` removes the warning about using `null` as the `ViewGroup`, which in this case makes sense because the bare WebView should not be displayed on the screen.
@SuppressLint("InflateParams") View bareWebViewLayout = inflater.inflate(R.layout.bare_webview, null, false);
final String webViewDefaultUserAgentString = bareWebView.getSettings().getUserAgentString();
// Get a handle for the user agent array adapter. This array does not contain the `System default` entry.
- ArrayAdapter<CharSequence> userAgentNamesArray = ArrayAdapter.createFromResource(context, R.array.user_agent_names, R.layout.domain_settings_spinner_item);
+ ArrayAdapter<CharSequence> userAgentNamesArray = ArrayAdapter.createFromResource(context, R.array.user_agent_names, R.layout.spinner_item);
// Get the positions of the user agent and the default user agent.
int userAgentArrayPosition = userAgentNamesArray.getPosition(currentUserAgentName);
}
}
- // Open the user agent spinner when the `TextView` is clicked.
+ // Open the user agent spinner when the TextView is clicked.
userAgentTextView.setOnClickListener((View v) -> {
// Open the user agent spinner.
userAgentSpinner.performClick();
int defaultFontSizeArrayPosition = fontSizeEntryValuesArrayAdapter.getPosition(defaultFontSizeString);
fontSizeTextView.setText(fontSizeArrayAdapter.getItem(defaultFontSizeArrayPosition));
- // Set the display options for `fontSizeTextView`.
+ // Set the display options for the font size TextView.
if (fontSizeArrayPosition == 0) { // System default font size is selected. Display `fontSizeTextView`.
fontSizeTextView.setVisibility(View.VISIBLE);
} else { // A custom font size is specified. Hide `fontSizeTextView`.
fontSizeTextView.setVisibility(View.GONE);
}
- // Open the font size spinner when the `TextView` is clicked.
+ // Open the font size spinner when the TextView is clicked.
fontSizeTextView.setOnClickListener((View v) -> {
// Open the user agent spinner.
fontSizeSpinner.performClick();
});
- // Display the website images mode in the spinner.
- displayWebpageImagesSpinner.setSelection(displayImagesInt);
+ // Display the swipe to refresh selection in the spinner.
+ swipeToRefreshSpinner.setSelection(swipeToRefreshInt);
- // Set the default display images text.
- if (defaultDisplayWebpageImagesBoolean) {
- displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED));
+ // Set the swipe to refresh text.
+ if (defaultSwipeToRefresh) {
+ swipeToRefreshTextView.setText(swipeToRefreshArrayAdapter.getItem(DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED));
} else {
- displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED));
+ swipeToRefreshTextView.setText(swipeToRefreshArrayAdapter.getItem(DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED));
}
- // Set the display website images icon and `TextView` settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
- switch (displayImagesInt) {
- case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT:
- if (defaultDisplayWebpageImagesBoolean) { // Display webpage images enabled by default.
+ // Set the swipe to refresh icon and TextView settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
+ switch (swipeToRefreshInt) {
+ case DomainsDatabaseHelper.SWIPE_TO_REFRESH_SYSTEM_DEFAULT:
+ if (defaultSwipeToRefresh) { // Swipe to refresh is enabled by default.
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light));
}
- } else { // Display webpage images disabled by default.
+ } else { // Swipe to refresh is disabled by default
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light));
}
}
- // Show `displayImagesTextView`.
- displayImagesTextView.setVisibility(View.VISIBLE);
+ // Show the swipe to refresh TextView.
+ swipeToRefreshTextView.setVisibility(View.VISIBLE);
break;
- case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED:
+ case DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED:
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light));
}
- // Hide `displayImagesTextView`.
- displayImagesTextView.setVisibility(View.GONE);
+ // Hide the swipe to refresh TextView.`
+ swipeToRefreshTextView.setVisibility(View.GONE);
break;
- case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED:
+ case DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED:
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light));
}
- // Hide `displayImagesTextView`.
- displayImagesTextView.setVisibility(View.GONE);
- break;
+ // Hide the swipe to refresh TextView.
+ swipeToRefreshTextView.setVisibility(View.GONE);
}
- // Open the display images spinner when the `TextView` is clicked.
- displayImagesTextView.setOnClickListener((View v) -> {
- // Open the user agent spinner.
- displayWebpageImagesSpinner.performClick();
+ // Open the swipe to refresh spinner when the TextView is clicked.
+ swipeToRefreshTextView.setOnClickListener((View v) -> {
+ // Open the swipe to refresh spinner.
+ swipeToRefreshSpinner.performClick();
});
// Display the night mode in the spinner.
nightModeSpinner.setSelection(nightModeInt);
// Set the default night mode text.
- if (defaultNightModeBoolean) {
+ if (defaultNightMode) {
nightModeTextView.setText(nightModeArrayAdapter.getItem(DomainsDatabaseHelper.NIGHT_MODE_ENABLED));
} else {
nightModeTextView.setText(nightModeArrayAdapter.getItem(DomainsDatabaseHelper.NIGHT_MODE_DISABLED));
}
- // Set the night mode icon and `TextView` settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
- switch (displayImagesInt) {
+ // Set the night mode icon and TextView settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
+ switch (nightModeInt) {
case DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT:
- if (defaultNightModeBoolean) { // Night mode enabled by default.
+ if (defaultNightMode) { // Night mode enabled by default.
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
nightModeImageView.setImageDrawable(resources.getDrawable(R.drawable.night_mode_enabled_dark));
}
}
- // Show `nightModeTextView`.
+ // Show night mode TextView.
nightModeTextView.setVisibility(View.VISIBLE);
break;
nightModeImageView.setImageDrawable(resources.getDrawable(R.drawable.night_mode_enabled_light));
}
- // Hide `nightModeTextView`.
+ // Hide the night mode TextView.
nightModeTextView.setVisibility(View.GONE);
break;
nightModeImageView.setImageDrawable(resources.getDrawable(R.drawable.night_mode_disabled_light));
}
- // Hide `nightModeTextView`.
+ // Hide the night mode TextView.
nightModeTextView.setVisibility(View.GONE);
break;
}
- // Open the night mode spinner when the `TextView` is clicked.
+ // Open the night mode spinner when the TextView is clicked.
nightModeTextView.setOnClickListener((View v) -> {
- // Open the user agent spinner.
+ // Open the night mode spinner.
nightModeSpinner.performClick();
});
+
+ // Display the website images mode in the spinner.
+ displayWebpageImagesSpinner.setSelection(displayImagesInt);
+
+ // Set the default display images text.
+ if (defaultDisplayWebpageImages) {
+ displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED));
+ } else {
+ displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED));
+ }
+
+ // Set the display website images icon and TextView settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
+ switch (displayImagesInt) {
+ case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT:
+ if (defaultDisplayWebpageImages) { // Display webpage images enabled by default.
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ }
+ } else { // Display webpage images disabled by default.
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ }
+ }
+
+ // Show the display images TextView.
+ displayImagesTextView.setVisibility(View.VISIBLE);
+ break;
+
+ case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED:
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ }
+
+ // Hide the display images TextView.
+ displayImagesTextView.setVisibility(View.GONE);
+ break;
+
+ case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED:
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ }
+
+ // Hide the display images TextView.
+ displayImagesTextView.setVisibility(View.GONE);
+ break;
+ }
+
+ // Open the display images spinner when the TextView is clicked.
+ displayImagesTextView.setOnClickListener((View v) -> {
+ // Open the user agent spinner.
+ displayWebpageImagesSpinner.performClick();
+ });
// Set the pinned SSL certificate icon.
if (pinnedSslCertificateInt == 1) { // Pinned SSL certificate is enabled. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
}
});
- // Set the form data switch listener.
- formDataEnabledSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
- // Update the icon.
- if (isChecked) {
- formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_enabled));
- } else {
- // Set the icon according to the theme.
- if (MainWebViewActivity.darkTheme) {
- formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_dark));
+ // Set the form data switch listener. It can be removed once the minimum API >= 26.
+ if (Build.VERSION.SDK_INT < 26) {
+ formDataEnabledSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
+ // Update the icon.
+ if (isChecked) {
+ formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_enabled));
} else {
- formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_light));
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_dark));
+ } else {
+ formDataImageView.setImageDrawable(resources.getDrawable(R.drawable.form_data_disabled_light));
+ }
}
- }
- });
+ });
+ }
// Set the EasyList switch listener.
easyListSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
}
});
+ // Set the UltraPrivacy switch listener.
+ ultraPrivacySwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
+ // Update the icon.
+ if (isChecked) { // UltraPrivacy is on.
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_enabled_dark));
+ } else {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_enabled_light));
+ }
+ } else { // UltraPrivacy is off.
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_disabled_dark));
+ } else {
+ ultraPrivacyImageView.setImageDrawable(resources.getDrawable(R.drawable.block_tracking_disabled_light));
+ }
+ }
+ });
+
+ // Set the block all third-party requests switch listener.
+ blockAllThirdPartyRequestsSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
+ // Update the icon.
+ if (isChecked) { // Blocking all third-party requests is on.
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_enabled_dark));
+ } else {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_enabled_light));
+ }
+ } else { // Blocking all third-party requests is off.
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_disabled_dark));
+ } else {
+ blockAllThirdPartyRequestsImageView.setImageDrawable(resources.getDrawable(R.drawable.block_all_third_party_requests_disabled_light));
+ }
+ }
+ });
+
// Set the user agent spinner listener.
userAgentSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
}
});
- // Set the display webpage images spinner listener.
- displayWebpageImagesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ // Set the swipe to refresh spinner listener.
+ swipeToRefreshSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- // Update the icon and the visibility of `displayImagesTextView`.
+ // Update the icon and the visibility of `nightModeTextView`. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
switch (position) {
- case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT:
- if (defaultDisplayWebpageImagesBoolean) {
+ case DomainsDatabaseHelper.SWIPE_TO_REFRESH_SYSTEM_DEFAULT:
+ if (defaultSwipeToRefresh) { // Swipe to refresh enabled by default.
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light));
}
- } else {
+ } else { // Swipe to refresh disabled by default.
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light));
}
}
- // Show `displayImagesTextView`.
- displayImagesTextView.setVisibility(View.VISIBLE);
+ // Show the swipe to refresh TextView.
+ swipeToRefreshTextView.setVisibility(View.VISIBLE);
break;
- case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED:
+ case DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED:
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light));
}
- // Hide `displayImagesTextView`.
- displayImagesTextView.setVisibility(View.GONE);
+ // Hide the swipe to refresh TextView.
+ swipeToRefreshTextView.setVisibility(View.GONE);
break;
- case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED:
+ case DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED:
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark));
} else {
- displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light));
}
- // Hide `displayImagesTextView`.
- displayImagesTextView.setVisibility(View.GONE);
- break;
+ // Hide the swipe to refresh TextView.
+ swipeToRefreshTextView.setVisibility(View.GONE);
}
}
// Update the icon and the visibility of `nightModeTextView`. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
switch (position) {
case DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT:
- if (defaultNightModeBoolean) { // Night mode enabled by default.
+ if (defaultNightMode) { // Night mode enabled by default.
// Set the icon according to the theme.
if (MainWebViewActivity.darkTheme) {
nightModeImageView.setImageDrawable(resources.getDrawable(R.drawable.night_mode_enabled_dark));
}
}
- // Show `nightModeTextView`.
+ // Show the night mode TextView.
nightModeTextView.setVisibility(View.VISIBLE);
break;
}
// Create a `boolean` to store the current night mode setting.
- boolean currentNightModeEnabled = (position == DomainsDatabaseHelper.NIGHT_MODE_ENABLED) || ((position == DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT) && defaultNightModeBoolean);
+ boolean currentNightModeEnabled = (position == DomainsDatabaseHelper.NIGHT_MODE_ENABLED) || ((position == DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT) && defaultNightMode);
// Disable the JavaScript `Switch` if night mode is enabled.
if (currentNightModeEnabled) {
// Do nothing.
}
});
+
+ // Set the display webpage images spinner listener.
+ displayWebpageImagesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ // Update the icon and the visibility of `displayImagesTextView`.
+ switch (position) {
+ case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT:
+ if (defaultDisplayWebpageImages) {
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ }
+ } else {
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ }
+ }
+
+ // Show `displayImagesTextView`.
+ displayImagesTextView.setVisibility(View.VISIBLE);
+ break;
+
+ case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED:
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light));
+ }
+
+ // Hide `displayImagesTextView`.
+ displayImagesTextView.setVisibility(View.GONE);
+ break;
+
+ case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED:
+ // Set the icon according to the theme.
+ if (MainWebViewActivity.darkTheme) {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark));
+ } else {
+ displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light));
+ }
+
+ // Hide `displayImagesTextView`.
+ displayImagesTextView.setVisibility(View.GONE);
+ break;
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Do nothing.
+ }
+ });
// Set the pinned SSL certificate switch listener.
pinnedSslCertificateSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
// Initialize `domainNamesMatch`.
boolean domainNamesMatch = false;
- // Check if the domains match.
- if (domainName.equals(certificateCommonName)) {
- domainNamesMatch = true;
- }
-
// Check various wildcard permutations if `domainName` and `certificateCommonName` are not empty.
// `noinspection ConstantCondition` removes Android Studio's incorrect lint warning that `domainName` can never be `null`.
//noinspection ConstantConditions
if ((domainName != null) && (certificateCommonName != null)) {
+ // Check if the domains match.
+ if (domainName.equals(certificateCommonName)) {
+ domainNamesMatch = true;
+ }
+
// If `domainName` starts with a wildcard, check the base domain against all the subdomains of `certificateCommonName`.
if (!domainNamesMatch && domainName.startsWith("*.") && (domainName.length() > 2)) {
// Remove the initial `*.`.