@Override public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) { glide.getRegistry().prepend(CustomImageSizeModel.class, InputStream.class, new CustomImageSizeUrlLoaderFactory()); } }
public static void init(Glide glide, OkHttpClient okHttpClient) { OkHttpClient.Builder builder; if (okHttpClient != null) { builder = okHttpClient.newBuilder(); } else { builder = new OkHttpClient.Builder(); } builder.addNetworkInterceptor(createInterceptor(new DispatchingProgressListener())); glide.getRegistry().replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build())); }
private static ThumbFetcher build(Context context, Uri uri, ThumbnailQuery query) { ArrayPool byteArrayPool = Glide.get(context).getArrayPool(); ThumbnailStreamOpener opener = new ThumbnailStreamOpener( Glide.get(context).getRegistry().getImageHeaderParsers(), query, byteArrayPool, context.getContentResolver()); return new ThumbFetcher(uri, opener); }
@SuppressWarnings("unused") public ByteBufferGifDecoder(Context context) { this(context, Glide.get(context).getRegistry().getImageHeaderParsers(), Glide.get(context).getBitmapPool(), Glide.get(context).getArrayPool()); }
@SuppressWarnings("unchecked") private <T> void registerMockStreamModelLoader(final Class<T> modelClass) { ModelLoader<T, InputStream> modelLoader = mockStreamModelLoader(modelClass); ModelLoaderFactory<T, InputStream> modelLoaderFactory = mock(ModelLoaderFactory.class); when(modelLoaderFactory.build(isA(MultiModelLoaderFactory.class))).thenReturn(modelLoader); Glide.get(context).getRegistry() .prepend(modelClass, InputStream.class, modelLoaderFactory); }
@SuppressWarnings("unchecked") private <T, Z> void registerFailFactory(Class<T> failModel, Class<Z> failResource) { DataFetcher<Z> failFetcher = mock(DataFetcher.class); doAnswer(new Util.CallDataReady<>(null)) .when(failFetcher) .loadData(isA(Priority.class), isA(DataFetcher.DataCallback.class)); when(failFetcher.getDataClass()).thenReturn(failResource); ModelLoader<T, Z> failLoader = mock(ModelLoader.class); when(failLoader.buildLoadData(isA(failModel), anyInt(), anyInt(), isA(Options.class))) .thenReturn(new ModelLoader.LoadData<>(mock(Key.class), failFetcher)); when(failLoader.handles(isA(failModel))).thenReturn(true); ModelLoaderFactory<T, Z> failFactory = mock(ModelLoaderFactory.class); when(failFactory.build(isA(MultiModelLoaderFactory.class))).thenReturn(failLoader); Glide.get(context).getRegistry().prepend(failModel, failResource, failFactory); }
@SuppressWarnings("unchecked") public static <ModelT, DataT> void mock(final ModelT model, final DataT data) { Context context = InstrumentationRegistry.getTargetContext(); Glide.get(context) .getRegistry() .replace( (Class<ModelT>) model.getClass(), (Class<DataT>) data.getClass(), new ModelLoaderFactory<ModelT, DataT>() { @NonNull @Override public ModelLoader<ModelT, DataT> build( @NonNull MultiModelLoaderFactory multiFactory) { return new MockModelLoader<>(model, data); } @Override public void teardown() { // Do nothing. } }); }
public static synchronized <T> WaitModel<T> waitOn(T model) { @SuppressWarnings("unchecked") ModelLoaderFactory<WaitModel<T>, InputStream> streamFactory = new Factory<>((Class<T>) model.getClass(), InputStream.class); Glide.get(InstrumentationRegistry.getTargetContext()) .getRegistry() .replace(WaitModel.class, InputStream.class, streamFactory); return new WaitModel<>(model); }
@Test public void loadJpegResource_withNoOtherLoaders_decodesResource() { Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.canonical)); Bitmap bitmap = concurrency.get( Glide.with(context) .asBitmap() .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); }
@Test public void loadOpaqueGifResource_withNoOtherLoaders_decodesResource() { Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.opaque_gif)); Bitmap bitmap = concurrency.get( Glide.with(context) .asBitmap() .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); }
@Test public void loadOpaquePngResource_withNoOtherLoaders_decodesResource() { Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.canonical_png)); Bitmap bitmap = concurrency.get( Glide.with(context) .asBitmap() .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); }
@Test public void loadTransparentPngResource_withNoOtherLoaders_decodesResource() { Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.canonical_transparent_png)); Bitmap bitmap = concurrency.get( Glide.with(context) .asBitmap() .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); }
@Test public void loadTransparentGifResource_withNoOtherLoaders_decodesResource() { Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.transparent_gif)); Bitmap bitmap = concurrency.get( Glide.with(context) .asBitmap() .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); }
@Test public void loadWideGamutJpegResource_withNoOtherLoaders_decodesWideGamutBitmap() { assumeTrue( "Wide gamut is only available on O+", Build.VERSION.SDK_INT >= Build.VERSION_CODES.O); Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.webkit_logo_p3)); Bitmap bitmap = concurrency.get( Glide.with(context) .asBitmap() .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); assertThat(bitmap.getConfig()).isEqualTo(Bitmap.Config.RGBA_F16); assertThat(bitmap.getColorSpace()) .isEqualTo(ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB)); }
.setSourceExecutor(executor) .setDiskCacheExecutor(executor)); Registry registry = Glide.get(context).getRegistry(); registerMockModelLoader( GlideUrl.class, InputStream.class, new ByteArrayInputStream(new byte[0]), registry);
@Test public void load_whenLoadSucceeds_butEncoderFails_doesNotCallOnLoadFailed() { WaitForErrorStrategy strategy = new WaitForErrorStrategy(); Glide.init(context, new GlideBuilder() .setAnimationExecutor(GlideExecutor.newAnimationExecutor(/*threadCount=*/ 1, strategy)) .setSourceExecutor(GlideExecutor.newSourceExecutor(strategy)) .setDiskCacheExecutor(GlideExecutor.newDiskCacheExecutor(strategy))); Glide.get(context).getRegistry().prepend(Bitmap.class, new FailEncoder()); concurrency.get( Glide.with(context) .load(ResourceIds.raw.canonical) .listener(requestListener) .submit()); verify(requestListener) .onResourceReady( anyDrawable(), any(), anyDrawableTarget(), any(DataSource.class), anyBoolean()); verify(requestListener, never()) .onLoadFailed(any(GlideException.class), any(), anyDrawableTarget(), anyBoolean()); }
@Test public void loadTransparentGifResource_asHardware_withNoOtherLoaders_decodesResource() { assumeTrue( "Hardware Bitmaps are only supported on O+", Build.VERSION.SDK_INT >= Build.VERSION_CODES.O); Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.transparent_gif)); Bitmap bitmap = concurrency.get( GlideApp.with(context) .asBitmap() .set(Downsampler.ALLOW_HARDWARE_CONFIG, true) .format(DecodeFormat.PREFER_ARGB_8888) .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); assertThat(bitmap.getConfig()).isEqualTo(Bitmap.Config.HARDWARE); }
@Test public void load_whenEncoderFails_callsUncaughtThrowableStrategy() { WaitForErrorStrategy strategy = new WaitForErrorStrategy(); Glide.init(context, new GlideBuilder() .setAnimationExecutor(GlideExecutor.newAnimationExecutor(/*threadCount=*/ 1, strategy)) .setSourceExecutor(GlideExecutor.newSourceExecutor(strategy)) .setDiskCacheExecutor(GlideExecutor.newDiskCacheExecutor(strategy))); Glide.get(context).getRegistry().prepend(Bitmap.class, new FailEncoder()); concurrency.get( Glide.with(context) .load(ResourceIds.raw.canonical) .listener(requestListener) .submit()); // Writing to the disk cache and therefore the exception caused by our FailEncoder may happen // after the request completes, so we should wait for the expected error explicitly. ConcurrencyHelper.waitOnLatch(strategy.latch); assertThat(strategy.error).isEqualTo(FailEncoder.TO_THROW); verify(requestListener, never()) .onLoadFailed(any(GlideException.class), any(), anyDrawableTarget(), anyBoolean()); }
@Test public void loadOpaqueGifResource_asHardware_withNoOtherLoaders_decodesResource() { assumeTrue( "Hardware Bitmaps are only supported on O+", Build.VERSION.SDK_INT >= Build.VERSION_CODES.O); Glide.get(context).getRegistry() .prepend( Object.class, InputStream.class, new FakeModelLoader<>(ResourceIds.raw.opaque_gif)); Bitmap bitmap = concurrency.get( GlideApp.with(context) .asBitmap() // Allow HARDWARE Bitmaps. .format(DecodeFormat.PREFER_ARGB_8888) .load(new Object()) .submit()); assertThat(bitmap).isNotNull(); }
private static ThumbFetcher build(Context context, Uri uri, ThumbnailQuery query) { ArrayPool byteArrayPool = Glide.get(context).getArrayPool(); ThumbnailStreamOpener opener = new ThumbnailStreamOpener( Glide.get(context).getRegistry().getImageHeaderParsers(), query, byteArrayPool, context.getContentResolver()); return new ThumbFetcher(uri, opener); }