package jp.mydns.sys1yagi.android.transfuse.di.modules; import org.androidtransfuse.annotations.BindProvider; import org.androidtransfuse.annotations.BindProviders; import org.androidtransfuse.annotations.Provides; import org.androidtransfuse.annotations.TransfuseModule; import org.androidtransfuse.annotations.UsesPermission; import android.Manifest; import android.content.Context; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.widget.ArrayAdapter; import javax.inject.Named; import jp.mydns.sys1yagi.android.transfuse.di.constant.ModuleConstant; import jp.mydns.sys1yagi.android.transfuse.di.providers.RssLoaderProvider; import jp.mydns.sys1yagi.android.transfuse.di.providers.SampleDataProvider; import jp.mydns.sys1yagi.android.transfuse.fragments.ActivityLifecycleMethod; import jp.mydns.sys1yagi.android.transfuse.fragments.Broadcast; import jp.mydns.sys1yagi.android.transfuse.CallThroughEvents; import jp.mydns.sys1yagi.android.transfuse.fragments.EventBus; import jp.mydns.sys1yagi.android.transfuse.fragments.Factory; import jp.mydns.sys1yagi.android.transfuse.fragments.FragmentLifecycleMethod; import jp.mydns.sys1yagi.android.transfuse.fragments.ImplementedBy; import jp.mydns.sys1yagi.android.transfuse.fragments.ItemList; import jp.mydns.sys1yagi.android.transfuse.fragments.ListenerRegistration; import jp.mydns.sys1yagi.android.transfuse.fragments.MethodInterceptors; import jp.mydns.sys1yagi.android.transfuse.fragments.PreferenceInjection; import jp.mydns.sys1yagi.android.transfuse.fragments.ResourceInjection; import jp.mydns.sys1yagi.android.transfuse.fragments.Scope; import jp.mydns.sys1yagi.android.transfuse.fragments.ServiceLifecycleMethod; import jp.mydns.sys1yagi.android.transfuse.fragments.SystemServiceInjection; import jp.mydns.sys1yagi.android.transfuse.fragments.ViewInjection; import jp.mydns.sys1yagi.android.transfuse.models.SampleData; import jp.mydns.sys1yagi.android.transfuse.tools.IRssLoader; @TransfuseModule @BindProviders({ @BindProvider(type = IRssLoader.class, provider = RssLoaderProvider.class) , @BindProvider(type = SampleData.class, provider = SampleDataProvider.class) }) @UsesPermission(Manifest.permission.INTERNET) public class ApplicationModules { @Provides @Named(ModuleConstant.FRAGMENT_TOP_MENU_LIST) public ArrayAdapter getAdapter(Context context) { return new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1); } @Provides public FragmentManager getFragmentManager(FragmentActivity fragmentActivity) { return fragmentActivity.getSupportFragmentManager(); } @Provides @Named(ModuleConstant.FRAGMENT_ITEM_LIST) public Fragment getTopList() { return getFragment(ItemList.class); } @Provides @Named(ModuleConstant.FRAGMENT_VIEW_INJECTION) public Fragment getViewInjection() { return getFragment(ViewInjection.class); } @Provides @Named(ModuleConstant.FRAGMENT_ACTIVITY_LIFECYCLE_METHOD) public Fragment getActivityLifecycleMethods() { return getFragment(ActivityLifecycleMethod.class); } @Provides @Named(ModuleConstant.FRAGMENT_RESOURCE_INJECTION) public Fragment getResourceInjection() { return getFragment(ResourceInjection.class); } @Provides @Named(ModuleConstant.FRAGMENT_PREFERENCE_INJECTION) public Fragment getPreferenceInjection() { return getFragment(PreferenceInjection.class); } @Provides @Named(ModuleConstant.FRAGMENT_SYSTEMSERVICE_INJECTION) public Fragment getSystemServiceInjection() { return getFragment(SystemServiceInjection.class); } @Provides @Named(ModuleConstant.FRAGMENT_FRAGMENT_LIFECYCLE_METHOD) public Fragment getFragmentLifecycleMethod() { return getFragment(FragmentLifecycleMethod.class); } @Provides @Named(ModuleConstant.FRAGMENT_BROADCAST_RECEIVER) public Fragment getBroadcastReceiver() { return getFragment(Broadcast.class); } @Provides @Named(ModuleConstant.FRAGMENT_LISTENER_REGISTRATION) public Fragment getListenerRegistration() { return getFragment(ListenerRegistration.class); } @Provides @Named(ModuleConstant.FRAGMENT_IMPLEMENTED_BY) public Fragment getImplementedBy() { return getFragment(ImplementedBy.class); } @Provides @Named(ModuleConstant.FRAGMENT_METHOD_INTERCEPTORS) public Fragment getMethodInterceptors() { return getFragment(MethodInterceptors.class); } @Provides @Named(ModuleConstant.FRAGMENT_EVENT_BUS) public Fragment getEventBus() { return getFragment(EventBus.class); } @Provides @Named(ModuleConstant.FRAGMENT_FACTORY) public Fragment getFactory() { return getFragment(Factory.class); } @Provides @Named(ModuleConstant.FRAGMENT_SCOPE) public Fragment getScope() { return getFragment(Scope.class); } @Provides @Named(ModuleConstant.FRAGMENT_SERVICE_LIFECYCLE_METHOD) public Fragment getServiceLifecycleMethod() { return getFragment(ServiceLifecycleMethod.class); } private Fragment getFragment(Class fragmentBaseClass) { try { Class clazz = Class.forName(fragmentBaseClass.getName() + "Fragment"); return (Fragment) clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } return null; } }