X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2FWebview.java;h=5f1e87239a5a009f22d67723638928c8f7aed975;hb=ed666e35740078d91a7cb786e56c71afeab9c909;hp=50d67ac5a6162e0b671393961d3630c5549ddb85;hpb=308e3d588ca43d02a5704a70875f54cb7e07efb8;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/Webview.java b/app/src/main/java/com/stoutner/privacybrowser/Webview.java index 50d67ac5..5f1e8723 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/Webview.java +++ b/app/src/main/java/com/stoutner/privacybrowser/Webview.java @@ -3,6 +3,7 @@ package com.stoutner.privacybrowser; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity; +import android.app.DownloadManager; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; @@ -19,12 +20,18 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; +import android.webkit.DownloadListener; import android.webkit.WebChromeClient; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.Toast; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; @@ -44,6 +51,9 @@ public class Webview extends AppCompatActivity { setContentView(R.layout.activity_webview); final WebView mainWebView = (WebView) findViewById(R.id.mainWebView); + final FrameLayout fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.fullScreenVideoFrameLayout); + final RelativeLayout rootRelativeLayout = (RelativeLayout) findViewById(R.id.rootRelativeLayout); + final Activity mainWebViewActivity = this; final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -77,14 +87,17 @@ public class Webview extends AppCompatActivity { } mainWebView.setWebViewClient(new WebViewClient() { - // setWebViewClient makes this WebView the default handler for URLs inside the app, so that links are not kicked out to other apps. - // Save the URL to formattedUrlString and update urlTextBox before loading mainWebView. + // shouldOverrideUrlLoading makes this WebView the default handler for URLs inside the app, so that links are not kicked out to other apps. @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { mainWebView.loadUrl(url); return true; } + public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { + Toast.makeText(mainWebViewActivity, "Error loading " + request + " Error: " + error, Toast.LENGTH_LONG).show(); + } + // Update the URL in urlTextBox when the page starts to load. @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { @@ -131,12 +144,73 @@ public class Webview extends AppCompatActivity { favoriteIcon.setImageBitmap(Bitmap.createScaledBitmap(icon, 64, 64, true)); } } + + // Enter full screen video + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + getSupportActionBar().hide(); + + fullScreenVideoFrameLayout.addView(view); + fullScreenVideoFrameLayout.setVisibility(View.VISIBLE); + + mainWebView.setVisibility(View.GONE); + + /* SYSTEM_UI_FLAG_HIDE_NAVIGATION hides the navigation bars on the bottom or right of the screen. + ** SYSTEM_UI_FLAG_FULLSCREEN hides the status bar across the top of the screen. + ** SYSTEM_UI_FLAG_IMMERSIVE_STICKY makes the navigation and status bars ghosted overlays and automatically rehides them. + */ + + // Set the one flag supported by API >= 14. + if (Build.VERSION.SDK_INT >= 14) { + view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); + } + + // Set the two flags that are supported by API >= 16. + if (Build.VERSION.SDK_INT >= 16) { + view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); + } + + // Set all three flags that are supported by API >= 19. + if (Build.VERSION.SDK_INT >= 19) { + view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } + } + + // Exit full screen video + public void onHideCustomView() { + getSupportActionBar().show(); + + mainWebView.setVisibility(View.VISIBLE); + + fullScreenVideoFrameLayout.removeAllViews(); + fullScreenVideoFrameLayout.setVisibility(View.GONE); + } + }); + + mainWebView.setDownloadListener(new DownloadListener() { + // Launch the Android download manager when a link leads to a download. + @Override + public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { + DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); + DownloadManager.Request requestUri = new DownloadManager.Request(Uri.parse(url)); + + // Add the URL as the description for the download. + requestUri.setDescription(url); + + // Show the download notification after the download is completed if the API is 11 or greater. + if (Build.VERSION.SDK_INT >= 11) { + requestUri.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + } + + downloadManager.enqueue(requestUri); + Toast.makeText(mainWebViewActivity, "Download started", Toast.LENGTH_SHORT).show(); + } }); // Allow pinch to zoom. mainWebView.getSettings().setBuiltInZoomControls(true); - // Hide zoom controls API is 11 or greater. + // Hide zoom controls if the API is 11 or greater. if (Build.VERSION.SDK_INT >= 11) { mainWebView.getSettings().setDisplayZoomControls(false); } @@ -172,7 +246,7 @@ public class Webview extends AppCompatActivity { return true; } - // @TargetApi(11) turns off the errors regarding copy and paste, which are removied from view in menu_webview.xml for lower version of Android. + // @TargetApi(11) turns off the errors regarding copy and paste, which are removed from view in menu_webview.xml for lower version of Android. @Override @TargetApi(11) public boolean onOptionsItemSelected(MenuItem menuItem) { @@ -232,6 +306,15 @@ public class Webview extends AppCompatActivity { startActivity(Intent.createChooser(shareIntent, "Share URL")); } break; + + case R.id.downloads: + // Launch the system Download Manager. + Intent downloadManangerIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS); + + // Launch as a new task so that Download Manager and Privacy Browser show as separate windows in the recent tasks list. + downloadManangerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + startActivity(downloadManangerIntent); } return super.onOptionsItemSelected(menuItem);