// Get the shared preferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- // Add a new tab if specified in the preferences.
- if (sharedPreferences.getBoolean("open_intents_in_new_tab", true)) {
- // Set the loading new intent flag.
- loadingNewIntent = true;
-
- // Add a new tab.
- addTab(null);
- }
-
// Create a URL string.
String url;
url = intentUriData.toString();
}
- // Load the URL.
- loadUrl(url);
+ // Add a new tab if specified in the preferences.
+ if (sharedPreferences.getBoolean("open_intents_in_new_tab", true)) { // Load the URL in a new tab.
+ // Set the loading new intent flag.
+ loadingNewIntent = true;
+
+ // Add a new tab.
+ addNewTab(url);
+ } else { // Load the URL in the current tab.
+ // Make it so.
+ loadUrl(url);
+ }
// Get a handle for the drawer layout.
DrawerLayout drawerLayout = findViewById(R.id.drawerlayout);
if (drawerLayout.isDrawerVisible(GravityCompat.END)) {
drawerLayout.closeDrawer(GravityCompat.END);
}
-
- // Clear the keyboard if displayed and remove the focus on the urlTextBar if it has it.
- currentWebView.requestFocus();
}
}
// Add an Open in New Tab entry.
menu.add(R.string.open_in_new_tab).setOnMenuItemClickListener((MenuItem item) -> {
- // Add a new tab.
- addTab(null);
-
- // Load the URL.
- loadUrl(linkUrl);
+ // Load the link URL in a new tab.
+ addNewTab(linkUrl);
return false;
});
// Add an Open in New Tab entry.
menu.add(R.string.open_in_new_tab).setOnMenuItemClickListener((MenuItem item) -> {
- // Add a new tab.
- addTab(null);
-
- // Load the URL.
- loadUrl(imageUrl);
+ // Load the image URL in a new tab.
+ addNewTab(imageUrl);
return false;
});
}
public void addTab(View view) {
+ // Add a new tab with a blank URL.
+ addNewTab("");
+ }
+
+ private void addNewTab(String url) {
// Get a handle for the tab layout and the view pager.
TabLayout tabLayout = findViewById(R.id.tablayout);
ViewPager webViewPager = findViewById(R.id.webviewpager);
newTab.setCustomView(R.layout.tab_custom_view);
// Add the new WebView page.
- webViewPagerAdapter.addPage(newTabNumber, webViewPager);
+ webViewPagerAdapter.addPage(newTabNumber, webViewPager, url);
}
public void closeTab(View view) {
}
@Override
- public void initializeWebView(NestedScrollWebView nestedScrollWebView, int pageNumber, ProgressBar progressBar) {
+ public void initializeWebView(NestedScrollWebView nestedScrollWebView, int pageNumber, ProgressBar progressBar, String url) {
// Get handles for the activity views.
FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
DrawerLayout drawerLayout = findViewById(R.id.drawerlayout);
registerForContextMenu(nestedScrollWebView);
// Allow the downloading of files.
- nestedScrollWebView.setDownloadListener((String url, String userAgent, String contentDisposition, String mimetype, long contentLength) -> {
+ nestedScrollWebView.setDownloadListener((String downloadUrl, String userAgent, String contentDisposition, String mimetype, long contentLength) -> {
// Check if the download should be processed by an external app.
if (downloadWithExternalApp) { // Download with an external app.
// Create a download intent. Not specifying the action type will display the maximum number of options.
Intent downloadIntent = new Intent();
// Set the URI and the MIME type. Specifying `text/html` displays a good number of options.
- downloadIntent.setDataAndType(Uri.parse(url), "text/html");
+ downloadIntent.setDataAndType(Uri.parse(downloadUrl), "text/html");
// Flag the intent to open in a new task.
downloadIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// The WRITE_EXTERNAL_STORAGE permission needs to be requested.
// Store the variables for future use by `onRequestPermissionsResult()`.
- downloadUrl = url;
+ this.downloadUrl = downloadUrl;
downloadContentDisposition = contentDisposition;
downloadContentLength = contentLength;
}
} else { // The storage permission has already been granted.
// Get a handle for the download file alert dialog.
- DialogFragment downloadFileDialogFragment = DownloadFileDialog.fromUrl(url, contentDisposition, contentLength);
+ DialogFragment downloadFileDialogFragment = DownloadFileDialog.fromUrl(downloadUrl, contentDisposition, contentLength);
// Show the download file alert dialog.
downloadFileDialogFragment.show(getSupportFragmentManager(), getString(R.string.download));
}
}
}
+ } else { // This is not the first tab.
+ // Apply the domain settings.
+ applyDomainSettings(nestedScrollWebView, url, false, false);
+
+ // Load the URL.
+ nestedScrollWebView.loadUrl(url, customHeaders);
+
+ // Display the keyboard if the URL is blank.
+ if (url.equals("")) {
+ inputMethodManager.showSoftInput(urlEditText, 0);
+ }
}
}
}
\ No newline at end of file
return position;
}
- public void addPage(int pageNumber, ViewPager webViewPager) {
+ public void addPage(int pageNumber, ViewPager webViewPager, String url) {
// Add a new page.
- webViewFragmentsList.add(WebViewTabFragment.createPage(pageNumber));
+ webViewFragmentsList.add(WebViewTabFragment.createPage(pageNumber, url));
// Update the view pager.
notifyDataSetChanged();
// The public interface is used to send information back to the parent activity.
public interface NewTabListener {
- void initializeWebView(NestedScrollWebView nestedScrollWebView, int pageNumber, ProgressBar progressBar);
+ void initializeWebView(NestedScrollWebView nestedScrollWebView, int pageNumber, ProgressBar progressBar, String url);
}
// The new tab listener is used in `onAttach()` and `onCreateView()`.
newTabListener = (NewTabListener) context;
}
- public static WebViewTabFragment createPage(int pageNumber) {
+ public static WebViewTabFragment createPage(int pageNumber, String url) {
// Create a bundle.
Bundle bundle = new Bundle();
- // Store the page number in the bundle.
+ // Store the page number and URL in the bundle.
bundle.putInt("page_number", pageNumber);
+ bundle.putString("url", url);
// Create a new instance of the WebView tab fragment.
WebViewTabFragment webViewTabFragment = new WebViewTabFragment();
// Get the variables from the arguments
int pageNumber = arguments.getInt("page_number");
+ String url = arguments.getString("url");
// Inflate the tab's WebView. Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container. The fragment will take care of attaching the root automatically.
View newPageView = layoutInflater.inflate(R.layout.webview_framelayout, container, false);
nestedScrollWebView.setWebViewFragmentId(fragmentId);
// Request the main activity initialize the WebView.
- newTabListener.initializeWebView(nestedScrollWebView, pageNumber, progressBar);
+ newTabListener.initializeWebView(nestedScrollWebView, pageNumber, progressBar, url);
// Return the new page view.
return newPageView;
<string name="api">API</string>
<string name="build">Build:</string>
<string name="security_patch">Sicherheits-Patch:</string>
- <string name="webview">WebView:</string>
+ <string name="webview_provider">WebView-Anbieter:</string>
+ <string name="webview_version">WebView-Version:</string>
<string name="orbot">Orbot:</string>
<string name="openkeychain">OpenKeychain:</string>
<string name="easylist_label">EasyList:</string>
<string name="api">API</string>
<string name="build">Versión de compilación:</string>
<string name="security_patch">Parche de seguridad:</string>
- <string name="webview">WebView:</string>
+ <string name="webview_provider">Proveedor de WebView:</string>
+ <string name="webview_version">Versión de WebView:</string>
<string name="orbot">Orbot:</string>
<string name="openkeychain">OpenKeychain:</string>
<string name="easylist_label">EasyList:</string>
<string name="api">API</string>
<string name="build">Build:</string>
<string name="security_patch">Patch si sicurezza:</string>
- <string name="webview">WebView:</string>
+ <string name="webview_provider">Provider di WebView:</string>
+ <string name="webview_version">Versione di WebView:</string>
<string name="orbot">Orbot:</string>
<string name="openkeychain">OpenKeychain:</string>
<string name="easylist_label">EasyList:</string>
<string name="api">API</string>
<string name="build">Сборка:</string>
<string name="security_patch">Патч безопасности:</string>
- <string name="webview">WebView:</string>
+ <string name="webview_provider">Провайдер WebView:</string>
+ <string name="webview_version">Версия WebView:</string>
<string name="orbot">Orbot:</string>
<string name="openkeychain">OpenKeychain:</string>
<string name="easylist_label">EasyList:</string>
<string name="api">API</string>
<string name="build">Derleme:</string>
<string name="security_patch">Güvenlik Yaması:</string>
- <string name="webview">Web Görünümü:</string>
<string name="orbot">Orbot:</string>
<string name="openkeychain">OpenKeychain:</string>
<string name="easylist_label">EasyList:</string>
Die meisten Browser plaudern still und heimlich jede Menge Informationen an Websiten aus, welche genutzt werden können, um deren Benutzer zu verfolgen und deren Privatsphäre zu kompromittieren. Webseiten und Werbenetzwerke nutzen Technologien wie JavaScript, Cookies, DOM-Speicher, User-Agents und andere, um jeden einzelnen Browser-Benutzer eindeutig zu identifizieren und ihn zwischen seinen Besuchen und sogar quer durch das Internet zu verfolgen.
-In contrast, privacy sensitive features are disabled by default in Privacy Browser. Wenn Webseiten jedoch spezielle Funktionen benötigen, um zu funktionieren, können diese beim Besuch der betreffenden Seite bewusst einmalig aktiviert werden. Darüber hinaus können spezielle Einstellungen für bestimmte Domains auch abgespeichert werden, damit sie bei jedem Besuch der betreffenden Seite automatisch aktiviert und danach wieder deaktiviert werden.
+In Privacy Browser hingegen sind Funktionen, welche die Privatsphäre gefährden, grundsätzlich deaktiviert. Wenn Webseiten jedoch spezielle Funktionen benötigen, um zu funktionieren, können diese beim Besuch der betreffenden Seite bewusst einmalig aktiviert werden. Darüber hinaus können spezielle Einstellungen für bestimmte Domains auch abgespeichert werden, damit sie bei jedem Besuch der betreffenden Seite automatisch aktiviert und danach wieder deaktiviert werden.
Privacy Browser nutzt aktuell Android's eingebaute WebView-Komponente, um Webseiten anzuzeigen. Er funktioniert daher am Besten, wenn die letzte Version von WebView installiert ist (siehe https://www.stoutner.com/privacy-browser/common-settings/webview/). Ab Version 4.x wird Privacy Browser eine abgeleitete Version von Android's WebView - Privacy WebView genannt - verwenden, um erweiterte Privatsphäre-Funktionen zu bieten.
• Integrierter EasyList-Werbeblocker
• TOR-Proxy-Unterstützung mittels Orbot
• Verankerung von SSL-Zertifikaten (Pinning)
-• Import/Export von Einstellungen und Lesezeichen
\ No newline at end of file
+• Import/export von Einstellungen und Lesezeichen
\ No newline at end of file