package gueei.binding.labs;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.WeakHashMap;
import android.content.Context;
import android.os.Bundle;
public class EventAggregator {
private static WeakHashMap<Context, EventAggregator> instances =
new WeakHashMap<Context, EventAggregator>();
public static EventAggregator getInstance(Context context){
if (!instances.containsKey(context)){
instances.put(context, new EventAggregator());
}
return instances.get(context);
}
public static void removeRefs(Context context) {
if(context == null)
return;
if(instances.containsKey(context))
instances.remove(context);
}
private HashMap<String, ArrayList<EventSubscriber>>
EventNameSubscribersMap = new HashMap<String, ArrayList<EventSubscriber>>();
public void publish(final String eventName, final Object publisher, final Bundle data){
ArrayList<EventSubscriber> subscribers = EventNameSubscribersMap.get(eventName);
// Nobody subscribes this
if (subscribers==null) return;
int count = subscribers.size();
// All Subscribers removed (maybe GCed)
if (count==0){
subscribers.remove(eventName);
return;
}
for (int i=0; i<count; i++){
EventSubscriber subscriber = subscribers.get(i);
if (subscriber!=null) subscriber.onEventTriggered(eventName, publisher, data);
}
}
public void subscribe(final String eventName, final EventSubscriber subscriber){
ArrayList<EventSubscriber> subscribers = EventNameSubscribersMap.get(eventName);
if (subscribers==null){
subscribers = new ArrayList<EventSubscriber>();
EventNameSubscribersMap.put(eventName, subscribers);
}
subscribers.add(subscriber);
}
}