import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
+import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
+import android.webkit.WebStorage;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
private boolean enableSaveFormData;
*/
+ // cookieManager is used in onCreate and onOptionsItemSelected.
+ private CookieManager cookieManager;
+ // enableCookies is used in onCreate, onCreateOptionsMenu, and onOptionsItemSelected.
+ private boolean enableCookies;
+
// actionBar is used in onCreate and onOptionsItemSelected.
private ActionBar actionBar;
+ @Override
// Remove Android Studio's warning about the dangers of using SetJavaScriptEnabled.
@SuppressLint("SetJavaScriptEnabled")
-
- @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
}
// Set JavaScript initial status.
- enableJavaScript = true;
+ enableJavaScript = false;
mainWebView.getSettings().setJavaScriptEnabled(enableJavaScript);
// Set DOM Storage initial status.
- enableDomStorage = true;
+ enableDomStorage = false;
mainWebView.getSettings().setDomStorageEnabled(enableDomStorage);
/* Save Form Data does nothing until database storage is implemented.
mainWebView.getSettings().setSaveFormData(enableSaveFormData);
*/
+ // Set Cookies initial status.
+ enableCookies = false;
+ cookieManager = CookieManager.getInstance();
+ cookieManager.setAcceptCookie(enableCookies);
+
// Get the intent information that started the app.
final Intent intent = getIntent();
mainWebView.loadUrl(formattedUrlString);
}
+ @Override
+ protected void onNewIntent(Intent intent) {
+ // Sets the new intent as the activity intent, so that any future getIntent() picks up this one.
+ setIntent(intent);
+
+ if (intent.getData() != null) {
+ // Get the intent data and convert it to a string.
+ final Uri intentUriData = intent.getData();
+ formattedUrlString = intentUriData.toString();
+ }
+
+ // Load the website.
+ mainWebView.loadUrl(formattedUrlString);
+ }
+
@Override
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);
- MenuItem toggleDomStorageMenuItem = menu.findItem(R.id.toggleDomStorage);
+
+ // Get MenuItems for checkable menu items.
+ MenuItem toggleJavaScript = menu.findItem(R.id.toggleJavaScript);
+ MenuItem toggleDomStorage = menu.findItem(R.id.toggleDomStorage);
/* toggleSaveFormData does nothing until database storage is implemented.
- MenuItem toggleSaveFormDataMenuItem = menu.findItem(R.id.toggleSaveFormData);
+ MenuItem toggleSaveFormData = menu.findItem(R.id.toggleSaveFormData);
*/
+ MenuItem toggleCookies = menu.findItem(R.id.toggleCookies);
// Set the initial status of the menu item checkboxes.
- toggleJavaScriptMenuItem.setChecked(enableJavaScript);
- toggleDomStorageMenuItem.setChecked(enableDomStorage);
+ toggleJavaScript.setChecked(enableJavaScript);
+ toggleDomStorage.setChecked(enableDomStorage);
/* toggleSaveFormData does nothing until database storage is implemented.
- toggleSaveFormDataMenuItem.setChecked(enableSaveFormData);
+ toggleSaveFormData.setChecked(enableSaveFormData);
*/
+ toggleCookies.setChecked(enableCookies);
+
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ // Enable Clear Cookies if there are any.
+ MenuItem clearCookies = menu.findItem(R.id.clearCookies);
+ clearCookies.setEnabled(cookieManager.hasCookies());
+
+ // Enable Back if canGoBack().
+ MenuItem back = menu.findItem(R.id.back);
+ back.setEnabled(mainWebView.canGoBack());
+ // Enable forward if canGoForward().
+ MenuItem forward = menu.findItem(R.id.forward);
+ forward.setEnabled(mainWebView.canGoForward());
+
+ // Run all the other default commands.
+ super.onPrepareOptionsMenu(menu);
+
+ // return true displays the menu.
return true;
}
@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.
+ @SuppressWarnings("deprecation")
public boolean onOptionsItemSelected(MenuItem menuItem) {
int menuItemId = menuItem.getItemId();
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
return true;
*/
+ case R.id.toggleCookies:
+ if (enableCookies) {
+ enableCookies = false;
+ menuItem.setChecked(false);
+ cookieManager.setAcceptCookie(false);
+ mainWebView.reload();
+ } else {
+ enableCookies = true;
+ menuItem.setChecked(true);
+ cookieManager.setAcceptCookie(true);
+ mainWebView.reload();
+ }
+ return true;
+
+ case R.id.clearDomStorage:
+ WebStorage webStorage = WebStorage.getInstance();
+ webStorage.deleteAllData();
+ Toast.makeText(getApplicationContext(), "DOM storage deleted", Toast.LENGTH_SHORT).show();
+ return true;
+
+ case R.id.clearCookies:
+ if (Build.VERSION.SDK_INT < 21) {
+ cookieManager.removeAllCookie();
+ } else {
+ cookieManager.removeAllCookies(null);
+ }
+ Toast.makeText(getApplicationContext(), "Cookies deleted", Toast.LENGTH_SHORT).show();
+ return true;
+
case R.id.home:
mainWebView.loadUrl(homepage);
return true;
aboutDialog.show(getSupportFragmentManager(), "aboutDialog");
return true;
+ case R.id.exit:
+ // Clear DOM storage.
+ WebStorage domStorage = WebStorage.getInstance();
+ domStorage.deleteAllData();
+
+ // Clear cookies.
+ if (Build.VERSION.SDK_INT < 21) {
+ cookieManager.removeAllCookie();
+ } else {
+ cookieManager.removeAllCookies(null);
+ }
+
+ // Destroy the internal state of the webview.
+ mainWebView.destroy();
+
+ // Close Privacy Browser.
+ finish();
+ return true;
+
default:
return super.onOptionsItemSelected(menuItem);
}