package roboguice.fragment.support;
import roboguice.fragment.FragmentUtil.f;
import roboguice.inject.ContextSingleton;
import com.google.inject.Inject;
import com.google.inject.Provider;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;
/**
* Support v4 based implementation of Fragment utility class.
* @author Charles Munger
*/
@SuppressWarnings("unchecked") //we're being ambiguous on purpose
public class SupportFragmentUtil implements f<Fragment, FragmentManager> {
// Incredible hack required to ensure that classes are loaded at construction time
// I.E. so that it fails fast if they're not found. TODO fix this
public SupportFragmentUtil() throws ClassNotFoundException {
Class.forName(Fragment.class.getName());
Class.forName(FragmentManager.class.getName());
}
@Override
public View getView(Fragment frag) {
return frag.getView();
}
@Override
public Fragment findFragmentById(FragmentManager fm, int id) {
return fm.findFragmentById(id);
}
@Override
public Fragment findFragmentByTag(FragmentManager fm, String tag) {
return fm.findFragmentByTag(tag);
}
@Override
public Class<Fragment> fragmentType() {
return Fragment.class;
}
@Override
public Class<FragmentManager> fragmentManagerType() {
return FragmentManager.class;
}
@SuppressWarnings("rawtypes")
@Override
public Class fragmentManagerProviderType() {
return FragmentManagerProvider.class;
}
@ContextSingleton
public static class FragmentManagerProvider implements Provider<FragmentManager> {
@Inject protected Activity activity;
@Override
public FragmentManager get() {
return ((FragmentActivity)activity).getSupportFragmentManager();
}
}
}