package org.holoeverywhere.addon; import org.holoeverywhere.app.Activity; import org.holoeverywhere.app.Fragment; import java.util.Map; import java.util.WeakHashMap; public abstract class IAddon<A extends IAddonActivity, F extends IAddonFragment> { private final Map<Object, Object> statesMap = new WeakHashMap<Object, Object>(); public A activity(Activity activity) { A addon = (A) get(activity); if (addon == null) { addon = createAddon(activity); put(activity, addon); } return addon; } public void addon(Activity activity) { activity.attachAddon(this); } public void addon(Fragment fragment) { fragment.attachAddon(this); } public A createAddon(Activity activity) { return null; } public F createAddon(Fragment fragment) { return null; } public F fragment(Fragment fragment) { F addon = (F) get(fragment); if (addon == null) { addon = createAddon(fragment); put(fragment, addon); } return addon; } @SuppressWarnings("unchecked") public Object get(Object key) { return statesMap.get(key); } public void put(Object key, Object value) { statesMap.put(key, value); } }