@Test public void testAddsNewRequestToRequestTracker() { getNullModelRequest().into(target); verify(requestManager).track(eq(target), isA(Request.class)); }
requestManager.track(target, request);
@Test public void testMultipleRequestListeners() { getNullModelRequest().addListener(listener1).addListener(listener2).into(target); verify(requestManager).track(any(Target.class), requestCaptor.capture()); requestCaptor.getValue().onResourceReady(new SimpleResource<>(new Object()), DataSource.LOCAL); verify(listener1) .onResourceReady( any(), any(), isA(Target.class), isA(DataSource.class), anyBoolean()); verify(listener2) .onResourceReady( any(), any(), isA(Target.class), isA(DataSource.class), anyBoolean()); }
@Test public void testListenerApiOverridesListeners() { getNullModelRequest().addListener(listener1).listener(listener2).into(target); verify(requestManager).track(any(Target.class), requestCaptor.capture()); requestCaptor.getValue().onResourceReady(new SimpleResource<>(new Object()), DataSource.LOCAL); // The #listener API removes any previous listeners, so the first listener should not be called. verify(listener1, never()) .onResourceReady( any(), any(), isA(Target.class), isA(DataSource.class), anyBoolean()); verify(listener2) .onResourceReady( any(), any(), isA(Target.class), isA(DataSource.class), anyBoolean()); }
private <Y extends Target<TranscodeType>> Y into(@NonNull Y target, RequestOptions options) { Util.assertMainThread(); Preconditions.checkNotNull(target); if (!isModelSet) { throw new IllegalArgumentException("You must call #load() before calling #into()"); } options = options.autoClone(); Request request = buildRequest(target, options); Request previous = target.getRequest(); if (request.isEquivalentTo(previous)) { request.recycle(); // If the request is completed, beginning again will ensure the result is re-delivered, // triggering RequestListeners and Targets. If the request is failed, beginning again will // restart the request, giving it another chance to complete. If the request is already // running, we can let it continue running without interruption. if (!Preconditions.checkNotNull(previous).isRunning()) { previous.begin(); } return target; } requestManager.clear(target); target.setRequest(request); requestManager.track(target, request); return target; }