Use dagger for database injection

pull/143/head
Alex Baker 10 years ago
parent 46739eaee2
commit d6ca32fdd5

@ -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

@ -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.+'

@ -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);

@ -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 <tim@todoroo.com>
*
*/
@Singleton
public class Database extends AbstractDatabase {
// --- constants
@ -62,6 +66,7 @@ public class Database extends AbstractDatabase {
// --- listeners
@Inject
public Database() {
super();
addListener(new DatabaseUpdateListener() {

@ -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;
}

@ -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) {

@ -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();
}

@ -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();

@ -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);
}
}

@ -0,0 +1,13 @@
package org.tasks;
import com.todoroo.astrid.service.AstridDependencyInjector;
import dagger.Module;
@Module(
injects = {
AstridDependencyInjector.class
}
)
public class TasksModule {
}
Loading…
Cancel
Save