161f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang/* 261f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * Copyright (C) 2011 Google Inc. 361f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * Licensed to The Android Open Source Project. 461f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * 561f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * Licensed under the Apache License, Version 2.0 (the "License"); 661f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * you may not use this file except in compliance with the License. 761f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * You may obtain a copy of the License at 861f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * 961f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * http://www.apache.org/licenses/LICENSE-2.0 1061f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * 1161f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * Unless required by applicable law or agreed to in writing, software 1261f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * distributed under the License is distributed on an "AS IS" BASIS, 1361f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1461f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * See the License for the specific language governing permissions and 1561f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang * limitations under the License. 1661f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang */ 1756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 1856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Weipackage com.android.mail.browse; 1956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 2056d83850db72592a16f4e6ee9e0d59b60ec0824aMark Weiimport android.content.Context; 2156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Weiimport android.util.AttributeSet; 2256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Weiimport android.view.View; 2356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 2456d83850db72592a16f4e6ee9e0d59b60ec0824aMark Weiimport com.android.mail.browse.ScrollNotifier.ScrollListener; 2556d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 2656d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei/** 2756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei * An overlay to sit on top of WebView, message headers, and snap header to display scrollbars. 2856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei * It has to sit on top of all other views that compose the conversation so that the scrollbars are 2956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei * not obscured. 3056d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei * 3156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei */ 3256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Weipublic class ScrollIndicatorsView extends View implements ScrollListener { 3356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 3456d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei private ScrollNotifier mSource; 3556d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 3656d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei public ScrollIndicatorsView(Context context) { 3756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei super(context); 3856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 3956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 4056d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei public ScrollIndicatorsView(Context context, AttributeSet attrs) { 4156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei super(context, attrs); 4256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 4356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 4456d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei public void setSourceView(ScrollNotifier notifier) { 4556d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei mSource = notifier; 4656d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei mSource.addScrollListener(this); 4756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 4856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 4956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 5056d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei protected int computeVerticalScrollRange() { 5156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei return mSource.computeVerticalScrollRange(); 5256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 5356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 5456d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 5556d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei protected int computeVerticalScrollOffset() { 5656d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei return mSource.computeVerticalScrollOffset(); 5756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 5856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 5956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 6056d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei protected int computeVerticalScrollExtent() { 6156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei return mSource.computeVerticalScrollExtent(); 6256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 6356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 6456d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 6556d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei protected int computeHorizontalScrollRange() { 6656d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei return mSource.computeHorizontalScrollRange(); 6756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 6856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 6956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 7056d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei protected int computeHorizontalScrollOffset() { 7156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei return mSource.computeHorizontalScrollOffset(); 7256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 7356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 7456d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 7556d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei protected int computeHorizontalScrollExtent() { 7656d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei return mSource.computeHorizontalScrollExtent(); 7756d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 7856d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei 7956d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei @Override 80bb6f0504c1607c89d9a3dd3e6023f36d61837016Andrew Sapperstein public void onNotifierScroll(int top) { 8156d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei awakenScrollBars(); 8256d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei } 8356d83850db72592a16f4e6ee9e0d59b60ec0824aMark Wei} 84