| Index: src/org/adblockplus/sbrowser/contentblocker/MainPreferences.java |
| diff --git a/src/org/adblockplus/sbrowser/contentblocker/MainPreferences.java b/src/org/adblockplus/sbrowser/contentblocker/MainPreferences.java |
| index 5d6f381a90305f4965f749bea126be1d934a9e48..f4a5bc6f9be34577611b7ccbe64295425a76c9c7 100644 |
| --- a/src/org/adblockplus/sbrowser/contentblocker/MainPreferences.java |
| +++ b/src/org/adblockplus/sbrowser/contentblocker/MainPreferences.java |
| @@ -47,6 +47,11 @@ public class MainPreferences extends PreferenceActivity implements |
| private Engine engine = null; |
| private AlertDialog setupDialog = null; |
| + private SharedPreferences getSharedPreferences() |
| + { |
| + return PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()); |
| + } |
| + |
| @Override |
| public void onCreate(Bundle savedInstanceState) |
| { |
| @@ -58,8 +63,23 @@ public class MainPreferences extends PreferenceActivity implements |
| .replace(android.R.id.content, new Preferences()) |
| .commit(); |
| - PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()) |
| - .registerOnSharedPreferenceChangeListener(this); |
| + // This try/catch block is a workaround for a preference mismatch |
| + // issue. We check for a type mismatch in one particular key and, |
| + // if there's a mismatch, clean sweep the preferences. |
| + // See: https://issues.adblockplus.org/ticket/3931 |
| + try |
|
Felix Dahlke
2016/04/26 17:39:10
What causes this issue? Did we change the type of
|
| + { |
| + this.getSharedPreferences().getBoolean( |
| + this.getString(R.string.key_application_activated), |
| + false); |
| + } |
| + catch(final Throwable t) |
| + { |
| + this.getSharedPreferences() |
| + .edit() |
| + .clear() |
| + .commit(); |
| + } |
| } |
| @Override |
| @@ -69,13 +89,15 @@ public class MainPreferences extends PreferenceActivity implements |
| this.getString(R.string.initialization_title), |
| this.getString(R.string.initialization_message)); |
| super.onStart(); |
| - EngineService.startService(this, this); |
| + this.getSharedPreferences().registerOnSharedPreferenceChangeListener(this); |
| + EngineService.startService(this.getApplicationContext(), this); |
| } |
| @Override |
| protected void onStop() |
| { |
| super.onStop(); |
| + this.getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); |
| } |
| private void checkForCompatibleSBrowserAndProceed() |
| @@ -113,7 +135,7 @@ public class MainPreferences extends PreferenceActivity implements |
| private void checkAAStatusAndProceed() |
| { |
| - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); |
| + final SharedPreferences prefs = this.getSharedPreferences(); |
| final String keyAaInfoShown = this.getString(R.string.key_aa_info_shown); |
| final boolean aaInfoShown = prefs.getBoolean(keyAaInfoShown, false); |
| if (!aaInfoShown) |
| @@ -143,7 +165,7 @@ public class MainPreferences extends PreferenceActivity implements |
| private void checkSetupStatus() |
| { |
| - final boolean applicationActivated = PreferenceManager.getDefaultSharedPreferences(this) |
| + final boolean applicationActivated = this.getSharedPreferences() |
| .getBoolean(this.getString(R.string.key_application_activated), false); |
| if (!applicationActivated) |