Inject injectors

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

@ -5,11 +5,13 @@
*/
package com.todoroo.astrid.api;
import org.tasks.injection.Injector;
/**
* Common interface for Astrids filter-exposers to provide their FilterListitem instances.
*
* @author Arne Jans
*/
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 {
@Override
protected void setUp() {
@Override
protected void setUp() {
super.setUp();
new TestInjector(getContext()).inject(this, getModules().toArray());
}
new TestInjector(getContext())
.getObjectGraph()
.plus(getModules().toArray())
.inject(this);
}
protected List<Object> getModules() {
return emptyList();

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

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

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

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

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

@ -45,6 +45,7 @@ import com.todoroo.astrid.api.FilterWithUpdate;
import org.tasks.R;
import org.tasks.filters.FilterCounter;
import org.tasks.injection.Injector;
import java.util.List;
import java.util.regex.Matcher;
@ -59,6 +60,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
// --- instance variables
private Injector injector;
private final FilterCounter filterCounter;
/** parent activity */
@ -87,9 +89,10 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
/** whether rows are 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) {
super(activity, 0);
this.injector = injector;
this.filterCounter = filterCounter;
this.activity = activity;
this.listView = listView;
@ -283,7 +286,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
filterExposer = (AstridFilterExposer) Class.forName(className, true, FilterAdapter.class.getClassLoader()).newInstance();
if (filterExposer != null) {
populateFiltersToAdapter(filterExposer.getFilters());
populateFiltersToAdapter(filterExposer.getFilters(injector));
}
}
} 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.SynchronizeMetadataCallback;
import org.tasks.injection.ForApplication;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import javax.inject.Inject;
import javax.inject.Singleton;
import static org.tasks.injection.TasksModule.ForApplication;
/**
* 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() {
@Override
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;
}
});
@ -149,7 +149,7 @@ public class BackupPreferences extends InjectingTodorooPreferenceActivity {
FilePickerBuilder.OnFilePickedListener listener = new FilePickerBuilder.OnFilePickedListener() {
@Override
public void onFilePicked(String filePath) {
xmlImporter.importTasks(filePath, new Runnable() {
xmlImporter.importTasks(BackupPreferences.this, filePath, new Runnable() {
@Override
public void run() {
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$
}
xmlExporter.exportTasks(TasksXmlExporter.ExportType.EXPORT_TYPE_SERVICE,
xmlExporter.exportTasks(context, TasksXmlExporter.ExportType.EXPORT_TYPE_SERVICE,
backupDirectorySetting.getBackupDirectory());
} catch (Exception e) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -38,7 +38,6 @@ 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;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = {
TaskListActivity.class,
@ -65,11 +64,19 @@ import static org.tasks.injection.TasksModule.ForApplication;
public class ActivityModule {
private final Context context;
private Injector injector;
public ActivityModule(Activity activity) {
public ActivityModule(Activity activity, Injector injector) {
this.injector = injector;
context = activity.getApplicationContext();
}
@Singleton
@Provides
public Injector getInjector() {
return injector;
}
@Singleton
@Provides
@ForApplication

@ -5,9 +5,11 @@ import android.content.Context;
import com.todoroo.astrid.alarms.AlarmDetailExposer;
import com.todoroo.astrid.alarms.AlarmTaskRepeatListener;
import com.todoroo.astrid.calls.PhoneStateChangedReceiver;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.gcal.GCalTaskCompleteListener;
import com.todoroo.astrid.gtasks.GtasksCustomFilterCriteriaExposer;
import com.todoroo.astrid.gtasks.GtasksDetailExposer;
import com.todoroo.astrid.gtasks.GtasksFilterExposer;
import com.todoroo.astrid.gtasks.GtasksStartupReceiver;
import com.todoroo.astrid.notes.NotesDetailExposer;
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.tags.TagCustomFilterCriteriaExposer;
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.widget.TasksWidget;
@ -26,8 +30,6 @@ import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = {
RefreshBroadcastReceiver.class,
TasksWidget.class,
@ -45,7 +47,11 @@ import static org.tasks.injection.TasksModule.ForApplication;
AlarmTaskRepeatListener.class,
AlarmDetailExposer.class,
GtasksStartupReceiver.class,
PhoneStateChangedReceiver.class
PhoneStateChangedReceiver.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class
})
public class BroadcastModule {

@ -11,8 +11,6 @@ import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = {
Astrid2TaskProvider.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.TaskEditFragment;
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.reminders.NotificationFragment;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
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;
@ -19,7 +24,6 @@ import dagger.Module;
import dagger.Provides;
import static org.tasks.injection.ActivityModule.ForActivity;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = {
TaskListFragment.class,
@ -30,14 +34,27 @@ import static org.tasks.injection.TasksModule.ForApplication;
TagViewFragment.class,
TaskEditFragment.class,
TagCommentsFragment.class,
FilterListFragment.class
FilterListFragment.class,
QuickAddBar.class,
TimerFilterExposer.class,
CustomFilterExposer.class,
GtasksFilterExposer.class,
TagFilterExposer.class
})
public class FragmentModule {
private final Activity activity;
private Injector injector;
public FragmentModule(Activity activity) {
public FragmentModule(Activity activity, Injector injector) {
this.activity = activity;
this.injector = injector;
}
@Singleton
@Provides
public Injector getInjector() {
return injector;
}
@Singleton

@ -3,11 +3,26 @@ package org.tasks.injection;
import android.os.Bundle;
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
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);
}
@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.os.Bundle;
public class InjectingActivity extends Activity {
import dagger.ObjectGraph;
public class InjectingActivity extends Activity implements Injector {
private ObjectGraph objectGraph;
@Override
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);
}
@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 {
@Override
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);
}

@ -7,6 +7,9 @@ import android.content.Intent;
public class InjectingBroadcastReceiver extends BroadcastReceiver {
@Override
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
public boolean onCreate() {
Context context = getContext();
((Injector) context.getApplicationContext()).inject(this, new ContentProviderModule(context));
((Injector) context.getApplicationContext())
.getObjectGraph()
.plus(new ContentProviderModule(context))
.inject(this);
return true;
}

@ -3,17 +3,31 @@ package org.tasks.injection;
import android.app.Activity;
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 ObjectGraph objectGraph;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!injected) {
((Injector) activity.getApplication()).inject(this, new FragmentModule(activity));
objectGraph = ((Injector) activity).getObjectGraph().plus(new FragmentModule(activity, this));
inject(this);
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.os.Bundle;
public class InjectingListActivity extends ListActivity {
import dagger.ObjectGraph;
public class InjectingListActivity extends ListActivity implements Injector {
private ObjectGraph objectGraph;
@Override
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);
}
@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.support.v4.app.ListFragment;
public class InjectingListFragment extends ListFragment {
import dagger.ObjectGraph;
public class InjectingListFragment extends ListFragment implements Injector {
private boolean injected;
private ObjectGraph objectGraph;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!injected) {
((Injector) activity.getApplication()).inject(this, new FragmentModule(activity));
objectGraph = ((Injector) activity).getObjectGraph().plus(new FragmentModule(activity, this));
inject(this);
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() {
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() {
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;
public abstract class InjectingSyncProviderPreferences extends SyncProviderPreferences {
import dagger.ObjectGraph;
public abstract class InjectingSyncProviderPreferences extends SyncProviderPreferences implements Injector {
private ObjectGraph objectGraph;
@Override
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);
}
@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;
public abstract class InjectingTodorooPreferenceActivity extends TodorooPreferenceActivity {
import dagger.ObjectGraph;
public abstract class InjectingTodorooPreferenceActivity extends TodorooPreferenceActivity implements Injector {
private ObjectGraph objectGraph;
@Override
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);
}
@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.Provides;
import static org.tasks.injection.TasksModule.ForApplication;
@Module(injects = {
GtasksBackgroundService.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.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 {

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

Loading…
Cancel
Save