• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.android.setupdesign.template;
18 
19 import androidx.annotation.NonNull;
20 import androidx.annotation.Nullable;
21 import android.util.Log;
22 import android.widget.ScrollView;
23 import com.google.android.setupdesign.template.RequireScrollMixin.ScrollHandlingDelegate;
24 import com.google.android.setupdesign.view.BottomScrollView;
25 import com.google.android.setupdesign.view.BottomScrollView.BottomScrollListener;
26 
27 /**
28  * {@link ScrollHandlingDelegate} which analyzes scroll events from {@link BottomScrollView} and
29  * notifies {@link RequireScrollMixin} about scrollability changes.
30  */
31 public class ScrollViewScrollHandlingDelegate
32     implements ScrollHandlingDelegate, BottomScrollListener {
33 
34   private static final String TAG = "ScrollViewDelegate";
35 
36   @NonNull private final RequireScrollMixin requireScrollMixin;
37 
38   @Nullable private final BottomScrollView scrollView;
39 
ScrollViewScrollHandlingDelegate( @onNull RequireScrollMixin requireScrollMixin, @Nullable ScrollView scrollView)40   public ScrollViewScrollHandlingDelegate(
41       @NonNull RequireScrollMixin requireScrollMixin, @Nullable ScrollView scrollView) {
42     this.requireScrollMixin = requireScrollMixin;
43     if (scrollView instanceof BottomScrollView) {
44       this.scrollView = (BottomScrollView) scrollView;
45     } else {
46       Log.w(TAG, "Cannot set non-BottomScrollView. Found=" + scrollView);
47       this.scrollView = null;
48     }
49   }
50 
51   @Override
onScrolledToBottom()52   public void onScrolledToBottom() {
53     requireScrollMixin.notifyScrollabilityChange(false);
54   }
55 
56   @Override
onRequiresScroll()57   public void onRequiresScroll() {
58     requireScrollMixin.notifyScrollabilityChange(true);
59   }
60 
61   @Override
startListening()62   public void startListening() {
63     if (scrollView != null) {
64       scrollView.setBottomScrollListener(this);
65     } else {
66       Log.w(TAG, "Cannot require scroll. Scroll view is null.");
67     }
68   }
69 
70   @Override
pageScrollDown()71   public void pageScrollDown() {
72     if (scrollView != null) {
73       scrollView.pageScroll(ScrollView.FOCUS_DOWN);
74     }
75   }
76 }
77