Move scheme names to handlers

This commit is contained in:
Dimitry Ivanov 2018-09-08 15:55:03 +03:00
parent fde9712454
commit e7d4c0fb33
5 changed files with 47 additions and 28 deletions

View File

@ -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

View File

@ -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");
}
} }

View File

@ -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");
}
} }

View 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");
}
} }

View File

@ -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();
} }