X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FMainWebViewActivity.java;h=999241b3d0bd588532eed48714f78d6f408ae9b2;hb=6e2f51349c5e692d2355580783f73d818d370531;hp=020df487fa5ee0627e350ff4d53251960bae73e5;hpb=c28dfa0efc2bb5d9df7ab3be9110fe55a2671ead;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java index 020df487..999241b3 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java @@ -88,6 +88,7 @@ import android.view.inputmethod.InputMethodManager; import android.webkit.CookieManager; import android.webkit.HttpAuthHandler; import android.webkit.SslErrorHandler; +import android.webkit.ValueCallback; import android.webkit.WebBackForwardList; import android.webkit.WebChromeClient; import android.webkit.WebResourceResponse; @@ -398,6 +399,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // `oldFolderNameString` is used in `onCreate()` and `onSaveEditBookmarkFolder()`. private String oldFolderNameString; + // `fileChooserCallback` is used in `onCreate()` and `onActivityResult()`. + private ValueCallback fileChooserCallback; + // The download strings are used in `onCreate()` and `onRequestPermissionResult()`. private String downloadUrl; private String downloadContentDisposition; @@ -906,7 +910,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook webViewTitle = title; } - // Enter full screen video + // Enter full screen video. @Override public void onShowCustomView(View view, CustomViewCallback callback) { // Pause the ad if this is the free flavor. @@ -934,7 +938,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook fullScreenVideoFrameLayout.setVisibility(View.VISIBLE); } - // Exit full screen video + // Exit full screen video. + @Override public void onHideCustomView() { // Hide `fullScreenVideoFrameLayout`. fullScreenVideoFrameLayout.removeAllViews(); @@ -955,6 +960,23 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook adView = findViewById(R.id.adview); } } + + // Upload files. + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { + // Show the file chooser if the device is running API >= 21. + if (Build.VERSION.SDK_INT >= 21) { + // Store the file path callback. + fileChooserCallback = filePathCallback; + + // Create an intent to open a chooser based ont the file chooser parameters. + Intent fileChooserIntent = fileChooserParams.createIntent(); + + // Open the file chooser. Currently only one `startActivityForResult` exists in this activity, so the request code, used to differentiate them, is simply `0`. + startActivityForResult(fileChooserIntent, 0); + } + return true; + } }); // Register `mainWebView` for a context menu. This is used to see link targets and download images. @@ -1087,7 +1109,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("http")) { // Load the URL in Privacy Browser. // Apply the domain settings for the new URL. - applyDomainSettings(url, true); + applyDomainSettings(url, true, false); // Returning false causes the current `WebView` to handle the URL and prevents it from adding redirects to the history list. return false; @@ -1220,7 +1242,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Apply any custom domain settings if the URL was loaded by navigating history. if (navigatingHistory) { - applyDomainSettings(url, true); + applyDomainSettings(url, true, false); } // Set `urlIsLoading` to `true`, so that redirects while loading do not trigger changes in the user agent, which forces another reload of the existing page. @@ -1276,7 +1298,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook inputMethodManager.showSoftInput(urlTextBox, 0); // Apply the domain settings. This clears any settings from the previous domain. - applyDomainSettings(formattedUrlString, true); + applyDomainSettings(formattedUrlString, true, false); } else { // `WebView` has loaded a webpage. // Set `formattedUrlString`. formattedUrlString = url; @@ -1465,7 +1487,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Apply the domain settings if returning from the Domains activity. if (reapplyDomainSettingsOnRestart) { // Reapply the domain settings. - applyDomainSettings(formattedUrlString, false); + applyDomainSettings(formattedUrlString, false, true); // Reset `reapplyDomainSettingsOnRestart`. reapplyDomainSettingsOnRestart = false; @@ -2960,6 +2982,16 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook } } + // Process the results of an upload file chooser. Currently there is only one `startActivityForResult` in this activity, so the request code, used to differentiate them, is ignored. + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // File uploads only work on API >= 21. + if (Build.VERSION.SDK_INT >= 21) { + // Pass the file to the WebView. + fileChooserCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data)); + } + } + private void loadUrlFromTextBox() throws UnsupportedEncodingException { // Get the text from urlTextBox and convert it to a string. trim() removes white spaces from the beginning and end of the string. String unformattedUrlString = urlTextBox.getText().toString().trim(); @@ -3011,7 +3043,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook private void loadUrl(String url) { // Apply any custom domain settings. - applyDomainSettings(url, true); + applyDomainSettings(url, true, false); // Load the URL. mainWebView.loadUrl(url, customHeaders); @@ -3203,10 +3235,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook } } - // + // `reloadWebsite` is used if returnig from the Domains activity. Otherwise JavaScript might not function correctly if it is newly enabled. // The deprecated `.getDrawable()` must be used until the minimum API >= 21. @SuppressWarnings("deprecation") - private void applyDomainSettings(String url, boolean resetFavoriteIcon) { + private void applyDomainSettings(String url, boolean resetFavoriteIcon, boolean reloadWebsite) { // Reset `navigatingHistory`. navigatingHistory = false; @@ -3500,6 +3532,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook if (mainMenu != null) { updatePrivacyIcons(true); } + + // Reload the website if returning from the Domains activity. + if (reloadWebsite) { + mainWebView.reload(); + } } }