package org.holoeverywhere.app;
import java.util.ArrayList;
import java.util.List;
import org.holoeverywhere.addon.IAddon;
import org.holoeverywhere.addon.Sherlock;
import org.holoeverywhere.addon.Sherlock.SherlockF;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app._HoloFragment;
public class Fragment extends _HoloFragment {
public static <T extends Fragment> T instantiate(Class<T> clazz) {
return instantiate(clazz, null);
}
public static <T extends Fragment> T instantiate(Class<T> clazz, Bundle args) {
try {
T fragment = clazz.newInstance();
if (args != null) {
args.setClassLoader(clazz.getClassLoader());
fragment.setArguments(args);
}
return fragment;
} catch (Exception e) {
throw new InstantiationException("Unable to instantiate fragment " + clazz
+ ": make sure class name exists, is public, and has an"
+ " empty constructor that is public", e);
}
}
@Deprecated
public static Fragment instantiate(Context context, String fname) {
return instantiate(context, fname, null);
}
@SuppressWarnings("unchecked")
@Deprecated
public static Fragment instantiate(Context context, String fname, Bundle args) {
try {
return instantiate((Class<? extends Fragment>) Class.forName(fname, true,
context.getClassLoader()), args);
} catch (Exception e) {
throw new InstantiationException("Unable to instantiate fragment " + fname
+ ": make sure class name exists, is public, and has an"
+ " empty constructor that is public", e);
}
}
private final List<IAddon<?, ?>> addons = new ArrayList<IAddon<?, ?>>();
public void attachAddon(IAddon<?, ?> addon) {
if (!addons.contains(addon)) {
addons.add(addon);
}
}
public void detachAddon(IAddon<?, ?> addon) {
addons.remove(addon);
}
@SuppressWarnings("unchecked")
public <T extends IAddon<?, ?>> T findAddon(Class<T> clazz) {
for (IAddon<?, ?> addon : addons) {
if (addon.getClass().isAssignableFrom(clazz)) {
return (T) addon;
}
}
return null;
}
@Deprecated
public Activity getSherlockActivity() {
return (Activity) getActivity();
}
public <T extends IAddon<?, ?>> T requireAddon(Class<T> clazz) {
T t = findAddon(clazz);
if (t == null) {
try {
t = clazz.newInstance();
t.addon(this);
} catch (Exception e) {
e.printStackTrace();
}
}
return t;
}
public SherlockF requireSherlock() {
return requireAddon(Sherlock.class).fragment(this);
}
}