Skip to content

Commit cb1c74e

Browse files
author
John Gray
committed
Refactored things so isPositionVisible is in its own interface, so this change will be backwards compatible.
1 parent e666f96 commit cb1c74e

File tree

3 files changed

+48
-9
lines changed

3 files changed

+48
-9
lines changed

library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersAdapter.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,4 @@ public interface StickyRecyclerHeadersAdapter<VH extends RecyclerView.ViewHolder
3636
* @return the number of views in the adapter
3737
*/
3838
int getItemCount();
39-
40-
boolean isPositionVisible(final int position);
4139
}

library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersDecoration.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration {
1818

1919
private final StickyRecyclerHeadersAdapter mAdapter;
20+
private final StickyRecyclerHeadersVisibleAdapter mVisibilityAdapter;
2021
private final SparseArray<Rect> mHeaderRects = new SparseArray<>();
2122
private final HeaderProvider mHeaderProvider;
2223
private final OrientationProvider mOrientationProvider;
@@ -32,31 +33,36 @@ public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration
3233

3334
// TODO: Consider passing in orientation to simplify orientation accounting within calculation
3435
public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter) {
35-
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator());
36+
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator(), null);
37+
}
38+
39+
public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
40+
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator(), visibilityAdapter);
3641
}
3742

3843
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, OrientationProvider orientationProvider,
39-
DimensionCalculator dimensionCalculator) {
44+
DimensionCalculator dimensionCalculator, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
4045
this(adapter, orientationProvider, dimensionCalculator, new HeaderRenderer(orientationProvider),
41-
new HeaderViewCache(adapter, orientationProvider));
46+
new HeaderViewCache(adapter, orientationProvider), visibilityAdapter);
4247
}
4348

4449
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, OrientationProvider orientationProvider,
45-
DimensionCalculator dimensionCalculator, HeaderRenderer headerRenderer, HeaderProvider headerProvider) {
50+
DimensionCalculator dimensionCalculator, HeaderRenderer headerRenderer, HeaderProvider headerProvider, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
4651
this(adapter, headerRenderer, orientationProvider, dimensionCalculator, headerProvider,
4752
new HeaderPositionCalculator(adapter, headerProvider, orientationProvider,
48-
dimensionCalculator));
53+
dimensionCalculator), visibilityAdapter);
4954
}
5055

5156
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, HeaderRenderer headerRenderer,
5257
OrientationProvider orientationProvider, DimensionCalculator dimensionCalculator, HeaderProvider headerProvider,
53-
HeaderPositionCalculator headerPositionCalculator) {
58+
HeaderPositionCalculator headerPositionCalculator, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
5459
mAdapter = adapter;
5560
mHeaderProvider = headerProvider;
5661
mOrientationProvider = orientationProvider;
5762
mRenderer = headerRenderer;
5863
mDimensionCalculator = dimensionCalculator;
5964
mHeaderPositionCalculator = headerPositionCalculator;
65+
mVisibilityAdapter = visibilityAdapter;
6066
}
6167

6268
@Override
@@ -131,7 +137,7 @@ public int findHeaderPositionUnder(int x, int y) {
131137
Rect rect = mHeaderRects.get(mHeaderRects.keyAt(i));
132138
if (rect.contains(x, y)) {
133139
int position = mHeaderRects.keyAt(i);
134-
if (mAdapter.isPositionVisible(position)) {
140+
if (mVisibilityAdapter == null || mVisibilityAdapter.isPositionVisible(position)) {
135141
return position;
136142
}
137143
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright (c) 2015 Lineage Labs, Inc. All Rights Reserved.
3+
*
4+
* This Software contains confidential information and trade secrets of
5+
* Lineage Labs, Inc. Use, disclosure or reproduction is prohibited
6+
* without the prior express written permission of Lineage Labs, Inc.
7+
*
8+
* LINEAGE LABS, INC MAKES NO REPRESENTATION OR WARRANTIES ABOUT THE
9+
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
10+
* LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
11+
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. LINEAGE LABS, INC SHALL NOT
12+
* BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSE AS A RESULT OF USING,
13+
* MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
14+
*
15+
* The Licensed Software and Documentation are deemed to be commercial
16+
* computer software and commercial computer software documentation as
17+
* defined in FAR Sections 12.212 and DFARS Section 227.7202.
18+
*
19+
*/
20+
21+
package com.timehop.stickyheadersrecyclerview;
22+
23+
/**
24+
* Created by gray on 2/12/16.
25+
*/
26+
public interface StickyRecyclerHeadersVisibleAdapter {
27+
28+
/**
29+
*
30+
* Return true the specified adapter position is visible, false otherwise
31+
*
32+
* @param position the adapter position
33+
*/
34+
boolean isPositionVisible(final int position);
35+
}

0 commit comments

Comments
 (0)