diff --git a/commons/pom.xml b/commons/pom.xml index 86939fbe1..3f024c02e 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -35,6 +35,11 @@ de.akquinet.android.androlog androlog + + com.nostra13.universalimageloader + universal-image-loader + 1.7.1 + diff --git a/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java b/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java index edd8429b2..e6a3b7ed4 100644 --- a/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java +++ b/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java @@ -1,15 +1,21 @@ package org.wikimedia.commons; import java.io.IOException; +import java.io.InputStream; import java.io.StringWriter; +import java.net.URI; import javax.xml.transform.*; import android.accounts.*; import android.app.Application; +import android.net.Uri; import android.os.AsyncTask; 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.w3c.dom.Node; import org.wikimedia.commons.auth.WikiAccountAuthenticator; @@ -39,6 +45,21 @@ public class CommonsApplication extends Application { 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 public void onCreate() { @@ -47,6 +68,11 @@ public class CommonsApplication extends Application { // Fire progress callbacks for every 3% of uploaded content System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0"); api = createMWApi(); + + + ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(getApplicationContext()) + .imageDownloader(new ContentUriImageDownloader()).build(); + ImageLoader.getInstance().init(imageLoaderConfiguration); } public MWApi getApi() { diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index 4ec587c00..d7fbf863e 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -1,5 +1,6 @@ package org.wikimedia.commons.contributions; +import android.graphics.Bitmap; import android.net.Uri; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; @@ -17,6 +18,13 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; 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.R; import org.wikimedia.commons.UploadService; @@ -50,8 +58,9 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load ImageView image = (ImageView)view.findViewById(R.id.contributionImage); TextView title = (TextView)view.findViewById(R.id.contributionTitle); - ImageLoaderTask imageLoader = new ImageLoaderTask(image); - imageLoader.execute(Uri.parse(cursor.getString(COLUMN_LOCALURI))); + Uri imageUri = Uri.parse(cursor.getString(COLUMN_LOCALURI)); + + ImageLoader.getInstance().displayImage(imageUri.toString(), image, contributionDisplayOptions); title.setText(cursor.getString(COLUMN_FILENAME)); @@ -60,8 +69,11 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load private LocalBroadcastManager localBroadcastManager; private ListView contributionsList; + private ContributionAdapter contributionsAdapter; + private DisplayImageOptions contributionDisplayOptions; + private String[] broadcastsToReceive = { UploadService.INTENT_CONTRIBUTION_STATE_CHANGED }; @@ -100,6 +112,11 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load @Override 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); contributionsAdapter = new ContributionAdapter(this, allContributions, 0); contributionsList.setAdapter(contributionsAdapter);