/**
- * Copyright 2015 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2015-2016 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser.
*
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;
// favoriteIcon is public static so it can be accessed from CreateHomeScreenShortcut.
public static Bitmap favoriteIcon;
+ // mainWebView is used in onCreate and onOptionsItemSelected.
+ private WebView mainWebView;
+ // formattedUrlString is used in onCreate, onOptionsItemSelected, onCreateHomeScreenShortcutCreate, and loadUrlFromTextBox.
private String formattedUrlString;
+ // homepage is used in onCreate and onOptionsItemSelected.
private String homepage = "https://www.duckduckgo.com/";
+ // enableJavaScript is used onCreate and onOptionsItemSelected.
+ private boolean enableJavaScript;
+ // actionBar is used in onCreate and onOptionsItemSelected.
+ private ActionBar actionBar;
// Remove Android Studio's warning about the dangers of using SetJavaScriptEnabled.
@SuppressLint("SetJavaScriptEnabled")
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
- final WebView mainWebView = (WebView) findViewById(R.id.mainWebView);
final FrameLayout fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.fullScreenVideoFrameLayout);
final Activity mainWebViewActivity = this;
- final ActionBar actionBar = getSupportActionBar();
+ mainWebView = (WebView) findViewById(R.id.mainWebView);
+ actionBar = getSupportActionBar();
+
if (actionBar != null) {
// Remove the title from the action bar.
actionBar.setDisplayShowTitleEnabled(false);
// Enter full screen video
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
- getSupportActionBar().hide();
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().hide();
+ }
fullScreenVideoFrameLayout.addView(view);
fullScreenVideoFrameLayout.setVisibility(View.VISIBLE);
// Exit full screen video
public void onHideCustomView() {
- getSupportActionBar().show();
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().show();
+ }
mainWebView.setVisibility(View.VISIBLE);
}
});
+ // Allow the downloading of files.
mainWebView.setDownloadListener(new DownloadListener() {
// Launch the Android download manager when a link leads to a download.
@Override
mainWebView.getSettings().setDisplayZoomControls(false);
}
- // Enable JavaScript.
- mainWebView.getSettings().setJavaScriptEnabled(true);
+ // Set JavaScript initial status.
+ enableJavaScript = true;
+ if (enableJavaScript) {
+ mainWebView.getSettings().setJavaScriptEnabled(true);
+ } else {
+ mainWebView.getSettings().setJavaScriptEnabled(false);
+ }
// Enable DOM Storage.
mainWebView.getSettings().setDomStorageEnabled(true);
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_webview, menu);
+ MenuItem toggleJavaScriptMenuItem = menu.findItem(R.id.toggleJavaScript);
+
+ // Set the JavaScript menu item checkbox initial status.
+ if (enableJavaScript) {
+ toggleJavaScriptMenuItem.setChecked(true);
+ } else {
+ toggleJavaScriptMenuItem.setChecked(false);
+ }
+
return true;
}
- // @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) 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")
public boolean onOptionsItemSelected(MenuItem menuItem) {
int menuItemId = menuItem.getItemId();
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
- ActionBar actionBar = getSupportActionBar();
- final WebView mainWebView = (WebView) findViewById(R.id.mainWebView);
// Sets the commands that relate to the menu entries.
switch (menuItemId) {
+ case R.id.toggleJavaScript:
+ if (enableJavaScript) {
+ enableJavaScript = false;
+ menuItem.setChecked(false);
+ mainWebView.getSettings().setJavaScriptEnabled(false);
+ mainWebView.loadUrl(formattedUrlString);
+ } else {
+ enableJavaScript = true;
+ menuItem.setChecked(true);
+ mainWebView.getSettings().setJavaScriptEnabled(true);
+ mainWebView.loadUrl(formattedUrlString);
+ }
+ return true;
+
case R.id.home:
mainWebView.loadUrl(homepage);
- break;
+ return true;
case R.id.refresh:
mainWebView.loadUrl(formattedUrlString);
- break;
+ return true;
case R.id.back:
mainWebView.goBack();
- break;
+ return true;
case R.id.forward:
mainWebView.goForward();
- break;
+ return true;
case R.id.copyURL:
// Make sure that actionBar is not null.
EditText urlTextBox = (EditText) actionBar.getCustomView().findViewById(R.id.urlTextBox);
clipboard.setPrimaryClip(ClipData.newPlainText("URL", urlTextBox.getText()));
}
- break;
+ return true;
case R.id.pasteURL:
// Make sure that actionBar is not null.
e.printStackTrace();
}
}
- break;
+ return true;
case R.id.shareURL:
// Make sure that actionBar is not null.
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, "Share URL"));
}
- break;
+ return true;
case R.id.addToHomescreen:
// Show the CreateHomeScreenShortcut AlertDialog and name this instance createShortcut.
shortcutDialog.show(getSupportFragmentManager(), "createShortcut");
//Everything else will be handled by CreateHomeScreenShortcut and the associated listeners below.
- break;
+ return true;
case R.id.downloads:
// Launch the system Download Manager.
downloadManangerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(downloadManangerIntent);
- break;
+ return true;
case R.id.about:
// Show the AboutDialog AlertDialog and name this instance aboutDialog.
AppCompatDialogFragment aboutDialog = new AboutDialog();
aboutDialog.show(getSupportFragmentManager(), "aboutDialog");
+ return true;
- break;
+ default:
+ return super.onOptionsItemSelected(menuItem);
}
-
- return super.onOptionsItemSelected(menuItem);
}
@Override
xmlns:tools="http://schemas.android.com/tools"
tools:context=".Webview">
+ <item
+ android:id="@+id/toggleJavaScript"
+ android:title="@string/javaScript"
+ android:orderInCategory="1"
+ android:checkable="true"
+ app:showAsAction="never" />
+
<item
android:id="@+id/home"
android:title="@string/home"
- android:orderInCategory="10"
+ android:orderInCategory="2"
android:icon="@drawable/ic_home_black_24dp"
app:showAsAction="never" />
<item
android:id="@+id/refresh"
android:title="@string/refresh"
- android:orderInCategory="20"
+ android:orderInCategory="3"
app:showAsAction="never" />
<item
android:id="@+id/back"
android:title="@string/back"
- android:orderInCategory="30"
+ android:orderInCategory="4"
android:icon="@drawable/ic_back"
app:showAsAction="never" />
<item
android:id="@+id/forward"
android:title="@string/forward"
- android:orderInCategory="40"
+ android:orderInCategory="5"
android:icon="@drawable/ic_forward"
app:showAsAction="never" />
<item
android:id="@+id/copyURL"
android:title="@string/copy_URL"
- android:orderInCategory="50"
+ android:orderInCategory="6"
tools:targetApi="11"
app:showAsAction="never" />
<item
android:id="@+id/pasteURL"
android:title="@string/paste_URL"
- android:orderInCategory="60"
+ android:orderInCategory="7"
tools:targetApi="11"
app:showAsAction="never" />
<item
android:id="@+id/shareURL"
android:title="@string/share_URL"
- android:orderInCategory="70"
+ android:orderInCategory="8"
app:showAsAction="never" />
<item
android:id="@+id/addToHomescreen"
android:title="@string/add_to_home_screen"
- android:orderInCategory="80"
+ android:orderInCategory="9"
app:showAsAction="never" />
<item
android:id="@+id/downloads"
android:title="@string/downloads"
- android:orderInCategory="90"
+ android:orderInCategory="10"
app:showAsAction="never" />
<item
android:id="@+id/about"
android:title="@string/about"
- android:orderInCategory="100"
+ android:orderInCategory="11"
app:showAsAction="never" />
</menu>