Skip to content

Commit dc12b60

Browse files
SUPERCILEXsjudd
authored andcommitted
Improve Kotlin support for RecyclerView module (#2670)
* Improve Kotlin support for RecyclerView module with nullability annotations Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
1 parent 6778396 commit dc12b60

File tree

11 files changed

+80
-59
lines changed

11 files changed

+80
-59
lines changed

integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerToListViewScrollListener.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.bumptech.glide.integration.recyclerview;
22

3+
import android.support.annotation.NonNull;
34
import android.support.v7.widget.LinearLayoutManager;
45
import android.support.v7.widget.RecyclerView;
56
import android.widget.AbsListView;
@@ -20,7 +21,7 @@ public final class RecyclerToListViewScrollListener extends RecyclerView.OnScrol
2021
private int lastVisibleCount = -1;
2122
private int lastItemCount = -1;
2223

23-
public RecyclerToListViewScrollListener(AbsListView.OnScrollListener scrollListener) {
24+
public RecyclerToListViewScrollListener(@NonNull AbsListView.OnScrollListener scrollListener) {
2425
this.scrollListener = scrollListener;
2526
}
2627

integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerViewPreloader.java

+17-12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Activity;
44
import android.app.Fragment;
5+
import android.support.annotation.NonNull;
56
import android.support.v4.app.FragmentActivity;
67
import android.support.v7.widget.RecyclerView;
78
import com.bumptech.glide.Glide;
@@ -34,38 +35,42 @@ public final class RecyclerViewPreloader<T> extends RecyclerView.OnScrollListene
3435
/**
3536
* Helper constructor that accepts an {@link Activity}.
3637
*/
37-
public RecyclerViewPreloader(Activity activity,
38-
PreloadModelProvider<T> preloadModelProvider,
39-
PreloadSizeProvider<T> preloadDimensionProvider, int maxPreload) {
38+
public RecyclerViewPreloader(@NonNull Activity activity,
39+
@NonNull PreloadModelProvider<T> preloadModelProvider,
40+
@NonNull PreloadSizeProvider<T> preloadDimensionProvider, int maxPreload) {
4041
this(Glide.with(activity), preloadModelProvider, preloadDimensionProvider, maxPreload);
4142
}
4243

4344
/**
4445
* Helper constructor that accepts an {@link FragmentActivity}.
4546
*/
46-
public RecyclerViewPreloader(FragmentActivity fragmentActivity,
47-
PreloadModelProvider<T> preloadModelProvider, PreloadSizeProvider<T> preloadDimensionProvider,
47+
public RecyclerViewPreloader(@NonNull FragmentActivity fragmentActivity,
48+
@NonNull PreloadModelProvider<T> preloadModelProvider,
49+
@NonNull PreloadSizeProvider<T> preloadDimensionProvider,
4850
int maxPreload) {
4951
this(Glide.with(fragmentActivity), preloadModelProvider, preloadDimensionProvider, maxPreload);
5052
}
5153

5254
/**
5355
* Helper constructor that accepts an {@link Fragment}.
5456
*/
55-
public RecyclerViewPreloader(Fragment fragment,
56-
PreloadModelProvider<T> preloadModelProvider, PreloadSizeProvider<T> preloadDimensionProvider,
57+
public RecyclerViewPreloader(@NonNull Fragment fragment,
58+
@NonNull PreloadModelProvider<T> preloadModelProvider,
59+
@NonNull PreloadSizeProvider<T> preloadDimensionProvider,
5760
int maxPreload) {
5861
this(Glide.with(fragment), preloadModelProvider, preloadDimensionProvider, maxPreload);
5962
}
6063

6164
/**
6265
* Helper constructor that accepts an {@link android.support.v4.app.Fragment}.
6366
*/
64-
public RecyclerViewPreloader(android.support.v4.app.Fragment fragment,
65-
PreloadModelProvider<T> preloadModelProvider, PreloadSizeProvider<T> preloadDimensionProvider,
67+
public RecyclerViewPreloader(@NonNull android.support.v4.app.Fragment fragment,
68+
@NonNull PreloadModelProvider<T> preloadModelProvider,
69+
@NonNull PreloadSizeProvider<T> preloadDimensionProvider,
6670
int maxPreload) {
6771
this(Glide.with(fragment), preloadModelProvider, preloadDimensionProvider, maxPreload);
6872
}
73+
6974
/**
7075
* Constructor that accepts interfaces for providing the dimensions of images to preload, the list
7176
* of models to preload for a given position, and the request to use to load images.
@@ -74,9 +79,9 @@ public RecyclerViewPreloader(android.support.v4.app.Fragment fragment,
7479
* @param preloadDimensionProvider Provides the dimensions of images to load.
7580
* @param maxPreload Maximum number of items to preload.
7681
*/
77-
public RecyclerViewPreloader(RequestManager requestManager,
78-
PreloadModelProvider<T> preloadModelProvider,
79-
PreloadSizeProvider<T> preloadDimensionProvider, int maxPreload) {
82+
public RecyclerViewPreloader(@NonNull RequestManager requestManager,
83+
@NonNull PreloadModelProvider<T> preloadModelProvider,
84+
@NonNull PreloadSizeProvider<T> preloadDimensionProvider, int maxPreload) {
8085

8186
ListPreloader<T> listPreloader = new ListPreloader<>(requestManager, preloadModelProvider,
8287
preloadDimensionProvider, maxPreload);

library/src/main/java/com/bumptech/glide/Glide.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ private static RequestManagerRetriever getRetriever(@Nullable Context context) {
602602
// only occur due to errors with the Fragment lifecycle.
603603
Preconditions.checkNotNull(
604604
context,
605-
"You cannot start a load on a not yet attached View or a Fragment where getActivity() "
605+
"You cannot start a load on a not yet attached View or a Fragment where getActivity() "
606606
+ "returns null (which usually occurs when getActivity() is called before the Fragment "
607607
+ "is attached or after the Fragment is destroyed).");
608608
return Glide.get(context).getRequestManagerRetriever();

library/src/main/java/com/bumptech/glide/ListPreloader.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public interface PreloadModelProvider<U> {
8585
* @param item The model to load.
8686
*/
8787
@Nullable
88-
RequestBuilder<?> getPreloadRequestBuilder(U item);
88+
RequestBuilder<?> getPreloadRequestBuilder(@NonNull U item);
8989
}
9090

9191
/**
@@ -107,7 +107,7 @@ public interface PreloadSizeProvider<T> {
107107
* @param item A model
108108
*/
109109
@Nullable
110-
int[] getPreloadSize(T item, int adapterPosition, int perItemPosition);
110+
int[] getPreloadSize(@NonNull T item, int adapterPosition, int perItemPosition);
111111
}
112112

113113
/**
@@ -119,8 +119,9 @@ public interface PreloadSizeProvider<T> {
119119
* @param preloadDimensionProvider Provides the dimensions of images to load.
120120
* @param maxPreload Maximum number of items to preload.
121121
*/
122-
public ListPreloader(RequestManager requestManager, PreloadModelProvider<T> preloadModelProvider,
123-
PreloadSizeProvider<T> preloadDimensionProvider, int maxPreload) {
122+
public ListPreloader(@NonNull RequestManager requestManager,
123+
@NonNull PreloadModelProvider<T> preloadModelProvider,
124+
@NonNull PreloadSizeProvider<T> preloadDimensionProvider, int maxPreload) {
124125
this.requestManager = requestManager;
125126
this.preloadModelProvider = preloadModelProvider;
126127
this.preloadDimensionProvider = preloadDimensionProvider;
@@ -169,12 +170,12 @@ private void preload(int from, int to) {
169170
if (from < to) {
170171
// Increasing
171172
for (int i = start; i < end; i++) {
172-
preloadAdapterPosition(this.preloadModelProvider.getPreloadItems(i), i, true);
173+
preloadAdapterPosition(preloadModelProvider.getPreloadItems(i), i, true);
173174
}
174175
} else {
175176
// Decreasing
176177
for (int i = end - 1; i >= start; i--) {
177-
preloadAdapterPosition(this.preloadModelProvider.getPreloadItems(i), i, false);
178+
preloadAdapterPosition(preloadModelProvider.getPreloadItems(i), i, false);
178179
}
179180
}
180181

library/src/main/java/com/bumptech/glide/util/FixedPreloadSizeProvider.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.bumptech.glide.util;
22

3+
import android.support.annotation.NonNull;
4+
import android.support.annotation.Nullable;
35
import com.bumptech.glide.ListPreloader;
46

57
/**
@@ -21,8 +23,9 @@ public FixedPreloadSizeProvider(int width, int height) {
2123
this.size = new int[] { width, height };
2224
}
2325

26+
@Nullable
2427
@Override
25-
public int[] getPreloadSize(T item, int adapterPosition, int itemPosition) {
28+
public int[] getPreloadSize(@NonNull T item, int adapterPosition, int itemPosition) {
2629
return size;
2730
}
2831
}

library/src/main/java/com/bumptech/glide/util/ViewPreloadSizeProvider.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.bumptech.glide.util;
22

3+
import android.support.annotation.NonNull;
4+
import android.support.annotation.Nullable;
35
import android.view.View;
46
import com.bumptech.glide.ListPreloader;
57
import com.bumptech.glide.request.target.SizeReadyCallback;
@@ -43,8 +45,9 @@ public ViewPreloadSizeProvider(View view) {
4345
this.viewTarget = new SizeViewTarget(view, this);
4446
}
4547

48+
@Nullable
4649
@Override
47-
public int[] getPreloadSize(T item, int adapterPosition, int itemPosition) {
50+
public int[] getPreloadSize(@NonNull T item, int adapterPosition, int itemPosition) {
4851
if (size == null) {
4952
return null;
5053
} else {

library/src/test/java/com/bumptech/glide/ListPreloaderTest.java

+22-20
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static org.mockito.Mockito.verify;
1010

1111
import android.support.annotation.NonNull;
12+
import android.support.annotation.Nullable;
1213
import com.bumptech.glide.request.target.SizeReadyCallback;
1314
import com.bumptech.glide.request.target.Target;
1415
import java.util.ArrayList;
@@ -36,7 +37,7 @@ public class ListPreloaderTest {
3637
@Mock private RequestManager requestManager;
3738

3839
@Before
39-
public void setUp() throws Exception {
40+
public void setUp() {
4041
MockitoAnnotations.initMocks(this);
4142
}
4243

@@ -73,7 +74,7 @@ public void testGetItemsIsCalledInOrderIncreasing() {
7374
private int expectedPosition;
7475

7576
@Override
76-
public int[] getPreloadSize(Object item, int adapterPosition, int itemPosition) {
77+
public int[] getPreloadSize(@NonNull Object item, int adapterPosition, int itemPosition) {
7778
return new int[] { 10, 10 };
7879
}
7980

@@ -83,10 +84,10 @@ public List<Object> getPreloadItems(int position) {
8384
return objects.subList(position - 11, position + 1 - 11);
8485
}
8586

86-
@NonNull
87+
@Nullable
8788
@Override
8889
@SuppressWarnings("unchecked")
89-
public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
90+
public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) {
9091
assertEquals(objects.get(expectedPosition), item);
9192
expectedPosition++;
9293
return mock(RequestBuilder.class);
@@ -134,7 +135,7 @@ public void testGetItemsIsCalledInOrderDecreasing() {
134135
private int expectedPosition = toPreload - 1;
135136

136137
@Override
137-
public int[] getPreloadSize(Object item, int adapterPosition, int itemPosition) {
138+
public int[] getPreloadSize(@NonNull Object item, int adapterPosition, int itemPosition) {
138139
return new int[] { 10, 10 };
139140
}
140141

@@ -147,10 +148,10 @@ public List<Object> getPreloadItems(int position) {
147148
return objects.subList(position, position + 1);
148149
}
149150

150-
@NonNull
151+
@Nullable
151152
@Override
152153
@SuppressWarnings("unchecked")
153-
public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
154+
public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) {
154155
assertEquals(objects.get(expectedPosition), item);
155156
expectedPosition--;
156157
return mock(RequestBuilder.class);
@@ -253,7 +254,7 @@ public List<Object> getPreloadItems(int position) {
253254
}
254255

255256
@Test
256-
public void testMultipleItemsForPositionIncreasing() throws NoSuchFieldException {
257+
public void testMultipleItemsForPositionIncreasing() {
257258
final List<Object> objects = new ArrayList<>();
258259
objects.add(new Object());
259260
objects.add(new Object());
@@ -267,16 +268,16 @@ public List<Object> getPreloadItems(int position) {
267268
}
268269

269270
@Override
270-
public int[] getPreloadSize(Object item, int adapterPosition, int itemPosition) {
271+
public int[] getPreloadSize(@NonNull Object item, int adapterPosition, int itemPosition) {
271272
assertEquals(expectedPosition / 2, adapterPosition);
272273
assertEquals(expectedPosition % 2, itemPosition);
273274
expectedPosition++;
274275
return itemPosition == 0 ? new int[] { 10, 11 } : new int[] { 20, 21 };
275276
}
276277

277-
@NonNull
278+
@Nullable
278279
@Override
279-
public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
280+
public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) {
280281
return request;
281282
}
282283
};
@@ -291,7 +292,7 @@ public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
291292
}
292293

293294
@Test
294-
public void testMultipleItemsForPositionDecreasing() throws NoSuchFieldException {
295+
public void testMultipleItemsForPositionDecreasing() {
295296
final List<Object> objects = new ArrayList<>();
296297
objects.add(new Object());
297298
objects.add(new Object());
@@ -305,16 +306,16 @@ public List<Object> getPreloadItems(int position) {
305306
}
306307

307308
@Override
308-
public int[] getPreloadSize(Object item, int adapterPosition, int itemPosition) {
309+
public int[] getPreloadSize(@NonNull Object item, int adapterPosition, int itemPosition) {
309310
assertEquals(expectedPosition / 2, adapterPosition);
310311
assertEquals(expectedPosition % 2, itemPosition);
311312
expectedPosition--;
312313
return itemPosition == 0 ? new int[] { 10, 11 } : new int[] { 20, 21 };
313314
}
314315

315-
@NonNull
316+
@Nullable
316317
@Override
317-
public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
318+
public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) {
318319
return request;
319320
}
320321
};
@@ -358,9 +359,9 @@ public List<Object> getPreloadItems(int position) {
358359
return objects.subList(position - 11, position - 10);
359360
}
360361

361-
@NonNull
362+
@Nullable
362363
@Override
363-
public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
364+
public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) {
364365
loadedObjects.add(item);
365366
return super.getPreloadRequestBuilder(item);
366367
}
@@ -386,15 +387,16 @@ public List<Object> getPreloadItems(int position) {
386387
return result;
387388
}
388389

389-
@NonNull
390+
@Nullable
390391
@Override
391392
@SuppressWarnings("unchecked")
392-
public RequestBuilder<Object> getPreloadRequestBuilder(Object item) {
393+
public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) {
393394
return mock(RequestBuilder.class);
394395
}
395396

397+
@Nullable
396398
@Override
397-
public int[] getPreloadSize(Object item, int adapterPosition, int itemPosition) {
399+
public int[] getPreloadSize(@NonNull Object item, int adapterPosition, int itemPosition) {
398400
return new int[] { 100, 100 };
399401
}
400402
}

samples/flickr/src/main/java/com/bumptech/glide/samples/flickr/FlickrPhotoGrid.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.graphics.drawable.Drawable;
66
import android.os.Bundle;
77
import android.support.annotation.NonNull;
8+
import android.support.annotation.Nullable;
89
import android.support.v4.app.Fragment;
910
import android.support.v7.widget.GridLayoutManager;
1011
import android.support.v7.widget.RecyclerView;
@@ -78,7 +79,7 @@ public View onCreateView(
7879

7980
final int gridMargin = getResources().getDimensionPixelOffset(R.dimen.grid_margin);
8081
int spanCount = getResources().getDisplayMetrics().widthPixels / (photoSize + (2 * gridMargin));
81-
grid = (RecyclerView) result.findViewById(R.id.flickr_photo_grid);
82+
grid = result.findViewById(R.id.flickr_photo_grid);
8283
layoutManager = new GridLayoutManager(getActivity(), spanCount);
8384
grid.setLayoutManager(layoutManager);
8485

@@ -199,9 +200,9 @@ public List<Photo> getPreloadItems(int position) {
199200
return photos.subList(position, position + 1);
200201
}
201202

202-
@NonNull
203+
@Nullable
203204
@Override
204-
public RequestBuilder<Drawable> getPreloadRequestBuilder(Photo item) {
205+
public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull Photo item) {
205206
return preloadRequest.load(item);
206207
}
207208
}

0 commit comments

Comments
 (0)