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(); |
+ } |
+ } |
} |