Add image-okhttp module

This commit is contained in:
Dimitry Ivanov 2018-12-24 13:39:50 +03:00
parent 30532f9e1d
commit eabe1d9994
6 changed files with 135 additions and 0 deletions

View File

@ -0,0 +1,25 @@
apply plugin: 'com.android.library'
android {
compileSdkVersion config['compile-sdk']
buildToolsVersion config['build-tools']
defaultConfig {
minSdkVersion config['min-sdk']
targetSdkVersion config['target-sdk']
versionCode 1
versionName version
}
}
dependencies {
api project(':markwon')
deps.with {
api it['okhttp']
}
}
registerArtifact(this)

View File

@ -0,0 +1 @@
<manifest package="ru.noties.markwon.image.okhttp" />

View File

@ -0,0 +1,45 @@
package ru.noties.markwon.image.okhttp;
import android.support.annotation.NonNull;
import java.util.Arrays;
import okhttp3.OkHttpClient;
import ru.noties.markwon.AbstractMarkwonPlugin;
import ru.noties.markwon.image.AsyncDrawableLoader;
import ru.noties.markwon.image.network.NetworkSchemeHandler;
/**
* Plugin to use OkHttpClient to obtain images from network (http and https schemes)
*
* @see #create()
* @see #create(OkHttpClient)
* @since 3.0.0
*/
@SuppressWarnings("WeakerAccess")
public class MarkwonImageOkHttpPlugin extends AbstractMarkwonPlugin {
@NonNull
public static MarkwonImageOkHttpPlugin create() {
return new MarkwonImageOkHttpPlugin(new OkHttpClient());
}
@NonNull
public static MarkwonImageOkHttpPlugin create(@NonNull OkHttpClient okHttpClient) {
return new MarkwonImageOkHttpPlugin(okHttpClient);
}
private final OkHttpClient client;
MarkwonImageOkHttpPlugin(@NonNull OkHttpClient client) {
this.client = client;
}
@Override
public void configureImages(@NonNull AsyncDrawableLoader.Builder builder) {
builder.addSchemeHandler(
Arrays.asList(NetworkSchemeHandler.SCHEME_HTTP, NetworkSchemeHandler.SCHEME_HTTPS),
new OkHttpSchemeHandler(client)
);
}
}

View File

@ -0,0 +1,57 @@
package ru.noties.markwon.image.okhttp;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import ru.noties.markwon.image.ImageItem;
import ru.noties.markwon.image.SchemeHandler;
class OkHttpSchemeHandler extends SchemeHandler {
private static final String HEADER_CONTENT_TYPE = "Content-Type";
private final OkHttpClient client;
OkHttpSchemeHandler(@NonNull OkHttpClient client) {
this.client = client;
}
@Nullable
@Override
public ImageItem handle(@NonNull String raw, @NonNull Uri uri) {
ImageItem out = null;
final Request request = new Request.Builder()
.url(raw)
.tag(raw)
.build();
Response response = null;
try {
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
if (response != null) {
final ResponseBody body = response.body();
if (body != null) {
final InputStream inputStream = body.byteStream();
if (inputStream != null) {
final String contentType = response.header(HEADER_CONTENT_TYPE);
out = new ImageItem(contentType, inputStream);
}
}
}
return out;
}
}

View File

@ -13,6 +13,12 @@ import java.net.URL;
import ru.noties.markwon.image.ImageItem; import ru.noties.markwon.image.ImageItem;
import ru.noties.markwon.image.SchemeHandler; import ru.noties.markwon.image.SchemeHandler;
/**
* A simple network scheme handler that is not dependent on any external libraries.
*
* @see #create()
* @since 3.0.0
*/
public class NetworkSchemeHandler extends SchemeHandler { public class NetworkSchemeHandler extends SchemeHandler {
public static final String SCHEME_HTTP = "http"; public static final String SCHEME_HTTP = "http";

View File

@ -5,6 +5,7 @@ include ':app',
':markwon-ext-strikethrough', ':markwon-ext-strikethrough',
':markwon-ext-tables', ':markwon-ext-tables',
':markwon-ext-tasklist', ':markwon-ext-tasklist',
':markwon-image-okhttp',
':markwon-image-svg', ':markwon-image-svg',
':markwon-image-gif', ':markwon-image-gif',
':markwon-syntax-highlight', ':markwon-syntax-highlight',