Skip to content

Commit

Permalink
Introduce dagger
Browse files Browse the repository at this point in the history
  • Loading branch information
maskara committed Nov 11, 2017
1 parent c926437 commit 6a7b7cb
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 6 deletions.
6 changes: 6 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ dependencies {
implementation 'com.facebook.fresco:fresco:1.3.0'
implementation 'com.facebook.stetho:stetho:1.5.0'

implementation "com.google.dagger:dagger:$DAGGER_VERSION"
implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION"

annotationProcessor "com.google.dagger:dagger-android-processor:$DAGGER_VERSION"
annotationProcessor "com.google.dagger:dagger-compiler:$DAGGER_VERSION"

testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:3.4'

Expand Down
28 changes: 23 additions & 5 deletions app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
Expand All @@ -26,11 +27,16 @@
import java.io.File;
import java.io.IOException;

import javax.inject.Inject;

import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
import fr.free.nrw.commons.auth.AccountUtil;
import fr.free.nrw.commons.caching.CacheController;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.data.Category;
import fr.free.nrw.commons.data.DBOpenHelper;
import fr.free.nrw.commons.di.DaggerAppComponent;
import fr.free.nrw.commons.modifications.ModifierSequence;
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
Expand All @@ -47,7 +53,7 @@
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,
resDialogOkToast = R.string.crash_dialog_ok_toast
)
public class CommonsApplication extends Application {
public class CommonsApplication extends Application implements HasActivityInjector {

private Account currentAccount = null; // Unlike a savings account...

Expand All @@ -61,6 +67,9 @@ public class CommonsApplication extends Application {
public static final String FEEDBACK_EMAIL = "commons-app-android@googlegroups.com";
public static final String FEEDBACK_EMAIL_SUBJECT = "Commons Android App (%s) Feedback";

@Inject DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
@Inject MediaWikiApi mediaWikiApi;

private static CommonsApplication instance = null;
private MediaWikiApi api = null;
private LruCache<String, String> thumbnailUrlCache = new LruCache<>(1024);
Expand Down Expand Up @@ -123,7 +132,11 @@ public void onCreate() {

Timber.plant(new Timber.DebugTree());


DaggerAppComponent
.builder()
.application(this)
.build()
.inject(this);

if (!BuildConfig.DEBUG) {
ACRA.init(this);
Expand Down Expand Up @@ -168,11 +181,11 @@ public Boolean revalidateAuthToken() {
if (curAccount == null) {
return false; // This should never happen
}
accountManager.invalidateAuthToken(AccountUtil.accountType(), getMWApi().getAuthCookie());

accountManager.invalidateAuthToken(AccountUtil.accountType(), mediaWikiApi.getAuthCookie());
try {
String authCookie = accountManager.blockingGetAuthToken(curAccount, "", false);
getMWApi().setAuthCookie(authCookie);
mediaWikiApi.setAuthCookie(authCookie);
return true;
} catch (OperationCanceledException | NullPointerException | IOException | AuthenticatorException e) {
e.printStackTrace();
Expand Down Expand Up @@ -249,6 +262,11 @@ public void run(AccountManagerFuture<Boolean> accountManagerFuture) {
}
}

@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingActivityInjector;
}

/**
* Deletes all tables and re-creates them.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,17 @@

import java.util.ArrayList;

import javax.inject.Inject;

import butterknife.ButterKnife;
import dagger.android.AndroidInjection;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.HandlerService;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.AuthenticatedActivity;
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.UploadService;
import io.reactivex.android.schedulers.AndroidSchedulers;
Expand Down Expand Up @@ -57,6 +61,9 @@ public class ContributionsActivity extends AuthenticatedActivity
private ArrayList<DataSetObserver> observersWaitingForLoad = new ArrayList<>();
private String CONTRIBUTION_SELECTION = "";

@Inject
MediaWikiApi mediaWikiApi;

/*
This sorts in the following order:
Currently Uploading
Expand Down Expand Up @@ -131,6 +138,7 @@ protected void onAuthCookieAcquired(String authCookie) {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidInjection.inject(this);
setContentView(R.layout.activity_contributions);
ButterKnife.bind(this);

Expand Down Expand Up @@ -281,7 +289,7 @@ public int getTotalMediaCount() {
private void setUploadCount() {
CommonsApplication app = ((CommonsApplication) getApplication());
compositeDisposable.add(
app.getMWApi()
mediaWikiApi
.getUploadCount(app.getCurrentAccount().name)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/java/fr/free/nrw/commons/di/ActivityBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package fr.free.nrw.commons.di;

import dagger.Module;
import dagger.android.ContributesAndroidInjector;
import fr.free.nrw.commons.contributions.ContributionsActivity;

@Module
public abstract class ActivityBuilder {

@ContributesAndroidInjector()
abstract ContributionsActivity bindSplashScreenActivity();
}
29 changes: 29 additions & 0 deletions app/src/main/java/fr/free/nrw/commons/di/AppComponent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fr.free.nrw.commons.di;

import android.app.Application;

import javax.inject.Singleton;

import dagger.BindsInstance;
import dagger.Component;
import dagger.android.support.AndroidSupportInjectionModule;
import fr.free.nrw.commons.CommonsApplication;

@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
AppModule.class,
ActivityBuilder.class
})
public interface AppComponent {

@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);

AppComponent build();
}

void inject(CommonsApplication application);
}
28 changes: 28 additions & 0 deletions app/src/main/java/fr/free/nrw/commons/di/AppModule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package fr.free.nrw.commons.di;

import android.app.Application;
import android.content.Context;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
import fr.free.nrw.commons.mwapi.MediaWikiApi;

@Module
public class AppModule {

@Provides
@Singleton
Context provideContext(Application application) {
return application;
}

@Provides
@Singleton
public MediaWikiApi getMWApi() {
return new ApacheHttpClientMediaWikiApi(BuildConfig.WIKIMEDIA_API_HOST);
}
}
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ android.useDeprecatedNdk=true

# Library dependencies
BUTTERKNIFE_VERSION=8.6.0
DAGGER_VERSION=2.11

org.gradle.jvmargs=-Xmx1536M

Expand Down

0 comments on commit 6a7b7cb

Please sign in to comment.