X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FDomainSettingsActivity.java;h=49364db391fde22c76b1156d4e4e3ccfde974b21;hp=65546068f58bca1ef3bb02bd901ae1bb309dbf8f;hb=ed0a4234b452924acf1602bee6578a7a84445a85;hpb=b3b4105e9acd9cf8e202abef3b811d49c6c36bec diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/DomainSettingsActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/DomainSettingsActivity.java index 65546068..49364db3 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/DomainSettingsActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/DomainSettingsActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 Soren Stoutner . + * Copyright © 2017 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -19,14 +19,18 @@ package com.stoutner.privacybrowser.activities; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.support.design.widget.CoordinatorLayout; +import android.support.design.widget.Snackbar; import android.support.v4.app.NavUtils; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.widget.EditText; import android.widget.Spinner; import android.widget.Switch; @@ -76,10 +80,6 @@ public class DomainSettingsActivity extends AppCompatActivity { // Inflate the menu. getMenuInflater().inflate(R.menu.domains_options_menu, menu); - // Show the `MenuItems`. - menu.findItem(R.id.save_domain).setVisible(true); - menu.findItem(R.id.delete_domain).setVisible(true); - // Success! return true; } @@ -91,7 +91,7 @@ public class DomainSettingsActivity extends AppCompatActivity { // Initialize the database handler. `this` specifies the context. The two `nulls` do not specify the database name or a `CursorFactory`. // The `0` specifies the database version, but that is ignored and set instead using a constant in `DomainsDatabaseHelper`. - DomainsDatabaseHelper domainsDatabaseHelper = new DomainsDatabaseHelper(getApplicationContext(), null, null, 0); + final DomainsDatabaseHelper domainsDatabaseHelper = new DomainsDatabaseHelper(getApplicationContext(), null, null, 0); switch (menuItemID) { case android.R.id.home: // The home arrow is identified as `android.R.id.home`, not just `R.id.home`. @@ -110,20 +110,22 @@ public class DomainSettingsActivity extends AppCompatActivity { Spinner userAgentSpinner = (Spinner) findViewById(R.id.domain_settings_user_agent_spinner); EditText customUserAgentEditText = (EditText) findViewById(R.id.domain_settings_custom_user_agent_edittext); Spinner fontSizeSpinner = (Spinner) findViewById(R.id.domain_settings_font_size_spinner); + Spinner displayWebpageImagesSpinner = (Spinner) findViewById(R.id.domain_settings_display_webpage_images_spinner); // Extract the data for the domain settings. String domainNameString = domainNameEditText.getText().toString(); - boolean javaScriptEnabled = javaScriptEnabledSwitch.isChecked(); - boolean firstPartyCookiesEnabled = firstPartyCookiesEnabledSwitch.isChecked(); - boolean thirdPartyCookiesEnabled = thirdPartyCookiesEnabledSwitch.isChecked(); - boolean domStorageEnabledEnabled = domStorageEnabledSwitch.isChecked(); - boolean formDataEnabled = formDataEnabledSwitch.isChecked(); - int userAgentPosition = userAgentSpinner.getSelectedItemPosition(); - int fontSizePosition = fontSizeSpinner.getSelectedItemPosition(); + boolean javaScriptEnabledBoolean = javaScriptEnabledSwitch.isChecked(); + boolean firstPartyCookiesEnabledBoolean = firstPartyCookiesEnabledSwitch.isChecked(); + boolean thirdPartyCookiesEnabledBoolean = thirdPartyCookiesEnabledSwitch.isChecked(); + boolean domStorageEnabledEnabledBoolean = domStorageEnabledSwitch.isChecked(); + boolean formDataEnabledBoolean = formDataEnabledSwitch.isChecked(); + int userAgentPositionInt = userAgentSpinner.getSelectedItemPosition(); + int fontSizePositionInt = fontSizeSpinner.getSelectedItemPosition(); + int displayWebpageImagesInt = displayWebpageImagesSpinner.getSelectedItemPosition(); // Get the data for the `Spinners` from the entry values string arrays. - String userAgentString = getResources().getStringArray(R.array.user_agent_entry_values)[userAgentPosition]; - int fontSizeInt = Integer.parseInt(getResources().getStringArray(R.array.default_font_size_entry_values)[fontSizePosition]); + String userAgentString = getResources().getStringArray(R.array.user_agent_entry_values)[userAgentPositionInt]; + int fontSizeInt = Integer.parseInt(getResources().getStringArray(R.array.default_font_size_entry_values)[fontSizePositionInt]); // Check to see if we are using a custom user agent. if (userAgentString.equals("Custom user agent")) { @@ -132,18 +134,60 @@ public class DomainSettingsActivity extends AppCompatActivity { } // Save the domain settings. - domainsDatabaseHelper.saveDomain(databaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled, domStorageEnabledEnabled, formDataEnabled, userAgentString, fontSizeInt); + domainsDatabaseHelper.saveDomain(databaseId, domainNameString, javaScriptEnabledBoolean, firstPartyCookiesEnabledBoolean, thirdPartyCookiesEnabledBoolean, domStorageEnabledEnabledBoolean, formDataEnabledBoolean, userAgentString, fontSizeInt, + displayWebpageImagesInt); // Navigate to `DomainsActivity`. NavUtils.navigateUpFromSameTask(this); break; case R.id.delete_domain: - // Delete the selected domain. - domainsDatabaseHelper.deleteDomain(databaseId); - - // Navigate to `DomainsActivity`. - NavUtils.navigateUpFromSameTask(this); + // Get a handle for the current activity. + final Activity activity = this; + + // Get a handle for `domain_settings_coordinatorlayout` so we can display a `SnackBar` later. + CoordinatorLayout domainSettingsCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.domain_settings_coordinatorlayout); + + // Detach `domain_settings_scrollview`. + getSupportFragmentManager().beginTransaction().detach(getSupportFragmentManager().findFragmentById(R.id.domain_settings_scrollview)).commit(); + + Snackbar.make(domainSettingsCoordinatorLayout, R.string.domain_deleted, Snackbar.LENGTH_SHORT) + .setAction(R.string.undo, new View.OnClickListener() { + @Override + public void onClick(View v) { + // Do nothing because everything will be handled by `onDismiss` below. + } + }) + .addCallback(new Snackbar.Callback() { + @Override + public void onDismissed(Snackbar snackbar, int event) { + switch (event) { + // The user pushed the `undo` button. + case Snackbar.Callback.DISMISS_EVENT_ACTION: + // Store `databaseId` in `argumentsBundle`. + Bundle argumentsBundle = new Bundle(); + argumentsBundle.putInt(DomainSettingsFragment.DATABASE_ID, databaseId); + + // Add `argumentsBundle` to `domainSettingsFragment`. + DomainSettingsFragment domainSettingsFragment = new DomainSettingsFragment(); + domainSettingsFragment.setArguments(argumentsBundle); + + // Display `domainSettingsFragment`. + getSupportFragmentManager().beginTransaction().replace(R.id.domain_settings_scrollview, domainSettingsFragment).commit(); + break; + + // The `Snackbar` was dismissed without the `Undo` button being pushed. + default: + // Delete the selected domain. + domainsDatabaseHelper.deleteDomain(databaseId); + + // Navigate to `DomainsActivity`. + NavUtils.navigateUpFromSameTask(activity); + break; + } + } + }) + .show(); break; } return true;