@SuppressWarnings("WeakerAccess") @Synthetic void clear() { requestManager.clear(this); } }
void setNextStartFromFirstFrame() { Preconditions.checkArgument(!isRunning, "Can't restart a running animation"); startFromFirstFrame = true; if (pendingTarget != null) { requestManager.clear(pendingTarget); pendingTarget = null; } }
private void cancelAll() { for (int i = 0; i < maxPreload; i++) { requestManager.clear(preloadTargetQueue.next(0, 0)); } }
@Override public boolean handleMessage(Message msg) { if (msg.what == MSG_DELAY) { GifFrameLoader.DelayTarget target = (DelayTarget) msg.obj; onFrameReady(target); return true; } else if (msg.what == MSG_CLEAR) { GifFrameLoader.DelayTarget target = (DelayTarget) msg.obj; requestManager.clear(target); } return false; } }
/** * Cancel any pending loads Glide may have for the view and free any resources that may have been * loaded for the view. * * <p> Note that this will only work if {@link View#setTag(Object)} is not called on this view * outside of Glide. </p> * * @param view The view to cancel loads and free resources for. * @throws IllegalArgumentException if an object other than Glide's metadata is put as the view's * tag. * @see #clear(Target) */ public void clear(@NonNull View view) { clear(new ClearTarget(view)); }
void clear() { callbacks.clear(); recycleFirstFrame(); stop(); if (current != null) { requestManager.clear(current); current = null; } if (next != null) { requestManager.clear(next); next = null; } if (pendingTarget != null) { requestManager.clear(pendingTarget); pendingTarget = null; } gifDecoder.clear(); isCleared = true; }
@Override public void run() { Glide.with(context).clear(target); } });
@Override public void run() { Glide.with(context).clear(imageView); } });
@Override public void run() { Glide.with(InstrumentationRegistry.getTargetContext()) .clear(imageView); } });
@Test public void testRemovesPreviousRequestFromRequestTracker() { Request previous = mock(Request.class); when(target.getRequest()).thenReturn(previous); getNullModelRequest().into(target); verify(requestManager).clear(eq(target)); }
@Test public void testClearsCompletedLoadOnFrameReadyIfCleared() { // Force the loader to create a real Handler by passing null; loader = createGifFrameLoader(null); loader.clear(); DelayTarget delayTarget = mock(DelayTarget.class); Request request = mock(Request.class); when(delayTarget.getRequest()).thenReturn(request); loader.onFrameReady(delayTarget); verify(requestManager).clear(eq(delayTarget)); }
@Test public void testClearsTargetInOnResourceReady() { Request request = mock(Request.class); PreloadTarget<Object> target = PreloadTarget.obtain(requestManager, 100, 100); target.setRequest(request); target.onResourceReady(new Object(), null); verify(requestManager).clear(eq(target)); } }
@Test public void testOnFrameReadyClearsPreviousFrame() { // Force the loader to create a real Handler. loader = createGifFrameLoader(null); DelayTarget previous = mock(DelayTarget.class); Request previousRequest = mock(Request.class); when(previous.getRequest()).thenReturn(previousRequest); when(previous.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); DelayTarget current = mock(DelayTarget.class); when(current.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565)); loader.onFrameReady(previous); loader.onFrameReady(current); verify(requestManager).clear(eq(previous)); }
@Test public void onFrameReady_whenNotRunning_clearsPendingFrameOnClear() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); when(nextFrame.getResource()) .thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(nextFrame); loader.clear(); verify(requestManager).clear(loaded); verify(requestManager).clear(nextFrame); }
@Test public void onFrameReady_whenNotRunning_doesNotClearPreviouslyLoadedImage() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); when(nextFrame.getResource()) .thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(nextFrame); verify(requestManager, never()).clear(loaded); }
@Test public void onFrameReady_whenNotRunning_clearsOldFrameOnStart() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); when(nextFrame.getResource()) .thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(nextFrame); loader.subscribe(callback); verify(requestManager).clear(loaded); }
/** * Lifecycle callback that cancels all in progress requests and clears and recycles resources for * all completed requests. */ @Override public synchronized void onDestroy() { targetTracker.onDestroy(); for (Target<?> target : targetTracker.getAll()) { clear(target); } targetTracker.clear(); requestTracker.clearRequests(); lifecycle.removeListener(this); lifecycle.removeListener(connectivityMonitor); mainHandler.removeCallbacks(addSelfToLifecycle); glide.unregisterRequestManager(this); }
@Test public void startFromFirstFrame_withPendingFrame_clearsPendingFrame() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); Bitmap expected = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); when(nextFrame.getResource()) .thenReturn(expected); loader.onFrameReady(nextFrame); loader.setNextStartFromFirstFrame(); verify(requestManager).clear(nextFrame); loader.subscribe(callback); verify(callback, times(1)).onFrameReady(); }
@Test public void removeFromManagers_afterRequestManagerRemoved_clearsRequest() { target = requestManager.load(mockUri("content://uri")).into(new SimpleTarget<Drawable>() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) { // Do nothing. } }); Request request = Preconditions.checkNotNull(target.getRequest()); requestManager.onDestroy(); requestManager.clear(target); assertThat(target.getRequest()).isNull(); assertThat(request.isCleared()).isTrue(); }
@Test public void requestManager_intoImageView_withSameByteArrayAndMemoryCacheEnabled_loadsFromMemory() throws IOException { final byte[] canonicalBytes = getCanonicalBytes(); concurrency.loadOnMainThread( Glide.with(context) .load(canonicalBytes) .apply(skipMemoryCacheOf(false)), imageView); Glide.with(context).clear(imageView); concurrency.loadOnMainThread( Glide.with(context) .load(canonicalBytes) .listener(requestListener) .apply(skipMemoryCacheOf(false)), imageView); verify(requestListener).onResourceReady( anyDrawable(), any(), anyDrawableTarget(), eq(DataSource.MEMORY_CACHE), anyBoolean()); }