]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/Webview.java
Add a ternary operator to unformattedUrl.get() to remove a warning about possible...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / Webview.java
index a783262c336d41e7383432081dc6d58256f931ba..1fd1554828b983ada48c87c2f924fc93529d48b1 100644 (file)
@@ -2,9 +2,11 @@ package com.stoutner.privacybrowser;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Patterns;
 import android.view.KeyEvent;
@@ -17,6 +19,7 @@ import android.webkit.WebChromeClient;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.widget.EditText;
+import android.widget.ImageView;
 import android.widget.ProgressBar;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
@@ -30,6 +33,7 @@ public class Webview extends AppCompatActivity {
     static ProgressBar progressBar;
     static SwipeRefreshLayout swipeToRefresh;
     static EditText urlTextBox;
+    static ImageView favoriteIcon;
     static final String homepage = "https://www.duckduckgo.com";
 
     @Override
@@ -41,6 +45,14 @@ public class Webview extends AppCompatActivity {
         swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayoutContainer);
         mainWebView = (WebView) findViewById(R.id.mainWebView);
         progressBar = (ProgressBar) findViewById(R.id.progressBar);
+        favoriteIcon = (ImageView) findViewById(R.id.favoriteIcon);
+
+        // Remove the title from the action bar.
+        final ActionBar actionBar = getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.setDisplayShowTitleEnabled(false);
+            // actionBar.setHideOnContentScrollEnabled(true);
+        }
 
         // Implement swipe down to refresh.
         swipeToRefresh.setColorSchemeColors(0xFF0097FF);
@@ -63,19 +75,34 @@ public class Webview extends AppCompatActivity {
             }
         });
 
-        // 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.
         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.
+            @Override
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
+                mainWebView.loadUrl(url);
+                return true;
+            }
+
+            // Update the URL in urlTextBox when the page starts to load.
+            @Override
+            public void onPageStarted(WebView view, String url, Bitmap favicon) {
+                urlTextBox.setText(url);
+            }
+
+            // Update formattedUrlString and urlTextBox.  It is necessary to do this after the page finishes loading because the final URL can change during load.
+            @Override
+            public void onPageFinished(WebView view, String url) {
                 formattedUrlString = url;
                 urlTextBox.setText(formattedUrlString);
-                mainWebView.loadUrl(formattedUrlString);
-                return true;
             }
         });
 
-        // Update the progress bar when a page is loading.
         mainWebView.setWebChromeClient(new WebChromeClient() {
+
+            // Update the progress bar when a page is loading.
+            @Override
             public void onProgressChanged(WebView view, int progress) {
                 progressBar.setProgress(progress);
                 if (progress < 100) {
@@ -85,11 +112,34 @@ public class Webview extends AppCompatActivity {
 
                     // Stop the refreshing indicator if it is running.
                     swipeToRefresh.setRefreshing(false);
+                }
+            }
+
+            // Set the favorite icon when it changes.
+            @Override
+            public void onReceivedIcon(WebView view, Bitmap icon) {
+                favoriteIcon.setImageBitmap(Bitmap.createScaledBitmap(icon, 64, 64, true));
+            }
+        });
+
+        // Set the "go" button on the keyboard to load the URL.
+        urlTextBox.setOnKeyListener(new View.OnKeyListener() {
+            public boolean onKey(View v, int keyCode, KeyEvent event) {
 
-                    // Update the URL in urlTextBox.  It is necessary to do this after the page finishes loading to get the final URL, which can change during load.
-                    formattedUrlString = mainWebView.getUrl();
-                    urlTextBox.setText(formattedUrlString);
+                // If the event is a key-down event on the "enter" button, load the URL.
+                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
+                        (keyCode == KeyEvent.KEYCODE_ENTER)) {
+                    // Load the URL into the mainWebView and consume the event.
+                    try {
+                        loadUrlFromTextBox(mainWebView);
+                    } catch (UnsupportedEncodingException e) {
+                        e.printStackTrace();
+                    }
+                    // If the enter key was pressed, consume the event.
+                    return true;
                 }
+                // If any other key was pressed, do not consume the event.
+                return false;
             }
         });
 
@@ -111,7 +161,7 @@ public class Webview extends AppCompatActivity {
         if (intent.getData() != null) {
             // Get the intent data and convert it to a string.
             final Uri intentUriData = intent.getData();
-            Webview.formattedUrlString = intentUriData.toString();
+            formattedUrlString = intentUriData.toString();
         }
 
         // If formattedUrlString is null assign the homepage to it.
@@ -119,29 +169,8 @@ public class Webview extends AppCompatActivity {
             formattedUrlString = homepage;
         }
 
-        // Place the formattedUrlString in the address bar and load the website.
-        urlTextBox.setText(formattedUrlString);
+        // Load the initial website.
         mainWebView.loadUrl(formattedUrlString);
-
-        // Set the "go" button on the keyboard to load the URL.
-        urlTextBox.setOnKeyListener(new View.OnKeyListener() {
-            public boolean onKey(View v, int keyCode, KeyEvent event) {
-                // If the event is a key-down event on the "enter" button
-                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
-                        (keyCode == KeyEvent.KEYCODE_ENTER)) {
-                    // Load the URL into the mainWebView and consume the event.
-                    try {
-                        loadUrlFromTextBox(mainWebView);
-                    } catch (UnsupportedEncodingException e) {
-                        e.printStackTrace();
-                    }
-                    return true;
-                }
-                // Do not consume the event.
-                return false;
-            }
-        });
-
     }
 
     @Override
@@ -154,28 +183,19 @@ public class Webview extends AppCompatActivity {
     @Override
     public boolean onOptionsItemSelected(MenuItem menuItem) {
         int menuItemId = menuItem.getItemId();
-        final WebView mainWebView = (WebView) findViewById(R.id.mainWebView);
 
         // Sets the commands that relate to the menu entries.
         switch (menuItemId) {
             case R.id.home:
-                formattedUrlString = homepage;
-                urlTextBox.setText(formattedUrlString);
-                mainWebView.loadUrl(formattedUrlString);
+                mainWebView.loadUrl(homepage);
                 break;
+
             case R.id.back:
                 mainWebView.goBack();
-
-                // Update the URL in urlTextBox with the URL we are intending to load.  Because this can be altered during load, the final URL is loaded after the progress bar reaches 100%
-                formattedUrlString = mainWebView.getOriginalUrl();
-                urlTextBox.setText(formattedUrlString);
                 break;
+
             case R.id.forward:
                 mainWebView.goForward();
-
-                // Update the URL in urlTextBox with the URL we are intending to load.  Because this can be altered during load, the final URL is loaded after the progress bar reaches 100%
-                formattedUrlString = mainWebView.getOriginalUrl();
-                urlTextBox.setText(formattedUrlString);
                 break;
         }
 
@@ -187,10 +207,6 @@ public class Webview extends AppCompatActivity {
     public void onBackPressed() {
         if (mainWebView.canGoBack()) {
             mainWebView.goBack();
-
-            // Update the URL in urlTextBox with the URL we are intending to load.  Because this can be altered during load, the final URL is loaded after the progress bar reaches 100%
-            formattedUrlString = mainWebView.getOriginalUrl();
-            urlTextBox.setText(formattedUrlString);
         } else {
             super.onBackPressed();
         }
@@ -201,7 +217,6 @@ public class Webview extends AppCompatActivity {
         String unformattedUrlString = urlTextBox.getText().toString();
         URL unformattedUrl = null;
         Uri.Builder formattedUri = new Uri.Builder();
-        String scheme;
 
         // Check to see if unformattedUrlString is a valid URL.  Otherwise, convert it into a Duck Duck Go search.
         if (Patterns.WEB_URL.matcher(unformattedUrlString).matches()) {
@@ -218,16 +233,12 @@ public class Webview extends AppCompatActivity {
                 e.printStackTrace();
             }
 
-            if (unformattedUrl.getProtocol() != null) {
-                scheme = unformattedUrl.getProtocol();
-            } else {
-                scheme = "http";
-            }
-
-            final String authority = unformattedUrl.getAuthority();
-            final String path = unformattedUrl.getPath();
-            final String query = unformattedUrl.getQuery();
-            final String fragment = unformattedUrl.getRef();
+            // The ternary operator (? :) makes sure that unformattedUrl.get() does not cause a null pointer exception.
+            final String scheme = unformattedUrl != null ? unformattedUrl.getProtocol() : null;
+            final String authority = unformattedUrl != null ? unformattedUrl.getAuthority() : null;
+            final String path = unformattedUrl != null ? unformattedUrl.getPath() : null;
+            final String query = unformattedUrl != null ? unformattedUrl.getQuery() : null;
+            final String fragment = unformattedUrl != null ? unformattedUrl.getRef() : null;
 
             formattedUri.scheme(scheme).authority(authority).path(path).query(query).fragment(fragment);
             formattedUrlString = formattedUri.build().toString();
@@ -238,8 +249,6 @@ public class Webview extends AppCompatActivity {
             formattedUrlString = "https://duckduckgo.com/?q=" + encodedUrlString;
         }
 
-        // Place formattedUrlString back in the address bar and load the website.
-        urlTextBox.setText(formattedUrlString);
         mainWebView.loadUrl(formattedUrlString);
 
         // Hides the keyboard so we can see the webpage.