Skip to content

Commit 8704ee7

Browse files
author
farfromrefug
committed
feat(image): headers property support. Thanks to @Logikgate
1 parent 76bb570 commit 8704ee7

File tree

10 files changed

+29
-19
lines changed

10 files changed

+29
-19
lines changed

packages/image/blueprint.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ Number value used as the downsampled width of the imageModule drawable.
372372
<@nativescript-community/ui-image:Img decodeHeight="100"/>
373373
```
374374

375-
- **headers** (iOS only)
375+
- **headers**
376376

377377
Object that defines custom request headers to be sent with the image download request.
378378

packages/image/platforms/android/include.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import groovy.json.JsonSlurper
22
dependencies {
3-
def frescoVersion = project.hasProperty("frescoVersion") ? project.frescoVersion : "3.0.0"
3+
def frescoVersion = project.hasProperty("frescoVersion") ? project.frescoVersion : "3.1.3"
44

55
implementation("com.facebook.fresco:fresco:$frescoVersion") {
66
exclude group: 'com.facebook.soloader', module: 'soloader'

packages/image/platforms/android/java/com/nativescript/image/DraweeView.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ protected void onDraw(Canvas canvas) {
272272
public void setUri(android.net.Uri uri, String jsonOptions, com.facebook.drawee.controller.ControllerListener listener) {
273273
ImageRequestBuilder requestBuilder = ImageRequestBuilder.newBuilderWithSource(uri).setRotationOptions( com.facebook.imagepipeline.common.RotationOptions.autoRotate());
274274
JSONObject object = null;
275+
JSONObject headers = null;
275276
if (jsonOptions.length() > 2) {
276277
try {
277278
object = new JSONObject(jsonOptions);
@@ -297,9 +298,9 @@ public void setUri(android.net.Uri uri, String jsonOptions, com.facebook.drawee.
297298
int blurDownSampling = object.optInt("blurDownSampling", 1);
298299
requestBuilder = requestBuilder.setPostprocessor(new com.nativescript.image.ScalingBlurPostprocessor(2, blurRadius, blurDownSampling));
299300
}
301+
headers = object.optJSONObject("headers");
300302
}
301-
// ImageRequest request = requestBuilder.build();
302-
ImageRequest request = NetworkImageRequest.fromBuilderWithHeaders(requestBuilder, object.optJSONObject("headers"));
303+
ImageRequest request = NetworkImageRequest.fromBuilderWithHeaders(requestBuilder, headers);
303304

304305
// if (object != null && object.optBoolean("async") == false) {
305306
// DataSource<CloseableReference<CloseableImage>> dataSource =

packages/image/platforms/android/java/com/nativescript/image/NetworkImageRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import java.util.Map;
1111
import java.util.Iterator;
1212

13+
import android.util.Log;
14+
1315
/** Extended ImageRequest with request headers */
1416
public class NetworkImageRequest extends ImageRequest {
1517

packages/image/platforms/android/java/com/nativescript/image/OkHttpNetworkFetcher.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.net.Uri;
44
import android.os.SystemClock;
5+
import android.util.Log;
56
import com.facebook.imagepipeline.producers.NetworkFetcher;
67
import java.util.Collections;
78
import java.util.HashMap;
@@ -34,8 +35,8 @@ public void fetch(
3435
final NetworkFetcher.Callback callback) {
3536
fetchState.submitTime = SystemClock.elapsedRealtime();
3637
final Uri uri = fetchState.getUri();
37-
Map<String, String> requestHeaders = null;
38-
if (fetchState.getContext().getImageRequest() instanceof NetworkImageRequest) {
38+
Map<String, String> requestHeaders = null;
39+
if (fetchState.getContext().getImageRequest() instanceof NetworkImageRequest) {
3940
NetworkImageRequest networkImageRequest =
4041
(NetworkImageRequest) fetchState.getContext().getImageRequest();
4142
requestHeaders = networkImageRequest.getHeaders();
@@ -45,7 +46,6 @@ public void fetch(
4546
}
4647
final Request request =
4748
new Request.Builder()
48-
.cacheControl(new CacheControl.Builder().noStore().build())
4949
.url(uri.toString())
5050
.headers(Headers.of(requestHeaders))
5151
.get()

packages/image/platforms/android/native-api-usage.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727
"com.facebook.drawee.backends.pipeline.info:ImagePerfData",
2828
"com.facebook.drawee.controller:ControllerListener",
2929
"com.nativescript.image:DraweeView",
30+
"com.nativescript.image:OkHttpNetworkFetcher",
3031
"com.nativescript.image:ScalingBlurPostprocessor",
32+
"com.facebook.imagepipeline.producers:NetworkFetcher",
33+
"com.facebook.imagepipeline.backends.okhttp3:OkHttpImagePipelineConfigFactory",
34+
"okhttp3:OkHttpClient",
3135
"android.graphics.drawable:Animatable",
3236
"com.facebook.imagepipeline.image:ImageInfo",
3337
"com.facebook.common.util:UriUtil",

src/image/index-common.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export class EventData implements IEventData {
163163
export type Stretch = 'none' | 'fill' | 'aspectFill' | 'aspectFit';
164164

165165
export const srcProperty = new Property<ImageBase, string | ImageSource | ImageAsset>({ name: 'src' });
166-
export const headersProperty = new Property<ImageBase, Map<string, string>>({ name: 'headers' });
166+
export const headersProperty = new Property<ImageBase, Record<string, string>>({ name: 'headers' });
167167
export const lowerResSrcProperty = new Property<ImageBase, string>({ name: 'lowerResSrc' });
168168
export const placeholderImageUriProperty = new Property<ImageBase, string>({ name: 'placeholderImageUri' });
169169
export const failureImageUriProperty = new Property<ImageBase, string>({ name: 'failureImageUri' });
@@ -301,6 +301,7 @@ export abstract class ImageBase extends View {
301301
public alwaysFade: boolean;
302302
public noCache: boolean;
303303
public tintColor: Color;
304+
headers: Record<string, string>;
304305

305306
public readonly isLoading: boolean;
306307

src/image/index.android.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
blurRadiusProperty,
2020
fadeDurationProperty,
2121
failureImageUriProperty,
22+
headersProperty,
2223
imageRotationProperty,
2324
lowerResSrcProperty,
2425
needRequestImage,
@@ -553,6 +554,11 @@ export class Img extends ImageBase {
553554
this.initImage();
554555
}
555556

557+
@needRequestImage
558+
[headersProperty.setNative](value) {
559+
this.initImage();
560+
}
561+
556562
[backgroundInternalProperty.setNative](value: Background) {
557563
super[backgroundInternalProperty.setNative](value);
558564
this.nativeViewProtected.setClipToOutline(value?.hasBorderRadius());
@@ -735,7 +741,8 @@ export class Img extends ImageBase {
735741
lowerResSrc: this.lowerResSrc ? getUri(this.lowerResSrc, false) : undefined,
736742
blurDownSampling: this.blurDownSampling,
737743
autoPlayAnimations: this.autoPlayAnimations,
738-
tapToRetryEnabled: this.tapToRetryEnabled
744+
tapToRetryEnabled: this.tapToRetryEnabled,
745+
headers: this.headers
739746
});
740747
view.setUri(uri, options, this.controllerListener);
741748
// const async = this.loadMode === 'async';

src/image/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ export class Img extends View {
195195
decodeHeight: number;
196196

197197
/**
198-
* IOS: add custom headers to the image download request
198+
* add custom headers to the image download request
199199
*/
200200
headers: Record<string, string>;
201201

src/image/index.ios.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@ export class Img extends ImageBase {
277277
mCacheKey: string;
278278

279279
contextOptions = null;
280-
headers: Map<string, string> = new Map<string, string>();
281280

282281
get cacheKey() {
283282
return this.mCacheKey;
@@ -525,11 +524,11 @@ export class Img extends ImageBase {
525524
});
526525
}
527526

528-
if (this.headers.size > 0) {
527+
if (this.headers) {
529528
const requestModifier = SDWebImageDownloaderRequestModifier.requestModifierWithBlock((request: NSURLRequest): NSURLRequest => {
530529
const newRequest = request.mutableCopy() as NSMutableURLRequest;
531-
this.headers.forEach((value, key) => {
532-
newRequest.addValueForHTTPHeaderField(value, key);
530+
Object.keys(this.headers).forEach((k) => {
531+
newRequest.addValueForHTTPHeaderField(this.headers[k], k);
533532
});
534533

535534
return newRequest.copy();
@@ -589,12 +588,8 @@ export class Img extends ImageBase {
589588
this.progressBarColor = value;
590589
}
591590

592-
[headersProperty.getDefault](): Map<string, string> {
593-
return new Map<string, string>();
594-
}
595-
591+
@needRequestImage
596592
[headersProperty.setNative](value) {
597-
this.headers = value;
598593
}
599594

600595
[failureImageUriProperty.setNative]() {

0 commit comments

Comments
 (0)