Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2014 Google Inc.
      3  * Licensed to The Android Open Source Project.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 package com.android.mail.ui;
     19 
     20 import android.content.Context;
     21 import android.database.Observable;
     22 import android.util.AttributeSet;
     23 import android.widget.ListView;
     24 
     25 import com.android.mail.browse.ScrollNotifier;
     26 
     27 /**
     28  * Ordinary list view with extra boilerplate to notify on scrollbar-related events (unrelated to
     29  * {@link android.widget.AbsListView.OnScrollListener}!)
     30  */
     31 public class ScrollNotifyingListView extends ListView implements ScrollNotifier {
     32 
     33     private final ScrollObservable mObservable = new ScrollObservable();
     34 
     35     public ScrollNotifyingListView(Context c) {
     36         this(c, null);
     37     }
     38 
     39     public ScrollNotifyingListView(Context c, AttributeSet attrs) {
     40         super(c, attrs);
     41     }
     42 
     43     @Override
     44     public void addScrollListener(ScrollListener l) {
     45         mObservable.registerObserver(l);
     46     }
     47 
     48     @Override
     49     public void removeScrollListener(ScrollListener l) {
     50         mObservable.unregisterObserver(l);
     51     }
     52 
     53     @Override
     54     protected void onScrollChanged(int l, int t, int oldl, int oldt) {
     55         super.onScrollChanged(l, t, oldl, oldt);
     56         mObservable.onScrollChanged(l, t, oldl, oldt);
     57     }
     58 
     59     @Override
     60     public int computeVerticalScrollRange() {
     61         return super.computeVerticalScrollRange();
     62     }
     63 
     64     @Override
     65     public int computeVerticalScrollOffset() {
     66         return super.computeVerticalScrollOffset();
     67     }
     68 
     69     @Override
     70     public int computeVerticalScrollExtent() {
     71         return super.computeVerticalScrollExtent();
     72     }
     73 
     74     @Override
     75     public int computeHorizontalScrollRange() {
     76         return super.computeHorizontalScrollRange();
     77     }
     78 
     79     @Override
     80     public int computeHorizontalScrollOffset() {
     81         return super.computeHorizontalScrollOffset();
     82     }
     83 
     84     @Override
     85     public int computeHorizontalScrollExtent() {
     86         return super.computeHorizontalScrollExtent();
     87     }
     88 
     89     private static class ScrollObservable extends Observable<ScrollListener> {
     90 
     91         @SuppressWarnings("unused")
     92         public void onScrollChanged(int l, int t, int oldl, int oldt) {
     93             for (ScrollListener sl : mObservers) {
     94                 sl.onNotifierScroll(t);
     95             }
     96         }
     97 
     98     }
     99 
    100 }
    101