Skip to content

Commit c7948c8

Browse files
committed
Extracted a few networking related items into a new Dagger module and finished the process of mocking the main component for tests.
1 parent 32cb8df commit c7948c8

File tree

4 files changed

+75
-51
lines changed

4 files changed

+75
-51
lines changed

app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@
99
import fr.free.nrw.commons.CommonsApplication;
1010
import fr.free.nrw.commons.MediaWikiImageView;
1111
import fr.free.nrw.commons.auth.LoginActivity;
12-
import fr.free.nrw.commons.contributions.Contribution;
13-
import fr.free.nrw.commons.contributions.ContributionsActivity;
1412
import fr.free.nrw.commons.contributions.ContributionsSyncAdapter;
1513
import fr.free.nrw.commons.delete.DeleteTask;
1614
import fr.free.nrw.commons.modifications.ModificationsSyncAdapter;
17-
import fr.free.nrw.commons.settings.SettingsFragment;
1815
import fr.free.nrw.commons.nearby.PlaceRenderer;
16+
import fr.free.nrw.commons.settings.SettingsFragment;
1917

2018
@Singleton
2119
@Component(modules = {
2220
CommonsApplicationModule.class,
21+
NetworkingModule.class,
2322
AndroidInjectionModule.class,
2423
AndroidSupportInjectionModule.class,
2524
ActivityBuilderModule.class,

app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,21 @@
44
import android.content.Context;
55
import android.content.SharedPreferences;
66
import android.preference.PreferenceManager;
7-
import android.support.annotation.NonNull;
87
import android.support.v4.util.LruCache;
98

10-
import com.google.gson.Gson;
11-
import com.google.gson.GsonBuilder;
12-
139
import javax.inject.Named;
1410
import javax.inject.Singleton;
1511

1612
import dagger.Module;
1713
import dagger.Provides;
18-
import fr.free.nrw.commons.BuildConfig;
1914
import fr.free.nrw.commons.auth.AccountUtil;
2015
import fr.free.nrw.commons.auth.SessionManager;
2116
import fr.free.nrw.commons.caching.CacheController;
2217
import fr.free.nrw.commons.data.DBOpenHelper;
2318
import fr.free.nrw.commons.location.LocationServiceManager;
24-
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
2519
import fr.free.nrw.commons.mwapi.MediaWikiApi;
2620
import fr.free.nrw.commons.nearby.NearbyPlaces;
2721
import fr.free.nrw.commons.upload.UploadController;
28-
import okhttp3.HttpUrl;
29-
import okhttp3.OkHttpClient;
3022

3123
import static android.content.Context.MODE_PRIVATE;
3224
import static fr.free.nrw.commons.contributions.ContributionsContentProvider.CONTRIBUTION_AUTHORITY;
@@ -36,7 +28,6 @@
3628
@SuppressWarnings({"WeakerAccess", "unused"})
3729
public class CommonsApplicationModule {
3830
public static final String CATEGORY_AUTHORITY = "fr.free.nrw.commons.categories.contentprovider";
39-
public static final long OK_HTTP_CACHE_SIZE = 10 * 1024 * 1024;
4031

4132
private Context applicationContext;
4233

@@ -72,12 +63,6 @@ public ContentProviderClient provideModificationContentProviderClient(Context co
7263
return context.getContentResolver().acquireContentProviderClient(MODIFICATIONS_AUTHORITY);
7364
}
7465

75-
@Provides
76-
@Singleton
77-
public OkHttpClient provideOkHttpClient() {
78-
return new OkHttpClient.Builder().build();
79-
}
80-
8166
@Provides
8267
@Named("application_preferences")
8368
public SharedPreferences providesApplicationSharedPreferences(Context context) {
@@ -126,39 +111,12 @@ public SessionManager providesSessionManager(Context context,
126111
return new SessionManager(context, mediaWikiApi, sharedPreferences);
127112
}
128113

129-
@Provides
130-
@Singleton
131-
public MediaWikiApi provideMediaWikiApi(Context context,
132-
@Named("default_preferences") SharedPreferences defaultPreferences,
133-
@Named("category_prefs") SharedPreferences categoryPrefs,
134-
Gson gson) {
135-
return new ApacheHttpClientMediaWikiApi(context, BuildConfig.WIKIMEDIA_API_HOST, defaultPreferences, categoryPrefs, gson);
136-
}
137-
138-
@Provides
139-
@Named("commons_mediawiki_url")
140-
@NonNull
141-
@SuppressWarnings("ConstantConditions")
142-
public HttpUrl provideMwUrl() {
143-
return HttpUrl.parse("https://commons.wikimedia.org/");
144-
}
145-
146114
@Provides
147115
@Singleton
148116
public LocationServiceManager provideLocationServiceManager(Context context) {
149117
return new LocationServiceManager(context);
150118
}
151119

152-
/**
153-
* Gson objects are very heavy. The app should ideally be using just one instance of it instead of creating new instances everywhere.
154-
* @return returns a singleton Gson instance
155-
*/
156-
@Provides
157-
@Singleton
158-
public Gson provideGson() {
159-
return new GsonBuilder().create();
160-
}
161-
162120
@Provides
163121
@Singleton
164122
public CacheController provideCacheController() {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package fr.free.nrw.commons.di;
2+
3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
import android.support.annotation.NonNull;
6+
7+
import com.google.gson.Gson;
8+
import com.google.gson.GsonBuilder;
9+
10+
import javax.inject.Named;
11+
import javax.inject.Singleton;
12+
13+
import dagger.Module;
14+
import dagger.Provides;
15+
import fr.free.nrw.commons.BuildConfig;
16+
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
17+
import fr.free.nrw.commons.mwapi.MediaWikiApi;
18+
import okhttp3.HttpUrl;
19+
import okhttp3.OkHttpClient;
20+
21+
@Module
22+
@SuppressWarnings({"WeakerAccess", "unused"})
23+
public class NetworkingModule {
24+
public static final long OK_HTTP_CACHE_SIZE = 10 * 1024 * 1024;
25+
26+
@Provides
27+
@Singleton
28+
public OkHttpClient provideOkHttpClient() {
29+
return new OkHttpClient.Builder().build();
30+
}
31+
32+
@Provides
33+
@Singleton
34+
public MediaWikiApi provideMediaWikiApi(Context context,
35+
@Named("default_preferences") SharedPreferences defaultPreferences,
36+
@Named("category_prefs") SharedPreferences categoryPrefs,
37+
Gson gson) {
38+
return new ApacheHttpClientMediaWikiApi(context, BuildConfig.WIKIMEDIA_API_HOST, defaultPreferences, categoryPrefs, gson);
39+
}
40+
41+
@Provides
42+
@Named("commons_mediawiki_url")
43+
@NonNull
44+
@SuppressWarnings("ConstantConditions")
45+
public HttpUrl provideMwUrl() {
46+
return HttpUrl.parse(BuildConfig.COMMONS_URL);
47+
}
48+
49+
/**
50+
* Gson objects are very heavy. The app should ideally be using just one instance of it instead of creating new instances everywhere.
51+
* @return returns a singleton Gson instance
52+
*/
53+
@Provides
54+
@Singleton
55+
public Gson provideGson() {
56+
return new GsonBuilder().create();
57+
}
58+
59+
}

app/src/test/kotlin/fr/free/nrw/commons/TestCommonsApplication.kt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package fr.free.nrw.commons
22

3+
import android.content.ContentProviderClient
34
import android.content.Context
45
import android.content.SharedPreferences
56
import android.support.v4.util.LruCache
6-
import com.google.gson.Gson
77
import com.nhaarman.mockito_kotlin.mock
88
import com.squareup.leakcanary.RefWatcher
99
import fr.free.nrw.commons.auth.AccountUtil
@@ -33,21 +33,31 @@ class TestCommonsApplication : CommonsApplication() {
3333
override fun setupLeakCanary(): RefWatcher = RefWatcher.DISABLED
3434
}
3535

36+
@Suppress("MemberVisibilityCanBePrivate")
3637
class MockCommonsApplicationModule(appContext: Context) : CommonsApplicationModule(appContext) {
3738
val accountUtil: AccountUtil = mock()
3839
val appSharedPreferences: SharedPreferences = mock()
3940
val defaultSharedPreferences: SharedPreferences = mock()
40-
val categorySharedPreferences: SharedPreferences = mock()
4141
val otherSharedPreferences: SharedPreferences = mock()
4242
val uploadController: UploadController = mock()
4343
val mockSessionManager: SessionManager = mock()
44-
val mediaWikiApi: MediaWikiApi = mock()
4544
val locationServiceManager: LocationServiceManager = mock()
4645
val cacheController: CacheController = mock()
4746
val mockDbOpenHelper: DBOpenHelper = mock()
4847
val nearbyPlaces: NearbyPlaces = mock()
4948
val lruCache: LruCache<String, String> = mock()
50-
val gson: Gson = Gson()
49+
val categoryClient: ContentProviderClient = mock()
50+
val contributionClient: ContentProviderClient = mock()
51+
val modificationClient: ContentProviderClient = mock()
52+
val uploadPrefs: SharedPreferences = mock()
53+
54+
override fun provideCategoryContentProviderClient(context: Context?): ContentProviderClient = categoryClient
55+
56+
override fun provideContributionContentProviderClient(context: Context?): ContentProviderClient = contributionClient
57+
58+
override fun provideModificationContentProviderClient(context: Context?): ContentProviderClient = modificationClient
59+
60+
override fun providesDirectNearbyUploadPreferences(context: Context?): SharedPreferences = uploadPrefs
5161

5262
override fun providesAccountUtil(context: Context): AccountUtil = accountUtil
5363

@@ -61,8 +71,6 @@ class MockCommonsApplicationModule(appContext: Context) : CommonsApplicationModu
6171

6272
override fun providesSessionManager(context: Context, mediaWikiApi: MediaWikiApi, sharedPreferences: SharedPreferences): SessionManager = mockSessionManager
6373

64-
override fun provideMediaWikiApi(context: Context, sharedPreferences: SharedPreferences, categorySharedPreferences: SharedPreferences, gson: Gson): MediaWikiApi = mediaWikiApi
65-
6674
override fun provideLocationServiceManager(context: Context): LocationServiceManager = locationServiceManager
6775

6876
override fun provideCacheController(): CacheController = cacheController

0 commit comments

Comments
 (0)