use of roboguice.inject.ExtrasListener in project roboguice by roboguice.
the class DefaultRoboModule method configure.
/**
* Configure this module to define Android related bindings.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
protected void configure() {
final Provider<Context> contextProvider = getProvider(Context.class);
final EventListenerThreadingDecorator observerThreadingDecorator = new EventListenerThreadingDecorator();
// Singletons
bind(ViewListener.class).toInstance(viewListener);
// ContextSingleton bindings
bindScope(ContextSingleton.class, contextScope);
//we need to super bind as we inject the scope by code only, not by annotations
superbind(ContextScope.class).toInstance(contextScope);
bind(AssetManager.class).toProvider(AssetManagerProvider.class);
bind(Context.class).toProvider(NullProvider.<Context>instance()).in(ContextSingleton.class);
bind(Activity.class).toProvider(NullProvider.<Activity>instance()).in(ContextSingleton.class);
bind(RoboActivity.class).toProvider(NullProvider.<RoboActivity>instance()).in(ContextSingleton.class);
bind(Service.class).toProvider(NullProvider.<Service>instance()).in(ContextSingleton.class);
bind(RoboService.class).toProvider(NullProvider.<RoboService>instance()).in(ContextSingleton.class);
// Sundry Android Classes
bind(SharedPreferences.class).toProvider(SharedPreferencesProvider.class);
bind(Resources.class).toProvider(ResourcesProvider.class);
bind(ContentResolver.class).toProvider(ContentResolverProvider.class);
bind(Application.class).toInstance(application);
bind(EventListenerThreadingDecorator.class).toInstance(observerThreadingDecorator);
bind(EventManager.class).annotatedWith(Names.named(GLOBAL_EVENT_MANAGER_NAME)).to(EventManager.class).asEagerSingleton();
bind(Handler.class).toProvider(HandlerProvider.class);
// System Services
for (Entry<Class, String> entry : mapSystemSericeClassToName.entrySet()) {
bindSystemService(entry.getKey(), entry.getValue());
}
// System Services that must be scoped to current context
bind(LayoutInflater.class).toProvider(new ContextScopedSystemServiceProvider<LayoutInflater>(contextProvider, Context.LAYOUT_INFLATER_SERVICE));
bind(SearchManager.class).toProvider(new ContextScopedSystemServiceProvider<SearchManager>(contextProvider, Context.SEARCH_SERVICE));
// Android Resources, Views and extras require special handling
if (hasInjectionPointsForAnnotation(InjectResource.class)) {
bindListener(Matchers.any(), resourceListener);
}
if (hasInjectionPointsForAnnotation(InjectExtra.class)) {
final ExtrasListener extrasListener = new ExtrasListener(contextProvider);
bindListener(Matchers.any(), extrasListener);
}
//should be bound only if we use InjectView or InjectFragment
bindListener(Matchers.any(), viewListener);
final PreferenceListener preferenceListener = new PreferenceListener(contextProvider, application);
superbind(PreferenceListener.class).toInstance(preferenceListener);
if (hasInjectionPointsForAnnotation(InjectPreference.class)) {
bindListener(Matchers.any(), preferenceListener);
}
//should always be bound as ContentViewListener relies on event system
bindListener(Matchers.any(), new ObservesTypeListener(getProvider(EventManager.class), observerThreadingDecorator));
requestInjection(observerThreadingDecorator);
if (isInjectable(Ln.class)) {
bind(LnInterface.class).to(LnImpl.class);
//should this be placed in if statement ?
requestStaticInjection(Ln.class);
}
bindDynamicBindings();
}
Aggregations