diff options
author | Pankaj Garg <pgarg@codeaurora.org> | 2015-08-20 11:43:49 -0700 |
---|---|---|
committer | jrizzoli <joey@cyanogenmoditalia.it> | 2015-08-28 13:15:48 +0200 |
commit | 75273bb96ba54edea17d07f34c6110afac363edb (patch) | |
tree | f104249bcda7a54c790aa07ef328e38ac41e474c | |
parent | 77a78c22293756de59d6073cef245124a0f717e6 (diff) | |
download | android_packages_apps_Gello-75273bb96ba54edea17d07f34c6110afac363edb.tar.gz android_packages_apps_Gello-75273bb96ba54edea17d07f34c6110afac363edb.tar.bz2 android_packages_apps_Gello-75273bb96ba54edea17d07f34c6110afac363edb.zip |
Reload page on settings change
- Reload current webpage when user tweaks browser settings
CR-Fixed: 5570
Change-Id: I643b857b23e2f39e6f54c3d38eb83622e0794d96
8 files changed, 143 insertions, 13 deletions
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java index 21414907..46fde6a0 100644 --- a/src/com/android/browser/BrowserPreferencesPage.java +++ b/src/com/android/browser/BrowserPreferencesPage.java @@ -19,8 +19,10 @@ package com.android.browser; import android.app.Activity; import android.app.Fragment; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceActivity; +import android.text.TextUtils; import android.view.MenuItem; import com.android.browser.preferences.AboutPreferencesFragment; @@ -28,8 +30,12 @@ import com.android.browser.preferences.GeneralPreferencesFragment; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; public class BrowserPreferencesPage extends Activity { + public static String sResultExtra; + private static ArrayList<String> sUpdatedUrls = + new ArrayList<String>(); //List of URLS for whom settings were updated public static void startPreferencesForResult(Activity callerActivity, String url, int requestCode) { final Intent intent = new Intent(callerActivity, BrowserPreferencesPage.class); @@ -62,6 +68,8 @@ public class BrowserPreferencesPage extends Activity { return; } + sResultExtra = ""; + sUpdatedUrls.clear(); Intent intent = getIntent(); if (intent != null) { String action = intent.getAction(); @@ -120,4 +128,22 @@ public class BrowserPreferencesPage extends Activity { } return super.onOptionsItemSelected(item); } + + @Override + public void finish() { + if (!TextUtils.isEmpty(sResultExtra)) { + Intent intent = this.getIntent(); + intent.putExtra(Intent.EXTRA_TEXT, sResultExtra); + intent.putStringArrayListExtra(Controller.EXTRA_UPDATED_URLS, sUpdatedUrls); + this.setResult(RESULT_OK, intent); + } + super.finish(); + } + + public static void onUrlNeedsReload(String url) { + String host = (Uri.parse(url)).getHost(); + if (!sUpdatedUrls.contains(host)) { + sUpdatedUrls.add(host); + } + } } diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 2b66988c..4a83f8a7 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -134,6 +134,7 @@ public class Controller public static final String INCOGNITO_URI = "chrome://incognito"; public static final String EXTRA_REQUEST_CODE = "_fake_request_code_"; public static final String EXTRA_RESULT_CODE = "_fake_result_code_"; + public static final String EXTRA_UPDATED_URLS = "updated_urls"; // Remind switch to data connection if wifi is unavailable private static final int NETWORK_SWITCH_TYPE_OK = 1; @@ -1334,6 +1335,17 @@ public class Controller String action = intent.getStringExtra(Intent.EXTRA_TEXT); if (PreferenceKeys.PREF_PRIVACY_CLEAR_HISTORY.equals(action)) { mTabControl.removeParentChildRelationShips(); + } else if (action.equals(PreferenceKeys.ACTION_RELOAD_PAGE)) { + ArrayList<String> origins = + intent.getStringArrayListExtra(EXTRA_UPDATED_URLS); + if (origins.isEmpty()) { + mTabControl.reloadLiveTabs(); + } + else{ + for (String origin : origins){ + mTabControl.findAndReload(origin); + } + } } } break; diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java index 77050db8..799891c5 100644 --- a/src/com/android/browser/NavigationBarBase.java +++ b/src/com/android/browser/NavigationBarBase.java @@ -341,8 +341,8 @@ public class NavigationBarBase extends LinearLayout implements baos.toByteArray()); } BrowserPreferencesPage.startPreferenceFragmentExtraForResult( - mUiController.getActivity(), - SiteSpecificPreferencesFragment.class.getName(), bundle, 0); + mUiController.getActivity(), SiteSpecificPreferencesFragment.class.getName(), + bundle, Controller.PREFERENCES_PAGE); } @Override diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java index 2f144c51..15ec6a07 100644 --- a/src/com/android/browser/PreferenceKeys.java +++ b/src/com/android/browser/PreferenceKeys.java @@ -143,4 +143,6 @@ public interface PreferenceKeys { static final String PREF_LEGAL_CREDITS = "legal_credits"; static final String PREF_LEGAL_EULA = "legal_eula"; static final String PREF_LEGAL_PRIVACY_POLICY = "legal_privacy_policy"; + + static final String ACTION_RELOAD_PAGE = "reload"; } diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java index a30cdca6..81da6966 100644 --- a/src/com/android/browser/TabControl.java +++ b/src/com/android/browser/TabControl.java @@ -16,6 +16,7 @@ package com.android.browser; +import android.net.Uri; import android.os.Bundle; import android.util.Log; @@ -38,6 +39,31 @@ class TabControl { private static final String POSITIONS = "positions"; private static final String CURRENT = "current"; + + /* + Find and reload any live tabs that have loaded the given URL. + Note - Upto 2 tabs are live at any given moment. + */ + public void findAndReload(String origin) { + for (Tab tab : mTabs){ + if (tab.getWebView() != null) { + Uri url = Uri.parse(tab.getWebView().getUrl()); + if (url.getHost().equals(origin)){ + tab.getWebView().reload(); + } + } + } + } + + // Reload the all the live tabs + public void reloadLiveTabs() { + for (Tab tab : mTabs) { + if (tab.getWebView() != null) { + tab.getWebView().reload(); + } + } + } + public static interface OnThumbnailUpdatedListener { void onThumbnailUpdated(Tab t); } diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java index 09355a5c..9f610617 100644 --- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java +++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java @@ -45,6 +45,7 @@ import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; import com.android.browser.AutoFillSettingsFragment; +import com.android.browser.BrowserPreferencesPage; import com.android.browser.BrowserSettings; import com.android.browser.PreferenceKeys; import com.android.browser.R; @@ -102,6 +103,10 @@ public class GeneralPreferencesFragment extends SWEPreferenceFragment SwitchPreference powersave = (SwitchPreference) findPreference(PREF_POWERSAVE); powersave.setOnPreferenceChangeListener(this); + SwitchPreference nightmode = (SwitchPreference) findPreference( + PreferenceKeys.PREF_NIGHTMODE_ENABLED); + nightmode.setOnPreferenceChangeListener(this); + final Bundle arguments = getArguments(); if (arguments != null && arguments.getBoolean("LowPower")) { LowPowerDialogFragment fragment = LowPowerDialogFragment.newInstance(); @@ -168,8 +173,12 @@ public class GeneralPreferencesFragment extends SWEPreferenceFragment PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.WEBREFINER, !(Boolean)objValue); showPowerSaveInfo((Boolean) objValue); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; } + if (pref.getKey().equals(PreferenceKeys.PREF_NIGHTMODE_ENABLED)) { + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; + } return true; } diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java index 1bcf0a34..d038163f 100644 --- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java +++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java @@ -17,6 +17,7 @@ package com.android.browser.preferences; import com.android.browser.BrowserLocationSwitchPreference; +import com.android.browser.BrowserPreferencesPage; import com.android.browser.BrowserSettings; import com.android.browser.PreferenceKeys; import com.android.browser.R; @@ -155,30 +156,35 @@ public class PrivacySecurityPreferencesFragment extends SWEPreferenceFragment if (pref.getKey().toString().equalsIgnoreCase("enable_geolocation")) { PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.GEOLOCATION, flag); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } if (pref.getKey().toString().equalsIgnoreCase("microphone")) { PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.VOICE, flag); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } if (pref.getKey().toString().equalsIgnoreCase("camera")) { PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.VIDEO, flag); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } if (pref.getKey().toString().equalsIgnoreCase("distracting_contents")) { PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.WEBREFINER, !flag); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } if (pref.getKey().toString().equalsIgnoreCase("popup_windows")) { PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.POPUP, flag); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } @@ -192,12 +198,14 @@ public class PrivacySecurityPreferencesFragment extends SWEPreferenceFragment PermissionsServiceFactory.PermissionType.THIRDPARTYCOOKIES, flag); showPermission(findPreference("accept_third_cookies"), flag); } + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } if (pref.getKey().toString().equalsIgnoreCase("accept_third_cookies")) { PermissionsServiceFactory.setDefaultPermissions( PermissionsServiceFactory.PermissionType.THIRDPARTYCOOKIES, flag); + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; return true; } diff --git a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java index 0b3ec8aa..23311b4d 100644 --- a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java +++ b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java @@ -57,6 +57,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.android.browser.BrowserLocationListPreference; +import com.android.browser.BrowserPreferencesPage; import com.android.browser.BrowserSettings; import com.android.browser.NavigationBarBase; import com.android.browser.PreferenceKeys; @@ -94,6 +95,8 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment private ActionBar mBar; private List<String> mLocationValues; + private Preference mSecurityInfoPrefs; + private boolean mUsingDefaultSettings = true; private int mOriginalActionBarOptions; private int mIconColor = 0; @@ -182,6 +185,14 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment if (view != null) { view.clearText(); } + + boolean empty = true; + for (Map.Entry<ViewType, String> entry: mTexts.entrySet()) { + if (!entry.getValue().isEmpty()) { + empty = false; + } + } + mbEmpty = empty; } public void setResource(ViewType type, View parent, int resId) { @@ -309,6 +320,8 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment mSslState = 2; } } + + updateSecurityViewVisibility(); } private AlertDialog.Builder createSslCertificateDialog(Context ctx, @@ -452,14 +465,17 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment Preference pref = findPreference("clear_data"); updateStorageInfo(pref); pref.setOnPreferenceClickListener(this); - String warningText = new String(""); + String warningText = (mSslState == 1) ? getString(R.string.pref_warning_cert) + " " : + new String(""); + boolean setting_warnings = false; long permission = showPermission("select_geolocation", PermissionsServiceFactory.PermissionType.GEOLOCATION, R.string.pref_security_ask_before_using, R.string.pref_security_not_allowed); if (PermissionsServiceFactory.Permission.ALLOW == permission) { - warningText = getString(R.string.pref_privacy_enable_geolocation); + warningText += getString(R.string.pref_privacy_enable_geolocation); + setting_warnings = true; } ListPreference geolocation_pref = (ListPreference) findPreference("select_geolocation"); @@ -477,7 +493,8 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment pref.setSummary(customSummary); } mUsingDefaultSettings = false; - warningText = getString(R.string.pref_privacy_enable_geolocation); + warningText += getString(R.string.pref_privacy_enable_geolocation); + setting_warnings = true; geolocation_pref.setValueIndex(1); } else if (permission == PermissionsServiceFactory.Permission.ALLOW) { geolocation_pref.setValueIndex(2); @@ -487,25 +504,31 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment R.string.pref_security_ask_before_using, R.string.pref_security_not_allowed); if (PermissionsServiceFactory.Permission.ALLOW == permission) { - if (!warningText.isEmpty()) { + if (!warningText.isEmpty() && setting_warnings) { warningText += ", "; } warningText += getString(R.string.pref_security_allow_mic); + setting_warnings = true; } permission = showPermission("camera", PermissionsServiceFactory.PermissionType.VIDEO, R.string.pref_security_ask_before_using, R.string.pref_security_not_allowed); if (PermissionsServiceFactory.Permission.ALLOW == permission) { - if (!warningText.isEmpty()) { + if (!warningText.isEmpty() && setting_warnings) { warningText += ", "; } warningText += getString(R.string.pref_security_allow_camera); + setting_warnings = true; } if (!warningText.isEmpty()) { - warningText += " "; - warningText += getResources().getString(R.string.pref_security_access_is_allowed); - mSecurityViews.appendText(SiteSecurityViewFactory.ViewType.WARNING, warningText); + if (setting_warnings) { + warningText += " "; + warningText += getResources().getString(R.string.pref_security_access_is_allowed); + } + mSecurityViews.setText(SiteSecurityViewFactory.ViewType.WARNING, warningText); + } else { + mSecurityViews.clearText(SiteSecurityViewFactory.ViewType.WARNING); } pref = findPreference("distracting_contents"); @@ -530,13 +553,28 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment mBar.getCustomView().setVisibility(View.VISIBLE); } + updateSecurityViewVisibility(); + } + + private void updateSecurityViewVisibility() { if (mSecurityViews.mbEmpty) { PreferenceScreen screen = (PreferenceScreen) findPreference("site_specific_prefs"); - pref = findPreference("site_security_info_title"); - if (pref != null && screen != null) { - screen.removePreference(pref); + if (mSecurityInfoPrefs == null) { + mSecurityInfoPrefs = findPreference("site_security_info_title"); + } + + if (mSecurityInfoPrefs != null && screen != null) { + screen.removePreference(mSecurityInfoPrefs); + } + } else { + PreferenceScreen screen = (PreferenceScreen) + findPreference("site_specific_prefs"); + + Preference pref = findPreference("site_security_info_title"); + if (pref == null && mSecurityInfoPrefs != null) { + screen.addPreference(mSecurityInfoPrefs); } } @@ -636,6 +674,9 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment refiner.useDefaultPermissionForOrigins(origins); } + BrowserPreferencesPage.sResultExtra = + PreferenceKeys.ACTION_RELOAD_PAGE; + BrowserPreferencesPage.onUrlNeedsReload(mOriginText); finish(); } } @@ -752,6 +793,9 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment updateTwoStatePreference(pref, PermissionsServiceFactory.PermissionType.COOKIE, (boolean)objValue); } + BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE; + BrowserPreferencesPage.onUrlNeedsReload(mOriginText); + updatePreferenceInfo(); return true; } @@ -767,6 +811,9 @@ public class SiteSpecificPreferencesFragment extends SWEPreferenceFragment mOriginInfo.clearAllStoredData(); Preference e = findPreference("clear_data"); e.setSummary("(Empty)"); + BrowserPreferencesPage.sResultExtra = + PreferenceKeys.ACTION_RELOAD_PAGE; + BrowserPreferencesPage.onUrlNeedsReload(mOriginText); } } }) |