/*
- * Copyright © 2015-2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2015-2022 Soren Stoutner <soren@stoutner.com>.
*
* Download cookie code contributed 2017 Hendrik Knackstedt. Copyright assigned to 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.activities;
Snackbar.make(currentWebView, getString(R.string.file_saved) + " " + fileNameString, Snackbar.LENGTH_SHORT).show();
} catch (Exception exception) {
// Display a snackbar with the exception.
- Snackbar.make(currentWebView, getString(R.string.error_saving_file) + " " + exception.toString(), Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error_saving_file) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
} finally {
// Delete the temporary MHT file.
//noinspection ResultOfMethodCallIgnored
});
} catch (IOException ioException) {
// Display a snackbar with the IO exception.
- Snackbar.make(currentWebView, getString(R.string.error_saving_file) + " " + ioException.toString(), Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error_saving_file) + " " + ioException, Snackbar.LENGTH_INDEFINITE).show();
}
}
}
// Set the title.
optionsRefreshMenuItem.setTitle(R.string.stop);
- // Set the icon if it is displayed in the app bar.
+ // Set the icon if it is displayed in the app bar. Once the minimum API is >= 26, the blue and black icons can be combined with a tint list.
if (displayAdditionalAppBarIcons) {
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
- // Set the icon according to the current theme status.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- optionsRefreshMenuItem.setIcon(R.drawable.close_blue_day);
- } else {
- optionsRefreshMenuItem.setIcon(R.drawable.close_blue_night);
- }
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue);
}
}
// Initialize the formatted URL string.
String url = "";
- // Check to see if `unformattedUrlString` is a valid URL. Otherwise, convert it into a search.
+ // Check to see if the unformatted URL string is a valid URL. Otherwise, convert it into a search.
if (unformattedUrlString.startsWith("content://")) { // This is a Content URL.
// Load the entire content URL.
url = unformattedUrlString;
} else if (Patterns.WEB_URL.matcher(unformattedUrlString).matches() || unformattedUrlString.startsWith("http://") || unformattedUrlString.startsWith("https://") ||
unformattedUrlString.startsWith("file://")) { // This is a standard URL.
// Add `https://` at the beginning if there is no protocol. Otherwise the app will segfault.
- if (!unformattedUrlString.startsWith("http") && !unformattedUrlString.startsWith("file://") && !unformattedUrlString.startsWith("content://")) {
+ if (!unformattedUrlString.startsWith("http") && !unformattedUrlString.startsWith("file://")) {
unformattedUrlString = "https://" + unformattedUrlString;
}
- // Initialize `unformattedUrl`.
+ // Initialize the unformatted URL.
URL unformattedUrl = null;
- // Convert `unformattedUrlString` to a `URL`, then to a `URI`, and then back to a `String`, which sanitizes the input and adds in any missing components.
+ // Convert the unformatted URL string to a URL, then to a URI, and then back to a string, which sanitizes the input and adds in any missing components.
try {
unformattedUrl = new URL(unformattedUrlString);
} catch (MalformedURLException e) {
currentWebView.loadUrl(temporaryMhtFile.toString());
} catch (Exception exception) {
// Display a snackbar.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception.toString(), Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
}
} else { // Let the WebView handle opening of the file.
// Open the file.
break;
}
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
// Set a background on the URL relative layout to indicate that custom domain settings are being used.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.url_bar_background_light_green, null));
- } else {
- urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.url_bar_background_dark_blue, null));
- }
+ urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.domain_settings_url_background, null));
} else { // The new URL does not have custom domain settings. Load the defaults.
// Store the values from the shared preferences.
nestedScrollWebView.getSettings().setJavaScriptEnabled(sharedPreferences.getBoolean("javascript", false));
optionsPrivacyMenuItem.setIcon(R.drawable.privacy_mode);
}
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
// Update the cookies icon.
- if (currentWebView.getAcceptCookies()) { // Cookies are enabled.
+ if (currentWebView.getAcceptCookies()) {
optionsCookiesMenuItem.setIcon(R.drawable.cookies_enabled);
- } else { // Cookies are disabled.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- optionsCookiesMenuItem.setIcon(R.drawable.cookies_disabled_day);
- } else {
- optionsCookiesMenuItem.setIcon(R.drawable.cookies_disabled_night);
- }
+ } else {
+ optionsCookiesMenuItem.setIcon(R.drawable.cookies_disabled);
}
// Update the refresh icon.
if (optionsRefreshMenuItem.getTitle() == getString(R.string.refresh)) { // The refresh icon is displayed.
- // Set the icon according to the theme.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_day);
- } else {
- optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_night);
- }
+ // Set the icon. Once the minimum API is >= 26, the blue and black icons can be combined with a tint list.
+ optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled);
} else { // The stop icon is displayed.
- // Set the icon according to the theme.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- optionsRefreshMenuItem.setIcon(R.drawable.close_blue_day);
- } else {
- optionsRefreshMenuItem.setIcon(R.drawable.close_blue_night);
- }
+ // Set the icon. Once the minimum API is >= 26, the blue and black icons can be combined with a tint list.
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue);
}
// `invalidateOptionsMenu()` calls `onPrepareOptionsMenu()` and redraws the icons in the app bar.
// Set the background to indicate the domain settings status.
if (currentWebView.getDomainSettingsApplied()) {
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
- // Set a green background on the URL relative layout to indicate that custom domain settings are being used.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.url_bar_background_light_green, null));
- } else {
- urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.url_bar_background_dark_blue, null));
- }
+ // Set a background on the URL relative layout to indicate that custom domain settings are being used.
+ urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.domain_settings_url_background, null));
} else {
+ // Remove any background on the URL relative layout.
urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.color.transparent, null));
}
} else { // The fragment has not been populated. Try again in 100 milliseconds.
// Get the app bar and theme preferences.
boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false);
- // If the icon is displayed in the AppBar, set it according to the theme.
+ // Set the icon if it is displayed in the AppBar. Once the minimum API is >= 26, the blue and black icons can be combined with a tint list.
if (displayAdditionalAppBarIcons) {
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
- // Set the stop icon according to the theme.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- optionsRefreshMenuItem.setIcon(R.drawable.close_blue_day);
- } else {
- optionsRefreshMenuItem.setIcon(R.drawable.close_blue_night);
- }
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue);
}
}
}
// If the icon is displayed in the app bar, reset it according to the theme.
if (displayAdditionalAppBarIcons) {
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
- // Set the icon according to the theme.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_day);
- } else {
- optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_night);
- }
+ // Set the icon.
+ optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled);
}
}
}
}
- // Handle SSL Certificate errors.
+ // Handle SSL Certificate errors. Suppress the lint warning that ignoring the error might be dangerous.
+ @SuppressLint("WebViewClientOnReceivedSslError")
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// Get the current website SSL certificate.