Skip to content

Commit 9d77de9

Browse files
committed
Merge master -> new_disc_cache_api
1 parent bf79f2a commit 9d77de9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+2040
-808
lines changed

library/AndroidManifest.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.nostra13.universalimageloader"
4-
android:versionCode="34"
5-
android:versionName="1.8.6" >
4+
android:versionCode="35"
5+
android:versionName="1.9.0" >
66

77
<uses-sdk
88
android:minSdkVersion="5"

library/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>com.nostra13.universalimageloader</groupId>
1212
<artifactId>parent</artifactId>
13-
<version>1.8.6-SNAPSHOT</version>
13+
<version>1.9.1-SNAPSHOT</version>
1414
</parent>
1515

1616
<dependencies>

library/src/com/nostra13/universalimageloader/cache/disc/BaseDiscCache.java

+14-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@
2020
import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
2121
import com.nostra13.universalimageloader.utils.IoUtils;
2222

23-
import java.io.*;
23+
import java.io.BufferedOutputStream;
24+
import java.io.File;
25+
import java.io.FileOutputStream;
26+
import java.io.IOException;
27+
import java.io.InputStream;
28+
import java.io.OutputStream;
2429

2530
/**
2631
* Base disc cache. Implements common functionality for disc cache.
@@ -67,19 +72,24 @@ public File get(String imageUri) {
6772
}
6873

6974
@Override
70-
public boolean save(String imageUri, InputStream imageStream) throws IOException {
75+
public boolean save(String imageUri, InputStream imageStream, final IoUtils.CopyListener listener)
76+
throws IOException {
7177
File imageFile = getFile(imageUri);
78+
boolean loaded = false;
7279
try {
7380
OutputStream os = new BufferedOutputStream(new FileOutputStream(imageFile), BUFFER_SIZE);
7481
try {
75-
IoUtils.copyStream(imageStream, os, BUFFER_SIZE);
82+
loaded = IoUtils.copyStream(imageStream, os, listener, BUFFER_SIZE);
7683
} finally {
7784
IoUtils.closeSilently(os);
7885
}
7986
} finally {
8087
IoUtils.closeSilently(imageStream);
88+
if (!loaded) {
89+
imageFile.delete();
90+
}
8191
}
82-
return true;
92+
return loaded;
8393
}
8494

8595
@Override

library/src/com/nostra13/universalimageloader/cache/disc/DiscCacheAware.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.nostra13.universalimageloader.cache.disc;
1717

1818
import android.graphics.Bitmap;
19+
import com.nostra13.universalimageloader.utils.IoUtils;
1920

2021
import java.io.File;
2122
import java.io.IOException;
@@ -33,7 +34,7 @@ public interface DiscCacheAware {
3334

3435
File get(String imageUri);
3536

36-
boolean save(String imageUri, InputStream imageStream) throws IOException;
37+
boolean save(String imageUri, InputStream imageStream, IoUtils.CopyListener listener) throws IOException;
3738

3839
boolean save(String imageUri, Bitmap bitmap, Bitmap.CompressFormat format, int quality) throws IOException;
3940

library/src/com/nostra13/universalimageloader/cache/disc/LimitedDiscCache.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import android.graphics.Bitmap;
1919
import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
2020
import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
21+
import com.nostra13.universalimageloader.utils.IoUtils;
2122

2223
import java.io.File;
2324
import java.io.IOException;
@@ -103,8 +104,8 @@ public File get(String key) {
103104
}
104105

105106
@Override
106-
public boolean save(String uri, InputStream imageStream) throws IOException {
107-
boolean saved = super.save(uri, imageStream);
107+
public boolean save(String uri, InputStream imageStream, IoUtils.CopyListener listener) throws IOException {
108+
boolean saved = super.save(uri, imageStream, listener);
108109
if (saved) {
109110
rememberUsage(uri);
110111
trimCacheSize();

library/src/com/nostra13/universalimageloader/cache/disc/impl/LimitedAgeDiscCache.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.nostra13.universalimageloader.cache.disc.BaseDiscCache;
2020
import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
2121
import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
22+
import com.nostra13.universalimageloader.utils.IoUtils;
2223

2324
import java.io.File;
2425
import java.io.IOException;
@@ -84,8 +85,8 @@ public File get(String imageUri) {
8485
}
8586

8687
@Override
87-
public boolean save(String imageUri, InputStream imageStream) throws IOException {
88-
boolean saved = super.save(imageUri, imageStream);
88+
public boolean save(String imageUri, InputStream imageStream, IoUtils.CopyListener listener) throws IOException {
89+
boolean saved = super.save(imageUri, imageStream, listener);
8990
rememberUsage(imageUri);
9091
return saved;
9192
}

library/src/com/nostra13/universalimageloader/cache/disc/impl/LruDiscCache.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ public File get(String imageUri) {
5656
}
5757

5858
@Override
59-
public boolean save(String imageUri, InputStream imageStream) throws IOException {
59+
public boolean save(String imageUri, InputStream imageStream, IoUtils.CopyListener listener) throws IOException {
6060
DiskLruCache.Editor editor = cache.edit(getKey(imageUri));
6161
if (editor == null) {
6262
return false;
6363
}
6464

6565
OutputStream os = new BufferedOutputStream(editor.newOutputStream(0), BUFFER_SIZE);
66-
IoUtils.copyStream(imageStream, os, BUFFER_SIZE);
66+
boolean copied = IoUtils.copyStream(imageStream, os, listener, BUFFER_SIZE);
6767
editor.commit();
68-
return true;
68+
return copied;
6969
}
7070

7171
@Override

library/src/com/nostra13/universalimageloader/core/DefaultConfigurationFactory.java

+17-8
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@
3838
import com.nostra13.universalimageloader.utils.StorageUtils;
3939

4040
import java.io.File;
41-
import java.util.concurrent.*;
41+
import java.util.concurrent.BlockingQueue;
42+
import java.util.concurrent.Executor;
43+
import java.util.concurrent.LinkedBlockingQueue;
44+
import java.util.concurrent.ThreadFactory;
45+
import java.util.concurrent.ThreadPoolExecutor;
46+
import java.util.concurrent.TimeUnit;
4247
import java.util.concurrent.atomic.AtomicInteger;
4348

4449
/**
@@ -50,10 +55,13 @@
5055
public class DefaultConfigurationFactory {
5156

5257
/** Creates default implementation of task executor */
53-
public static Executor createExecutor(int threadPoolSize, int threadPriority, QueueProcessingType tasksProcessingType) {
58+
public static Executor createExecutor(int threadPoolSize, int threadPriority,
59+
QueueProcessingType tasksProcessingType) {
5460
boolean lifo = tasksProcessingType == QueueProcessingType.LIFO;
55-
BlockingQueue<Runnable> taskQueue = lifo ? new LIFOLinkedBlockingDeque<Runnable>() : new LinkedBlockingQueue<Runnable>();
56-
return new ThreadPoolExecutor(threadPoolSize, threadPoolSize, 0L, TimeUnit.MILLISECONDS, taskQueue, createThreadFactory(threadPriority));
61+
BlockingQueue<Runnable> taskQueue =
62+
lifo ? new LIFOLinkedBlockingDeque<Runnable>() : new LinkedBlockingQueue<Runnable>();
63+
return new ThreadPoolExecutor(threadPoolSize, threadPoolSize, 0L, TimeUnit.MILLISECONDS, taskQueue,
64+
createThreadFactory(threadPriority));
5765
}
5866

5967
/** Creates {@linkplain HashCodeFileNameGenerator default implementation} of FileNameGenerator */
@@ -62,7 +70,8 @@ public static FileNameGenerator createFileNameGenerator() {
6270
}
6371

6472
/** Creates default implementation of {@link DiscCacheAware} depends on incoming parameters */
65-
public static DiscCacheAware createDiscCache(Context context, FileNameGenerator discCacheFileNameGenerator, int discCacheSize, int discCacheFileCount) {
73+
public static DiscCacheAware createDiscCache(Context context, FileNameGenerator discCacheFileNameGenerator,
74+
int discCacheSize, int discCacheFileCount) {
6675
if (discCacheSize > 0) {
6776
File individualCacheDir = StorageUtils.getIndividualCacheDirectory(context);
6877
return new TotalSizeLimitedDiscCache(individualCacheDir, discCacheFileNameGenerator, discCacheSize);
@@ -76,8 +85,7 @@ public static DiscCacheAware createDiscCache(Context context, FileNameGenerator
7685
}
7786

7887
/** Creates reserve disc cache which will be used if primary disc cache becomes unavailable */
79-
public static DiscCacheAware createReserveDiscCache(Context context) {
80-
File cacheDir = context.getCacheDir();
88+
public static DiscCacheAware createReserveDiscCache(File cacheDir) {
8189
File individualDir = new File(cacheDir, "uil-images");
8290
if (individualDir.exists() || individualDir.mkdir()) {
8391
cacheDir = individualDir;
@@ -136,9 +144,10 @@ private static class DefaultThreadFactory implements ThreadFactory {
136144
this.threadPriority = threadPriority;
137145
SecurityManager s = System.getSecurityManager();
138146
group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
139-
namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-";
147+
namePrefix = "uil-pool-" + poolNumber.getAndIncrement() + "-thread-";
140148
}
141149

150+
@Override
142151
public Thread newThread(Runnable r) {
143152
Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
144153
if (t.isDaemon()) t.setDaemon(false);

library/src/com/nostra13/universalimageloader/core/DisplayBitmapTask.java

+22-24
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,14 @@
1616
package com.nostra13.universalimageloader.core;
1717

1818
import android.graphics.Bitmap;
19-
import android.widget.ImageView;
2019
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
2120
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
2221
import com.nostra13.universalimageloader.core.display.BitmapDisplayer;
22+
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
2323
import com.nostra13.universalimageloader.utils.L;
2424

25-
import java.lang.ref.Reference;
26-
2725
/**
28-
* Displays bitmap in {@link ImageView}. Must be called on UI thread.
26+
* Displays bitmap in {@link com.nostra13.universalimageloader.core.imageaware.ImageAware}. Must be called on UI thread.
2927
*
3028
* @author Sergey Tarasevich (nostra13[at]gmail[dot]com)
3129
* @see ImageLoadingListener
@@ -34,13 +32,13 @@
3432
*/
3533
final class DisplayBitmapTask implements Runnable {
3634

37-
private static final String LOG_DISPLAY_IMAGE_IN_IMAGEVIEW = "Display image in ImageView (loaded from %1$s) [%2$s]";
38-
private static final String LOG_TASK_CANCELLED_IMAGEVIEW_REUSED = "ImageView is reused for another image. Task is cancelled. [%s]";
39-
private static final String LOG_TASK_CANCELLED_IMAGEVIEW_LOST = "ImageView was collected by GC. Task is cancelled. [%s]";
35+
private static final String LOG_DISPLAY_IMAGE_IN_IMAGEAWARE = "Display image in ImageAware (loaded from %1$s) [%2$s]";
36+
private static final String LOG_TASK_CANCELLED_IMAGEAWARE_REUSED = "ImageAware is reused for another image. Task is cancelled. [%s]";
37+
private static final String LOG_TASK_CANCELLED_IMAGEAWARE_COLLECTED = "ImageAware was collected by GC. Task is cancelled. [%s]";
4038

4139
private final Bitmap bitmap;
4240
private final String imageUri;
43-
private final Reference<ImageView> imageViewRef;
41+
private final ImageAware imageAware;
4442
private final String memoryCacheKey;
4543
private final BitmapDisplayer displayer;
4644
private final ImageLoadingListener listener;
@@ -49,10 +47,11 @@ final class DisplayBitmapTask implements Runnable {
4947

5048
private boolean loggingEnabled;
5149

52-
public DisplayBitmapTask(Bitmap bitmap, ImageLoadingInfo imageLoadingInfo, ImageLoaderEngine engine, LoadedFrom loadedFrom) {
50+
public DisplayBitmapTask(Bitmap bitmap, ImageLoadingInfo imageLoadingInfo, ImageLoaderEngine engine,
51+
LoadedFrom loadedFrom) {
5352
this.bitmap = bitmap;
5453
imageUri = imageLoadingInfo.uri;
55-
imageViewRef = imageLoadingInfo.imageViewRef;
54+
imageAware = imageLoadingInfo.imageAware;
5655
memoryCacheKey = imageLoadingInfo.memoryCacheKey;
5756
displayer = imageLoadingInfo.options.getDisplayer();
5857
listener = imageLoadingInfo.listener;
@@ -61,24 +60,23 @@ public DisplayBitmapTask(Bitmap bitmap, ImageLoadingInfo imageLoadingInfo, Image
6160
}
6261

6362
public void run() {
64-
ImageView imageView = imageViewRef.get();
65-
if (imageView == null) {
66-
if (loggingEnabled) L.d(LOG_TASK_CANCELLED_IMAGEVIEW_LOST, memoryCacheKey);
67-
listener.onLoadingCancelled(imageUri, imageView);
68-
} else if (isViewWasReused(imageView)) {
69-
if (loggingEnabled) L.d(LOG_TASK_CANCELLED_IMAGEVIEW_REUSED, memoryCacheKey);
70-
listener.onLoadingCancelled(imageUri, imageView);
63+
if (imageAware.isCollected()) {
64+
if (loggingEnabled) L.d(LOG_TASK_CANCELLED_IMAGEAWARE_COLLECTED, memoryCacheKey);
65+
listener.onLoadingCancelled(imageUri, imageAware.getWrappedView());
66+
} else if (isViewWasReused()) {
67+
if (loggingEnabled) L.d(LOG_TASK_CANCELLED_IMAGEAWARE_REUSED, memoryCacheKey);
68+
listener.onLoadingCancelled(imageUri, imageAware.getWrappedView());
7169
} else {
72-
if (loggingEnabled) L.d(LOG_DISPLAY_IMAGE_IN_IMAGEVIEW, loadedFrom, memoryCacheKey);
73-
Bitmap displayedBitmap = displayer.display(bitmap, imageView, loadedFrom);
74-
listener.onLoadingComplete(imageUri, imageView, displayedBitmap);
75-
engine.cancelDisplayTaskFor(imageView);
70+
if (loggingEnabled) L.d(LOG_DISPLAY_IMAGE_IN_IMAGEAWARE, loadedFrom, memoryCacheKey);
71+
displayer.display(bitmap, imageAware, loadedFrom);
72+
listener.onLoadingComplete(imageUri, imageAware.getWrappedView(), bitmap);
73+
engine.cancelDisplayTaskFor(imageAware);
7674
}
7775
}
7876

79-
/** Checks whether memory cache key (image URI) for current ImageView is actual */
80-
private boolean isViewWasReused(ImageView imageView) {
81-
String currentCacheKey = engine.getLoadingUriForView(imageView);
77+
/** Checks whether memory cache key (image URI) for current ImageAware is actual */
78+
private boolean isViewWasReused() {
79+
String currentCacheKey = engine.getLoadingUriForView(imageAware);
8280
return !memoryCacheKey.equals(currentCacheKey);
8381
}
8482

0 commit comments

Comments
 (0)