diff --git a/api/src/main/java/com/todoroo/andlib/service/ContextManager.java b/api/src/main/java/com/todoroo/andlib/service/ContextManager.java
index 202377dc9..02a40ba74 100644
--- a/api/src/main/java/com/todoroo/andlib/service/ContextManager.java
+++ b/api/src/main/java/com/todoroo/andlib/service/ContextManager.java
@@ -7,7 +7,6 @@ package com.todoroo.andlib.service;
import android.app.Activity;
import android.content.Context;
-import android.content.res.Resources;
/**
* Singleton class to manage current application context
@@ -51,14 +50,4 @@ public final class ContextManager {
public static String getString(int resId, Object... formatArgs) {
return context.getString(resId, formatArgs);
}
-
- /**
- * Convenience method to read resources
- *
- * @return resources object
- */
- public static Resources getResources() {
- return context.getResources();
- }
-
}
diff --git a/astrid/src/androidTest/java/com/todoroo/andlib/service/AbstractDependencyInjector.java b/astrid/src/androidTest/java/com/todoroo/andlib/service/AbstractDependencyInjector.java
index 21164eb94..68efd8476 100644
--- a/astrid/src/androidTest/java/com/todoroo/andlib/service/AbstractDependencyInjector.java
+++ b/astrid/src/androidTest/java/com/todoroo/andlib/service/AbstractDependencyInjector.java
@@ -5,6 +5,8 @@
*/
package com.todoroo.andlib.service;
+import android.content.Context;
+
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.HashMap;
@@ -23,7 +25,7 @@ abstract public class AbstractDependencyInjector {
* Initialize list of injection variables. Special care must used when
* instantiating classes that themselves depend on dependency injection
*/
- protected void addInjectables() {
+ protected void addInjectables(Context context) {
// your injectables here
}
@@ -32,8 +34,8 @@ abstract public class AbstractDependencyInjector {
/**
* Constructor
*/
- protected AbstractDependencyInjector() {
- addInjectables();
+ protected AbstractDependencyInjector(Context context) {
+ addInjectables(context);
}
/**
diff --git a/astrid/src/androidTest/java/com/todoroo/andlib/service/DependencyInjectionService.java b/astrid/src/androidTest/java/com/todoroo/andlib/service/DependencyInjectionService.java
index 34d2c1c39..a0cbd064b 100644
--- a/astrid/src/androidTest/java/com/todoroo/andlib/service/DependencyInjectionService.java
+++ b/astrid/src/androidTest/java/com/todoroo/andlib/service/DependencyInjectionService.java
@@ -8,8 +8,6 @@ package com.todoroo.andlib.service;
import java.lang.reflect.Field;
import java.util.LinkedList;
-
-
/**
* Simple Dependency Injection Service for Android.
*
@@ -115,18 +113,11 @@ public class DependencyInjectionService {
injectors));
}
- // --- default dependency injector
-
- private class DefaultDependencyInjector extends AbstractDependencyInjector {
- }
-
// --- static methods
private static DependencyInjectionService instance = null;
DependencyInjectionService() {
- // prevent instantiation
- injectors.add(new DefaultDependencyInjector());
}
/**
diff --git a/astrid/src/androidTest/java/com/todoroo/andlib/service/TestDependencyInjector.java b/astrid/src/androidTest/java/com/todoroo/andlib/service/TestDependencyInjector.java
index 5f2198a15..9011a7a04 100644
--- a/astrid/src/androidTest/java/com/todoroo/andlib/service/TestDependencyInjector.java
+++ b/astrid/src/androidTest/java/com/todoroo/andlib/service/TestDependencyInjector.java
@@ -11,6 +11,7 @@ public class TestDependencyInjector extends AbstractDependencyInjector {
private String name;
public TestDependencyInjector(String name) {
+ super(null);
this.name = name;
}
diff --git a/astrid/src/androidTest/java/com/todoroo/andlib/test/TodorooTestCase.java b/astrid/src/androidTest/java/com/todoroo/andlib/test/TodorooTestCase.java
index a5129a5ad..395bbc10c 100644
--- a/astrid/src/androidTest/java/com/todoroo/andlib/test/TodorooTestCase.java
+++ b/astrid/src/androidTest/java/com/todoroo/andlib/test/TodorooTestCase.java
@@ -23,16 +23,12 @@ import java.util.Locale;
*/
public class TodorooTestCase extends AndroidTestCase {
- static {
- AstridDependencyInjector.initialize();
- }
-
@Override
protected void setUp() throws Exception {
super.setUp();
ContextManager.setContext(this.getContext());
- AstridDependencyInjector.reset();
+ AstridDependencyInjector.reset(getContext());
DependencyInjectionService.getInstance().inject(this);
setLocale(Locale.ENGLISH);
}
diff --git a/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java b/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java
index a876be6a2..060a46912 100644
--- a/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java
+++ b/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java
@@ -5,6 +5,8 @@
*/
package com.todoroo.astrid.service;
+import android.content.Context;
+
import com.todoroo.andlib.service.AbstractDependencyInjector;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.dao.Database;
@@ -27,15 +29,17 @@ import com.todoroo.astrid.tags.TagService;
import org.tasks.Broadcaster;
import org.tasks.filters.FilterCounter;
-import org.tasks.injection.Injector;
-import org.tasks.injection.TasksModule;
+import org.tasks.injection.TestInjector;
import org.tasks.scheduling.RefreshScheduler;
import org.tasks.widget.WidgetHelper;
import javax.inject.Inject;
+import javax.inject.Singleton;
import dagger.Module;
-import dagger.ObjectGraph;
+import dagger.Provides;
+
+import static org.tasks.injection.TasksModule.ForApplication;
/**
* Astrid application dependency injector loads classes in Astrid with the
@@ -54,6 +58,18 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
}
)
public static class TestModule {
+ private Context context;
+
+ public TestModule(Context context) {
+ this.context = context;
+ }
+
+ @Singleton
+ @Provides
+ @ForApplication
+ public Context getContext() {
+ return context;
+ }
}
/**
@@ -61,8 +77,6 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
*/
private static AstridDependencyInjector instance = null;
- private Injector injector;
-
@Inject Database database;
@Inject MetadataDao metadataDao;
@Inject TagDataDao tagDataDao;
@@ -95,18 +109,9 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
* instantiating classes that themselves depend on dependency injection
*/
@Override
- protected void addInjectables() {
- injector = new Injector() {
- ObjectGraph objectGraph = ObjectGraph.create(new TasksModule());
-
- @Override
- public void inject(Object caller, Object... modules) {
- objectGraph
- .plus(modules)
- .inject(caller);
- }
- };
- injector.inject(this, new TestModule());
+ protected void addInjectables(Context context) {
+ new TestInjector(context)
+ .inject(this, new TestModule(context));
// com.todoroo.astrid.dao
injectables.put("database", database);
@@ -148,38 +153,28 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
/**
* Install this service as the default Dependency Injector
*/
- public static void initialize() {
+ private static void initialize(Context context) {
if(instance != null) {
return;
}
synchronized(AstridDependencyInjector.class) {
if(instance == null) {
- instance = new AstridDependencyInjector();
+ instance = new AstridDependencyInjector(context);
}
DependencyInjectionService.getInstance().addInjector(instance);
}
}
- public static void inject(Object caller) {
- initialize();
- DependencyInjectionService.getInstance().inject(caller);
- }
-
- AstridDependencyInjector() {
+ AstridDependencyInjector(Context context) {
// prevent instantiation
- super();
+ super(context);
}
/**
* Flush dependency injection cache. Useful for unit tests.
*/
- public synchronized static void reset() {
+ public synchronized static void reset(Context context) {
instance = null;
- initialize();
- }
-
- public static Injector getInjector() {
- initialize();
- return instance.injector;
+ initialize(context);
}
}
diff --git a/astrid/src/androidTest/java/org/tasks/injection/TestInjector.java b/astrid/src/androidTest/java/org/tasks/injection/TestInjector.java
new file mode 100644
index 000000000..38111ebd4
--- /dev/null
+++ b/astrid/src/androidTest/java/org/tasks/injection/TestInjector.java
@@ -0,0 +1,21 @@
+package org.tasks.injection;
+
+import android.content.Context;
+
+import dagger.ObjectGraph;
+
+public class TestInjector implements Injector {
+
+ ObjectGraph objectGraph;
+
+ public TestInjector(Context context) {
+ objectGraph = ObjectGraph.create(new TasksModule(context));
+ }
+
+ @Override
+ public void inject(Object caller, Object... modules) {
+ objectGraph
+ .plus(modules)
+ .inject(caller);
+ }
+}
diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java
index ebb3be749..2b931fd4d 100644
--- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java
+++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java
@@ -44,7 +44,6 @@ import android.widget.ListView;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join;
@@ -93,6 +92,8 @@ import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;
+import static org.tasks.injection.ActivityModule.ForActivity;
+
/**
* Primary activity for the Bente application. Shows a list of upcoming tasks
* and a user's coaches.
@@ -139,6 +140,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
@Inject UpgradeService upgradeService;
@Inject TaskListMetadataDao taskListMetadataDao;
@Inject SyncV2Service syncService;
+ @Inject @ForActivity Context context;
protected Resources resources;
protected TaskAdapter taskAdapter = null;
@@ -918,7 +920,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
}
}
}
- TimerPlugin.updateTimer(taskService, ContextManager.getContext(), task, false);
+ TimerPlugin.updateTimer(taskService, context, task, false);
}
public void refreshFilterCount() {
@@ -1069,14 +1071,14 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
sortSort = sort;
if (always) {
- SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(ContextManager.getContext());
+ SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(context);
if (publicPrefs != null) {
Editor editor = publicPrefs.edit();
if (editor != null) {
editor.putInt(SortHelper.PREF_SORT_FLAGS, flags);
editor.putInt(SortHelper.PREF_SORT_SORT, sort);
editor.commit();
- TasksWidget.updateWidgets(ContextManager.getContext());
+ TasksWidget.updateWidgets(context);
}
}
}
@@ -1088,6 +1090,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
setUpTaskList();
}
} catch (IllegalStateException e) {
+ log.error(e.getMessage(), e);
// TODO: Fragment got detached somehow (rare)
}
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/alarms/AlarmService.java b/astrid/src/main/java/com/todoroo/astrid/alarms/AlarmService.java
index 1e85545ea..e06820c3d 100644
--- a/astrid/src/main/java/com/todoroo/astrid/alarms/AlarmService.java
+++ b/astrid/src/main/java/com/todoroo/astrid/alarms/AlarmService.java
@@ -12,7 +12,6 @@ import android.content.Intent;
import android.util.Log;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order;
@@ -33,6 +32,8 @@ 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
*
@@ -45,11 +46,14 @@ public class AlarmService {
// --- data retrieval
public static final String IDENTIFIER = "alarms"; //$NON-NLS-1$
- private MetadataService metadataService;
+
+ private final MetadataService metadataService;
+ private final Context context;
@Inject
- public AlarmService(MetadataService metadataService) {
+ public AlarmService(MetadataService metadataService, @ForApplication Context context) {
this.metadataService = metadataService;
+ this.context = context;
}
/**
@@ -75,7 +79,6 @@ public class AlarmService {
metadata.add(item);
}
- final Context context = ContextManager.getContext();
final AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
boolean changed = metadataService.synchronizeMetadata(taskId, metadata, Metadata.KEY.eq(AlarmFields.METADATA_KEY), new SynchronizeMetadataCallback() {
@@ -155,7 +158,6 @@ public class AlarmService {
}
private PendingIntent pendingIntentForAlarm(Metadata alarm, long taskId) {
- Context context = ContextManager.getContext();
Intent intent = new Intent(context, Notifications.class);
intent.setAction("ALARM" + alarm.getId()); //$NON-NLS-1$
intent.putExtra(Notifications.ID_KEY, taskId);
@@ -175,7 +177,6 @@ public class AlarmService {
long taskId = alarm.getTask();
- Context context = ContextManager.getContext();
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = pendingIntentForAlarm(alarm, taskId);
diff --git a/astrid/src/main/java/com/todoroo/astrid/backup/TasksXmlImporter.java b/astrid/src/main/java/com/todoroo/astrid/backup/TasksXmlImporter.java
index 6a68b0175..a49d85d4a 100644
--- a/astrid/src/main/java/com/todoroo/astrid/backup/TasksXmlImporter.java
+++ b/astrid/src/main/java/com/todoroo/astrid/backup/TasksXmlImporter.java
@@ -22,7 +22,6 @@ import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.PropertyVisitor;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
@@ -166,7 +165,7 @@ public class TasksXmlImporter {
}
} finally {
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH);
- ContextManager.getContext().sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
+ context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
handler.post(new Runnable() {
@Override
public void run() {
diff --git a/astrid/src/main/java/com/todoroo/astrid/dao/Database.java b/astrid/src/main/java/com/todoroo/astrid/dao/Database.java
index 86a682608..d53f9f1dc 100644
--- a/astrid/src/main/java/com/todoroo/astrid/dao/Database.java
+++ b/astrid/src/main/java/com/todoroo/astrid/dao/Database.java
@@ -21,8 +21,6 @@ import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.UserActivity;
-import com.todoroo.astrid.provider.Astrid2TaskProvider;
-import com.todoroo.astrid.provider.Astrid3ContentProvider;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -68,14 +66,6 @@ public class Database extends AbstractDatabase {
@Inject
public Database() {
- super();
- addListener(new DatabaseUpdateListener() {
- @Override
- public void onDatabaseUpdated() {
- Astrid2TaskProvider.notifyDatabaseModification();
- Astrid3ContentProvider.notifyDatabaseModification();
- }
- });
}
// --- implementation
diff --git a/astrid/src/main/java/com/todoroo/astrid/dao/MetadataDao.java b/astrid/src/main/java/com/todoroo/astrid/dao/MetadataDao.java
index 2ce30293d..fe813e247 100644
--- a/astrid/src/main/java/com/todoroo/astrid/dao/MetadataDao.java
+++ b/astrid/src/main/java/com/todoroo/astrid/dao/MetadataDao.java
@@ -18,7 +18,6 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
-import com.todoroo.astrid.provider.Astrid2TaskProvider;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.AstridPreferences;
@@ -133,7 +132,6 @@ public class MetadataDao extends DatabaseDao {
Preferences.setBoolean(AstridPreferences.P_FIRST_LIST, false);
}
}
- Astrid2TaskProvider.notifyDatabaseModification();
return state;
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java b/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java
index 544b40703..dcdba3a66 100644
--- a/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java
+++ b/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksFilterExposer.java
@@ -60,7 +60,7 @@ public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilt
values.put(GtasksMetadata.LIST_ID.name, list.getValue(GtasksList.REMOTE_ID));
values.put(GtasksMetadata.ORDER.name, PermaSql.VALUE_NOW);
FilterWithCustomIntent filter = new FilterWithCustomIntent(listName,
- ContextManager.getString(R.string.gtasks_FEx_title, listName), new QueryTemplate().join(
+ context.getString(R.string.gtasks_FEx_title, listName), new QueryTemplate().join(
Join.left(Metadata.TABLE, Task.ID.eq(Metadata.TASK))).where(Criterion.and(
MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY),
TaskCriteria.notDeleted(),
diff --git a/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksListFragment.java b/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksListFragment.java
index 6a9ec34d0..ef098410e 100644
--- a/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksListFragment.java
+++ b/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksListFragment.java
@@ -7,6 +7,7 @@ package com.todoroo.astrid.gtasks;
import android.app.Activity;
import android.app.ProgressDialog;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
@@ -14,7 +15,6 @@ import android.widget.TextView;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
@@ -33,6 +33,8 @@ import org.tasks.R;
import javax.inject.Inject;
+import static org.tasks.injection.ActivityModule.ForActivity;
+
public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId"; //$NON-NLS-1$
@@ -43,6 +45,7 @@ public class GtasksListFragment extends SubtasksListFragment {
@Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject GtasksMetadataService gtasksMetadataService;
@Inject SyncV2Service syncService;
+ @Inject @ForActivity Context context;
private StoreObject list;
@@ -87,7 +90,7 @@ public class GtasksListFragment extends SubtasksListFragment {
@Override
public void run() {
if (manual) {
- ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
+ context.sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
} else {
refresh();
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksScheduler.java b/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksScheduler.java
index f648f7f9b..637e42c1a 100644
--- a/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksScheduler.java
+++ b/astrid/src/main/java/com/todoroo/astrid/gtasks/GtasksScheduler.java
@@ -6,13 +6,14 @@ import android.content.Context;
import android.content.Intent;
import android.util.Log;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import javax.inject.Inject;
import javax.inject.Singleton;
+import static org.tasks.injection.TasksModule.ForApplication;
+
@Singleton
public class GtasksScheduler {
@@ -20,10 +21,12 @@ public class GtasksScheduler {
private static final long AUTO_SYNC_MIN_OFFSET = 5*60*1000L;
private final GtasksPreferenceService gtasksPreferenceService;
+ private Context context;
@Inject
- public GtasksScheduler(GtasksPreferenceService gtasksPreferenceService) {
+ public GtasksScheduler(GtasksPreferenceService gtasksPreferenceService, @ForApplication Context context) {
this.gtasksPreferenceService = gtasksPreferenceService;
+ this.context = context;
}
/**
@@ -37,7 +40,6 @@ public class GtasksScheduler {
} catch(ClassCastException e) {
Preferences.setStringFromInteger(gtasksPreferenceService.getSyncIntervalKey(), 0);
}
- Context context = ContextManager.getContext();
if(syncFrequencySeconds <= 0) {
unscheduleService(context);
return;
diff --git a/astrid/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java b/astrid/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java
index 600998b82..d3fafe19c 100644
--- a/astrid/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java
+++ b/astrid/src/main/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java
@@ -5,12 +5,12 @@
*/
package com.todoroo.astrid.gtasks.sync;
+import android.content.Context;
import android.text.TextUtils;
import com.google.api.services.tasks.model.Tasks;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
@@ -52,6 +52,7 @@ 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 {
@@ -64,10 +65,12 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
private final GtasksListService gtasksListService;
private final GtasksMetadataService gtasksMetadataService;
private final GtasksTaskListUpdater gtasksTaskListUpdater;
+ private Context context;
@Inject
public GtasksSyncV2Provider(TaskService taskService, MetadataService metadataService, StoreObjectDao storeObjectDao, GtasksPreferenceService gtasksPreferenceService,
- GtasksSyncService gtasksSyncService, GtasksListService gtasksListService, GtasksMetadataService gtasksMetadataService, GtasksTaskListUpdater gtasksTaskListUpdater) {
+ GtasksSyncService gtasksSyncService, GtasksListService gtasksListService, GtasksMetadataService gtasksMetadataService,
+ GtasksTaskListUpdater gtasksTaskListUpdater, @ForApplication Context context) {
this.taskService = taskService;
this.metadataService = metadataService;
this.storeObjectDao = storeObjectDao;
@@ -76,11 +79,12 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
this.gtasksListService = gtasksListService;
this.gtasksMetadataService = gtasksMetadataService;
this.gtasksTaskListUpdater = gtasksTaskListUpdater;
+ this.context = context;
}
@Override
public String getName() {
- return ContextManager.getString(R.string.gtasks_GPr_header);
+ return context.getString(R.string.gtasks_GPr_header);
}
@Override
@@ -231,7 +235,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
private String getValidatedAuthToken() {
String authToken = gtasksPreferenceService.getToken();
try {
- authToken = GtasksTokenValidator.validateAuthToken(ContextManager.getContext(), authToken);
+ authToken = GtasksTokenValidator.validateAuthToken(context, authToken);
if (authToken != null) {
gtasksPreferenceService.setToken(authToken);
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/helper/SyncActionHelper.java b/astrid/src/main/java/com/todoroo/astrid/helper/SyncActionHelper.java
index 444faab9b..6598cf95a 100644
--- a/astrid/src/main/java/com/todoroo/astrid/helper/SyncActionHelper.java
+++ b/astrid/src/main/java/com/todoroo/astrid/helper/SyncActionHelper.java
@@ -18,7 +18,6 @@ import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.widget.ArrayAdapter;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
@@ -69,7 +68,7 @@ public class SyncActionHelper {
// --- boilerplate
- public SyncActionHelper(SyncV2Service syncService, Activity activity, Fragment fragment) {
+ public SyncActionHelper(SyncV2Service syncService, final Activity activity, Fragment fragment) {
this.syncService = syncService;
this.activity = activity;
this.fragment = fragment;
@@ -77,7 +76,7 @@ public class SyncActionHelper {
R.id.progressBar, new Runnable() {
@Override
public void run() {
- ContextManager.getContext().sendBroadcast(
+ activity.sendBroadcast(
new Intent(
AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java b/astrid/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java
index b682a0f9d..0a58c96f1 100644
--- a/astrid/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java
+++ b/astrid/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java
@@ -11,10 +11,8 @@ import android.content.UriMatcher;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
-import android.util.Log;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
@@ -25,6 +23,8 @@ import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagService.Tag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.tasks.injection.InjectingContentProvider;
import java.math.BigInteger;
@@ -47,9 +47,7 @@ import dagger.Lazy;
*/
public class Astrid2TaskProvider extends InjectingContentProvider {
- private static final String TAG = "MessageProvider";
-
- private static final boolean LOGD = false;
+ private static final Logger log = LoggerFactory.getLogger(Astrid2TaskProvider.class);
public static final String AUTHORITY = "org.tasks.tasksprovider";
@@ -85,8 +83,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
@Inject Lazy taskService;
@Inject Lazy tagService;
- private static Context ctx = null;
-
static {
URI_MATCHER.addURI(AUTHORITY, "tasks", URI_TASKS);
URI_MATCHER.addURI(AUTHORITY, "tags", URI_TAGS);
@@ -94,10 +90,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
- if (LOGD) {
- Log.d(TAG, "delete");
- }
-
return 0;
}
@@ -114,8 +106,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
@Override
public boolean onCreate() {
super.onCreate();
- ctx = getContext();
- ContextManager.setContext(ctx);
return false;
}
@@ -178,7 +168,7 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
TaskCriteria.isVisible())).
orderBy(SortHelper.defaultTaskOrder()).limit(MAX_NUMBER_OF_TASKS));
try {
- int[] importanceColors = Task.getImportanceColors(ctx.getResources());
+ int[] importanceColors = Task.getImportanceColors(getContext().getResources());
Task task = new Task();
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToNext();
@@ -206,11 +196,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
-
- if (LOGD) {
- Log.d(TAG, "query");
- }
-
Cursor cursor;
switch (URI_MATCHER.match(uri)) {
@@ -231,11 +216,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
-
- if (LOGD) {
- Log.d(TAG, "update");
- }
-
switch (URI_MATCHER.match(uri)) {
case URI_TASKS:
@@ -276,19 +256,11 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
}
}
- public static void notifyDatabaseModification() {
-
- if (LOGD) {
- Log.d(TAG, "notifyDatabaseModification");
- }
-
- if(ctx == null) {
- ctx = ContextManager.getContext();
- }
+ public static void notifyDatabaseModification(Context context) {
try {
- ctx.getContentResolver().notifyChange(CONTENT_URI, null);
+ context.getContentResolver().notifyChange(CONTENT_URI, null);
} catch (Exception e) {
- // no context was available
+ log.error(e.getMessage(), e);
}
}
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/provider/Astrid3ContentProvider.java b/astrid/src/main/java/com/todoroo/astrid/provider/Astrid3ContentProvider.java
index 8669698dc..745a5da31 100644
--- a/astrid/src/main/java/com/todoroo/astrid/provider/Astrid3ContentProvider.java
+++ b/astrid/src/main/java/com/todoroo/astrid/provider/Astrid3ContentProvider.java
@@ -8,6 +8,7 @@ package com.todoroo.astrid.provider;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
+import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
@@ -18,7 +19,6 @@ import android.text.TextUtils;
import com.todoroo.andlib.data.AbstractDatabase;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.DatabaseDao;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao;
@@ -394,8 +394,8 @@ public class Astrid3ContentProvider extends InjectingContentProvider {
// --- change listeners
- public static void notifyDatabaseModification() {
- ContentResolver cr = ContextManager.getContext().getContentResolver();
+ public static void notifyDatabaseModification(Context context) {
+ ContentResolver cr = context.getContentResolver();
cr.notifyChange(Task.CONTENT_URI, null);
}
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/reminders/Notifications.java b/astrid/src/main/java/com/todoroo/astrid/reminders/Notifications.java
index b66fb4286..d605446a1 100644
--- a/astrid/src/main/java/com/todoroo/astrid/reminders/Notifications.java
+++ b/astrid/src/main/java/com/todoroo/astrid/reminders/Notifications.java
@@ -50,6 +50,7 @@ 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 {
@@ -82,6 +83,7 @@ public class Notifications extends InjectingBroadcastReceiver {
// --- instance variables
@Inject TaskDao taskDao;
+ @Inject @ForApplication Context context;
public static NotificationManager notificationManager = null;
private static boolean forceNotificationManager = false;
@@ -187,7 +189,6 @@ public class Notifications extends InjectingBroadcastReceiver {
task.setSocialReminder(Task.REMINDER_SOCIAL_UNSEEN);
taskDao.saveExisting(task);
- Context context = ContextManager.getContext();
String title = context.getString(R.string.app_name);
String text = reminder + " " + taskTitle; //$NON-NLS-1$
@@ -209,12 +210,11 @@ public class Notifications extends InjectingBroadcastReceiver {
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
notifyIntent.putExtra(TaskListActivity.TOKEN_SOURCE, Constants.SOURCE_NOTIFICATION);
- requestNotification((int)id, notifyIntent, type, title, text, ringTimes);
+ requestNotification(context, (int)id, notifyIntent, type, title, text, ringTimes);
return true;
}
- private static void requestNotification(long taskId, Intent intent, int type, String title, String text, int ringTimes) {
- Context context = ContextManager.getContext();
+ private static void requestNotification(Context context, long taskId, Intent intent, int type, String title, String text, int ringTimes) {
Intent inAppNotify = new Intent(BROADCAST_IN_APP_NOTIFY);
inAppNotify.putExtra(EXTRAS_NOTIF_ID, (int)taskId);
inAppNotify.putExtra(NotificationFragment.TOKEN_ID, taskId);
@@ -225,7 +225,7 @@ public class Notifications extends InjectingBroadcastReceiver {
inAppNotify.putExtra(EXTRAS_RING_TIMES, ringTimes);
if(forceNotificationManager) {
- new ShowNotificationReceiver().onReceive(ContextManager.getContext(), inAppNotify);
+ new ShowNotificationReceiver().onReceive(context, inAppNotify);
} else {
context.sendOrderedBroadcast(inAppNotify, AstridApiConstants.PERMISSION_READ);
}
@@ -246,7 +246,7 @@ public class Notifications extends InjectingBroadcastReceiver {
String title = intent.getStringExtra(EXTRAS_TITLE);
String text = intent.getStringExtra(EXTRAS_TEXT);
int ringTimes = intent.getIntExtra(EXTRAS_RING_TIMES, 1);
- showNotification(notificationId, customIntent, type, title, text, ringTimes);
+ showNotification(context, notificationId, customIntent, type, title, text, ringTimes);
}
}
@@ -269,10 +269,8 @@ public class Notifications extends InjectingBroadcastReceiver {
* from preferences. You can make it say anything you like.
* @param ringTimes number of times to ring (-1 = nonstop)
*/
- public static void showNotification(int notificationId, Intent intent, int type, String title,
+ public static void showNotification(Context context, int notificationId, Intent intent, int type, String title,
String text, int ringTimes) {
- Context context = ContextManager.getContext();
-
if(notificationManager == null) {
notificationManager = new AndroidNotificationManager(context);
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/reminders/ReminderService.java b/astrid/src/main/java/com/todoroo/astrid/reminders/ReminderService.java
index a61fc94a9..9fb3b25b8 100644
--- a/astrid/src/main/java/com/todoroo/astrid/reminders/ReminderService.java
+++ b/astrid/src/main/java/com/todoroo/astrid/reminders/ReminderService.java
@@ -15,7 +15,6 @@ import android.content.res.Resources;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
@@ -35,6 +34,7 @@ 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;
/**
@@ -79,9 +79,11 @@ public final class ReminderService {
private AlarmScheduler scheduler = new ReminderAlarmScheduler();
private long now = -1; // For tracking when reminders might be scheduled all at once
+ private Context context;
@Inject
- ReminderService() {
+ ReminderService(@ForApplication Context context) {
+ this.context = context;
setPreferenceDefaults();
}
@@ -97,7 +99,6 @@ public final class ReminderService {
return;
}
- Context context = ContextManager.getContext();
SharedPreferences prefs = Preferences.getPrefs(context);
Editor editor = prefs.edit();
Resources r = context.getResources();
@@ -146,10 +147,10 @@ public final class ReminderService {
}
public void clearAllAlarms(Task task) {
- scheduler.createAlarm(task, NO_ALARM, TYPE_SNOOZE);
- scheduler.createAlarm(task, NO_ALARM, TYPE_RANDOM);
- scheduler.createAlarm(task, NO_ALARM, TYPE_DUE);
- scheduler.createAlarm(task, NO_ALARM, TYPE_OVERDUE);
+ scheduler.createAlarm(context, task, NO_ALARM, TYPE_SNOOZE);
+ scheduler.createAlarm(context, task, NO_ALARM, TYPE_RANDOM);
+ scheduler.createAlarm(context, task, NO_ALARM, TYPE_DUE);
+ scheduler.createAlarm(context, task, NO_ALARM, TYPE_OVERDUE);
}
private void scheduleAlarm(Task task, TaskDao taskDao) {
@@ -204,19 +205,19 @@ public final class ReminderService {
// snooze trumps all
if(whenSnooze != NO_ALARM) {
- scheduler.createAlarm(task, whenSnooze, TYPE_SNOOZE);
+ scheduler.createAlarm(context, task, whenSnooze, TYPE_SNOOZE);
}
else if(whenRandom < whenDueDate && whenRandom < whenOverdue) {
- scheduler.createAlarm(task, whenRandom, TYPE_RANDOM);
+ scheduler.createAlarm(context, task, whenRandom, TYPE_RANDOM);
}
else if(whenDueDate < whenOverdue) {
- scheduler.createAlarm(task, whenDueDate, TYPE_DUE);
+ scheduler.createAlarm(context, task, whenDueDate, TYPE_DUE);
}
else if(whenOverdue != NO_ALARM) {
- scheduler.createAlarm(task, whenOverdue, TYPE_OVERDUE);
+ scheduler.createAlarm(context, task, whenOverdue, TYPE_OVERDUE);
}
else {
- scheduler.createAlarm(task, 0, 0);
+ scheduler.createAlarm(context, task, 0, 0);
}
}
@@ -403,7 +404,7 @@ public final class ReminderService {
* Interface for testing
*/
public interface AlarmScheduler {
- public void createAlarm(Task task, long time, int type);
+ public void createAlarm(Context context, Task task, long time, int type);
}
public void setScheduler(AlarmScheduler scheduler) {
@@ -419,11 +420,10 @@ public final class ReminderService {
* Create an alarm for the given task at the given type
*/
@Override
- public void createAlarm(Task task, long time, int type) {
+ public void createAlarm(Context context, Task task, long time, int type) {
if(task.getId() == Task.NO_ID) {
return;
}
- Context context = ContextManager.getContext();
Intent intent = new Intent(context, Notifications.class);
intent.setType(Long.toString(task.getId()));
intent.setAction(Integer.toString(type));
diff --git a/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java b/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java
index d82a8f689..7f7c9ac8a 100644
--- a/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java
+++ b/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java
@@ -19,6 +19,7 @@ import android.media.AudioManager;
import android.util.Log;
import android.widget.Toast;
+import com.todoroo.andlib.data.AbstractDatabase;
import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.ContextManager;
@@ -41,6 +42,8 @@ import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.CalendarStartupReceiver;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
+import com.todoroo.astrid.provider.Astrid2TaskProvider;
+import com.todoroo.astrid.provider.Astrid3ContentProvider;
import com.todoroo.astrid.reminders.ReminderStartupReceiver;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.AstridPreferences;
@@ -105,6 +108,14 @@ public class StartupService {
// sets up context manager
ContextManager.setContext(context);
+ database.addListener(new AbstractDatabase.DatabaseUpdateListener() {
+ @Override
+ public void onDatabaseUpdated() {
+ Astrid2TaskProvider.notifyDatabaseModification(context);
+ Astrid3ContentProvider.notifyDatabaseModification(context);
+ }
+ });
+
try {
database.openForWriting();
checkForMissingColumns();
diff --git a/astrid/src/main/java/com/todoroo/astrid/service/ThemeService.java b/astrid/src/main/java/com/todoroo/astrid/service/ThemeService.java
index 9683fb897..fc05b7f04 100644
--- a/astrid/src/main/java/com/todoroo/astrid/service/ThemeService.java
+++ b/astrid/src/main/java/com/todoroo/astrid/service/ThemeService.java
@@ -187,7 +187,7 @@ public class ThemeService {
return R.drawable.gl_lists_dark;
}
- Log.w("ThemeService", "No theme drawable found for " + ContextManager.getResources().getResourceName(lightDrawable));
+ Log.w("ThemeService", "No theme drawable found for " + lightDrawable);
return lightDrawable;
}
diff --git a/astrid/src/main/java/com/todoroo/astrid/widget/TasksWidget.java b/astrid/src/main/java/com/todoroo/astrid/widget/TasksWidget.java
index 1eeb1f41b..7071e9cf1 100644
--- a/astrid/src/main/java/com/todoroo/astrid/widget/TasksWidget.java
+++ b/astrid/src/main/java/com/todoroo/astrid/widget/TasksWidget.java
@@ -101,20 +101,8 @@ public class TasksWidget extends InjectingAppWidgetProvider {
}
}
- public static void applyConfigSelection(WidgetHelper widgetHelper, Context context, int id) {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- Intent intent = new Intent(ContextManager.getContext(), WidgetUpdateService.class);
- intent.putExtra(WidgetUpdateService.EXTRA_WIDGET_ID, id);
- context.startService(intent);
- } else {
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- appWidgetManager.updateAppWidget(id, widgetHelper.createScrollableWidget(context, id));
- updateScrollableWidgets(context, new int[]{id});
- }
- }
-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
- private static void updateScrollableWidgets(Context context, int[] widgetIds) {
+ public static void updateScrollableWidgets(Context context, int[] widgetIds) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
if (widgetIds == null) {
widgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, TasksWidget.class));
diff --git a/astrid/src/main/java/com/todoroo/astrid/widget/WidgetConfigActivity.java b/astrid/src/main/java/com/todoroo/astrid/widget/WidgetConfigActivity.java
index 9d4919f1f..e0e16676a 100644
--- a/astrid/src/main/java/com/todoroo/astrid/widget/WidgetConfigActivity.java
+++ b/astrid/src/main/java/com/todoroo/astrid/widget/WidgetConfigActivity.java
@@ -8,6 +8,7 @@ package com.todoroo.astrid.widget;
import android.appwidget.AppWidgetManager;
import android.content.ContentValues;
import android.content.Intent;
+import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
@@ -43,8 +44,16 @@ public class WidgetConfigActivity extends InjectingListActivity {
@Inject WidgetHelper widgetHelper;
- public void updateWidget() {
- TasksWidget.applyConfigSelection(widgetHelper, this, mAppWidgetId);
+ private void updateWidget() {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+ Intent intent = new Intent(this, WidgetUpdateService.class);
+ intent.putExtra(WidgetUpdateService.EXTRA_WIDGET_ID, mAppWidgetId);
+ startService(intent);
+ } else {
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
+ appWidgetManager.updateAppWidget(mAppWidgetId, widgetHelper.createScrollableWidget(this, mAppWidgetId));
+ TasksWidget.updateScrollableWidgets(this, new int[]{mAppWidgetId});
+ }
}
@Override
diff --git a/astrid/src/main/java/org/tasks/Broadcaster.java b/astrid/src/main/java/org/tasks/Broadcaster.java
index 68975ff6e..b4f55205a 100644
--- a/astrid/src/main/java/org/tasks/Broadcaster.java
+++ b/astrid/src/main/java/org/tasks/Broadcaster.java
@@ -3,23 +3,23 @@ package org.tasks;
import android.content.Context;
import android.content.Intent;
-import com.todoroo.andlib.service.ContextManager;
-
import javax.inject.Inject;
import javax.inject.Singleton;
+import static org.tasks.injection.TasksModule.ForApplication;
+
@Singleton
public class Broadcaster {
+ private final Context context;
+
@Inject
- public Broadcaster() {
+ public Broadcaster(@ForApplication Context context) {
+ this.context = context;
}
public void sendOrderedBroadcast(Intent intent) {
- Context context = ContextManager.getContext();
- if (context != null) {
- sendOrderedBroadcast(context, intent);
- }
+ sendOrderedBroadcast(context, intent);
}
public void sendOrderedBroadcast(Context context, Intent intent) {
diff --git a/astrid/src/main/java/org/tasks/Tasks.java b/astrid/src/main/java/org/tasks/Tasks.java
index efa235df6..ba1261509 100644
--- a/astrid/src/main/java/org/tasks/Tasks.java
+++ b/astrid/src/main/java/org/tasks/Tasks.java
@@ -2,11 +2,14 @@ package org.tasks;
import android.app.Application;
+import com.todoroo.andlib.service.ContextManager;
+
import org.tasks.injection.Injector;
-import org.tasks.injection.TasksModule;
import dagger.ObjectGraph;
+import static org.tasks.injection.TasksModule.newTasksModule;
+
public class Tasks extends Application implements Injector {
Injector injector;
@@ -15,6 +18,8 @@ public class Tasks extends Application implements Injector {
public void onCreate() {
super.onCreate();
+ ContextManager.setContext(this);
+
getInjector();
}
@@ -26,7 +31,7 @@ public class Tasks extends Application implements Injector {
private Injector getInjector() {
if (injector == null) {
injector = new Injector() {
- ObjectGraph objectGraph = ObjectGraph.create(new TasksModule());
+ ObjectGraph objectGraph = ObjectGraph.create(newTasksModule(Tasks.this));
@Override
public void inject(Object caller, Object... modules) {
diff --git a/astrid/src/main/java/org/tasks/injection/ActivityModule.java b/astrid/src/main/java/org/tasks/injection/ActivityModule.java
index 6926747ba..83e37d18d 100644
--- a/astrid/src/main/java/org/tasks/injection/ActivityModule.java
+++ b/astrid/src/main/java/org/tasks/injection/ActivityModule.java
@@ -1,5 +1,8 @@
package org.tasks.injection;
+import android.app.Activity;
+import android.content.Context;
+
import com.todoroo.astrid.actfm.TagSettingsActivity;
import com.todoroo.astrid.activity.EditPreferences;
import com.todoroo.astrid.activity.ShareLinkActivity;
@@ -19,7 +22,21 @@ import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.voice.VoiceCommandActivity;
+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;
+import static org.tasks.injection.TasksModule.ForApplication;
@Module(library = true,
injects = {
@@ -43,4 +60,24 @@ import dagger.Module;
OldTaskPreferences.class
})
public class ActivityModule {
+
+ private final Context context;
+
+ public ActivityModule(Activity activity) {
+ context = activity.getApplicationContext();
+ }
+
+ @Singleton
+ @Provides
+ @ForApplication
+ public Context getApplicationContext() {
+ return context;
+ }
+
+ @Qualifier
+ @Target({FIELD, PARAMETER, METHOD})
+ @Documented
+ @Retention(RUNTIME)
+ public @interface ForActivity {
+ }
}
diff --git a/astrid/src/main/java/org/tasks/injection/BroadcastModule.java b/astrid/src/main/java/org/tasks/injection/BroadcastModule.java
index 33e3c54eb..b2a80a2c1 100644
--- a/astrid/src/main/java/org/tasks/injection/BroadcastModule.java
+++ b/astrid/src/main/java/org/tasks/injection/BroadcastModule.java
@@ -1,5 +1,7 @@
package org.tasks.injection;
+import android.content.Context;
+
import com.todoroo.astrid.alarms.AlarmDetailExposer;
import com.todoroo.astrid.alarms.AlarmTaskRepeatListener;
import com.todoroo.astrid.gcal.GCalTaskCompleteListener;
@@ -18,7 +20,12 @@ import com.todoroo.astrid.widget.TasksWidget;
import org.tasks.scheduling.RefreshBroadcastReceiver;
+import javax.inject.Singleton;
+
import dagger.Module;
+import dagger.Provides;
+
+import static org.tasks.injection.TasksModule.ForApplication;
@Module(library = true,
injects = {
@@ -40,4 +47,17 @@ import dagger.Module;
GtasksStartupReceiver.class
})
public class BroadcastModule {
+
+ private final Context context;
+
+ public BroadcastModule(Context context) {
+ this.context = context;
+ }
+
+ @Singleton
+ @Provides
+ @ForApplication
+ public Context getContext() {
+ return context.getApplicationContext();
+ }
}
diff --git a/astrid/src/main/java/org/tasks/injection/ContentProviderModule.java b/astrid/src/main/java/org/tasks/injection/ContentProviderModule.java
index 2d1bbd1a3..9279eaf02 100644
--- a/astrid/src/main/java/org/tasks/injection/ContentProviderModule.java
+++ b/astrid/src/main/java/org/tasks/injection/ContentProviderModule.java
@@ -1,10 +1,17 @@
package org.tasks.injection;
+import android.content.Context;
+
import com.todoroo.astrid.provider.Astrid2TaskProvider;
import com.todoroo.astrid.provider.Astrid3ContentProvider;
import com.todoroo.astrid.provider.SqlContentProvider;
+import javax.inject.Singleton;
+
import dagger.Module;
+import dagger.Provides;
+
+import static org.tasks.injection.TasksModule.ForApplication;
@Module(library = true,
injects = {
@@ -13,4 +20,16 @@ import dagger.Module;
SqlContentProvider.class
})
public class ContentProviderModule {
+ private final Context context;
+
+ public ContentProviderModule(Context context) {
+ this.context = context;
+ }
+
+ @Singleton
+ @Provides
+ @ForApplication
+ public Context getContext() {
+ return context;
+ }
}
diff --git a/astrid/src/main/java/org/tasks/injection/FragmentModule.java b/astrid/src/main/java/org/tasks/injection/FragmentModule.java
index d3d1cf905..a31106406 100644
--- a/astrid/src/main/java/org/tasks/injection/FragmentModule.java
+++ b/astrid/src/main/java/org/tasks/injection/FragmentModule.java
@@ -1,5 +1,8 @@
package org.tasks.injection;
+import android.app.Activity;
+import android.content.Context;
+
import com.todoroo.astrid.actfm.TagCommentsFragment;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.TaskEditFragment;
@@ -9,7 +12,13 @@ import com.todoroo.astrid.reminders.NotificationFragment;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
+import javax.inject.Singleton;
+
import dagger.Module;
+import dagger.Provides;
+
+import static org.tasks.injection.ActivityModule.ForActivity;
+import static org.tasks.injection.TasksModule.ForApplication;
@Module(library = true,
injects = {
@@ -23,4 +32,24 @@ import dagger.Module;
TagCommentsFragment.class
})
public class FragmentModule {
+
+ private final Activity activity;
+
+ public FragmentModule(Activity activity) {
+ this.activity = activity;
+ }
+
+ @Singleton
+ @Provides
+ @ForApplication
+ public Context getApplicationContext() {
+ return activity.getApplicationContext();
+ }
+
+ @Singleton
+ @Provides
+ @ForActivity
+ public Context getContext() {
+ return activity;
+ }
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingActionBarActivity.java b/astrid/src/main/java/org/tasks/injection/InjectingActionBarActivity.java
index 51eb88c0d..b272204b2 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingActionBarActivity.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingActionBarActivity.java
@@ -6,7 +6,7 @@ import android.support.v7.app.ActionBarActivity;
public class InjectingActionBarActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- ((Injector) getApplication()).inject(this, new ActivityModule());
+ ((Injector) getApplication()).inject(this, new ActivityModule(this));
super.onCreate(savedInstanceState);
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingActivity.java b/astrid/src/main/java/org/tasks/injection/InjectingActivity.java
index 7ea16fbb1..66f5be34c 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingActivity.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingActivity.java
@@ -6,7 +6,7 @@ import android.os.Bundle;
public class InjectingActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- ((Injector) getApplication()).inject(this, new ActivityModule());
+ ((Injector) getApplication()).inject(this, new ActivityModule(this));
super.onCreate(savedInstanceState);
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.java b/astrid/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.java
index 10d04325e..34e0ca733 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.java
@@ -7,7 +7,7 @@ import android.content.Intent;
public class InjectingAppWidgetProvider extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
- ((Injector) context.getApplicationContext()).inject(this, new BroadcastModule());
+ ((Injector) context.getApplicationContext()).inject(this, new BroadcastModule(context));
super.onReceive(context, intent);
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.java b/astrid/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.java
index 809ffb847..3506f9db1 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.java
@@ -7,6 +7,6 @@ import android.content.Intent;
public class InjectingBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- ((Injector) context.getApplicationContext()).inject(this, new BroadcastModule());
+ ((Injector) context.getApplicationContext()).inject(this, new BroadcastModule(context));
}
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingContentProvider.java b/astrid/src/main/java/org/tasks/injection/InjectingContentProvider.java
index 122370701..c5ccc5178 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingContentProvider.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingContentProvider.java
@@ -1,11 +1,13 @@
package org.tasks.injection;
import android.content.ContentProvider;
+import android.content.Context;
public abstract class InjectingContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
- ((Injector) getContext().getApplicationContext()).inject(this, new ContentProviderModule());
+ Context context = getContext();
+ ((Injector) context.getApplicationContext()).inject(this, new ContentProviderModule(context));
return true;
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingFragment.java b/astrid/src/main/java/org/tasks/injection/InjectingFragment.java
index 7c6fb62b0..80ce71cbf 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingFragment.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingFragment.java
@@ -12,7 +12,7 @@ public class InjectingFragment extends Fragment {
super.onAttach(activity);
if (!injected) {
- ((Injector) activity.getApplication()).inject(this, new FragmentModule());
+ ((Injector) activity.getApplication()).inject(this, new FragmentModule(activity));
injected = true;
}
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingListActivity.java b/astrid/src/main/java/org/tasks/injection/InjectingListActivity.java
index d07a5f24a..516a8a89f 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingListActivity.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingListActivity.java
@@ -6,7 +6,7 @@ import android.os.Bundle;
public class InjectingListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- ((Injector) getApplication()).inject(this, new ActivityModule());
+ ((Injector) getApplication()).inject(this, new ActivityModule(this));
super.onCreate(savedInstanceState);
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingListFragment.java b/astrid/src/main/java/org/tasks/injection/InjectingListFragment.java
index 35c13951d..d8f545d2c 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingListFragment.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingListFragment.java
@@ -12,7 +12,7 @@ public class InjectingListFragment extends ListFragment {
super.onAttach(activity);
if (!injected) {
- ((Injector) activity.getApplication()).inject(this, new FragmentModule());
+ ((Injector) activity.getApplication()).inject(this, new FragmentModule(activity));
injected = true;
}
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingRemoteViewsService.java b/astrid/src/main/java/org/tasks/injection/InjectingRemoteViewsService.java
index 693e6a057..bbebb92f0 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingRemoteViewsService.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingRemoteViewsService.java
@@ -10,6 +10,6 @@ public abstract class InjectingRemoteViewsService extends RemoteViewsService {
public void onCreate() {
super.onCreate();
- ((Injector) getApplication()).inject(this, new ServiceModule());
+ ((Injector) getApplication()).inject(this, new ServiceModule(this));
}
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingService.java b/astrid/src/main/java/org/tasks/injection/InjectingService.java
index 63c62b367..e3e8e909b 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingService.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingService.java
@@ -7,6 +7,6 @@ public abstract class InjectingService extends Service {
public void onCreate() {
super.onCreate();
- ((Injector) getApplication()).inject(this, new ServiceModule());
+ ((Injector) getApplication()).inject(this, new ServiceModule(this));
}
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingSyncProviderPreferences.java b/astrid/src/main/java/org/tasks/injection/InjectingSyncProviderPreferences.java
index 9cf6be66f..7a6a2091f 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingSyncProviderPreferences.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingSyncProviderPreferences.java
@@ -7,7 +7,7 @@ import com.todoroo.astrid.sync.SyncProviderPreferences;
public abstract class InjectingSyncProviderPreferences extends SyncProviderPreferences {
@Override
public void onCreate(Bundle savedInstanceState) {
- ((Injector) getApplication()).inject(this, new ActivityModule());
+ ((Injector) getApplication()).inject(this, new ActivityModule(this));
super.onCreate(savedInstanceState);
}
diff --git a/astrid/src/main/java/org/tasks/injection/InjectingTodorooPreferenceActivity.java b/astrid/src/main/java/org/tasks/injection/InjectingTodorooPreferenceActivity.java
index f96669e78..a72c74b5d 100644
--- a/astrid/src/main/java/org/tasks/injection/InjectingTodorooPreferenceActivity.java
+++ b/astrid/src/main/java/org/tasks/injection/InjectingTodorooPreferenceActivity.java
@@ -7,7 +7,7 @@ import com.todoroo.andlib.utility.TodorooPreferenceActivity;
public abstract class InjectingTodorooPreferenceActivity extends TodorooPreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
- ((Injector) getApplication()).inject(this, new ActivityModule());
+ ((Injector) getApplication()).inject(this, new ActivityModule(this));
super.onCreate(savedInstanceState);
}
diff --git a/astrid/src/main/java/org/tasks/injection/ServiceModule.java b/astrid/src/main/java/org/tasks/injection/ServiceModule.java
index 1a1116755..a6babf17b 100644
--- a/astrid/src/main/java/org/tasks/injection/ServiceModule.java
+++ b/astrid/src/main/java/org/tasks/injection/ServiceModule.java
@@ -1,11 +1,19 @@
package org.tasks.injection;
+import android.app.Service;
+import android.content.Context;
+
import com.todoroo.astrid.gtasks.GtasksBackgroundService;
import com.todoroo.astrid.reminders.ReminderSchedulingService;
import org.tasks.widget.ScrollableWidgetUpdateService;
+import javax.inject.Singleton;
+
import dagger.Module;
+import dagger.Provides;
+
+import static org.tasks.injection.TasksModule.ForApplication;
@Module(library = true,
injects = {
@@ -14,4 +22,17 @@ import dagger.Module;
ScrollableWidgetUpdateService.class
})
public class ServiceModule {
+
+ private final Context context;
+
+ public ServiceModule(Service service) {
+ context = service.getApplicationContext();
+ }
+
+ @Singleton
+ @Provides
+ @ForApplication
+ public Context getContext() {
+ return context;
+ }
}
diff --git a/astrid/src/main/java/org/tasks/injection/TasksModule.java b/astrid/src/main/java/org/tasks/injection/TasksModule.java
index 8afcd789c..81a9309e1 100644
--- a/astrid/src/main/java/org/tasks/injection/TasksModule.java
+++ b/astrid/src/main/java/org/tasks/injection/TasksModule.java
@@ -1,5 +1,8 @@
package org.tasks.injection;
+import android.app.Application;
+import android.content.Context;
+
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.alarms.AlarmControlSet;
import com.todoroo.astrid.backup.TasksXmlExporter;
@@ -17,7 +20,20 @@ import com.todoroo.astrid.ui.QuickAddBar;
import org.tasks.widget.ScrollableViewsFactory;
+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 = {
@@ -39,4 +55,28 @@ import dagger.Module;
}
)
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 {
+ }
}
diff --git a/astrid/src/main/java/org/tasks/scheduling/RefreshScheduler.java b/astrid/src/main/java/org/tasks/scheduling/RefreshScheduler.java
index 34ce972e0..13af85104 100644
--- a/astrid/src/main/java/org/tasks/scheduling/RefreshScheduler.java
+++ b/astrid/src/main/java/org/tasks/scheduling/RefreshScheduler.java
@@ -7,7 +7,6 @@ import android.content.Intent;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.TaskDao;
@@ -19,11 +18,13 @@ 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 {
private final TaskDao taskDao;
+ private final Context context;
private static final Property>[] REFRESH_PROPERTIES = new Property>[]{
Task.DUE_DATE,
@@ -31,8 +32,9 @@ public class RefreshScheduler {
};
@Inject
- public RefreshScheduler(TaskDao taskDao) {
+ public RefreshScheduler(TaskDao taskDao, @ForApplication Context context) {
this.taskDao = taskDao;
+ this.context = context;
}
public void scheduleAllAlarms() {
@@ -66,7 +68,6 @@ public class RefreshScheduler {
}
dueDate += 1000; // this is ghetto
- Context context = ContextManager.getContext();
Intent intent = new Intent(context, RefreshBroadcastReceiver.class);
intent.setAction(Long.toString(dueDate));
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);