X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2FMainWebViewActivity.java;h=96f49b5b22463dc81f3c66cb6c184dab06cb4ea0;hb=8366efd6bd48448d2b67c30ac5ceb321111d9c4c;hp=2919a2229d3297bc5baa13f1a19587ac6805deb6;hpb=cdbd0fea022e075e46906307cbf889cac5325dd5;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java index 2919a222..96f49b5b 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java @@ -20,7 +20,6 @@ package com.stoutner.privacybrowser; import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.app.Activity; import android.app.DownloadManager; import android.content.Intent; @@ -30,9 +29,12 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.design.widget.Snackbar; import android.support.v4.app.DialogFragment; +import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.ActionBar; +import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatDialogFragment; import android.support.v7.widget.Toolbar; @@ -52,7 +54,6 @@ import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ProgressBar; -import android.widget.Toast; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; @@ -66,6 +67,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome // mainWebView is public static so it can be accessed from AboutDialog. It is also used in onCreate(), onOptionsItemSelected(), and loadUrlFromTextBox(). public static WebView mainWebView; + // DrawerTottle is use in onCrate() and onPostCreate(). + private ActionBarDrawerToggle drawerToggle; // mainMenu is used in onCreateOptionsMenu() and onOptionsItemSelected(). private Menu mainMenu; // formattedUrlString is used in onCreate(), onOptionsItemSelected(), onCreateHomeScreenShortcutCreate(), and loadUrlFromTextBox(). @@ -95,14 +98,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome @SuppressLint("SetJavaScriptEnabled") protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_webview); + setContentView(R.layout.coordinator_layout); // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21. Toolbar supportAppBar = (Toolbar) findViewById(R.id.appBar); setSupportActionBar(supportAppBar); final FrameLayout fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.fullScreenVideoFrameLayout); - final Activity mainWebViewActivity = this; + // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21. final ActionBar appBar = getSupportActionBar(); @@ -148,6 +151,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome }); } + DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, supportAppBar, R.string.open_navigation, R.string.close_navigation); + mainWebView.setWebViewClient(new WebViewClient() { // shouldOverrideUrlLoading makes this WebView the default handler for URLs inside the app, so that links are not kicked out to other apps. @Override @@ -156,12 +162,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome return true; } - /* These errors do not provide any useful information and clutter the screen. - public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { - Toast.makeText(mainWebViewActivity, "Error loading " + request + " Error: " + error, Toast.LENGTH_SHORT).show(); - } - */ - // Update the URL in urlTextBox when the page starts to load. @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { @@ -172,7 +172,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome @Override public void onPageFinished(WebView view, String url) { formattedUrlString = url; - urlTextBox.setText(formattedUrlString); + + // Only update urlTextBox if the user is not typing in it. + if (!urlTextBox.hasFocus()) { + urlTextBox.setText(formattedUrlString); + } } }); @@ -231,9 +235,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome */ // Set the one flag supported by API >= 14. - if (Build.VERSION.SDK_INT >= 14) { - view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); - } + view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); // Set the two flags that are supported by API >= 16. if (Build.VERSION.SDK_INT >= 16) { @@ -275,23 +277,20 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome // 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); - } + // Show the download notification after the download is completed. + requestUri.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + // Initiate the download and display a Snackbar. downloadManager.enqueue(requestUri); - Toast.makeText(mainWebViewActivity, R.string.download_started, Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.download_started, Snackbar.LENGTH_SHORT).show(); } }); // Allow pinch to zoom. mainWebView.getSettings().setBuiltInZoomControls(true); - // Hide zoom controls if the API is 11 or greater. - if (Build.VERSION.SDK_INT >= 11) { - mainWebView.getSettings().setDisplayZoomControls(false); - } + // Hide zoom controls. + mainWebView.getSettings().setDisplayZoomControls(false); // Initialize the default preference values the first time the program is run. PreferenceManager.setDefaultValues(this, R.xml.preferences, false); @@ -419,8 +418,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome } @Override - // @TargetApi(11) turns off the errors regarding copy and paste, which are removed from view in menu_webview.xml for lower version of Android. - @TargetApi(11) // Remove Android Studio's warning about the dangers of using SetJavaScriptEnabled. @SuppressLint("SetJavaScriptEnabled") // removeAllCookies is deprecated, but it is required for API < 21. @@ -439,28 +436,28 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome mainWebView.getSettings().setJavaScriptEnabled(false); mainWebView.reload(); - // Update the toggleJavaScript icon and display a toast message. + // Update the toggleJavaScript icon and display a snackbar. if (domStorageEnabled || cookiesEnabled) { menuItem.setIcon(R.drawable.warning); if (domStorageEnabled && cookiesEnabled) { - Toast.makeText(getApplicationContext(), "JavaScript disabled, DOM Storage and Cookies still enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.both_still_enabled, Snackbar.LENGTH_SHORT).show(); } else { if (domStorageEnabled) { - Toast.makeText(getApplicationContext(), "JavaScript disabled, DOM Storage still enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_still_enabled, Snackbar.LENGTH_SHORT).show(); } else { - Toast.makeText(getApplicationContext(), "JavaScript disabled, Cookies still enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_still_enabled, Snackbar.LENGTH_SHORT).show(); } } } else { menuItem.setIcon(R.drawable.privacy_mode); - Toast.makeText(getApplicationContext(), R.string.privacy_mode, Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show(); } } else { javaScriptEnabled = true; menuItem.setIcon(R.drawable.javascript_enabled); mainWebView.getSettings().setJavaScriptEnabled(true); mainWebView.reload(); - Toast.makeText(getApplicationContext(), "JavaScript enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.javascript_enabled, Snackbar.LENGTH_SHORT).show(); } return true; @@ -471,14 +468,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome mainWebView.getSettings().setDomStorageEnabled(false); mainWebView.reload(); - // Update the toggleJavaScript icon and display a toast message if appropriate. + // Update the toggleJavaScript icon and display a snackbar if appropriate. if (!javaScriptEnabled && !cookiesEnabled) { toggleJavaScript.setIcon(R.drawable.privacy_mode); - Toast.makeText(getApplicationContext(), R.string.privacy_mode, Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show(); } else { if (cookiesEnabled) { toggleJavaScript.setIcon(R.drawable.warning); - Toast.makeText(getApplicationContext(), "Cookies still enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_still_enabled, Snackbar.LENGTH_SHORT).show(); } // Else Do nothing because JavaScript is enabled. } } else { @@ -492,7 +489,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome toggleJavaScript.setIcon(R.drawable.warning); } // Else Do nothing because JavaScript is enabled. - Toast.makeText(getApplicationContext(), "DOM Storage enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show(); } return true; @@ -519,14 +516,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome cookieManager.setAcceptCookie(false); mainWebView.reload(); - // Update the toggleJavaScript icon and display a toast message if appropriate. + // Update the toggleJavaScript icon and display a snackbar if appropriate. if (!javaScriptEnabled && !domStorageEnabled) { toggleJavaScript.setIcon(R.drawable.privacy_mode); - Toast.makeText(getApplicationContext(), R.string.privacy_mode, Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show(); } else { if (domStorageEnabled) { toggleJavaScript.setIcon(R.drawable.warning); - Toast.makeText(getApplicationContext(), "DOM Storage still enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show(); } // Else Do nothing because JavaScript is enabled. } } else { @@ -540,14 +537,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome toggleJavaScript.setIcon(R.drawable.warning); } // Else Do nothing because JavaScript is enabled. - Toast.makeText(getApplicationContext(), "Cookies enabled", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_enabled, Snackbar.LENGTH_SHORT).show(); } return true; case R.id.clearDomStorage: WebStorage webStorage = WebStorage.getInstance(); webStorage.deleteAllData(); - Toast.makeText(getApplicationContext(), "DOM storage deleted", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_deleted, Snackbar.LENGTH_SHORT).show(); return true; case R.id.clearCookies: @@ -556,7 +553,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome } else { cookieManager.removeAllCookies(null); } - Toast.makeText(getApplicationContext(), "Cookies deleted", Toast.LENGTH_SHORT).show(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_deleted, Snackbar.LENGTH_SHORT).show(); return true; case R.id.addToHomescreen: @@ -637,6 +634,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateHome } } + @Override + public void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // Sync the state of the DrawerToggle after onRestoreInstanceState has finished. + drawerToggle.syncState(); + } + @Override public void onCreateHomeScreenShortcutCancel(DialogFragment dialog) { // Do nothing because the user selected "Cancel".