Skip to content

Commit 6a7b7cb

Browse files
author
maskara
committed
Introduce dagger
1 parent c926437 commit 6a7b7cb

File tree

7 files changed

+108
-6
lines changed

7 files changed

+108
-6
lines changed

app/build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ dependencies {
4343
implementation 'com.facebook.fresco:fresco:1.3.0'
4444
implementation 'com.facebook.stetho:stetho:1.5.0'
4545

46+
implementation "com.google.dagger:dagger:$DAGGER_VERSION"
47+
implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION"
48+
49+
annotationProcessor "com.google.dagger:dagger-android-processor:$DAGGER_VERSION"
50+
annotationProcessor "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
51+
4652
testImplementation 'junit:junit:4.12'
4753
testImplementation 'org.robolectric:robolectric:3.4'
4854

app/src/main/java/fr/free/nrw/commons/CommonsApplication.java

+23-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.accounts.AccountManagerFuture;
77
import android.accounts.AuthenticatorException;
88
import android.accounts.OperationCanceledException;
9+
import android.app.Activity;
910
import android.app.Application;
1011
import android.content.Context;
1112
import android.content.SharedPreferences;
@@ -26,11 +27,16 @@
2627
import java.io.File;
2728
import java.io.IOException;
2829

30+
import javax.inject.Inject;
31+
32+
import dagger.android.DispatchingAndroidInjector;
33+
import dagger.android.HasActivityInjector;
2934
import fr.free.nrw.commons.auth.AccountUtil;
3035
import fr.free.nrw.commons.caching.CacheController;
3136
import fr.free.nrw.commons.contributions.Contribution;
3237
import fr.free.nrw.commons.data.Category;
3338
import fr.free.nrw.commons.data.DBOpenHelper;
39+
import fr.free.nrw.commons.di.DaggerAppComponent;
3440
import fr.free.nrw.commons.modifications.ModifierSequence;
3541
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
3642
import fr.free.nrw.commons.mwapi.MediaWikiApi;
@@ -47,7 +53,7 @@
4753
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,
4854
resDialogOkToast = R.string.crash_dialog_ok_toast
4955
)
50-
public class CommonsApplication extends Application {
56+
public class CommonsApplication extends Application implements HasActivityInjector {
5157

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

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

70+
@Inject DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
71+
@Inject MediaWikiApi mediaWikiApi;
72+
6473
private static CommonsApplication instance = null;
6574
private MediaWikiApi api = null;
6675
private LruCache<String, String> thumbnailUrlCache = new LruCache<>(1024);
@@ -123,7 +132,11 @@ public void onCreate() {
123132

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

126-
135+
DaggerAppComponent
136+
.builder()
137+
.application(this)
138+
.build()
139+
.inject(this);
127140

128141
if (!BuildConfig.DEBUG) {
129142
ACRA.init(this);
@@ -168,11 +181,11 @@ public Boolean revalidateAuthToken() {
168181
if (curAccount == null) {
169182
return false; // This should never happen
170183
}
171-
172-
accountManager.invalidateAuthToken(AccountUtil.accountType(), getMWApi().getAuthCookie());
184+
185+
accountManager.invalidateAuthToken(AccountUtil.accountType(), mediaWikiApi.getAuthCookie());
173186
try {
174187
String authCookie = accountManager.blockingGetAuthToken(curAccount, "", false);
175-
getMWApi().setAuthCookie(authCookie);
188+
mediaWikiApi.setAuthCookie(authCookie);
176189
return true;
177190
} catch (OperationCanceledException | NullPointerException | IOException | AuthenticatorException e) {
178191
e.printStackTrace();
@@ -249,6 +262,11 @@ public void run(AccountManagerFuture<Boolean> accountManagerFuture) {
249262
}
250263
}
251264

265+
@Override
266+
public DispatchingAndroidInjector<Activity> activityInjector() {
267+
return dispatchingActivityInjector;
268+
}
269+
252270
/**
253271
* Deletes all tables and re-creates them.
254272
*/

app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,17 @@
2323

2424
import java.util.ArrayList;
2525

26+
import javax.inject.Inject;
27+
2628
import butterknife.ButterKnife;
29+
import dagger.android.AndroidInjection;
2730
import fr.free.nrw.commons.CommonsApplication;
2831
import fr.free.nrw.commons.HandlerService;
2932
import fr.free.nrw.commons.Media;
3033
import fr.free.nrw.commons.R;
3134
import fr.free.nrw.commons.auth.AuthenticatedActivity;
3235
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
36+
import fr.free.nrw.commons.mwapi.MediaWikiApi;
3337
import fr.free.nrw.commons.settings.Prefs;
3438
import fr.free.nrw.commons.upload.UploadService;
3539
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -57,6 +61,9 @@ public class ContributionsActivity extends AuthenticatedActivity
5761
private ArrayList<DataSetObserver> observersWaitingForLoad = new ArrayList<>();
5862
private String CONTRIBUTION_SELECTION = "";
5963

64+
@Inject
65+
MediaWikiApi mediaWikiApi;
66+
6067
/*
6168
This sorts in the following order:
6269
Currently Uploading
@@ -131,6 +138,7 @@ protected void onAuthCookieAcquired(String authCookie) {
131138
@Override
132139
protected void onCreate(Bundle savedInstanceState) {
133140
super.onCreate(savedInstanceState);
141+
AndroidInjection.inject(this);
134142
setContentView(R.layout.activity_contributions);
135143
ButterKnife.bind(this);
136144

@@ -281,7 +289,7 @@ public int getTotalMediaCount() {
281289
private void setUploadCount() {
282290
CommonsApplication app = ((CommonsApplication) getApplication());
283291
compositeDisposable.add(
284-
app.getMWApi()
292+
mediaWikiApi
285293
.getUploadCount(app.getCurrentAccount().name)
286294
.subscribeOn(Schedulers.io())
287295
.observeOn(AndroidSchedulers.mainThread())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package fr.free.nrw.commons.di;
2+
3+
import dagger.Module;
4+
import dagger.android.ContributesAndroidInjector;
5+
import fr.free.nrw.commons.contributions.ContributionsActivity;
6+
7+
@Module
8+
public abstract class ActivityBuilder {
9+
10+
@ContributesAndroidInjector()
11+
abstract ContributionsActivity bindSplashScreenActivity();
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package fr.free.nrw.commons.di;
2+
3+
import android.app.Application;
4+
5+
import javax.inject.Singleton;
6+
7+
import dagger.BindsInstance;
8+
import dagger.Component;
9+
import dagger.android.support.AndroidSupportInjectionModule;
10+
import fr.free.nrw.commons.CommonsApplication;
11+
12+
@Singleton
13+
@Component(modules = {
14+
AndroidSupportInjectionModule.class,
15+
AppModule.class,
16+
ActivityBuilder.class
17+
})
18+
public interface AppComponent {
19+
20+
@Component.Builder
21+
interface Builder {
22+
@BindsInstance
23+
Builder application(Application application);
24+
25+
AppComponent build();
26+
}
27+
28+
void inject(CommonsApplication application);
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package fr.free.nrw.commons.di;
2+
3+
import android.app.Application;
4+
import android.content.Context;
5+
6+
import javax.inject.Singleton;
7+
8+
import dagger.Module;
9+
import dagger.Provides;
10+
import fr.free.nrw.commons.BuildConfig;
11+
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
12+
import fr.free.nrw.commons.mwapi.MediaWikiApi;
13+
14+
@Module
15+
public class AppModule {
16+
17+
@Provides
18+
@Singleton
19+
Context provideContext(Application application) {
20+
return application;
21+
}
22+
23+
@Provides
24+
@Singleton
25+
public MediaWikiApi getMWApi() {
26+
return new ApacheHttpClientMediaWikiApi(BuildConfig.WIKIMEDIA_API_HOST);
27+
}
28+
}

gradle.properties

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ android.useDeprecatedNdk=true
1212

1313
# Library dependencies
1414
BUTTERKNIFE_VERSION=8.6.0
15+
DAGGER_VERSION=2.11
1516

1617
org.gradle.jvmargs=-Xmx1536M
1718

0 commit comments

Comments
 (0)