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