diff --git a/android/src/main/java/org/vovkasm/WebImage/WebImageView.java b/android/src/main/java/org/vovkasm/WebImage/WebImageView.java index df57e71b..045e4b30 100644 --- a/android/src/main/java/org/vovkasm/WebImage/WebImageView.java +++ b/android/src/main/java/org/vovkasm/WebImage/WebImageView.java @@ -18,6 +18,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.ViewTarget; +import com.bumptech.glide.load.model.GlideUrl; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.FloatUtil; @@ -41,7 +42,7 @@ class WebImageView extends View { public static final int DEFAULT_BORDER_COLOR = Color.TRANSPARENT; public static final float DEFAULT_BORDER_RADIUS = 0f; - private Uri mUri; + private GlideUrl mUri; private @ScaleType int mScaleType = SCALE_CONTAIN; private BoxMetrics mBoxMetrics; @@ -150,7 +151,7 @@ public void setScaleType(@ScaleType int scaleType) { return mScaleType; } - void setImageUri(Uri uri) { + void setImageUri(GlideUrl uri) { if (uri.equals(mUri)) return; mUri = uri; ThemedReactContext ctx = getThemedReactContext(); @@ -164,7 +165,7 @@ void setImageUri(Uri uri) { Glide.with(activity).load(mUri).asBitmap().into(mGlideTarget); } - final Uri getImageUri() { + final GlideUrl getImageUri() { return mUri; } @@ -243,7 +244,7 @@ public void onLoadFailed(Exception e, Drawable errorDrawable) { } else { event.putString("error", "Unknown"); } - final Uri uri = view.getImageUri(); + final GlideUrl uri = view.getImageUri(); if (uri != null) { event.putString("uri", uri.toString()); } diff --git a/android/src/main/java/org/vovkasm/WebImage/WebImageViewManager.java b/android/src/main/java/org/vovkasm/WebImage/WebImageViewManager.java index 3d7d7453..696f0560 100644 --- a/android/src/main/java/org/vovkasm/WebImage/WebImageViewManager.java +++ b/android/src/main/java/org/vovkasm/WebImage/WebImageViewManager.java @@ -1,10 +1,13 @@ package org.vovkasm.WebImage; import android.graphics.Color; -import android.net.Uri; import com.bumptech.glide.Glide; +import com.bumptech.glide.load.model.GlideUrl; +import com.bumptech.glide.load.model.LazyHeaders; +import com.facebook.react.bridge.NoSuchKeyException; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.BaseViewManager; import com.facebook.react.uimanager.PixelUtil; @@ -53,8 +56,26 @@ public Class getShadowNodeClass() { public void setSrc(WebImageView view, @Nullable ReadableMap source) { if (source == null) return; final String uriProp = source.getString("uri"); - final Uri uri = Uri.parse(uriProp); - view.setImageUri(uri); + + // Get the headers prop and add to glideUrl + GlideUrl glideUrl; + try { + final ReadableMap headersMap = source.getMap("headers"); + ReadableMapKeySetIterator headersIterator = headersMap.keySetIterator(); + LazyHeaders.Builder headersBuilder = new LazyHeaders.Builder(); + while (headersIterator.hasNextKey()) { + String key = headersIterator.nextKey(); + String value = headersMap.getString(key); + headersBuilder.addHeader(key, value); + } + LazyHeaders headers = headersBuilder.build(); + glideUrl = new GlideUrl(uriProp, headers); + } catch (NoSuchKeyException e) { + // If there is no headers object, return just the uri + glideUrl = new GlideUrl(uriProp); + } + + view.setImageUri(glideUrl); } @ReactProp(name="resizeMode")