Use Android Universal Image Loader library for loading images

This commit is contained in:
YuviPanda 2013-02-02 13:31:27 +05:30
parent 6c7997fdfa
commit fe47b00081
3 changed files with 50 additions and 2 deletions

View file

@ -35,6 +35,11 @@
<groupId>de.akquinet.android.androlog</groupId> <groupId>de.akquinet.android.androlog</groupId>
<artifactId>androlog</artifactId> <artifactId>androlog</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.nostra13.universalimageloader</groupId>
<artifactId>universal-image-loader</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View file

@ -1,15 +1,21 @@
package org.wikimedia.commons; package org.wikimedia.commons;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter; import java.io.StringWriter;
import java.net.URI;
import javax.xml.transform.*; import javax.xml.transform.*;
import android.accounts.*; import android.accounts.*;
import android.app.Application; import android.app.Application;
import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.download.ImageDownloader;
import org.mediawiki.api.*; import org.mediawiki.api.*;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.wikimedia.commons.auth.WikiAccountAuthenticator; import org.wikimedia.commons.auth.WikiAccountAuthenticator;
@ -39,6 +45,21 @@ public class CommonsApplication extends Application {
return dbOpenHelper; return dbOpenHelper;
} }
public class ContentUriImageDownloader extends ImageDownloader {
@Override
protected InputStream getStreamFromNetwork(URI uri) throws IOException {
return super.getStream(uri); // Pass back to parent code, which handles http, https, etc
}
@Override
protected InputStream getStreamFromOtherSource(URI imageUri) throws IOException {
if(imageUri.getScheme().equals("content")) {
return getContentResolver().openInputStream(Uri.parse(imageUri.toString()));
}
throw new RuntimeException("Not a content URI: " + imageUri);
}
}
@Override @Override
public void onCreate() { public void onCreate() {
@ -47,6 +68,11 @@ public class CommonsApplication extends Application {
// Fire progress callbacks for every 3% of uploaded content // Fire progress callbacks for every 3% of uploaded content
System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0"); System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0");
api = createMWApi(); api = createMWApi();
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(getApplicationContext())
.imageDownloader(new ContentUriImageDownloader()).build();
ImageLoader.getInstance().init(imageLoaderConfiguration);
} }
public MWApi getApi() { public MWApi getApi() {

View file

@ -1,5 +1,6 @@
package org.wikimedia.commons.contributions; package org.wikimedia.commons.contributions;
import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader; import android.support.v4.content.CursorLoader;
@ -17,6 +18,13 @@ import android.widget.ImageView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import org.wikimedia.commons.ImageLoaderTask; import org.wikimedia.commons.ImageLoaderTask;
import org.wikimedia.commons.R; import org.wikimedia.commons.R;
import org.wikimedia.commons.UploadService; import org.wikimedia.commons.UploadService;
@ -50,8 +58,9 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
ImageView image = (ImageView)view.findViewById(R.id.contributionImage); ImageView image = (ImageView)view.findViewById(R.id.contributionImage);
TextView title = (TextView)view.findViewById(R.id.contributionTitle); TextView title = (TextView)view.findViewById(R.id.contributionTitle);
ImageLoaderTask imageLoader = new ImageLoaderTask(image); Uri imageUri = Uri.parse(cursor.getString(COLUMN_LOCALURI));
imageLoader.execute(Uri.parse(cursor.getString(COLUMN_LOCALURI)));
ImageLoader.getInstance().displayImage(imageUri.toString(), image, contributionDisplayOptions);
title.setText(cursor.getString(COLUMN_FILENAME)); title.setText(cursor.getString(COLUMN_FILENAME));
@ -60,8 +69,11 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
private LocalBroadcastManager localBroadcastManager; private LocalBroadcastManager localBroadcastManager;
private ListView contributionsList; private ListView contributionsList;
private ContributionAdapter contributionsAdapter; private ContributionAdapter contributionsAdapter;
private DisplayImageOptions contributionDisplayOptions;
private String[] broadcastsToReceive = { private String[] broadcastsToReceive = {
UploadService.INTENT_CONTRIBUTION_STATE_CHANGED UploadService.INTENT_CONTRIBUTION_STATE_CHANGED
}; };
@ -100,6 +112,11 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load
@Override @Override
protected void onAuthCookieAcquired(String authCookie) { protected void onAuthCookieAcquired(String authCookie) {
contributionDisplayOptions = new DisplayImageOptions.Builder().cacheInMemory()
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.displayer(new FadeInBitmapDisplayer(300))
.resetViewBeforeLoading().build();
Cursor allContributions = getContentResolver().query(ContributionsContentProvider.BASE_URI, CONTRIBUTIONS_PROJECTION, CONTRIBUTION_SELECTION, null, CONTRIBUTION_SORT); Cursor allContributions = getContentResolver().query(ContributionsContentProvider.BASE_URI, CONTRIBUTIONS_PROJECTION, CONTRIBUTION_SELECTION, null, CONTRIBUTION_SORT);
contributionsAdapter = new ContributionAdapter(this, allContributions, 0); contributionsAdapter = new ContributionAdapter(this, allContributions, 0);
contributionsList.setAdapter(contributionsAdapter); contributionsList.setAdapter(contributionsAdapter);