@nativescript-community/ui-image 4.6.6 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +4 -20
  3. package/index-common.d.ts +47 -18
  4. package/index-common.js +5 -69
  5. package/index-common.js.map +1 -1
  6. package/index.android.d.ts +33 -60
  7. package/index.android.js +597 -702
  8. package/index.android.js.map +1 -1
  9. package/index.d.ts +17 -92
  10. package/index.ios.d.ts +5 -10
  11. package/index.ios.js +72 -54
  12. package/index.ios.js.map +1 -1
  13. package/package.json +4 -4
  14. package/platforms/android/include.gradle +21 -16
  15. package/platforms/android/java/com/nativescript/image/CacheKeyStore.java +65 -0
  16. package/platforms/android/java/com/nativescript/image/CapturingEngineKeyFactory.java +43 -0
  17. package/platforms/android/java/com/nativescript/image/CompositeRequestListener.java +58 -0
  18. package/platforms/android/java/com/nativescript/image/ConditionalCrossFadeFactory.java +33 -0
  19. package/platforms/android/java/com/nativescript/image/CustomDataFetcher.java +124 -0
  20. package/platforms/android/java/com/nativescript/image/CustomGlideModule.java +220 -0
  21. package/platforms/android/java/com/nativescript/image/CustomGlideUrl.java +52 -0
  22. package/platforms/android/java/com/nativescript/image/CustomUrlLoader.java +74 -0
  23. package/platforms/android/java/com/nativescript/image/EvictionManager.java +735 -0
  24. package/platforms/android/java/com/nativescript/image/ExtractRequestOptions.java +109 -0
  25. package/platforms/android/java/com/nativescript/image/ImageLoadSourceCallback.java +5 -0
  26. package/platforms/android/java/com/nativescript/image/ImageProgressCallback.java +5 -0
  27. package/platforms/android/java/com/nativescript/image/LoadSourceInterceptor.java +28 -0
  28. package/platforms/android/java/com/nativescript/image/MatrixDrawable.java +200 -0
  29. package/platforms/android/java/com/nativescript/image/MatrixDrawableImageViewTarget.java +154 -0
  30. package/platforms/android/java/com/nativescript/image/MatrixImageView.java +696 -0
  31. package/platforms/android/java/com/nativescript/image/ProgressInterceptor.java +25 -0
  32. package/platforms/android/java/com/nativescript/image/ProgressResponseBody.java +70 -0
  33. package/platforms/android/java/com/nativescript/image/RecordingDigest.java +48 -0
  34. package/platforms/android/java/com/nativescript/image/RecreatedResourceKey.java +95 -0
  35. package/platforms/android/java/com/nativescript/image/SaveKeysRequestListener.java +145 -0
  36. package/platforms/android/java/com/nativescript/image/ScaleUtils.java +129 -0
  37. package/platforms/android/java/com/nativescript/image/SharedPrefCacheKeyStore.java +92 -0
  38. package/platforms/android/native-api-usage.json +39 -37
  39. package/platforms/ios/Podfile +1 -1
  40. package/references.d.ts +0 -1
  41. package/tsconfig.tsbuildinfo +1 -1
  42. package/typings/android.d.ts +4 -27
  43. package/typings/glide.android.d.ts +9395 -0
  44. package/typings/glide.okhttp.android.d.ts +104 -0
  45. package/typings/glide.transform.android.d.ts +540 -0
  46. package/typings/ui_image.android.d.ts +517 -0
  47. package/platforms/android/java/com/nativescript/image/BaseDataSubscriber.java +0 -22
  48. package/platforms/android/java/com/nativescript/image/BaseDataSubscriberListener.java +0 -9
  49. package/platforms/android/java/com/nativescript/image/DraweeView.java +0 -371
  50. package/platforms/android/java/com/nativescript/image/NetworkImageRequest.java +0 -55
  51. package/platforms/android/java/com/nativescript/image/OkHttpNetworkFetcher.java +0 -56
  52. package/platforms/android/java/com/nativescript/image/ScalingBlurPostprocessor.java +0 -64
  53. package/platforms/android/java/com/nativescript/image/ScalingUtils.java +0 -519
  54. package/typings/fresco-processors.d.ts +0 -53
  55. package/typings/fresco.d.ts +0 -12070
@@ -1,371 +0,0 @@
1
- package com.nativescript.image;
2
-
3
- import com.facebook.drawee.view.SimpleDraweeView;
4
- import com.facebook.imagepipeline.request.ImageRequestBuilder;
5
- import com.facebook.imagepipeline.request.ImageRequest;
6
- import com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder;
7
- import com.facebook.drawee.generic.GenericDraweeHierarchy;
8
-
9
- import android.graphics.Outline;
10
- import android.graphics.Rect;
11
- import android.graphics.drawable.Drawable;
12
- import android.view.View.MeasureSpec;
13
- import android.view.View;
14
- import android.content.Context;
15
- import android.os.Build;
16
- import android.util.Log;
17
- import android.util.AttributeSet;
18
-
19
- import android.graphics.Canvas;
20
- import android.graphics.Path;
21
- import android.graphics.Color;
22
- import android.graphics.Paint;
23
- import android.graphics.RectF;
24
- import android.graphics.PorterDuff;
25
- import android.graphics.PorterDuffXfermode;
26
- import android.view.ViewOutlineProvider;
27
-
28
- import org.nativescript.widgets.BorderDrawable;
29
- import com.nativescript.image.ScalingUtils.AbstractScaleType;
30
-
31
- import org.json.JSONArray;
32
- import org.json.JSONObject;
33
- import org.json.JSONException;
34
-
35
- import java.util.Arrays;
36
-
37
- public class DraweeView extends SimpleDraweeView {
38
- public int imageWidth = 0;
39
- public int imageHeight = 0;
40
- public boolean isUsingOutlineProvider = false;
41
- public boolean noRatioEnforce = false;
42
- private static Paint clipPaint;
43
-
44
- private boolean mLegacyVisibilityHandlingEnabled = false;
45
-
46
- private static boolean sGlobalLegacyVisibilityHandlingEnabled = true;
47
-
48
- public static void setGlobalLegacyVisibilityHandlingEnabled(
49
- boolean legacyVisibilityHandlingEnabled) {
50
- sGlobalLegacyVisibilityHandlingEnabled = legacyVisibilityHandlingEnabled;
51
- }
52
-
53
- public DraweeView(Context context, GenericDraweeHierarchy hierarchy) {
54
- super(context);
55
- }
56
-
57
- public DraweeView(Context context) {
58
- super(context);
59
- // In Android N and above, visibility handling for Drawables has been changed, which breaks
60
- // activity transitions with DraweeViews.
61
- mLegacyVisibilityHandlingEnabled = sGlobalLegacyVisibilityHandlingEnabled && context.getApplicationInfo().targetSdkVersion >= 24; //Build.VERSION_CODES.N
62
- }
63
-
64
- public DraweeView(Context context, AttributeSet attrs) {
65
- super(context, attrs);
66
- }
67
-
68
- public DraweeView(Context context, AttributeSet attrs, int defStyle) {
69
- super(context, attrs, defStyle);
70
- }
71
-
72
- @Override
73
- protected void onAttachedToWindow() {
74
- super.onAttachedToWindow();
75
- maybeOverrideVisibilityHandling();
76
- onAttach();
77
- }
78
-
79
- @Override
80
- protected void onDetachedFromWindow() {
81
- super.onDetachedFromWindow();
82
- maybeOverrideVisibilityHandling();
83
- onDetach();
84
- }
85
-
86
- @Override
87
- public void onStartTemporaryDetach() {
88
- super.onStartTemporaryDetach();
89
- maybeOverrideVisibilityHandling();
90
- onDetach();
91
- }
92
-
93
- @Override
94
- public void onFinishTemporaryDetach() {
95
- super.onFinishTemporaryDetach();
96
- maybeOverrideVisibilityHandling();
97
- onAttach();
98
- }
99
-
100
- @Override
101
- protected void onVisibilityChanged(
102
- View changedView,
103
- int visibility) {
104
- super.onVisibilityChanged(changedView, visibility);
105
- maybeOverrideVisibilityHandling();
106
- }
107
-
108
- @Override
109
- public void onVisibilityAggregated (boolean isVisible) {
110
- super.onVisibilityAggregated(isVisible);
111
- maybeOverrideVisibilityHandling();
112
- }
113
-
114
- private void maybeOverrideVisibilityHandling() {
115
- if (mLegacyVisibilityHandlingEnabled) {
116
- Drawable drawable = getDrawable();
117
- if (drawable != null) {
118
- drawable.setVisible(getVisibility() == VISIBLE, false);
119
- }
120
- }
121
- }
122
-
123
- public void setLegacyVisibilityHandlingEnabled(boolean legacyVisibilityHandlingEnabled) {
124
- mLegacyVisibilityHandlingEnabled = legacyVisibilityHandlingEnabled;
125
- }
126
-
127
- public void updateOutlineProvider() {
128
- Drawable drawable = getBackground();
129
- if (android.os.Build.VERSION.SDK_INT >= 21) {
130
- // we try to support N setting outline provider now
131
- if (!isUsingOutlineProvider && getOutlineProvider() != null) {
132
- // already handled somewhere else
133
- return;
134
- }
135
- if (drawable instanceof BorderDrawable && (android.os.Build.VERSION.SDK_INT >= 33 || ((BorderDrawable)drawable).hasUniformBorderRadius())) {
136
- setOutlineProvider(new ViewOutlineProvider() {
137
- @Override
138
- public void getOutline(View view, Outline outline) {
139
- Drawable drawable = getBackground();
140
- if (drawable instanceof BorderDrawable) {
141
- BorderDrawable borderDrawable = (BorderDrawable) drawable;
142
- // that if test is only needed until N BorderDrawable is updated to do it
143
- if (borderDrawable.hasUniformBorderRadius()) {
144
- // outlineRect.set(borderDrawable.getBounds());
145
- outline.setRoundRect(borderDrawable.getBounds(), borderDrawable.getBorderBottomLeftRadius());
146
- } else {
147
- drawable.getOutline(outline);
148
- }
149
- } else {
150
- outline.setRect(100, 100, view.getWidth() - 200, view.getHeight() - 200);
151
- }
152
- }
153
- });
154
- setClipToOutline(true);
155
- isUsingOutlineProvider = true;
156
- // } else if (android.os.Build.VERSION.SDK_INT >= 21) {
157
- // isUsingOutlineProvider = false;
158
- // setOutlineProvider(null);
159
- // setClipToOutline(false);
160
- }
161
- }
162
- }
163
-
164
- @Override
165
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
166
- int widthMode = MeasureSpec.getMode(widthMeasureSpec);
167
- int width = MeasureSpec.getSize(widthMeasureSpec);
168
- int heightMode = MeasureSpec.getMode(heightMeasureSpec);
169
- int height = MeasureSpec.getSize(heightMeasureSpec);
170
-
171
- boolean finiteWidth = widthMode == android.view.View.MeasureSpec.EXACTLY;
172
- boolean finiteHeight = heightMode == android.view.View.MeasureSpec.EXACTLY;
173
- float aspectRatio = this.getAspectRatio();
174
- if (aspectRatio > 0 && !this.noRatioEnforce) {
175
- Object scaleType = getHierarchy().getActualImageScaleType();
176
- if (scaleType instanceof AbstractScaleType) {
177
- final float rotation = ((AbstractScaleType)scaleType).getImageRotation();
178
- if (Math.abs(rotation) % 180 != 0) {
179
- aspectRatio = 1.0f / aspectRatio;
180
- }
181
- }
182
- if (imageWidth != 0 && imageHeight != 0) {
183
- if (!finiteWidth && finiteHeight) {
184
- widthMeasureSpec = android.view.View.MeasureSpec.makeMeasureSpec((int) (height * aspectRatio),
185
- android.view.View.MeasureSpec.EXACTLY);
186
- } else if (!finiteHeight && finiteWidth) {
187
- heightMeasureSpec = android.view.View.MeasureSpec.makeMeasureSpec((int) (width / aspectRatio),
188
- android.view.View.MeasureSpec.EXACTLY);
189
- } else if (!finiteWidth && !finiteHeight ) {
190
- float viewRatio = width / (float)height;
191
- if (viewRatio < aspectRatio) {
192
- widthMeasureSpec = android.view.View.MeasureSpec.makeMeasureSpec((int) width, android.view.View.MeasureSpec.EXACTLY);
193
- heightMeasureSpec = android.view.View.MeasureSpec.makeMeasureSpec((int) (width / aspectRatio), android.view.View.MeasureSpec.EXACTLY);
194
- } else {
195
- widthMeasureSpec = android.view.View.MeasureSpec.makeMeasureSpec((int) (height * aspectRatio), android.view.View.MeasureSpec.EXACTLY);
196
- heightMeasureSpec = android.view.View.MeasureSpec.makeMeasureSpec((int) height, android.view.View.MeasureSpec.EXACTLY);
197
- }
198
- }
199
- }
200
- } else {
201
- }
202
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
203
- }
204
-
205
- Path innerBorderPath;
206
- Path innerBorderTempPath;
207
-
208
- private Path generateInnerBorderPath(BorderDrawable borderDrawable) {
209
-
210
- float borderTopLeftRadius = borderDrawable.getBorderTopLeftRadius();
211
- float borderTopRightRadius = borderDrawable.getBorderTopRightRadius();
212
- float borderBottomRightRadius = borderDrawable.getBorderBottomRightRadius();
213
- float borderBottomLeftRadius = borderDrawable.getBorderBottomLeftRadius();
214
- float borderLeftWidth = borderDrawable.getBorderLeftWidth();
215
- float borderBottomWidth = borderDrawable.getBorderBottomWidth();
216
- float borderTopWidth = borderDrawable.getBorderTopWidth();
217
- float borderRightWidth = borderDrawable.getBorderRightWidth();
218
- if (innerBorderPath == null) {
219
- innerBorderPath = new Path();
220
- } else {
221
- innerBorderPath.reset();
222
- }
223
- if (innerBorderTempPath == null) {
224
- innerBorderTempPath = new Path();
225
- } else {
226
- innerBorderTempPath.reset();
227
- }
228
- Rect bounds = borderDrawable.getBounds();
229
- float width = (float) borderDrawable.getBounds().width();
230
- float height = (float) borderDrawable.getBounds().height();
231
-
232
- RectF borderInnerRect = new RectF(borderLeftWidth, borderTopWidth, width - borderRightWidth,
233
- height - borderBottomWidth);
234
- float[] borderInnerRadii = { Math.max(0, borderTopLeftRadius - borderLeftWidth),
235
- Math.max(0, borderTopLeftRadius - borderTopWidth), Math.max(0, borderTopRightRadius - borderRightWidth),
236
- Math.max(0, borderTopRightRadius - borderTopWidth),
237
- Math.max(0, borderBottomRightRadius - borderRightWidth),
238
- Math.max(0, borderBottomRightRadius - borderBottomWidth),
239
- Math.max(0, borderBottomLeftRadius - borderLeftWidth),
240
- Math.max(0, borderBottomLeftRadius - borderBottomWidth) };
241
- innerBorderTempPath.addRoundRect(borderInnerRect, borderInnerRadii, Path.Direction.CW);
242
- innerBorderPath.addRect(new RectF(bounds), Path.Direction.CW);
243
- innerBorderPath.op(innerBorderTempPath, Path.Op.DIFFERENCE);
244
- return innerBorderPath;
245
- }
246
-
247
- @Override
248
- protected void onDraw(Canvas canvas) {
249
- Drawable drawable = getBackground();
250
- if (!isUsingOutlineProvider && drawable instanceof BorderDrawable) {
251
- BorderDrawable borderDrawable = (BorderDrawable) drawable;
252
- Path clipPath = generateInnerBorderPath(borderDrawable);
253
- if (clipPath != null) {
254
- if (DraweeView.clipPaint == null) {
255
- DraweeView.clipPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
256
- DraweeView.clipPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
257
- }
258
- int saveCount;
259
- int width = getWidth();
260
- int height = getHeight();
261
- if (android.os.Build.VERSION.SDK_INT >= 21) {
262
- saveCount = canvas.saveLayer(new android.graphics.RectF(0.0f, 0.0f, width, height), null);
263
- } else {
264
- saveCount = canvas.saveLayer(0.0f, 0.0f, width, height, null, Canvas.ALL_SAVE_FLAG);
265
- }
266
- super.onDraw(canvas);
267
- canvas.drawPath(clipPath, DraweeView.clipPaint);
268
- canvas.restoreToCount(saveCount);
269
- return;
270
- }
271
- }
272
- super.onDraw(canvas);
273
- }
274
-
275
- public void setUri(android.net.Uri uri, String jsonOptions, com.facebook.drawee.controller.ControllerListener listener, com.facebook.imagepipeline.listener.RequestListener requestListener) {
276
- ImageRequestBuilder requestBuilder = ImageRequestBuilder.newBuilderWithSource(uri).setRotationOptions( com.facebook.imagepipeline.common.RotationOptions.autoRotate());
277
- if (requestListener != null) {
278
- requestBuilder.setRequestListener(requestListener);
279
- }
280
- JSONObject object = null;
281
- JSONObject headers = null;
282
- if (jsonOptions.length() > 2) {
283
- try {
284
- object = new JSONObject(jsonOptions);
285
- } catch (Exception e) {
286
- e.printStackTrace();
287
- }
288
- }
289
- if (object != null) {
290
- if (object.optBoolean("progressiveRenderingEnabled")) {
291
- requestBuilder = requestBuilder.setProgressiveRenderingEnabled(true);
292
- }
293
- if (object.optBoolean("localThumbnailPreviewsEnabled")) {
294
- requestBuilder = requestBuilder.setLocalThumbnailPreviewsEnabled(true);
295
- }
296
- int decodeWidth = object.optInt("decodeWidth");
297
- int decodeHeight = object.optInt("decodeHeight");
298
-
299
- if (decodeWidth > 0 || decodeHeight > 0) {
300
- requestBuilder = requestBuilder.setResizeOptions(new com.facebook.imagepipeline.common.ResizeOptions(decodeWidth > 0 ? decodeWidth : decodeHeight, decodeHeight > 0 ? decodeHeight : decodeWidth));
301
- }
302
- int blurRadius = object.optInt("blurRadius", 0);
303
- if (blurRadius > 0) {
304
- int blurDownSampling = object.optInt("blurDownSampling", 1);
305
- requestBuilder = requestBuilder.setPostprocessor(new com.nativescript.image.ScalingBlurPostprocessor(2, blurRadius, blurDownSampling));
306
- }
307
- headers = object.optJSONObject("headers");
308
- }
309
- ImageRequest request = NetworkImageRequest.fromBuilderWithHeaders(requestBuilder, headers);
310
-
311
- // if (object != null && object.optBoolean("async") == false) {
312
- // DataSource<CloseableReference<CloseableImage>> dataSource =
313
- // imagePipeline.fetchImageFromBitmapCache(imageRequest, uri.toString());
314
- // try {
315
- // CloseableReference<CloseableImage> result = DataSources.waitForFinalResult(dataSource);
316
- // if (result != null) {
317
- // // Do something with the image, but do not keep the reference to it!
318
- // // The image may get recycled as soon as the reference gets closed below.
319
- // // If you need to keep a reference to the image, read the following sections.
320
- // }
321
- // } finally {
322
- // dataSource.close();
323
- // }
324
- // }
325
-
326
- PipelineDraweeControllerBuilder builder = com.facebook.drawee.backends.pipeline.Fresco.newDraweeControllerBuilder();
327
- builder.setImageRequest(request);
328
- builder.setCallerContext(uri.toString());
329
- builder.setControllerListener(listener);
330
- builder.setOldController(getController());
331
- // if (Trace.isEnabled()) {
332
- // builder.setPerfDataListener(
333
- // new com.facebook.drawee.backends.pipeline.info.ImagePerfDataListener({
334
- // onImageLoadStatusUpdated(param0: com.facebook.drawee.backends.pipeline.info.ImagePerfData, param1: number) {
335
- // CLog(CLogTypes.info, 'onImageLoadStatusUpdated', param0, param1);
336
- // },
337
- // onImageVisibilityUpdated(param0: com.facebook.drawee.backends.pipeline.info.ImagePerfData, param1: number) {
338
- // CLog(CLogTypes.info, 'onImageVisibilityUpdated', param0, param1);
339
- // }
340
- // })
341
- // );
342
- // }
343
- if (object != null) {
344
- String lowerResSrc = object.optString("lowerResSrc");
345
- if (lowerResSrc != null) {
346
- builder.setLowResImageRequest(com.facebook.imagepipeline.request.ImageRequest.fromUri(android.net.Uri.parse(lowerResSrc)));
347
- }
348
-
349
- if (object.optBoolean("autoPlayAnimations")) {
350
- builder.setAutoPlayAnimations(true);
351
- }
352
-
353
- if (object.optBoolean("tapToRetryEnabled")) {
354
- builder.setTapToRetryEnabled(true);
355
- }
356
- }
357
- setController(builder.build());
358
- }
359
-
360
- @Override
361
- public void setBackground(Drawable background) {
362
- super.setBackground(background);
363
- updateOutlineProvider();
364
- }
365
-
366
- @Override
367
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
368
- super.onSizeChanged(w, h, oldw, oldh);
369
- updateOutlineProvider();
370
- }
371
- }
@@ -1,55 +0,0 @@
1
- package com.nativescript.image;
2
-
3
- import com.facebook.imagepipeline.request.ImageRequest;
4
- import com.facebook.imagepipeline.request.ImageRequestBuilder;
5
-
6
- import org.json.JSONObject;
7
- import org.json.JSONException;
8
-
9
- import java.util.HashMap;
10
- import java.util.Map;
11
- import java.util.Iterator;
12
-
13
- import android.util.Log;
14
-
15
- /** Extended ImageRequest with request headers */
16
- public class NetworkImageRequest extends ImageRequest {
17
-
18
- /** Headers for the request */
19
- private Map<String, String> mHeaders = null;
20
-
21
- static Map<String, String> toMap(JSONObject object) throws JSONException {
22
- Map<String, String> map = new HashMap<String, String>();
23
-
24
- Iterator<String> keysItr = object.keys();
25
- while(keysItr.hasNext()) {
26
- String key = keysItr.next();
27
- Object value = object.get(key);
28
-
29
- if(value instanceof String) {
30
- map.put(key, (String)value);
31
- }
32
- }
33
- return map;
34
- }
35
-
36
- public static NetworkImageRequest fromBuilderWithHeaders(
37
- ImageRequestBuilder builder, JSONObject headers) {
38
- return new NetworkImageRequest(builder, headers);
39
- }
40
-
41
- protected NetworkImageRequest(ImageRequestBuilder builder, JSONObject headers) {
42
- super(builder);
43
- if (headers != null) {
44
- try {
45
- mHeaders = toMap(headers);
46
- } catch (Exception e) {
47
- e.printStackTrace();
48
- }
49
- }
50
- }
51
-
52
- public Map<String, String> getHeaders() {
53
- return mHeaders;
54
- }
55
- }
@@ -1,56 +0,0 @@
1
- package com.nativescript.image;
2
-
3
- import android.net.Uri;
4
- import android.os.SystemClock;
5
- import android.util.Log;
6
- import com.facebook.imagepipeline.producers.NetworkFetcher;
7
- import java.util.Collections;
8
- import java.util.HashMap;
9
- import java.util.Map;
10
- import java.util.concurrent.Executor;
11
- import okhttp3.CacheControl;
12
- import okhttp3.Headers;
13
- import okhttp3.OkHttpClient;
14
- import okhttp3.Request;
15
-
16
- public class OkHttpNetworkFetcher extends com.facebook.imagepipeline.backends.okhttp3.OkHttpNetworkFetcher {
17
-
18
- private static final String TAG = "OkHttpNetworkFetcher";
19
-
20
- private final OkHttpClient mOkHttpClient;
21
- private final Executor mCancellationExecutor;
22
-
23
- /**
24
- * @param okHttpClient client to use
25
- */
26
- public OkHttpNetworkFetcher(OkHttpClient okHttpClient) {
27
- super(okHttpClient);
28
- mOkHttpClient = okHttpClient;
29
- mCancellationExecutor = okHttpClient.dispatcher().executorService();
30
- }
31
-
32
- @Override
33
- public void fetch(
34
- final OkHttpNetworkFetcher.OkHttpNetworkFetchState fetchState,
35
- final NetworkFetcher.Callback callback) {
36
- fetchState.submitTime = SystemClock.elapsedRealtime();
37
- final Uri uri = fetchState.getUri();
38
- Map<String, String> requestHeaders = null;
39
- if (fetchState.getContext().getImageRequest() instanceof NetworkImageRequest) {
40
- NetworkImageRequest networkImageRequest =
41
- (NetworkImageRequest) fetchState.getContext().getImageRequest();
42
- requestHeaders = networkImageRequest.getHeaders();
43
- }
44
- if (requestHeaders == null) {
45
- requestHeaders = Collections.emptyMap();
46
- }
47
- final Request request =
48
- new Request.Builder()
49
- .url(uri.toString())
50
- .headers(Headers.of(requestHeaders))
51
- .get()
52
- .build();
53
-
54
- fetchWithRequest(fetchState, callback, request);
55
- }
56
- }
@@ -1,64 +0,0 @@
1
- /*
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- package com.nativescript.image;
9
-
10
- import android.graphics.Bitmap;
11
- import android.graphics.Canvas;
12
- import android.graphics.Paint;
13
- import android.graphics.Rect;
14
- import com.facebook.common.references.CloseableReference;
15
- import com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory;
16
- import com.facebook.imagepipeline.nativecode.NativeBlurFilter;
17
- import com.facebook.imagepipeline.request.BasePostprocessor;
18
-
19
- /**
20
- * Applies a blur filter using the {@link NativeBlurFilter#iterativeBoxBlur(Bitmap, int, int)} and
21
- * down-scales the bitmap beforehand.
22
- */
23
- public class ScalingBlurPostprocessor extends BasePostprocessor {
24
-
25
- private final Paint mPaint = new Paint();
26
- private final int mIterations;
27
- private final int mBlurRadius;
28
- /**
29
- * A scale ration of 4 means that we reduce the total number of pixels to process by factor 16.
30
- */
31
- private final int mScaleRatio;
32
-
33
- public ScalingBlurPostprocessor(int iterations, int blurRadius, int scaleRatio) {
34
-
35
- mIterations = iterations;
36
- mBlurRadius = blurRadius;
37
- mScaleRatio = scaleRatio;
38
- }
39
-
40
- @Override
41
- public CloseableReference<Bitmap> process(
42
- Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory) {
43
- final CloseableReference<Bitmap> bitmapRef =
44
- bitmapFactory.createBitmap(
45
- sourceBitmap.getWidth() / mScaleRatio, sourceBitmap.getHeight() / mScaleRatio);
46
-
47
- try {
48
- final Bitmap destBitmap = bitmapRef.get();
49
- final Canvas canvas = new Canvas(destBitmap);
50
-
51
- canvas.drawBitmap(
52
- sourceBitmap,
53
- null,
54
- new Rect(0, 0, destBitmap.getWidth(), destBitmap.getHeight()),
55
- mPaint);
56
-
57
- NativeBlurFilter.iterativeBoxBlur(
58
- destBitmap, mIterations, Math.max(1, mBlurRadius / mScaleRatio));
59
- return CloseableReference.cloneOrNull(bitmapRef);
60
- } finally {
61
- CloseableReference.closeSafely(bitmapRef);
62
- }
63
- }
64
- }