Move scheme names to handlers
This commit is contained in:
parent
fde9712454
commit
e7d4c0fb33
@ -225,8 +225,18 @@ public class AsyncDrawableLoader implements AsyncDrawable.Loader {
|
|||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public Builder schemeHandler(@NonNull String scheme, @Nullable SchemeHandler schemeHandler) {
|
public Builder addSchemeHandler(@NonNull SchemeHandler schemeHandler) {
|
||||||
schemeHandlers.put(scheme, schemeHandler);
|
|
||||||
|
SchemeHandler previous;
|
||||||
|
|
||||||
|
for (String scheme : schemeHandler.schemes()) {
|
||||||
|
previous = schemeHandlers.put(scheme, schemeHandler);
|
||||||
|
if (previous != null) {
|
||||||
|
throw new IllegalStateException(String.format("Multiple scheme handlers handle " +
|
||||||
|
"the same scheme: `%s`, %s %s", scheme, previous, schemeHandler));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,33 +271,13 @@ public class AsyncDrawableLoader implements AsyncDrawable.Loader {
|
|||||||
|
|
||||||
// @since 2.0.0
|
// @since 2.0.0
|
||||||
// put default scheme handlers (to mimic previous behavior)
|
// put default scheme handlers (to mimic previous behavior)
|
||||||
{
|
if (schemeHandlers.size() == 0) {
|
||||||
|
if (client == null) {
|
||||||
final boolean hasHttp = schemeHandlers.containsKey("http");
|
client = new OkHttpClient();
|
||||||
final boolean hasHttps = schemeHandlers.containsKey("https");
|
|
||||||
|
|
||||||
if (!hasHttp || !hasHttps) {
|
|
||||||
|
|
||||||
if (client == null) {
|
|
||||||
client = new OkHttpClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
final NetworkSchemeHandler handler = NetworkSchemeHandler.create(client);
|
|
||||||
if (!hasHttp) {
|
|
||||||
schemeHandlers.put("http", handler);
|
|
||||||
}
|
|
||||||
if (!hasHttps) {
|
|
||||||
schemeHandlers.put("https", handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!schemeHandlers.containsKey("file")) {
|
|
||||||
schemeHandlers.put("file", FileSchemeHandler.createWithAssets(resources.getAssets()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!schemeHandlers.containsKey("data")) {
|
|
||||||
schemeHandlers.put("data", DataUriSchemeHandler.create());
|
|
||||||
}
|
}
|
||||||
|
addSchemeHandler(NetworkSchemeHandler.create(client));
|
||||||
|
addSchemeHandler(FileSchemeHandler.createWithAssets(resources.getAssets()));
|
||||||
|
addSchemeHandler(DataUriSchemeHandler.create());
|
||||||
}
|
}
|
||||||
|
|
||||||
// add default media decoders if not specified
|
// add default media decoders if not specified
|
||||||
|
@ -6,6 +6,8 @@ import android.support.annotation.Nullable;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
@ -57,4 +59,10 @@ public class DataUriSchemeHandler extends SchemeHandler {
|
|||||||
public void cancel(@NonNull String raw) {
|
public void cancel(@NonNull String raw) {
|
||||||
// no op
|
// no op
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Collection<String> schemes() {
|
||||||
|
return Collections.singleton("data");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,4 +100,10 @@ public class FileSchemeHandler extends SchemeHandler {
|
|||||||
public void cancel(@NonNull String raw) {
|
public void cancel(@NonNull String raw) {
|
||||||
// no op
|
// no op
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Collection<String> schemes() {
|
||||||
|
return Collections.singleton("file");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@ import android.support.annotation.Nullable;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import okhttp3.Call;
|
import okhttp3.Call;
|
||||||
@ -78,4 +80,10 @@ public class NetworkSchemeHandler extends SchemeHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Collection<String> schemes() {
|
||||||
|
return Arrays.asList("http", "https");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import android.net.Uri;
|
|||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
@ -13,4 +15,7 @@ public abstract class SchemeHandler {
|
|||||||
public abstract ImageItem handle(@NonNull String raw, @NonNull Uri uri);
|
public abstract ImageItem handle(@NonNull String raw, @NonNull Uri uri);
|
||||||
|
|
||||||
public abstract void cancel(@NonNull String raw);
|
public abstract void cancel(@NonNull String raw);
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public abstract Collection<String> schemes();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user