Inject injectors

pull/189/head
Alex Baker 12 years ago
parent 5c7c4fa6f9
commit 26731a1c3b

@ -5,11 +5,13 @@
*/ */
package com.todoroo.astrid.api; package com.todoroo.astrid.api;
import org.tasks.injection.Injector;
/** /**
* Common interface for Astrids filter-exposers to provide their FilterListitem instances. * Common interface for Astrids filter-exposers to provide their FilterListitem instances.
* *
* @author Arne Jans * @author Arne Jans
*/ */
public interface AstridFilterExposer { public interface AstridFilterExposer {
public FilterListItem[] getFilters(); public FilterListItem[] getFilters(Injector injector);
} }

@ -0,0 +1,11 @@
package org.tasks.injection;
import dagger.ObjectGraph;
public interface Injector {
public void inject(Object caller);
public ObjectGraph getObjectGraph();
}

@ -8,12 +8,15 @@ import static java.util.Collections.emptyList;
public abstract class InjectingTestCase extends TodorooTestCase { public abstract class InjectingTestCase extends TodorooTestCase {
@Override @Override
protected void setUp() { protected void setUp() {
super.setUp(); super.setUp();
new TestInjector(getContext()).inject(this, getModules().toArray()); new TestInjector(getContext())
} .getObjectGraph()
.plus(getModules().toArray())
.inject(this);
}
protected List<Object> getModules() { protected List<Object> getModules() {
return emptyList(); return emptyList();

@ -13,9 +13,12 @@ public class TestInjector implements Injector {
} }
@Override @Override
public void inject(Object caller, Object... modules) { public void inject(Object caller) {
objectGraph objectGraph.inject(caller);
.plus(modules) }
.inject(caller);
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
} }
} }

@ -59,7 +59,7 @@ public class TestModule {
@Singleton @Singleton
@Provides @Provides
@TasksModule.ForApplication @ForApplication
public Context getContext() { public Context getContext() {
return context; return context;
} }

@ -44,6 +44,7 @@ import com.todoroo.astrid.api.FilterListItem;
import org.tasks.R; import org.tasks.R;
import org.tasks.filters.FilterCounter; import org.tasks.filters.FilterCounter;
import org.tasks.injection.InjectingListFragment; import org.tasks.injection.InjectingListFragment;
import org.tasks.injection.Injector;
import javax.inject.Inject; import javax.inject.Inject;
@ -81,6 +82,7 @@ public class FilterListFragment extends InjectingListFragment {
private OnFilterItemClickedListener mListener; private OnFilterItemClickedListener mListener;
@Inject FilterCounter filterCounter; @Inject FilterCounter filterCounter;
@Inject Injector injector;
/* ====================================================================== /* ======================================================================
* ======================================================= initialization * ======================================================= initialization
@ -99,7 +101,7 @@ public class FilterListFragment extends InjectingListFragment {
// Check that the container activity has implemented the callback interface // Check that the container activity has implemented the callback interface
try { try {
mListener = (OnFilterItemClickedListener) activity; mListener = (OnFilterItemClickedListener) activity;
adapter = new FilterAdapter(filterCounter, getActivity(), null, R.layout.filter_adapter_row, false, false); adapter = new FilterAdapter(injector, filterCounter, getActivity(), null, R.layout.filter_adapter_row, false, false);
} catch (ClassCastException e) { } catch (ClassCastException e) {
throw new ClassCastException(activity.toString() throw new ClassCastException(activity.toString()
+ " must implement OnFilterItemClickedListener"); //$NON-NLS-1$ + " must implement OnFilterItemClickedListener"); //$NON-NLS-1$

@ -20,12 +20,14 @@ import com.todoroo.astrid.service.ThemeService;
import org.tasks.R; import org.tasks.R;
import org.tasks.filters.FilterCounter; import org.tasks.filters.FilterCounter;
import org.tasks.injection.InjectingListActivity; import org.tasks.injection.InjectingListActivity;
import org.tasks.injection.Injector;
import javax.inject.Inject; import javax.inject.Inject;
public class FilterShortcutActivity extends InjectingListActivity { public class FilterShortcutActivity extends InjectingListActivity {
@Inject FilterCounter filterCounter; @Inject FilterCounter filterCounter;
@Inject Injector injector;
private FilterAdapter adapter = null; private FilterAdapter adapter = null;
@ -41,7 +43,7 @@ public class FilterShortcutActivity extends InjectingListActivity {
setContentView(R.layout.widget_config_activity); setContentView(R.layout.widget_config_activity);
// set up ui // set up ui
adapter = new FilterAdapter(filterCounter, this, getListView(), adapter = new FilterAdapter(injector, filterCounter, this, getListView(),
R.layout.filter_adapter_row, true, true); R.layout.filter_adapter_row, true, true);
adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Widget; adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Widget;
setListAdapter(adapter); setListAdapter(adapter);

@ -86,6 +86,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.InjectingListFragment; import org.tasks.injection.InjectingListFragment;
import org.tasks.injection.Injector;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import java.util.List; import java.util.List;
@ -148,6 +149,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
@Inject @ForActivity Context context; @Inject @ForActivity Context context;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject TaskAttachmentDao taskAttachmentDao; @Inject TaskAttachmentDao taskAttachmentDao;
@Inject Injector injector;
protected Resources resources; protected Resources resources;
protected TaskAdapter taskAdapter = null; protected TaskAdapter taskAdapter = null;
@ -475,7 +477,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
protected void setupQuickAddBar() { protected void setupQuickAddBar() {
quickAddBar = (QuickAddBar) getView().findViewById(R.id.taskListFooter); quickAddBar = (QuickAddBar) getView().findViewById(R.id.taskListFooter);
quickAddBar.initialize((AstridActivity) getActivity(), this, mListener); quickAddBar.initialize(injector, (AstridActivity) getActivity(), this, mListener);
getListView().setOnTouchListener(new OnTouchListener() { getListView().setOnTouchListener(new OnTouchListener() {
@Override @Override

@ -45,6 +45,7 @@ import com.todoroo.astrid.api.FilterWithUpdate;
import org.tasks.R; import org.tasks.R;
import org.tasks.filters.FilterCounter; import org.tasks.filters.FilterCounter;
import org.tasks.injection.Injector;
import java.util.List; import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -59,6 +60,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
// --- instance variables // --- instance variables
private Injector injector;
private final FilterCounter filterCounter; private final FilterCounter filterCounter;
/** parent activity */ /** parent activity */
@ -87,9 +89,10 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
/** whether rows are selectable */ /** whether rows are selectable */
private final boolean selectable; private final boolean selectable;
public FilterAdapter(FilterCounter filterCounter, Activity activity, ListView listView, public FilterAdapter(Injector injector, FilterCounter filterCounter, Activity activity, ListView listView,
int rowLayout, boolean skipIntentFilters, boolean selectable) { int rowLayout, boolean skipIntentFilters, boolean selectable) {
super(activity, 0); super(activity, 0);
this.injector = injector;
this.filterCounter = filterCounter; this.filterCounter = filterCounter;
this.activity = activity; this.activity = activity;
this.listView = listView; this.listView = listView;
@ -283,7 +286,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
filterExposer = (AstridFilterExposer) Class.forName(className, true, FilterAdapter.class.getClassLoader()).newInstance(); filterExposer = (AstridFilterExposer) Class.forName(className, true, FilterAdapter.class.getClassLoader()).newInstance();
if (filterExposer != null) { if (filterExposer != null) {
populateFiltersToAdapter(filterExposer.getFilters()); populateFiltersToAdapter(filterExposer.getFilters(injector));
} }
} }
} catch (Exception e) { } catch (Exception e) {

@ -26,14 +26,14 @@ import com.todoroo.astrid.reminders.ReminderService;
import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.MetadataService.SynchronizeMetadataCallback; import com.todoroo.astrid.service.MetadataService.SynchronizeMetadataCallback;
import org.tasks.injection.ForApplication;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import static org.tasks.injection.TasksModule.ForApplication;
/** /**
* Provides operations for working with alerts * Provides operations for working with alerts
* *

@ -79,7 +79,7 @@ public class BackupPreferences extends InjectingTodorooPreferenceActivity {
findPreference(getString(R.string.backup_BAc_export)).setOnPreferenceClickListener(new OnPreferenceClickListener() { findPreference(getString(R.string.backup_BAc_export)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override @Override
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
xmlExporter.exportTasks(TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, null); xmlExporter.exportTasks(BackupPreferences.this, TasksXmlExporter.ExportType.EXPORT_TYPE_MANUAL, null);
return true; return true;
} }
}); });
@ -149,7 +149,7 @@ public class BackupPreferences extends InjectingTodorooPreferenceActivity {
FilePickerBuilder.OnFilePickedListener listener = new FilePickerBuilder.OnFilePickedListener() { FilePickerBuilder.OnFilePickedListener listener = new FilePickerBuilder.OnFilePickedListener() {
@Override @Override
public void onFilePicked(String filePath) { public void onFilePicked(String filePath) {
xmlImporter.importTasks(filePath, new Runnable() { xmlImporter.importTasks(BackupPreferences.this, filePath, new Runnable() {
@Override @Override
public void run() { public void run() {
Flags.set(Flags.REFRESH); Flags.set(Flags.REFRESH);

@ -87,7 +87,7 @@ public class BackupService extends InjectingService {
Log.e("error-deleting", "Error deleting old backups", e); //$NON-NLS-1$ //$NON-NLS-2$ Log.e("error-deleting", "Error deleting old backups", e); //$NON-NLS-1$ //$NON-NLS-2$
} }
xmlExporter.exportTasks(TasksXmlExporter.ExportType.EXPORT_TYPE_SERVICE, xmlExporter.exportTasks(context, TasksXmlExporter.ExportType.EXPORT_TYPE_SERVICE,
backupDirectorySetting.getBackupDirectory()); backupDirectorySetting.getBackupDirectory());
} catch (Exception e) { } catch (Exception e) {

@ -40,8 +40,6 @@ import java.io.IOException;
import javax.inject.Inject; import javax.inject.Inject;
import static org.tasks.injection.TasksModule.ForApplication;
public class TasksXmlExporter { public class TasksXmlExporter {
private static final String TAG = "TasksXmlExporter"; private static final String TAG = "TasksXmlExporter";
@ -60,10 +58,10 @@ public class TasksXmlExporter {
private final MetadataService metadataService; private final MetadataService metadataService;
private final TaskService taskService; private final TaskService taskService;
private final Preferences preferences; private final Preferences preferences;
private final Context context;
// 3 is started on Version 4.6.10 // 3 is started on Version 4.6.10
private static final int FORMAT = 3; private static final int FORMAT = 3;
private Context context;
private int exportCount = 0; private int exportCount = 0;
private XmlSerializer xml; private XmlSerializer xml;
@ -83,15 +81,15 @@ public class TasksXmlExporter {
} }
@Inject @Inject
public TasksXmlExporter(@ForApplication Context context, TagDataService tagDataService, MetadataService metadataService, TaskService taskService, Preferences preferences) { public TasksXmlExporter(TagDataService tagDataService, MetadataService metadataService, TaskService taskService, Preferences preferences) {
this.context = context;
this.tagDataService = tagDataService; this.tagDataService = tagDataService;
this.metadataService = metadataService; this.metadataService = metadataService;
this.taskService = taskService; this.taskService = taskService;
this.preferences = preferences; this.preferences = preferences;
} }
public void exportTasks(final ExportType exportType, File backupDirectoryOverride) { public void exportTasks(final Context context, final ExportType exportType, File backupDirectoryOverride) {
this.context = context;
this.exportCount = 0; this.exportCount = 0;
this.backupDirectory = backupDirectoryOverride == null ? this.backupDirectory = backupDirectoryOverride == null ?
BackupConstants.defaultExportDirectory() : backupDirectoryOverride; BackupConstants.defaultExportDirectory() : backupDirectoryOverride;

@ -54,8 +54,6 @@ import java.util.StringTokenizer;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import static org.tasks.injection.TasksModule.ForApplication;
public class TasksXmlImporter { public class TasksXmlImporter {
private static final String TAG = "TasksXmlImporter"; private static final String TAG = "TasksXmlImporter";
@ -64,8 +62,8 @@ public class TasksXmlImporter {
private final TagService tagService; private final TagService tagService;
private final MetadataService metadataService; private final MetadataService metadataService;
private final TaskService taskService; private final TaskService taskService;
private final Context context;
private Context context;
private Handler handler; private Handler handler;
private int taskCount; private int taskCount;
private int importCount = 0; private int importCount = 0;
@ -85,8 +83,7 @@ public class TasksXmlImporter {
} }
@Inject @Inject
public TasksXmlImporter(@ForApplication Context context, TagDataService tagDataService, TagService tagService, MetadataService metadataService, TaskService taskService) { public TasksXmlImporter(TagDataService tagDataService, TagService tagService, MetadataService metadataService, TaskService taskService) {
this.context = context;
this.tagDataService = tagDataService; this.tagDataService = tagDataService;
this.tagService = tagService; this.tagService = tagService;
this.metadataService = metadataService; this.metadataService = metadataService;
@ -97,7 +94,8 @@ public class TasksXmlImporter {
* Import tasks. * Import tasks.
* @param runAfterImport optional runnable after import * @param runAfterImport optional runnable after import
*/ */
public void importTasks(String input, Runnable runAfterImport) { public void importTasks(Context context, String input, Runnable runAfterImport) {
this.context = context;
this.input = input; this.input = input;
this.runAfterImport = runAfterImport; this.runAfterImport = runAfterImport;

@ -32,6 +32,7 @@ import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.TaskToTagMetadata;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.Injector;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -114,7 +115,7 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid
} }
@Override @Override
public FilterListItem[] getFilters() { public FilterListItem[] getFilters(Injector injector) {
if (ContextManager.getContext() == null || ContextManager.getContext().getResources() == null) { if (ContextManager.getContext() == null || ContextManager.getContext().getResources() == null) {
return null; return null;
} }

@ -5,7 +5,6 @@
*/ */
package com.todoroo.astrid.core; package com.todoroo.astrid.core;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
@ -33,6 +32,7 @@ import com.todoroo.astrid.service.ThemeService;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.InjectingActivity; import org.tasks.injection.InjectingActivity;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector; import org.tasks.injection.Injector;
import java.util.ArrayList; import java.util.ArrayList;
@ -45,7 +45,7 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
public final class CustomFilterExposer extends BroadcastReceiver implements AstridFilterExposer { public final class CustomFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
private static final String TOKEN_FILTER_ID = "id"; //$NON-NLS-1$ private static final String TOKEN_FILTER_ID = "id"; //$NON-NLS-1$
private static final String TOKEN_FILTER_NAME = "name"; //$NON-NLS-1$ private static final String TOKEN_FILTER_NAME = "name"; //$NON-NLS-1$
@ -54,6 +54,8 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
FilterListItem[] list = prepareFilters(context); FilterListItem[] list = prepareFilters(context);
// transmit filter list // transmit filter list
@ -69,8 +71,6 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr
} }
private Filter[] buildSavedFilters(Context context, Resources r) { private Filter[] buildSavedFilters(Context context, Resources r) {
((Injector) context.getApplicationContext()).inject(this); // TODO: get rid of this
int themeFlags = ThemeService.getFilterThemeFlags(); int themeFlags = ThemeService.getFilterThemeFlags();
TodorooCursor<StoreObject> cursor = storeObjectDao.query(Query.select(StoreObject.PROPERTIES).where( TodorooCursor<StoreObject> cursor = storeObjectDao.query(Query.select(StoreObject.PROPERTIES).where(
@ -161,11 +161,13 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr
} }
@Override @Override
public FilterListItem[] getFilters() { public FilterListItem[] getFilters(Injector injector) {
if (ContextManager.getContext() == null) { if (ContextManager.getContext() == null) {
return null; return null;
} }
injector.inject(this);
return prepareFilters(ContextManager.getContext()); return prepareFilters(ContextManager.getContext());
} }

@ -6,7 +6,6 @@
package com.todoroo.astrid.gtasks; package com.todoroo.astrid.gtasks;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
@ -35,6 +34,7 @@ import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector; import org.tasks.injection.Injector;
import javax.inject.Inject; import javax.inject.Inject;
@ -45,7 +45,7 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilterExposer { public class GtasksFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
@Inject GtasksListService gtasksListService; @Inject GtasksListService gtasksListService;
@Inject GtasksPreferenceService gtasksPreferenceService; @Inject GtasksPreferenceService gtasksPreferenceService;
@ -78,6 +78,8 @@ public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilt
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
ContextManager.setContext(context); ContextManager.setContext(context);
FilterListItem[] list = prepareFilters(context); FilterListItem[] list = prepareFilters(context);
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS);
@ -87,8 +89,6 @@ public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilt
} }
private FilterListItem[] prepareFilters(Context context) { private FilterListItem[] prepareFilters(Context context) {
((Injector) context.getApplicationContext()).inject(this); // TODO: get rid of this
// if we aren't logged in (or we are logged in to astrid.com), don't expose features // if we aren't logged in (or we are logged in to astrid.com), don't expose features
if(!gtasksPreferenceService.isLoggedIn()) { if(!gtasksPreferenceService.isLoggedIn()) {
return null; return null;
@ -122,11 +122,13 @@ public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilt
} }
@Override @Override
public FilterListItem[] getFilters() { public FilterListItem[] getFilters(Injector injector) {
if (ContextManager.getContext() == null) { if (ContextManager.getContext() == null) {
return null; return null;
} }
injector.inject(this);
return prepareFilters(ContextManager.getContext()); return prepareFilters(ContextManager.getContext());
} }

@ -9,11 +9,11 @@ import android.util.Log;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import org.tasks.injection.ForApplication;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import static org.tasks.injection.TasksModule.ForApplication;
@Singleton @Singleton
public class GtasksScheduler { public class GtasksScheduler {

@ -40,6 +40,7 @@ import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.sync.SyncV2Provider;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.ForApplication;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -52,7 +53,6 @@ import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDate;
import static org.tasks.injection.TasksModule.ForApplication;
@Singleton @Singleton
public class GtasksSyncV2Provider extends SyncV2Provider { public class GtasksSyncV2Provider extends SyncV2Provider {

@ -41,6 +41,7 @@ import org.joda.time.DateTime;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingBroadcastReceiver; import org.tasks.injection.InjectingBroadcastReceiver;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -50,7 +51,6 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Inject; import javax.inject.Inject;
import static org.tasks.date.DateTimeUtils.currentTimeMillis; import static org.tasks.date.DateTimeUtils.currentTimeMillis;
import static org.tasks.injection.TasksModule.ForApplication;
public class Notifications extends InjectingBroadcastReceiver { public class Notifications extends InjectingBroadcastReceiver {
@ -61,7 +61,6 @@ public class Notifications extends InjectingBroadcastReceiver {
/** task id extra */ /** task id extra */
public static final String ID_KEY = "id"; //$NON-NLS-1$ public static final String ID_KEY = "id"; //$NON-NLS-1$
/** preference values */ /** preference values */
public static final int ICON_SET_PINK = 0; public static final int ICON_SET_PINK = 0;
public static final int ICON_SET_BORING = 1; public static final int ICON_SET_BORING = 1;

@ -25,6 +25,7 @@ import com.todoroo.astrid.data.Task;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.ForApplication;
import java.util.Date; import java.util.Date;
import java.util.Random; import java.util.Random;
@ -34,8 +35,6 @@ import javax.inject.Singleton;
import static org.tasks.date.DateTimeUtils.currentTimeMillis; import static org.tasks.date.DateTimeUtils.currentTimeMillis;
import static org.tasks.date.DateTimeUtils.newDate; import static org.tasks.date.DateTimeUtils.newDate;
import static org.tasks.injection.TasksModule.ForApplication;
/** /**
* Data service for reminders * Data service for reminders

@ -266,7 +266,7 @@ public class StartupService {
File[] children = directory.listFiles(); File[] children = directory.listFiles();
AndroidUtilities.sortFilesByDateDesc(children); AndroidUtilities.sortFilesByDateDesc(children);
if(children.length > 0) { if(children.length > 0) {
xmlImporter.importTasks(children[0].getAbsolutePath(), null); xmlImporter.importTasks(context, children[0].getAbsolutePath(), null);
} }
} }
} catch (Exception e) { } catch (Exception e) {

@ -6,7 +6,6 @@
package com.todoroo.astrid.tags; package com.todoroo.astrid.tags;
import android.app.Activity; import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
@ -41,6 +40,7 @@ import com.todoroo.astrid.tags.TagService.Tag;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.InjectingActivity; import org.tasks.injection.InjectingActivity;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector; import org.tasks.injection.Injector;
import java.util.ArrayList; import java.util.ArrayList;
@ -54,7 +54,7 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
public class TagFilterExposer extends BroadcastReceiver implements AstridFilterExposer { public class TagFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
private static final String TAG = "tag"; //$NON-NLS-1$ private static final String TAG = "tag"; //$NON-NLS-1$
@ -115,6 +115,8 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
FilterListItem[] listAsArray = prepareFilters(context); FilterListItem[] listAsArray = prepareFilters(context);
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS);
@ -124,8 +126,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
} }
private FilterListItem[] prepareFilters(Context context) { private FilterListItem[] prepareFilters(Context context) {
((Injector) context.getApplicationContext()).inject(this); // TODO: get rid of this
ContextManager.setContext(context); ContextManager.setContext(context);
ArrayList<FilterListItem> list = new ArrayList<>(); ArrayList<FilterListItem> list = new ArrayList<>();
@ -293,11 +293,13 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
} }
@Override @Override
public FilterListItem[] getFilters() { public FilterListItem[] getFilters(Injector injector) {
if (ContextManager.getContext() == null) { if (ContextManager.getContext() == null) {
return null; return null;
} }
injector.inject(this);
return prepareFilters(ContextManager.getContext()); return prepareFilters(ContextManager.getContext());
} }

@ -5,7 +5,6 @@
*/ */
package com.todoroo.astrid.timers; package com.todoroo.astrid.timers;
import android.content.BroadcastReceiver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -24,6 +23,7 @@ import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.InjectingBroadcastReceiver;
import org.tasks.injection.Injector; import org.tasks.injection.Injector;
import javax.inject.Inject; import javax.inject.Inject;
@ -34,12 +34,14 @@ import javax.inject.Inject;
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
public final class TimerFilterExposer extends BroadcastReceiver implements AstridFilterExposer { public final class TimerFilterExposer extends InjectingBroadcastReceiver implements AstridFilterExposer {
@Inject TaskService taskService; @Inject TaskService taskService;
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
ContextManager.setContext(context); ContextManager.setContext(context);
FilterListItem[] list = prepareFilters(context); FilterListItem[] list = prepareFilters(context);
@ -49,8 +51,6 @@ public final class TimerFilterExposer extends BroadcastReceiver implements Astri
} }
private FilterListItem[] prepareFilters(Context context) { private FilterListItem[] prepareFilters(Context context) {
((Injector) context.getApplicationContext()).inject(this); // TODO: get rid of this
if(taskService.count(Query.select(Task.ID). if(taskService.count(Query.select(Task.ID).
where(Task.TIMER_START.gt(0))) == 0) { where(Task.TIMER_START.gt(0))) == 0) {
return null; return null;
@ -77,11 +77,13 @@ public final class TimerFilterExposer extends BroadcastReceiver implements Astri
} }
@Override @Override
public FilterListItem[] getFilters() { public FilterListItem[] getFilters(Injector injector) {
if (ContextManager.getContext() == null) { if (ContextManager.getContext() == null) {
return null; return null;
} }
injector.inject(this);
return prepareFilters(ContextManager.getContext()); return prepareFilters(ContextManager.getContext());
} }
} }

@ -95,10 +95,10 @@ public class QuickAddBar extends LinearLayout {
super(context, attrs, defStyle); super(context, attrs, defStyle);
} }
public void initialize(AstridActivity myActivity, TaskListFragment myFragment, public void initialize(Injector injector, AstridActivity myActivity, TaskListFragment myFragment,
final OnTaskListItemClickedListener mListener) { final OnTaskListItemClickedListener mListener) {
((Injector) myActivity.getApplication()).inject(this); // TODO: get rid of this injector.inject(this); // TODO: get rid of this
activity = myActivity; activity = myActivity;
fragment = myFragment; fragment = myFragment;

@ -26,6 +26,7 @@ import com.todoroo.astrid.service.ThemeService;
import org.tasks.R; import org.tasks.R;
import org.tasks.filters.FilterCounter; import org.tasks.filters.FilterCounter;
import org.tasks.injection.InjectingListActivity; import org.tasks.injection.InjectingListActivity;
import org.tasks.injection.Injector;
import org.tasks.widget.WidgetHelper; import org.tasks.widget.WidgetHelper;
import javax.inject.Inject; import javax.inject.Inject;
@ -45,6 +46,7 @@ public class WidgetConfigActivity extends InjectingListActivity {
@Inject WidgetHelper widgetHelper; @Inject WidgetHelper widgetHelper;
@Inject FilterCounter filterCounter; @Inject FilterCounter filterCounter;
@Inject Injector injector;
private void updateWidget() { private void updateWidget() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
@ -87,7 +89,7 @@ public class WidgetConfigActivity extends InjectingListActivity {
} }
// set up ui // set up ui
adapter = new FilterAdapter(filterCounter, this, getListView(), adapter = new FilterAdapter(injector, filterCounter, this, getListView(),
R.layout.filter_adapter_row, true, true); R.layout.filter_adapter_row, true, true);
adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Widget; adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Widget;
setListAdapter(adapter); setListAdapter(adapter);

@ -3,11 +3,11 @@ package org.tasks;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import org.tasks.injection.ForApplication;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import static org.tasks.injection.TasksModule.ForApplication;
@Singleton @Singleton
public class Broadcaster { public class Broadcaster {

@ -8,40 +8,24 @@ import org.tasks.injection.Injector;
import dagger.ObjectGraph; import dagger.ObjectGraph;
import static org.tasks.injection.TasksModule.newTasksModule;
public class Tasks extends Application implements Injector { public class Tasks extends Application implements Injector {
Injector injector; ObjectGraph objectGraph = ObjectGraph.create();
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
ContextManager.setContext(this); ContextManager.setContext(this);
getInjector();
} }
@Override @Override
public void inject(Object caller, Object... modules) { public void inject(Object caller) {
getInjector().inject(caller, modules); getObjectGraph().inject(caller);
} }
private Injector getInjector() { @Override
if (injector == null) { public ObjectGraph getObjectGraph() {
injector = new Injector() { return objectGraph;
ObjectGraph objectGraph = ObjectGraph.create(newTasksModule(Tasks.this));
@Override
public void inject(Object caller, Object... modules) {
objectGraph
.plus(modules)
.inject(caller);
}
};
}
return injector;
} }
} }

@ -38,7 +38,6 @@ import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME; import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = { @Module(injects = {
TaskListActivity.class, TaskListActivity.class,
@ -65,11 +64,19 @@ import static org.tasks.injection.TasksModule.ForApplication;
public class ActivityModule { public class ActivityModule {
private final Context context; private final Context context;
private Injector injector;
public ActivityModule(Activity activity) { public ActivityModule(Activity activity, Injector injector) {
this.injector = injector;
context = activity.getApplicationContext(); context = activity.getApplicationContext();
} }
@Singleton
@Provides
public Injector getInjector() {
return injector;
}
@Singleton @Singleton
@Provides @Provides
@ForApplication @ForApplication

@ -5,9 +5,11 @@ import android.content.Context;
import com.todoroo.astrid.alarms.AlarmDetailExposer; import com.todoroo.astrid.alarms.AlarmDetailExposer;
import com.todoroo.astrid.alarms.AlarmTaskRepeatListener; import com.todoroo.astrid.alarms.AlarmTaskRepeatListener;
import com.todoroo.astrid.calls.PhoneStateChangedReceiver; import com.todoroo.astrid.calls.PhoneStateChangedReceiver;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gcal.GCalTaskCompleteListener; import com.todoroo.astrid.gcal.GCalTaskCompleteListener;
import com.todoroo.astrid.gtasks.GtasksCustomFilterCriteriaExposer; import com.todoroo.astrid.gtasks.GtasksCustomFilterCriteriaExposer;
import com.todoroo.astrid.gtasks.GtasksDetailExposer; import com.todoroo.astrid.gtasks.GtasksDetailExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.gtasks.GtasksStartupReceiver; import com.todoroo.astrid.gtasks.GtasksStartupReceiver;
import com.todoroo.astrid.notes.NotesDetailExposer; import com.todoroo.astrid.notes.NotesDetailExposer;
import com.todoroo.astrid.reminders.Notifications; import com.todoroo.astrid.reminders.Notifications;
@ -16,6 +18,8 @@ import com.todoroo.astrid.repeats.RepeatTaskCompleteListener;
import com.todoroo.astrid.service.GlobalEventReceiver; import com.todoroo.astrid.service.GlobalEventReceiver;
import com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer; import com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer;
import com.todoroo.astrid.tags.TagDetailExposer; import com.todoroo.astrid.tags.TagDetailExposer;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer;
import com.todoroo.astrid.timers.TimerTaskCompleteListener; import com.todoroo.astrid.timers.TimerTaskCompleteListener;
import com.todoroo.astrid.widget.TasksWidget; import com.todoroo.astrid.widget.TasksWidget;
@ -26,8 +30,6 @@ import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = { @Module(injects = {
RefreshBroadcastReceiver.class, RefreshBroadcastReceiver.class,
TasksWidget.class, TasksWidget.class,
@ -45,7 +47,11 @@ import static org.tasks.injection.TasksModule.ForApplication;
AlarmTaskRepeatListener.class, AlarmTaskRepeatListener.class,
AlarmDetailExposer.class, AlarmDetailExposer.class,
GtasksStartupReceiver.class, GtasksStartupReceiver.class,
PhoneStateChangedReceiver.class PhoneStateChangedReceiver.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class
}) })
public class BroadcastModule { public class BroadcastModule {

@ -11,8 +11,6 @@ import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = { @Module(injects = {
Astrid2TaskProvider.class, Astrid2TaskProvider.class,
Astrid3ContentProvider.class, Astrid3ContentProvider.class,

@ -0,0 +1,19 @@
package org.tasks.injection;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Qualifier
@Target({FIELD, PARAMETER, METHOD})
@Documented
@Retention(RUNTIME)
public @interface ForApplication {
}

@ -8,10 +8,15 @@ import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.FilterListFragment; import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.activity.TaskEditFragment; import com.todoroo.astrid.activity.TaskEditFragment;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.reminders.NotificationFragment; import com.todoroo.astrid.reminders.NotificationFragment;
import com.todoroo.astrid.subtasks.SubtasksListFragment; import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment; import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer;
import com.todoroo.astrid.ui.QuickAddBar;
import javax.inject.Singleton; import javax.inject.Singleton;
@ -19,7 +24,6 @@ import dagger.Module;
import dagger.Provides; import dagger.Provides;
import static org.tasks.injection.ActivityModule.ForActivity; import static org.tasks.injection.ActivityModule.ForActivity;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = { @Module(injects = {
TaskListFragment.class, TaskListFragment.class,
@ -30,14 +34,27 @@ import static org.tasks.injection.TasksModule.ForApplication;
TagViewFragment.class, TagViewFragment.class,
TaskEditFragment.class, TaskEditFragment.class,
TagCommentsFragment.class, TagCommentsFragment.class,
FilterListFragment.class FilterListFragment.class,
QuickAddBar.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class
}) })
public class FragmentModule { public class FragmentModule {
private final Activity activity; private final Activity activity;
private Injector injector;
public FragmentModule(Activity activity) { public FragmentModule(Activity activity, Injector injector) {
this.activity = activity; this.activity = activity;
this.injector = injector;
}
@Singleton
@Provides
public Injector getInjector() {
return injector;
} }
@Singleton @Singleton

@ -3,11 +3,26 @@ package org.tasks.injection;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarActivity;
public class InjectingActionBarActivity extends ActionBarActivity { import dagger.ObjectGraph;
public class InjectingActionBarActivity extends ActionBarActivity implements Injector {
private ObjectGraph objectGraph;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Injector) getApplication()).inject(this, new ActivityModule(this)); objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
inject(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -3,11 +3,26 @@ package org.tasks.injection;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
public class InjectingActivity extends Activity { import dagger.ObjectGraph;
public class InjectingActivity extends Activity implements Injector {
private ObjectGraph objectGraph;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Injector) getApplication()).inject(this, new ActivityModule(this)); objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
inject(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -7,7 +7,10 @@ import android.content.Intent;
public class InjectingAppWidgetProvider extends AppWidgetProvider { public class InjectingAppWidgetProvider extends AppWidgetProvider {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
((Injector) context.getApplicationContext()).inject(this, new BroadcastModule(context)); ((Injector) context.getApplicationContext())
.getObjectGraph()
.plus(new BroadcastModule(context))
.inject(this);
super.onReceive(context, intent); super.onReceive(context, intent);
} }

@ -7,6 +7,9 @@ import android.content.Intent;
public class InjectingBroadcastReceiver extends BroadcastReceiver { public class InjectingBroadcastReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
((Injector) context.getApplicationContext()).inject(this, new BroadcastModule(context)); ((Injector) context.getApplicationContext())
.getObjectGraph()
.plus(new BroadcastModule(context))
.inject(this);
} }
} }

@ -7,7 +7,10 @@ public abstract class InjectingContentProvider extends ContentProvider {
@Override @Override
public boolean onCreate() { public boolean onCreate() {
Context context = getContext(); Context context = getContext();
((Injector) context.getApplicationContext()).inject(this, new ContentProviderModule(context)); ((Injector) context.getApplicationContext())
.getObjectGraph()
.plus(new ContentProviderModule(context))
.inject(this);
return true; return true;
} }

@ -3,17 +3,31 @@ package org.tasks.injection;
import android.app.Activity; import android.app.Activity;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
public class InjectingFragment extends Fragment { import dagger.ObjectGraph;
public class InjectingFragment extends Fragment implements Injector {
private boolean injected; private boolean injected;
private ObjectGraph objectGraph;
@Override @Override
public void onAttach(Activity activity) { public void onAttach(Activity activity) {
super.onAttach(activity); super.onAttach(activity);
if (!injected) { if (!injected) {
((Injector) activity.getApplication()).inject(this, new FragmentModule(activity)); objectGraph = ((Injector) activity).getObjectGraph().plus(new FragmentModule(activity, this));
inject(this);
injected = true; injected = true;
} }
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -3,11 +3,26 @@ package org.tasks.injection;
import android.app.ListActivity; import android.app.ListActivity;
import android.os.Bundle; import android.os.Bundle;
public class InjectingListActivity extends ListActivity { import dagger.ObjectGraph;
public class InjectingListActivity extends ListActivity implements Injector {
private ObjectGraph objectGraph;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Injector) getApplication()).inject(this, new ActivityModule(this)); objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
inject(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -3,17 +3,31 @@ package org.tasks.injection;
import android.app.Activity; import android.app.Activity;
import android.support.v4.app.ListFragment; import android.support.v4.app.ListFragment;
public class InjectingListFragment extends ListFragment { import dagger.ObjectGraph;
public class InjectingListFragment extends ListFragment implements Injector {
private boolean injected; private boolean injected;
private ObjectGraph objectGraph;
@Override @Override
public void onAttach(Activity activity) { public void onAttach(Activity activity) {
super.onAttach(activity); super.onAttach(activity);
if (!injected) { if (!injected) {
((Injector) activity.getApplication()).inject(this, new FragmentModule(activity)); objectGraph = ((Injector) activity).getObjectGraph().plus(new FragmentModule(activity, this));
inject(this);
injected = true; injected = true;
} }
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -10,6 +10,9 @@ public abstract class InjectingRemoteViewsService extends RemoteViewsService {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
((Injector) getApplication()).inject(this, new ServiceModule(this)); ((Injector) getApplication())
.getObjectGraph()
.plus(new ServiceModule(this))
.inject(this);
} }
} }

@ -7,6 +7,9 @@ public abstract class InjectingService extends Service {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
((Injector) getApplication()).inject(this, new ServiceModule(this)); ((Injector) getApplication())
.getObjectGraph()
.plus(new ServiceModule(this))
.inject(this);
} }
} }

@ -4,11 +4,26 @@ import android.os.Bundle;
import com.todoroo.astrid.sync.SyncProviderPreferences; import com.todoroo.astrid.sync.SyncProviderPreferences;
public abstract class InjectingSyncProviderPreferences extends SyncProviderPreferences { import dagger.ObjectGraph;
public abstract class InjectingSyncProviderPreferences extends SyncProviderPreferences implements Injector {
private ObjectGraph objectGraph;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
((Injector) getApplication()).inject(this, new ActivityModule(this)); objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
inject(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -4,11 +4,26 @@ import android.os.Bundle;
import com.todoroo.andlib.utility.TodorooPreferenceActivity; import com.todoroo.andlib.utility.TodorooPreferenceActivity;
public abstract class InjectingTodorooPreferenceActivity extends TodorooPreferenceActivity { import dagger.ObjectGraph;
public abstract class InjectingTodorooPreferenceActivity extends TodorooPreferenceActivity implements Injector {
private ObjectGraph objectGraph;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
((Injector) getApplication()).inject(this, new ActivityModule(this)); objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this, this));
inject(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
} }

@ -1,7 +0,0 @@
package org.tasks.injection;
public interface Injector {
public void inject(Object caller, Object... modules);
}

@ -14,8 +14,6 @@ import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = { @Module(injects = {
GtasksBackgroundService.class, GtasksBackgroundService.class,
ReminderSchedulingService.class, ReminderSchedulingService.class,

@ -1,60 +0,0 @@
package org.tasks.injection;
import android.app.Application;
import android.content.Context;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.timers.TimerFilterExposer;
import com.todoroo.astrid.ui.QuickAddBar;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Module(injects = {
QuickAddBar.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class
}
)
public class TasksModule {
private final Context context;
public static TasksModule newTasksModule(Application application) {
return new TasksModule(application.getApplicationContext());
}
TasksModule(Context context) {
this.context = context;
}
@Singleton
@Provides
@ForApplication
public Context getContext() {
return context;
}
@Qualifier
@Target({FIELD, PARAMETER, METHOD})
@Documented
@Retention(RUNTIME)
public @interface ForApplication {
}
}

@ -8,9 +8,9 @@ import android.preference.PreferenceManager;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.utility.AstridDefaultPreferenceSpec; import com.todoroo.astrid.utility.AstridDefaultPreferenceSpec;
import javax.inject.Inject; import org.tasks.injection.ForApplication;
import static org.tasks.injection.TasksModule.ForApplication; import javax.inject.Inject;
public class Preferences { public class Preferences {

@ -12,13 +12,14 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import org.tasks.injection.ForApplication;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT; import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static com.todoroo.andlib.utility.DateUtilities.ONE_MINUTE; import static com.todoroo.andlib.utility.DateUtilities.ONE_MINUTE;
import static org.tasks.date.DateTimeUtils.currentTimeMillis; import static org.tasks.date.DateTimeUtils.currentTimeMillis;
import static org.tasks.injection.TasksModule.ForApplication;
@Singleton @Singleton
public class RefreshScheduler { public class RefreshScheduler {

Loading…
Cancel
Save