| Index: mobile/android/thirdparty/org/adblockplus/browser/SubscriptionPreferenceCategory.java | 
| =================================================================== | 
| --- a/mobile/android/thirdparty/org/adblockplus/browser/SubscriptionPreferenceCategory.java | 
| +++ b/mobile/android/thirdparty/org/adblockplus/browser/SubscriptionPreferenceCategory.java | 
| @@ -28,16 +28,17 @@ import android.preference.CheckBoxPrefer | 
| import android.preference.Preference; | 
| import android.preference.PreferenceCategory; | 
| import android.util.AttributeSet; | 
| public class SubscriptionPreferenceCategory extends PreferenceCategory | 
| { | 
| volatile static SubscriptionContainer subscriptionContainer = null; | 
| private final CheckBoxChangeListener checkBoxChangeListener = new CheckBoxChangeListener(); | 
| + private final SubscriptionChangeListener subscriptionChangeListener = new SubscriptionChangeListener(); | 
| private boolean isEnabledList = false; | 
| private ProgressDialog progressDialog; | 
| public SubscriptionPreferenceCategory(Context context) | 
| { | 
| super(context); | 
| } | 
| @@ -63,39 +64,38 @@ public class SubscriptionPreferenceCateg | 
| } | 
| } | 
| @Override | 
| protected void onAttachedToActivity() | 
| { | 
| this.isEnabledList = this.getKey().endsWith("subscriptionEnabled"); | 
| - this.progressDialog = new ProgressDialog(this.getContext()); | 
| - | 
| this.setEnabled(false); | 
| this.setShouldDisableView(true); | 
| super.onAttachedToActivity(); | 
| - this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); | 
| - this.progressDialog.setMessage(this.getContext().getString(R.string.abb_adblocking_waiting)); | 
| - this.progressDialog.show(); | 
| + showProgressDialog(); | 
| AddOnBridge.postToHandler(new Runnable() | 
| { | 
| @Override | 
| public void run() | 
| { | 
| initSubscriptions(); | 
| + subscriptionContainer.addSubscriptionListener( | 
| + SubscriptionPreferenceCategory.this.subscriptionChangeListener); | 
| + | 
| ThreadUtils.postToUiThread(new Runnable() | 
| { | 
| @Override | 
| public void run() | 
| { | 
| - SubscriptionPreferenceCategory.this.initEntries(); | 
| + SubscriptionPreferenceCategory.this.refreshEntries(); | 
| } | 
| }); | 
| } | 
| }); | 
| } | 
| private CheckBoxPreference createDisabledCheckBox(final int titleId, final int summaryId) | 
| { | 
| @@ -117,36 +117,36 @@ public class SubscriptionPreferenceCateg | 
| cbp.setChecked(true); | 
| cbp.setKey(subscription.url); | 
| cbp.setPersistent(false); | 
| cbp.setChecked(subscriptionContainer.isSubscriptionListed(subscription.url)); | 
| cbp.setOnPreferenceChangeListener(this.checkBoxChangeListener); | 
| return cbp; | 
| } | 
| - private void initEntries() | 
| + private void refreshEntries() | 
| { | 
| if (this.isEnabledList) | 
| { | 
| - this.initEntries(R.string.abb_adblocking_none_selected, | 
| + this.refreshEntries(R.string.abb_adblocking_none_selected, | 
| R.string.abb_adblocking_select_below, true); | 
| } | 
| else | 
| { | 
| - this.initEntries(R.string.abb_adblocking_none_available, | 
| + this.refreshEntries(R.string.abb_adblocking_none_available, | 
| R.string.abb_adblocking_all_selected, false); | 
| } | 
| this.setEnabled(true); | 
| this.setShouldDisableView(false); | 
| - this.progressDialog.dismiss(); | 
| - this.progressDialog = null; | 
| + | 
| + dismissProgressDialog(); | 
| } | 
| - private void initEntries(final int titleId, final int summaryId, boolean enabled) | 
| + private void refreshEntries(final int titleId, final int summaryId, boolean enabled) | 
| { | 
| this.removeAll(); | 
| final List<SubscriptionContainer.Subscription> entries = | 
| subscriptionContainer.getSubscriptions(enabled); | 
| if (entries.isEmpty()) | 
| { | 
| this.addPreference(this.createDisabledCheckBox(titleId, summaryId)); | 
| @@ -155,26 +155,54 @@ public class SubscriptionPreferenceCateg | 
| { | 
| for (SubscriptionContainer.Subscription e : entries) | 
| { | 
| this.addPreference(this.createEnabledCheckBox(e)); | 
| } | 
| } | 
| } | 
| - private static class CheckBoxChangeListener implements OnPreferenceChangeListener | 
| + private void showProgressDialog() | 
| + { | 
| + this.progressDialog = new ProgressDialog(this.getContext()); | 
| + this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); | 
| + this.progressDialog.setMessage(this.getContext().getString(R.string.abb_adblocking_waiting)); | 
| + this.progressDialog.show(); | 
| + } | 
| + | 
| + private void dismissProgressDialog() | 
| + { | 
| + if (this.progressDialog != null) | 
| + { | 
| + this.progressDialog.dismiss(); | 
| + this.progressDialog = null; | 
| + } | 
| + } | 
| + | 
| + private class CheckBoxChangeListener implements OnPreferenceChangeListener | 
| { | 
| @Override | 
| public boolean onPreferenceChange(Preference preference, Object newValue) | 
| { | 
| if (preference instanceof CheckBoxPreference && newValue instanceof Boolean) | 
| { | 
| + showProgressDialog(); | 
| + | 
| final CheckBoxPreference cbp = (CheckBoxPreference) preference; | 
| final boolean enable = ((Boolean) newValue).booleanValue(); | 
| SubscriptionPreferenceCategory.subscriptionContainer.changeSubscriptionState( | 
| cbp.getKey(), | 
| enable); | 
| } | 
| return true; | 
| } | 
| } | 
| + | 
| + private class SubscriptionChangeListener implements SubscriptionContainer.SubscriptionListener | 
| + { | 
| + @Override | 
| + public void onSubscriptionUpdated() | 
| + { | 
| + SubscriptionPreferenceCategory.this.refreshEntries(); | 
| + } | 
| + } | 
| } |