summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagar Dhawan <sdhawan@codeaurora.org>2015-09-17 11:39:57 -0700
committerjrizzoli <joey@cyanogenmoditalia.it>2015-09-26 21:51:35 +0200
commitac62d0dfad31b31384d6a47722eb31ad689dd986 (patch)
treea246118be3c7b293b31c9e19a04e451e60260d93
parentc9cdabd3c45bb6e610e6fd07bf7c448abe642494 (diff)
downloadandroid_packages_apps_Gello-ac62d0dfad31b31384d6a47722eb31ad689dd986.tar.gz
android_packages_apps_Gello-ac62d0dfad31b31384d6a47722eb31ad689dd986.tar.bz2
android_packages_apps_Gello-ac62d0dfad31b31384d6a47722eb31ad689dd986.zip
Fix Per site settings dialog persistence
The 'add new site' and 'clear all' dialogs in Per site settings will now persistence over device rotation/screen off and other configuration changes. CR-Fixed: 903478 Change-Id: I1267d4a889b09cf428eb5d70dd9ff59594f02e96
-rw-r--r--src/src/com/android/browser/preferences/WebsiteSettingsFragment.java183
1 files changed, 138 insertions, 45 deletions
diff --git a/src/src/com/android/browser/preferences/WebsiteSettingsFragment.java b/src/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index c9dd04d3..f066ce45 100644
--- a/src/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -19,6 +19,8 @@ package com.android.browser.preferences;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -30,11 +32,17 @@ import android.graphics.BitmapFactory;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
+import android.preference.ListPreference;
+import android.text.InputType;
import android.text.TextUtils;
+import android.util.Log;
+import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.inputmethod.EditorInfo;
import android.webkit.ValueCallback;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@@ -42,8 +50,10 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
+import com.android.browser.BrowserSettings;
import com.android.browser.R;
import com.android.browser.SiteTileView;
+import com.android.browser.UrlUtils;
import com.android.browser.WebStorageSizeManager;
import java.io.ByteArrayOutputStream;
@@ -326,63 +336,146 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
}
}
- private void finish() {
- Activity activity = getActivity();
- if (activity != null) {
- getActivity().getFragmentManager().popBackStack();
- }
- }
-
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.clear_all_button:
// Show the prompt to clear all origins of their data and geolocation permissions.
- new AlertDialog.Builder(getActivity())
- .setMessage(R.string.website_settings_clear_all_dialog_message)
- .setPositiveButton(R.string.ok,
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface dlg, int which) {
- mAdapter.deleteAllOrigins();
- if (GeolocationPermissions.isIncognitoCreated()) {
- GeolocationPermissions.getIncognitoInstance().clearAll();
- }
- WebStorageSizeManager.resetLastOutOfSpaceNotificationTime();
- mAdapter.askForOrigins();
- finish();
- }
- })
- .setNegativeButton(R.string.cancel, null)
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .show();
+ ClearAllDialog clearFragment = ClearAllDialog.newInstance();
+ clearFragment.setAdapter(mAdapter);
+ clearFragment.show(getActivity().getFragmentManager(), "clearAll dialog");
break;
+
case R.id.add_new_site:
- final EditText input = new EditText(getActivity());
- new AlertDialog.Builder(getActivity())
+ NewSiteDialog newFragment = NewSiteDialog.newInstance();
+ newFragment.setTargetFragment(this, -1);
+ newFragment.show(getActivity().getFragmentManager(), "newSite dialog");
+ break;
+ }
+ }
+
+ /*
+ Added this class to manage AlertDialog lifecycle.
+ */
+ public static class NewSiteDialog extends DialogFragment {
+ private final String SAVED = "saved";
+ private EditText editText = null;
+ public static NewSiteDialog newInstance() {
+ NewSiteDialog frag = new NewSiteDialog();
+ return frag;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ editText = new EditText(getActivity());
+ String siteOrigin = savedInstanceState != null ?
+ savedInstanceState.getString(SAVED): "";
+ editText.setInputType(InputType.TYPE_CLASS_TEXT
+ | InputType.TYPE_TEXT_VARIATION_URI);
+ editText.setText(siteOrigin);
+ editText.setSingleLine(true);
+ editText.setSelection(editText.getText().length());// Always move the cursor to the end.
+ editText.setImeActionLabel(null, EditorInfo.IME_ACTION_DONE);
+ final AlertDialog dialog = new AlertDialog.Builder(getActivity())
+ .setView(editText)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String siteOrigin = editText.getText().toString();
+ Fragment frag = getTargetFragment();
+ if (frag == null || !(frag instanceof WebsiteSettingsFragment)) {
+ Log.e("NewSiteDialog", "get target fragment error!");
+ return;
+ }
+ Bundle args = new Bundle();
+ args.putString(SiteSpecificPreferencesFragment.EXTRA_SITE,
+ siteOrigin);
+
+ FragmentTransaction fragmentTransaction =
+ getActivity().getFragmentManager().beginTransaction();
+
+ Fragment newFragment = new SiteSpecificPreferencesFragment();
+ newFragment.setArguments(args);
+ fragmentTransaction.replace(frag.getId(), newFragment);
+ fragmentTransaction.addToBackStack(null);
+ fragmentTransaction.commit();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ })
.setTitle(R.string.website_settings_add_origin)
.setMessage(R.string.pref_security_origin_name)
- .setView(input)
- .setPositiveButton(R.string.pref_security_add,
+ .create();
+
+ editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_DONE) {
+ dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+ return true;
+ }
+ return false;
+ }
+ });
+
+ dialog.getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+
+ return dialog;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState){
+ super.onSaveInstanceState(outState);
+ outState.putString(SAVED, editText.getText().toString().trim());
+ }
+ }
+
+ /*
+Added this class to manage AlertDialog lifecycle.
+*/
+ public static class ClearAllDialog extends DialogFragment {
+ private SiteAdapter adapter;
+ public static ClearAllDialog newInstance() {
+ ClearAllDialog frag = new ClearAllDialog();
+ return frag;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final AlertDialog dialog = new AlertDialog.Builder(getActivity())
+ .setMessage(R.string.website_settings_clear_all_dialog_message)
+ .setPositiveButton(R.string.ok,
new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- String origin = input.getText().toString();
- Bundle args = new Bundle();
- args.putString(SiteSpecificPreferencesFragment.EXTRA_SITE,
- origin);
-
- FragmentTransaction fragmentTransaction =
- getActivity().getFragmentManager().beginTransaction();
-
- Fragment newFragment = new SiteSpecificPreferencesFragment();
- newFragment.setArguments(args);
- fragmentTransaction.replace(getId(), newFragment);
- fragmentTransaction.addToBackStack(null);
- fragmentTransaction.commit();
- }})
+ public void onClick(DialogInterface dlg, int which) {
+ if (adapter == null) {
+ return;
+ }
+ adapter.deleteAllOrigins();
+ if (GeolocationPermissions.isIncognitoCreated()) {
+ GeolocationPermissions.getIncognitoInstance().clearAll();
+ }
+ WebStorageSizeManager.resetLastOutOfSpaceNotificationTime();
+ adapter.askForOrigins();
+ Activity activity = getActivity();
+ if (activity != null) {
+ getActivity().getFragmentManager().popBackStack();
+ }
+ }
+ })
.setNegativeButton(R.string.cancel, null)
- .show();
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .create();
- break;
+ return dialog;
+ }
+
+ public void setAdapter(SiteAdapter inAdapter) {
+ adapter = inAdapter;
}
}
}