package org.dodgybits.shuffle.android.core.configuration; import android.content.ContextWrapper; import com.google.inject.Provides; import org.dodgybits.android.shuffle.R; import org.dodgybits.shuffle.android.core.model.Context; import org.dodgybits.shuffle.android.core.model.Project; import org.dodgybits.shuffle.android.core.model.Task; import org.dodgybits.shuffle.android.core.model.encoding.ContextEncoder; import org.dodgybits.shuffle.android.core.model.encoding.EntityEncoder; import org.dodgybits.shuffle.android.core.model.encoding.ProjectEncoder; import org.dodgybits.shuffle.android.core.model.encoding.TaskEncoder; import org.dodgybits.shuffle.android.core.model.persistence.ContextPersister; import org.dodgybits.shuffle.android.core.model.persistence.DefaultEntityCache; import org.dodgybits.shuffle.android.core.model.persistence.EntityCache; import org.dodgybits.shuffle.android.core.model.persistence.EntityPersister; import org.dodgybits.shuffle.android.core.model.persistence.ProjectPersister; import org.dodgybits.shuffle.android.core.model.persistence.TaskPersister; import org.dodgybits.shuffle.android.core.model.persistence.selector.Flag; import org.dodgybits.shuffle.android.core.view.MenuUtils; import org.dodgybits.shuffle.android.list.annotation.DueTasks; import org.dodgybits.shuffle.android.list.annotation.Inbox; import org.dodgybits.shuffle.android.list.annotation.TopTasks; import org.dodgybits.shuffle.android.list.config.AbstractTaskListConfig; import org.dodgybits.shuffle.android.list.config.DueActionsListConfig; import org.dodgybits.shuffle.android.list.config.StandardTaskQueries; import org.dodgybits.shuffle.android.list.config.TaskListConfig; import org.dodgybits.shuffle.android.preference.model.ListPreferenceSettings; import roboguice.config.AbstractAndroidModule; import com.google.inject.TypeLiteral; public class ShuffleModule extends AbstractAndroidModule { @Override protected void configure() { bind(new TypeLiteral<EntityCache<Context>>() {}).to(new TypeLiteral<DefaultEntityCache<Context>>() {}); bind(new TypeLiteral<EntityCache<Project>>() {}).to(new TypeLiteral<DefaultEntityCache<Project>>() {}); bind(new TypeLiteral<EntityPersister<Context>>() {}).to(ContextPersister.class); bind(new TypeLiteral<EntityPersister<Project>>() {}).to(ProjectPersister.class); bind(new TypeLiteral<EntityPersister<Task>>() {}).to(TaskPersister.class); bind(new TypeLiteral<EntityEncoder<Context>>() {}).to(ContextEncoder.class); bind(new TypeLiteral<EntityEncoder<Project>>() {}).to(ProjectEncoder.class); bind(new TypeLiteral<EntityEncoder<Task>>() {}).to(TaskEncoder.class); bind(DueActionsListConfig.class).annotatedWith(DueTasks.class).to(DueActionsListConfig.class); } @Provides @Inbox TaskListConfig providesInboxTaskListConfig(TaskPersister taskPersister) { ListPreferenceSettings settings = new ListPreferenceSettings("inbox"); return new AbstractTaskListConfig( StandardTaskQueries.getQuery(StandardTaskQueries.cInbox), taskPersister, settings) { public int getCurrentViewMenuId() { return MenuUtils.INBOX_ID; } public String createTitle(ContextWrapper context) { return context.getString(R.string.title_inbox); } }; } @Provides @TopTasks TaskListConfig providesTopTasksTaskListConfig(TaskPersister taskPersister) { ListPreferenceSettings settings = new ListPreferenceSettings("next_tasks").setDefaultCompleted(Flag.no); return new AbstractTaskListConfig( StandardTaskQueries.getQuery(StandardTaskQueries.cNextTasks), taskPersister, settings) { public int getCurrentViewMenuId() { return MenuUtils.TOP_TASKS_ID; } public String createTitle(ContextWrapper context) { return context.getString(R.string.title_next_tasks); } }; } }