Skip to content

Commit 0540a58

Browse files
authored
Merge pull request commons-app#632 from dbrant/master
Further improve image loading, and remove a lot of unused code.
2 parents 02cbb8e + 7a4062a commit 0540a58

13 files changed

+74
-246
lines changed

app/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ dependencies {
66
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
77
compile 'in.yuvi:http.fluent:1.3'
88
compile 'com.android.volley:volley:1.0.0'
9-
compile 'com.nostra13.universalimageloader:universal-image-loader:1.8.4'
109
compile 'ch.acra:acra:4.7.0'
1110
compile 'org.mediawiki:api:1.3'
1211
compile 'commons-codec:commons-codec:1.10'

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

+11-34
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@
1212
import android.database.sqlite.SQLiteDatabase;
1313
import android.preference.PreferenceManager;
1414

15-
import com.android.volley.RequestQueue;
16-
import com.android.volley.toolbox.BasicNetwork;
17-
import com.android.volley.toolbox.DiskBasedCache;
18-
import com.android.volley.toolbox.HurlStack;
1915
import com.facebook.drawee.backends.pipeline.Fresco;
2016
import com.facebook.stetho.Stetho;
21-
import com.nostra13.universalimageloader.cache.disc.impl.TotalSizeLimitedDiscCache;
22-
import com.nostra13.universalimageloader.core.ImageLoader;
23-
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
24-
import com.nostra13.universalimageloader.utils.StorageUtils;
17+
18+
import fr.free.nrw.commons.caching.CacheController;
19+
import fr.free.nrw.commons.category.Category;
20+
import fr.free.nrw.commons.contributions.Contribution;
21+
import fr.free.nrw.commons.data.DBOpenHelper;
22+
import fr.free.nrw.commons.modifications.ModifierSequence;
23+
import fr.free.nrw.commons.auth.AccountUtil;
24+
import fr.free.nrw.commons.nearby.NearbyPlaces;
25+
2526
import com.squareup.leakcanary.LeakCanary;
2627

2728
import org.acra.ACRA;
@@ -84,7 +85,6 @@ public class CommonsApplication extends Application {
8485
private AbstractHttpClient httpClient = null;
8586
private MWApi api = null;
8687
private CacheController cacheData = null;
87-
private RequestQueue volleyQueue = null;
8888
private DBOpenHelper dbOpenHelper = null;
8989
private NearbyPlaces nearbyPlaces = null;
9090

@@ -139,15 +139,6 @@ public CacheController getCacheData() {
139139
return cacheData;
140140
}
141141

142-
public RequestQueue getVolleyQueue() {
143-
if (volleyQueue == null) {
144-
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
145-
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
146-
volleyQueue.start();
147-
}
148-
return volleyQueue;
149-
}
150-
151142
public synchronized DBOpenHelper getDBOpenHelper() {
152143
if (dbOpenHelper == null) {
153144
dbOpenHelper = new DBOpenHelper(this);
@@ -182,26 +173,13 @@ public void onCreate() {
182173
// Fire progress callbacks for every 3% of uploaded content
183174
System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0");
184175

185-
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this)
186-
.discCache(new TotalSizeLimitedDiscCache(StorageUtils.getCacheDirectory(this), 128 * 1024 * 1024))
187-
.build();
188-
ImageLoader.getInstance().init(imageLoaderConfiguration);
189-
190176
Fresco.initialize(this);
191177

192178
// Initialize EventLogging
193179
EventLog.setApp(this);
194180

195181
//For caching area -> categories
196182
cacheData = new CacheController();
197-
198-
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
199-
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
200-
volleyQueue.start();
201-
}
202-
203-
public MWApi getApi() {
204-
return api;
205183
}
206184

207185
/**
@@ -268,15 +246,14 @@ public void clearApplicationData(Context context) {
268246
preferences.edit().clear().commit();
269247
context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit();
270248
preferences.edit().putBoolean("firstrun", false).apply();
271-
updateAllDatabases(context);
249+
updateAllDatabases();
272250
currentAccount = null;
273251
}
274252

275253
/**
276254
* Deletes all tables and re-creates them.
277-
* @param context context
278255
*/
279-
public void updateAllDatabases(Context context) {
256+
public void updateAllDatabases() {
280257
DBOpenHelper dbOpenHelper = CommonsApplication.getInstance().getDBOpenHelper();
281258
dbOpenHelper.getReadableDatabase().close();
282259
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

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

-4
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,6 @@ public void setCreator(String creator) {
116116
this.creator = creator;
117117
}
118118

119-
public String getThumbnailUrl(int width) {
120-
return Utils.makeThumbUrl(getImageUrl(), getFilename(), width);
121-
}
122-
123119
public int getWidth() {
124120
return width;
125121
}

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

+6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package fr.free.nrw.commons;
22

33
import android.os.AsyncTask;
4+
import android.support.annotation.NonNull;
45

56
import org.mediawiki.api.ApiResult;
67

78
class MediaThumbnailFetchTask extends AsyncTask<String, String, String> {
89
private static final String THUMB_SIZE = "640";
10+
protected final Media media;
11+
12+
public MediaThumbnailFetchTask(@NonNull Media media) {
13+
this.media = media;
14+
}
915

1016
@Override
1117
protected String doInBackground(String... params) {

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.free.nrw.commons;
22

33
import android.content.Context;
4+
import android.support.annotation.NonNull;
45
import android.support.annotation.Nullable;
56
import android.support.v4.util.LruCache;
67
import android.util.AttributeSet;
@@ -27,15 +28,16 @@ public void setMedia(Media media) {
2728
if (currentThumbnailTask != null) {
2829
currentThumbnailTask.cancel(true);
2930
}
30-
setImageURI((String) null);
3131
if(media == null) {
32+
setImageURI((String) null);
3233
return;
3334
}
3435

3536
if (thumbnailUrlCache.get(media.getFilename()) != null) {
3637
setImageUrl(thumbnailUrlCache.get(media.getFilename()));
3738
} else {
38-
currentThumbnailTask = new ThumbnailFetchTask();
39+
setImageURI((String) null);
40+
currentThumbnailTask = new ThumbnailFetchTask(media);
3941
currentThumbnailTask.execute(media.getFilename());
4042
}
4143
}
@@ -53,11 +55,16 @@ private void setImageUrl(@Nullable String url) {
5355
}
5456

5557
private class ThumbnailFetchTask extends MediaThumbnailFetchTask {
58+
ThumbnailFetchTask(@NonNull Media media) {
59+
super(media);
60+
}
61+
5662
@Override
5763
protected void onPostExecute(String result) {
5864
if (isCancelled()) {
5965
return;
6066
}
67+
thumbnailUrlCache.put(media.getFilename(), result);
6168
setImageUrl(result);
6269
}
6370
}

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

-40
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@
22

33
import android.content.Context;
44
import android.net.Uri;
5-
import android.os.Build;
65
import android.preference.PreferenceManager;
76

8-
import com.nostra13.universalimageloader.core.DisplayImageOptions;
9-
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
10-
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
11-
127
import fr.free.nrw.commons.settings.Prefs;
138
import timber.log.Timber;
149

@@ -142,26 +137,6 @@ public static String getStringFromDOM(Node dom) {
142137
return outputStream.toString();
143138
}
144139

145-
private static DisplayImageOptions.Builder defaultImageOptionsBuilder;
146-
147-
public static DisplayImageOptions.Builder getGenericDisplayOptions() {
148-
if (defaultImageOptionsBuilder == null) {
149-
defaultImageOptionsBuilder = new DisplayImageOptions.Builder().cacheInMemory()
150-
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2);
151-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
152-
// List views flicker badly during data updates on Android 2.3; we
153-
// haven't quite figured out why but cells seem to be rearranged oddly.
154-
// Disable the fade-in on 2.3 to reduce the effect.
155-
defaultImageOptionsBuilder = defaultImageOptionsBuilder
156-
.displayer(new FadeInBitmapDisplayer(300));
157-
}
158-
defaultImageOptionsBuilder = defaultImageOptionsBuilder
159-
.cacheInMemory()
160-
.resetViewBeforeLoading();
161-
}
162-
return defaultImageOptionsBuilder;
163-
}
164-
165140
private static final URLCodec urlCodec = new URLCodec();
166141

167142
public static String urlEncode(String url) {
@@ -181,21 +156,6 @@ public static long countBytes(InputStream stream) throws IOException {
181156
return count;
182157
}
183158

184-
public static String makeThumbUrl(String imageUrl, String filename, int width) {
185-
// Ugly Hack!
186-
// Update: OH DEAR GOD WHAT A HORRIBLE HACK I AM SO SORRY
187-
if (imageUrl.endsWith("webm")) {
188-
return imageUrl.replaceFirst("test/", "test/thumb/").replace("commons/", "commons/thumb/") + "/" + width + "px--" + filename.replaceAll("File:", "").replaceAll(" ", "_") + ".jpg";
189-
} else {
190-
String thumbUrl = imageUrl.replaceFirst("test/", "test/thumb/").replace("commons/", "commons/thumb/") + "/" + width + "px-" + filename.replaceAll("File:", "").replaceAll(" ", "_");
191-
if (thumbUrl.endsWith("jpg") || thumbUrl.endsWith("png") || thumbUrl.endsWith("jpeg")) {
192-
return thumbUrl;
193-
} else {
194-
return thumbUrl + ".png";
195-
}
196-
}
197-
}
198-
199159
public static String capitalize(String string) {
200160
return string.substring(0, 1).toUpperCase(Locale.getDefault()) + string.substring(1);
201161
}

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

-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ class ContributionViewHolder {
1414
final TextView seqNumView;
1515
final ProgressBar progressView;
1616

17-
String url;
18-
1917
ContributionViewHolder(View parent) {
2018
imageView = (MediaWikiImageView) parent.findViewById(R.id.contributionImage);
2119
titleView = (TextView)parent.findViewById(R.id.contributionTitle);

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

+1-42
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,13 @@
33
import android.app.Activity;
44
import android.content.Context;
55
import android.database.Cursor;
6-
import android.graphics.Bitmap;
76
import android.support.v4.widget.CursorAdapter;
8-
import android.text.TextUtils;
97
import android.view.View;
108
import android.view.ViewGroup;
119

12-
import com.nostra13.universalimageloader.core.DisplayImageOptions;
13-
import com.nostra13.universalimageloader.core.ImageLoader;
14-
import com.nostra13.universalimageloader.core.assist.FailReason;
15-
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
16-
17-
import fr.free.nrw.commons.MediaWikiImageView;
1810
import fr.free.nrw.commons.R;
19-
import fr.free.nrw.commons.Utils;
2011

2112
class ContributionsListAdapter extends CursorAdapter {
22-
23-
private DisplayImageOptions contributionDisplayOptions = Utils.getGenericDisplayOptions().build();
24-
2513
private Activity activity;
2614

2715
public ContributionsListAdapter(Activity activity, Cursor c, int flags) {
@@ -42,36 +30,7 @@ public void bindView(View view, Context context, Cursor cursor) {
4230
final ContributionViewHolder views = (ContributionViewHolder)view.getTag();
4331
final Contribution contribution = Contribution.fromCursor(cursor);
4432

45-
String actualUrl = (contribution.getLocalUri() != null && !TextUtils.isEmpty(contribution.getLocalUri().toString())) ? contribution.getLocalUri().toString() : contribution.getThumbnailUrl(640);
46-
47-
if(views.url == null || !views.url.equals(actualUrl)) {
48-
if(actualUrl.startsWith("http")) {
49-
MediaWikiImageView mwImageView = views.imageView;
50-
mwImageView.setMedia(contribution);
51-
// FIXME: For transparent images
52-
} else {
53-
54-
ImageLoader.getInstance().displayImage(actualUrl, views.imageView, contributionDisplayOptions, new SimpleImageLoadingListener() {
55-
56-
@Override
57-
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
58-
if(loadedImage.hasAlpha()) {
59-
views.imageView.setBackgroundResource(android.R.color.white);
60-
}
61-
views.seqNumView.setVisibility(View.GONE);
62-
}
63-
64-
@Override
65-
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
66-
super.onLoadingFailed(imageUri, view, failReason);
67-
MediaWikiImageView mwImageView = views.imageView;
68-
mwImageView.setMedia(contribution);
69-
}
70-
});
71-
}
72-
views.url = actualUrl;
73-
}
74-
33+
views.imageView.setMedia(contribution);
7534
views.titleView.setText(contribution.getDisplayTitle());
7635

7736
views.seqNumView.setText(String.valueOf(cursor.getPosition() + 1));

0 commit comments

Comments
 (0)