private void notifyCbs(int width, int height) { // One or more callbacks may trigger the removal of one or more additional callbacks, so we // need a copy of the list to avoid a concurrent modification exception. One place this // happens is when a full request completes from the in memory cache while its thumbnail is // still being loaded asynchronously. See #2237. for (SizeReadyCallback cb : new ArrayList<>(cbs)) { cb.onSizeReady(width, height); } }
private void notifyCbs(int width, int height) { // One or more callbacks may trigger the removal of one or more additional callbacks, so we // need a copy of the list to avoid a concurrent modification exception. One place this // happens is when a full request completes from the in memory cache while its thumbnail is // still being loaded asynchronously. See #2237. for (SizeReadyCallback cb : new ArrayList<>(cbs)) { cb.onSizeReady(width, height); } }
@Override public final void getSize(@NonNull SizeReadyCallback cb) { cb.onSizeReady(width, height); }
@Override public void getSize(@NonNull SizeReadyCallback cb) { cb.onSizeReady(photoWidth, photoHeight); }
/** * A callback that should never be invoked directly. */ @Override public void getSize(@NonNull SizeReadyCallback cb) { cb.onSizeReady(width, height); }
@Override public Object answer(InvocationOnMock invocationOnMock) throws Throwable { SizeReadyCallback cb = (SizeReadyCallback) invocationOnMock.getArguments()[0]; cb.onSizeReady(width, height); return null; } }
@Override public Void answer(InvocationOnMock invocation) throws Throwable { SizeReadyCallback cb = (SizeReadyCallback) invocation.getArguments()[0]; cb.onSizeReady(width, height); return null; } }
@Test public void getSize_withWidthAndHeightEqualToPadding_doesNotCallSizeReady() { view.setLayoutParams(new FrameLayout.LayoutParams(100, 100)); view.requestLayout(); view.setPadding(50, 50, 50, 50); target.getSize(cb); verify(cb, never()).onSizeReady(anyInt(), anyInt()); }
@Test public void testSizeCallbackIsCalledSynchronouslyIfLayoutParamsConcreteSizeSet() { int dimens = 444; LayoutParams layoutParams = new FrameLayout.LayoutParams(dimens, dimens); view.setLayoutParams(layoutParams); view.requestLayout(); target.getSize(cb); verify(cb).onSizeReady(eq(dimens), eq(dimens)); }
@Test public void testCallsSizeReadyCallbackOnGetSize() { SizeReadyCallback cb = mock(SizeReadyCallback.class); future.getSize(cb); verify(cb).onSizeReady(eq(width), eq(height)); }
@Test public void testSizeCallbackIsNotCalledPreDrawIfNoDimensSetOnPreDraw() { target.getSize(cb); view.getViewTreeObserver().dispatchOnPreDraw(); verify(cb, never()).onSizeReady(anyInt(), anyInt()); activity.visible(); verify(cb).onSizeReady(anyInt(), anyInt()); }
@Test public void testSizeCallbackIsCalledSynchronouslyIfViewSizeSet() { int dimens = 333; // activity.get().setContentView(view); view.layout(0, 0, dimens, dimens); target.getSize(cb); verify(cb).onSizeReady(eq(dimens), eq(dimens)); }
@Test public void testSizeCallbackIsCalledPreDrawIfNoDimensAndNoLayoutParamsButLayoutParamsSetLater() { target.getSize(cb); int width = 689; int height = 354; LayoutParams layoutParams = new FrameLayout.LayoutParams(width, height); view.setLayoutParams(layoutParams); view.requestLayout(); view.getViewTreeObserver().dispatchOnPreDraw(); verify(cb).onSizeReady(eq(width), eq(height)); }
@Test public void testDecreasesDimensionsByViewPadding() { activity.visible(); view.setLayoutParams(new FrameLayout.LayoutParams(100, 100)); view.setPadding(25, 25, 25, 25); view.requestLayout(); target.getSize(cb); verify(cb).onSizeReady(50, 50); }
@Test public void testSizeCallbackIsCalledSynchronouslyIfLayoutParamsConcreteSizeSet() { int dimens = 444; LayoutParams layoutParams = new LayoutParams(dimens, dimens); view.setLayoutParams(layoutParams); shadowView.setIsLaidOut(true); target.getSize(cb); verify(cb).onSizeReady(eq(dimens), eq(dimens)); }
@Test public void testDecreasesDimensionsByViewPadding() { view.setLayoutParams(new LayoutParams(100, 100)); view.setPadding(25, 25, 25, 25); shadowView.setIsLaidOut(true); target.getSize(cb); verify(cb).onSizeReady(50, 50); }
@Test public void testMatchParentWidthAndHeight() { LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); view.setLayoutParams(params); target.getSize(cb); verify(cb, never()).onSizeReady(anyInt(), anyInt()); activity.visible(); view.getViewTreeObserver().dispatchOnPreDraw(); verify(cb).onSizeReady(eq(parent.getWidth()), eq(parent.getHeight())); }
@Test public void testCallbackIsNotCalledTwiceIfPreDrawFiresTwice() { activity.visible(); target.getSize(cb); LayoutParams layoutParams = new FrameLayout.LayoutParams(1234, 4123); view.setLayoutParams(layoutParams); view.requestLayout(); view.getViewTreeObserver().dispatchOnPreDraw(); view.getViewTreeObserver().dispatchOnPreDraw(); verify(cb, times(1)).onSizeReady(anyInt(), anyInt()); }
@Test public void testCallsSizeReadyWithGivenDimensions() { int width = 1234; int height = 456; PreloadTarget<Object> target = PreloadTarget.obtain(requestManager, width, height); SizeReadyCallback cb = mock(SizeReadyCallback.class); target.getSize(cb); verify(cb).onSizeReady(eq(width), eq(height)); }
@Test public void getSize_withValidWidthAndHeight_preV19_layoutRequested_callsSizeReady() { setSdkVersionInt(18); view.setLayoutParams(new FrameLayout.LayoutParams(100, 100)); view.requestLayout(); target.getSize(cb); verify(cb).onSizeReady(100, 100); }