package com.vaguehope.onosendai.provider; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import android.os.Bundle; import com.vaguehope.onosendai.config.Account; public class EnabledServiceRefs { private static final String KEY_SREFS = "enabled_service_refs"; private final Set<ServiceRef> enabledRefs; private volatile boolean servicesPreSpecified; private volatile Account account; public EnabledServiceRefs () { this.enabledRefs = Collections.synchronizedSet(new HashSet<ServiceRef>()); } public void setAccount (final Account account) { if (this.account != null && !this.account.getId().equals(account.getId())) { this.enabledRefs.clear(); this.servicesPreSpecified = false; } this.account = account; } public void enable (final ServiceRef ref) { this.enabledRefs.add(ref); } public void enableExclusiveAndSetPreSpecified (final ServiceRef ref) { synchronized (this.enabledRefs) { this.enabledRefs.clear(); this.enabledRefs.add(ref); this.servicesPreSpecified = true; } } public void disable (final ServiceRef ref) { this.enabledRefs.remove(ref); } public boolean isEnabled (final ServiceRef ref) { return this.enabledRefs.contains(ref); } public void setServicesPreSpecified (final boolean servicesPreSpecified) { this.servicesPreSpecified = servicesPreSpecified; } public boolean isServicesPreSpecified () { return this.servicesPreSpecified; } public Set<ServiceRef> copyOfServices () { synchronized (this.enabledRefs) { return Collections.unmodifiableSet(new HashSet<ServiceRef>(this.enabledRefs)); } } public void addToBundle (final Bundle bundle) { if (bundle == null) return; synchronized (this.enabledRefs) { final ArrayList<String> arr = new ArrayList<String>(); for (ServiceRef sr : this.enabledRefs) { arr.add(sr.toServiceMeta()); } bundle.putStringArrayList(KEY_SREFS, arr); } } public void fromBundle (final Bundle bundle) { if (bundle == null) return; synchronized (this.enabledRefs) { final List<String> arr = bundle.getStringArrayList(KEY_SREFS); if (arr == null) return; this.enabledRefs.clear(); for (String svcMeta : arr) { this.enabledRefs.add(ServiceRef.parseServiceMeta(svcMeta)); } this.servicesPreSpecified = true; } } }