Fix periodic problems adding tabs from intents. https://redmine.stoutner.com/issues/412
authorSoren Stoutner <soren@stoutner.com>
Wed, 8 May 2019 19:35:01 +0000 (12:35 -0700)
committerSoren Stoutner <soren@stoutner.com>
Wed, 8 May 2019 19:35:01 +0000 (12:35 -0700)
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/adapters/WebViewPagerAdapter.java
app/src/main/java/com/stoutner/privacybrowser/fragments/WebViewTabFragment.java
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values-tr/strings.xml
fastlane/metadata/android/de-DE/full_description.txt

index 5764b9d939f4b3e8b480fa6dbb36d60c1a5d7afb..df7cef48fd39a8052e9685b050fe1ac12f267d91 100644 (file)
@@ -816,15 +816,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // 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;
 
@@ -847,8 +838,17 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 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);
@@ -862,9 +862,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             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();
         }
     }
 
@@ -2314,11 +2311,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
                 // 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;
                 });
 
@@ -2431,11 +2425,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
                 // 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;
                 });
 
@@ -3969,6 +3960,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     }
 
     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);
@@ -3989,7 +3985,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         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) {
@@ -4305,7 +4301,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     }
 
     @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);
@@ -4458,14 +4454,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         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);
@@ -4478,7 +4474,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     // 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;
 
@@ -4495,7 +4491,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     }
                 } 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));
@@ -5472,6 +5468,17 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     }
                 }
             }
+        } 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
index 0a5aff1fd82ea25ff0f3c319a880afd5bfd5d1eb..256e654236d7fe5b0ed7fdb0e7680c9882d0b0bb 100644 (file)
@@ -93,9 +93,9 @@ public class WebViewPagerAdapter extends FragmentPagerAdapter {
         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();
index 3ffa8aa4faaa81ab8e8c97c60e715fcdab82c163..413910dc465f0238e7bba7c794979ff84ff6dfb1 100644 (file)
@@ -40,7 +40,7 @@ public class WebViewTabFragment extends Fragment {
 
     // 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()`.
@@ -55,12 +55,13 @@ public class WebViewTabFragment extends Fragment {
         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();
@@ -82,6 +83,7 @@ public class WebViewTabFragment extends Fragment {
 
         // 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);
@@ -94,7 +96,7 @@ public class WebViewTabFragment extends Fragment {
         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;
index f99913cdf5b992539787383b48b6de061a1b0b5f..981c912a0f2f310678ca032e0220fc3e484228f5 100644 (file)
     <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>
index 8997986a749313b286517dabe6c7487ff73a7ff5..c86f2cbad32f24a16b52c597fd5037b22d3f5c19 100644 (file)
     <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>
index d7ff9e725ddf23472c93b46dd553a0a921c12cdf..5b48a7cd9a628c8468c5a75a98d043c5fca65f09 100644 (file)
     <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>
index 3ff1b97643c84605873e08cac34717f500e3cabc..adec96712d698debadfa908593b88bc6cbe502fa 100644 (file)
     <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>
index 942b03f6f0e7297f2a737c033ef2ec8155ed51cb..9e320807464efe7113ff28794b37bfa5779f8c6a 100644 (file)
     <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>
index 762c83bab99a89b558663bc39de1181a33007315..b9b9f3c21355c6eac26c378bb30ad7133b277ff4 100644 (file)
@@ -6,7 +6,7 @@ Privacy Browser verfolgt zwei grundsätzliche Ziele:
 
 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.
 
@@ -16,4 +16,4 @@ Features:
 • 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