diff --git a/api/build.gradle b/api/build.gradle index 6162f05d2..4ba5359a8 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -32,6 +32,9 @@ android { } dependencies { + provided group: 'com.squareup.dagger', name: 'dagger-compiler', version: '1.2.1' + compile group: 'com.squareup.dagger', name: 'dagger', version: '1.2.1' + compile group: 'com.android.support', name: 'support-v4', version: '19.1.+' compile group: 'org.slf4j', name: 'slf4j-android', version: '1.7.7', transitive: false diff --git a/astrid/build.gradle b/astrid/build.gradle index fa4bb612a..3ee422a11 100644 --- a/astrid/build.gradle +++ b/astrid/build.gradle @@ -69,6 +69,8 @@ android.applicationVariants.all { variant -> } dependencies { + provided group: 'com.squareup.dagger', name: 'dagger-compiler', version: '1.2.1' + compile group: 'com.android.support', name: 'support-v4', version: '19.1.+' compile group: 'com.android.support', name: 'appcompat-v7', version: '19.1.+' diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java b/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java index 9defaac16..d397de3ac 100644 --- a/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/AstridActivity.java @@ -19,10 +19,8 @@ import android.view.WindowManager.BadTokenException; import android.widget.EditText; import android.widget.Toast; -import com.todoroo.astrid.voice.RecognizerApi.RecognizerApiListener; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; -import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.actfm.CommentsFragment; @@ -36,10 +34,12 @@ import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.ui.DateChangedAlerts; import com.todoroo.astrid.ui.QuickAddBar; +import com.todoroo.astrid.voice.RecognizerApi.RecognizerApiListener; import com.todoroo.astrid.voice.VoiceRecognizer; import org.tasks.R; @@ -95,7 +95,7 @@ public class AstridActivity extends ActionBarActivity @Override protected void onCreate(Bundle savedInstanceState) { - DependencyInjectionService.getInstance().inject(this); + AstridDependencyInjector.inject(this); super.onCreate(savedInstanceState); ContextManager.setContext(this); 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 97aa35a49..86a682608 100644 --- a/astrid/src/main/java/com/todoroo/astrid/dao/Database.java +++ b/astrid/src/main/java/com/todoroo/astrid/dao/Database.java @@ -24,12 +24,16 @@ 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; + /** * Database wrapper * * @author Tim Su * */ +@Singleton public class Database extends AbstractDatabase { // --- constants @@ -62,6 +66,7 @@ public class Database extends AbstractDatabase { // --- listeners + @Inject public Database() { super(); addListener(new DatabaseUpdateListener() { 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 1a6b54be7..60f82139b 100644 --- a/astrid/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java +++ b/astrid/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java @@ -17,7 +17,6 @@ import android.util.Log; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; -import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; @@ -45,15 +44,10 @@ import java.security.NoSuchAlgorithmException; */ public class Astrid2TaskProvider extends ContentProvider { - static { - AstridDependencyInjector.initialize(); - } - private static final String TAG = "MessageProvider"; private static final boolean LOGD = false; - public static final String AUTHORITY = "org.tasks.tasksprovider"; public static final Uri CONTENT_URI = Uri.parse("content://org.tasks.tasksprovider"); @@ -93,8 +87,6 @@ public class Astrid2TaskProvider extends ContentProvider { static { URI_MATCHER.addURI(AUTHORITY, "tasks", URI_TASKS); URI_MATCHER.addURI(AUTHORITY, "tags", URI_TAGS); - - AstridDependencyInjector.initialize(); } @Override @@ -298,7 +290,7 @@ public class Astrid2TaskProvider extends ContentProvider { private TaskService getTaskService() { if (taskService == null) { - DependencyInjectionService.getInstance().inject(this); + AstridDependencyInjector.inject(this); } return taskService; } 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 7ec40c49d..f3129fe84 100644 --- a/astrid/src/main/java/com/todoroo/astrid/provider/Astrid3ContentProvider.java +++ b/astrid/src/main/java/com/todoroo/astrid/provider/Astrid3ContentProvider.java @@ -21,7 +21,6 @@ import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.DatabaseDao; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; -import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.MetadataDao; @@ -67,10 +66,6 @@ import java.util.Set; */ public class Astrid3ContentProvider extends ContentProvider { - static { - AstridDependencyInjector.initialize(); - } - /** URI for making a request over all items */ private static final int URI_DIR = 1; @@ -201,7 +196,7 @@ public class Astrid3ContentProvider extends ContentProvider { private AbstractDatabase getDatabase() { if (database == null) { - DependencyInjectionService.getInstance().inject(this); + AstridDependencyInjector.inject(this); database.openForWriting(); } if(databaseOverride != null) { diff --git a/astrid/src/main/java/com/todoroo/astrid/provider/SqlContentProvider.java b/astrid/src/main/java/com/todoroo/astrid/provider/SqlContentProvider.java index 4d8fbe21d..7c4e94f0c 100644 --- a/astrid/src/main/java/com/todoroo/astrid/provider/SqlContentProvider.java +++ b/astrid/src/main/java/com/todoroo/astrid/provider/SqlContentProvider.java @@ -13,7 +13,6 @@ import android.net.Uri; import com.todoroo.andlib.data.AbstractDatabase; import com.todoroo.andlib.service.Autowired; -import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.service.AstridDependencyInjector; @@ -35,8 +34,6 @@ public class SqlContentProvider extends ContentProvider { private static UriMatcher uriMatcher; static { - AstridDependencyInjector.initialize(); - uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AstridApiConstants.API_PACKAGE + ".private", @@ -121,7 +118,7 @@ public class SqlContentProvider extends ContentProvider { private AbstractDatabase getDatabase() { if (database == null) { - DependencyInjectionService.getInstance().inject(this); + AstridDependencyInjector.inject(this); database.openForWriting(); } diff --git a/astrid/src/main/java/com/todoroo/astrid/service/AstridDependencyInjector.java b/astrid/src/main/java/com/todoroo/astrid/service/AstridDependencyInjector.java index 6da3f724a..811c9976a 100644 --- a/astrid/src/main/java/com/todoroo/astrid/service/AstridDependencyInjector.java +++ b/astrid/src/main/java/com/todoroo/astrid/service/AstridDependencyInjector.java @@ -24,9 +24,12 @@ import com.todoroo.astrid.gtasks.sync.GtasksSyncService; import com.todoroo.astrid.tags.TagService; import org.tasks.Broadcaster; +import org.tasks.Injector; import org.tasks.filters.FilterCounter; import org.tasks.scheduling.RefreshScheduler; +import javax.inject.Inject; + /** * Astrid application dependency injector loads classes in Astrid with the * appropriate instantiated objects necessary for their operation. For @@ -43,17 +46,18 @@ public class AstridDependencyInjector extends AbstractDependencyInjector { */ private static AstridDependencyInjector instance = null; + @Inject Database database; + /** * Initialize list of injectables. Special care must used when * instantiating classes that themselves depend on dependency injection */ @Override protected void addInjectables() { - // com.todoroo.android.service - injectables.put("applicationName", "astrid"); + new Injector().inject(this); // com.todoroo.astrid.dao - injectables.put("database", Database.class); + injectables.put("database", database); injectables.put("taskDao", TaskDao.class); injectables.put("metadataDao", MetadataDao.class); injectables.put("tagMetadataDao", TagMetadataDao.class); @@ -101,6 +105,11 @@ public class AstridDependencyInjector extends AbstractDependencyInjector { } } + public static void inject(Object caller) { + initialize(); + DependencyInjectionService.getInstance().inject(caller); + } + AstridDependencyInjector() { // prevent instantiation super(); diff --git a/astrid/src/main/java/org/tasks/Injector.java b/astrid/src/main/java/org/tasks/Injector.java new file mode 100644 index 000000000..8a06067e5 --- /dev/null +++ b/astrid/src/main/java/org/tasks/Injector.java @@ -0,0 +1,16 @@ +package org.tasks; + +import dagger.ObjectGraph; + +public class Injector { + + ObjectGraph objectGraph; + + public Injector() { + objectGraph = ObjectGraph.create(new TasksModule()); + } + + public void inject(Object caller) { + objectGraph.inject(caller); + } +} diff --git a/astrid/src/main/java/org/tasks/TasksModule.java b/astrid/src/main/java/org/tasks/TasksModule.java new file mode 100644 index 000000000..0504e5c09 --- /dev/null +++ b/astrid/src/main/java/org/tasks/TasksModule.java @@ -0,0 +1,13 @@ +package org.tasks; + +import com.todoroo.astrid.service.AstridDependencyInjector; + +import dagger.Module; + +@Module( + injects = { + AstridDependencyInjector.class + } +) +public class TasksModule { +}