Skip to content

Commit dffe8db

Browse files
committed
[Fix] Use ViewHelperProvider instead of SimpleFastScrollView.
To fix getScrollRange() clashing with NestedScrollView after ProGuard broadens access to the one in NestedScrollView to public.
1 parent d63045a commit dffe8db

8 files changed

Lines changed: 298 additions & 390 deletions

library/src/main/java/me/zhanghai/android/fastscroll/FastScrollNestedScrollView.java

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
import androidx.core.widget.NestedScrollView;
2929

3030
@SuppressLint("MissingSuperCall")
31-
public class FastScrollNestedScrollView extends NestedScrollView implements SimpleFastScrollView {
31+
public class FastScrollNestedScrollView extends NestedScrollView implements ViewHelperProvider {
3232

3333
@NonNull
34-
private SimpleFastScrollViewMixin mMixin;
34+
private final ViewHelper mViewHelper = new ViewHelper();
3535

3636
public FastScrollNestedScrollView(@NonNull Context context) {
3737
super(context);
@@ -54,76 +54,79 @@ public FastScrollNestedScrollView(@NonNull Context context, @Nullable AttributeS
5454

5555
private void init() {
5656
setScrollContainer(true);
57-
mMixin = new SimpleFastScrollViewMixin(new SimpleFastScrollViewMixin.ViewAccessor() {
58-
@Override
59-
public void superDraw(@NonNull Canvas canvas) {
60-
FastScrollNestedScrollView.super.draw(canvas);
61-
}
62-
@Override
63-
public void superOnScrollChanged(int left, int top, int oldLeft, int oldTop) {
64-
FastScrollNestedScrollView.super.onScrollChanged(left, top, oldLeft, oldTop);
65-
}
66-
@Override
67-
public boolean superOnInterceptTouchEvent(@NonNull MotionEvent event) {
68-
return FastScrollNestedScrollView.super.onInterceptTouchEvent(event);
69-
}
70-
@Override
71-
public boolean superOnTouchEvent(@NonNull MotionEvent event) {
72-
return FastScrollNestedScrollView.super.onTouchEvent(event);
73-
}
74-
@Override
75-
public int computeVerticalScrollRange() {
76-
return FastScrollNestedScrollView.this.computeVerticalScrollRange();
77-
}
78-
@Override
79-
public int computeVerticalScrollOffset() {
80-
return FastScrollNestedScrollView.this.computeVerticalScrollOffset();
81-
}
82-
});
8357
}
8458

59+
@NonNull
8560
@Override
86-
public void setOnPreDrawListener(@Nullable Runnable listener) {
87-
mMixin.setOnPreDrawListener(listener);
61+
public FastScroller.ViewHelper getViewHelper() {
62+
return mViewHelper;
8863
}
8964

9065
@Override
9166
public void draw(@NonNull Canvas canvas) {
92-
mMixin.draw(canvas);
93-
}
94-
95-
@Override
96-
public void setOnScrollChangedListener(@Nullable Runnable listener) {
97-
mMixin.setOnScrollChangedListener(listener);
67+
mViewHelper.draw(canvas);
9868
}
9969

10070
@Override
10171
protected void onScrollChanged(int left, int top, int oldLeft, int oldTop) {
102-
mMixin.onScrollChanged(left, top, oldLeft, oldTop);
103-
}
104-
105-
@Override
106-
public void setOnTouchEventListener(@Nullable Predicate<MotionEvent> listener) {
107-
mMixin.setOnTouchEventListener(listener);
72+
mViewHelper.onScrollChanged(left, top, oldLeft, oldTop);
10873
}
10974

11075
@Override
11176
public boolean onInterceptTouchEvent(@NonNull MotionEvent event) {
112-
return mMixin.onInterceptTouchEvent(event);
77+
return mViewHelper.onInterceptTouchEvent(event);
11378
}
11479

11580
@Override
11681
public boolean onTouchEvent(@NonNull MotionEvent event) {
117-
return mMixin.onTouchEvent(event);
82+
return mViewHelper.onTouchEvent(event);
11883
}
11984

120-
@Override
121-
public int getScrollRange() {
122-
return mMixin.getScrollRange() + getPaddingTop() + getPaddingBottom();
123-
}
124-
125-
@Override
126-
public int getScrollOffset() {
127-
return mMixin.getScrollOffset();
85+
private class ViewHelper extends SimpleViewHelper {
86+
87+
@Override
88+
public int getScrollRange() {
89+
return super.getScrollRange() + getPaddingTop() + getPaddingBottom();
90+
}
91+
92+
@Override
93+
protected void superDraw(@NonNull Canvas canvas) {
94+
FastScrollNestedScrollView.super.draw(canvas);
95+
}
96+
97+
@Override
98+
protected void superOnScrollChanged(int left, int top, int oldLeft, int oldTop) {
99+
FastScrollNestedScrollView.super.onScrollChanged(left, top, oldLeft, oldTop);
100+
}
101+
102+
@Override
103+
protected boolean superOnInterceptTouchEvent(@NonNull MotionEvent event) {
104+
return FastScrollNestedScrollView.super.onInterceptTouchEvent(event);
105+
}
106+
107+
@Override
108+
protected boolean superOnTouchEvent(@NonNull MotionEvent event) {
109+
return FastScrollNestedScrollView.super.onTouchEvent(event);
110+
}
111+
112+
@Override
113+
protected int computeVerticalScrollRange() {
114+
return FastScrollNestedScrollView.this.computeVerticalScrollRange();
115+
}
116+
117+
@Override
118+
protected int computeVerticalScrollOffset() {
119+
return FastScrollNestedScrollView.this.computeVerticalScrollOffset();
120+
}
121+
122+
@Override
123+
protected int getScrollX() {
124+
return FastScrollNestedScrollView.this.getScrollX();
125+
}
126+
127+
@Override
128+
protected void scrollTo(int x, int y) {
129+
FastScrollNestedScrollView.this.scrollTo(x, y);
130+
}
128131
}
129132
}

library/src/main/java/me/zhanghai/android/fastscroll/FastScrollScrollView.java

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
import androidx.annotation.StyleRes;
3030

3131
@SuppressLint("MissingSuperCall")
32-
public class FastScrollScrollView extends ScrollView implements SimpleFastScrollView {
32+
public class FastScrollScrollView extends ScrollView implements ViewHelperProvider {
3333

3434
@NonNull
35-
private SimpleFastScrollViewMixin mMixin;
35+
private final ViewHelper mViewHelper = new ViewHelper();
3636

3737
public FastScrollScrollView(@NonNull Context context) {
3838
super(context);
@@ -63,76 +63,79 @@ public FastScrollScrollView(@NonNull Context context, @Nullable AttributeSet att
6363
private void init() {
6464
setVerticalScrollBarEnabled(false);
6565
setScrollContainer(true);
66-
mMixin = new SimpleFastScrollViewMixin(new SimpleFastScrollViewMixin.ViewAccessor() {
67-
@Override
68-
public void superDraw(@NonNull Canvas canvas) {
69-
FastScrollScrollView.super.draw(canvas);
70-
}
71-
@Override
72-
public void superOnScrollChanged(int left, int top, int oldLeft, int oldTop) {
73-
FastScrollScrollView.super.onScrollChanged(left, top, oldLeft, oldTop);
74-
}
75-
@Override
76-
public boolean superOnInterceptTouchEvent(@NonNull MotionEvent event) {
77-
return FastScrollScrollView.super.onInterceptTouchEvent(event);
78-
}
79-
@Override
80-
public boolean superOnTouchEvent(@NonNull MotionEvent event) {
81-
return FastScrollScrollView.super.onTouchEvent(event);
82-
}
83-
@Override
84-
public int computeVerticalScrollRange() {
85-
return FastScrollScrollView.this.computeVerticalScrollRange();
86-
}
87-
@Override
88-
public int computeVerticalScrollOffset() {
89-
return FastScrollScrollView.this.computeVerticalScrollOffset();
90-
}
91-
});
9266
}
9367

68+
@NonNull
9469
@Override
95-
public void setOnPreDrawListener(@Nullable Runnable listener) {
96-
mMixin.setOnPreDrawListener(listener);
70+
public FastScroller.ViewHelper getViewHelper() {
71+
return mViewHelper;
9772
}
9873

9974
@Override
10075
public void draw(@NonNull Canvas canvas) {
101-
mMixin.draw(canvas);
102-
}
103-
104-
@Override
105-
public void setOnScrollChangedListener(@Nullable Runnable listener) {
106-
mMixin.setOnScrollChangedListener(listener);
76+
mViewHelper.draw(canvas);
10777
}
10878

10979
@Override
11080
protected void onScrollChanged(int left, int top, int oldLeft, int oldTop) {
111-
mMixin.onScrollChanged(left, top, oldLeft, oldTop);
112-
}
113-
114-
@Override
115-
public void setOnTouchEventListener(@Nullable Predicate<MotionEvent> listener) {
116-
mMixin.setOnTouchEventListener(listener);
81+
mViewHelper.onScrollChanged(left, top, oldLeft, oldTop);
11782
}
11883

11984
@Override
12085
public boolean onInterceptTouchEvent(@NonNull MotionEvent event) {
121-
return mMixin.onInterceptTouchEvent(event);
86+
return mViewHelper.onInterceptTouchEvent(event);
12287
}
12388

12489
@Override
12590
public boolean onTouchEvent(@NonNull MotionEvent event) {
126-
return mMixin.onTouchEvent(event);
91+
return mViewHelper.onTouchEvent(event);
12792
}
12893

129-
@Override
130-
public int getScrollRange() {
131-
return mMixin.getScrollRange() + getPaddingTop() + getPaddingBottom();
132-
}
133-
134-
@Override
135-
public int getScrollOffset() {
136-
return mMixin.getScrollOffset();
94+
private class ViewHelper extends SimpleViewHelper {
95+
96+
@Override
97+
public int getScrollRange() {
98+
return super.getScrollRange() + getPaddingTop() + getPaddingBottom();
99+
}
100+
101+
@Override
102+
protected void superDraw(@NonNull Canvas canvas) {
103+
FastScrollScrollView.super.draw(canvas);
104+
}
105+
106+
@Override
107+
protected void superOnScrollChanged(int left, int top, int oldLeft, int oldTop) {
108+
FastScrollScrollView.super.onScrollChanged(left, top, oldLeft, oldTop);
109+
}
110+
111+
@Override
112+
protected boolean superOnInterceptTouchEvent(@NonNull MotionEvent event) {
113+
return FastScrollScrollView.super.onInterceptTouchEvent(event);
114+
}
115+
116+
@Override
117+
protected boolean superOnTouchEvent(@NonNull MotionEvent event) {
118+
return FastScrollScrollView.super.onTouchEvent(event);
119+
}
120+
121+
@Override
122+
protected int computeVerticalScrollRange() {
123+
return FastScrollScrollView.this.computeVerticalScrollRange();
124+
}
125+
126+
@Override
127+
protected int computeVerticalScrollOffset() {
128+
return FastScrollScrollView.this.computeVerticalScrollOffset();
129+
}
130+
131+
@Override
132+
protected int getScrollX() {
133+
return FastScrollScrollView.this.getScrollX();
134+
}
135+
136+
@Override
137+
protected void scrollTo(int x, int y) {
138+
FastScrollScrollView.this.scrollTo(x, y);
139+
}
137140
}
138141
}

0 commit comments

Comments
 (0)