1c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huangpackage com.android.mail.browse;
2c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
3c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huangimport android.content.Context;
4c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huangimport android.util.AttributeSet;
5c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huangimport android.webkit.WebView;
6c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
7c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huangpublic class MailWebView extends WebView {
8c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
9c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    // NARROW_COLUMNS reflow can trigger the document to change size, so notify interested parties.
10c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    // This is also a good trigger to know when to alter scroll position.
11c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public interface ContentSizeChangeListener {
12c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        void onHeightChange(int h);
13c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
14c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
15c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    private int mCachedContentHeight;
16c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
17c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    private ContentSizeChangeListener mSizeChangeListener;
18c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
19c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public MailWebView(Context c) {
20c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        this(c, null);
21c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
22c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
23c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public MailWebView(Context c, AttributeSet attrs) {
24c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        super(c, attrs);
25c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
26c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
27c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
28c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public int computeVerticalScrollRange() {
29c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        return super.computeVerticalScrollRange();
30c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
31c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
32c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
33c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public int computeVerticalScrollOffset() {
34c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        return super.computeVerticalScrollOffset();
35c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
36c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
37c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
38c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public int computeVerticalScrollExtent() {
39c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        return super.computeVerticalScrollExtent();
40c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
41c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
42c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
43c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public int computeHorizontalScrollRange() {
44c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        return super.computeHorizontalScrollRange();
45c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
46c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
47c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
48c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public int computeHorizontalScrollOffset() {
49c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        return super.computeHorizontalScrollOffset();
50c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
51c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
52c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
53c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public int computeHorizontalScrollExtent() {
54c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        return super.computeHorizontalScrollExtent();
55c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
56c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
57c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public void setContentSizeChangeListener(ContentSizeChangeListener l) {
58c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        mSizeChangeListener = l;
59c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
60c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
61c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    @Override
62c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    public void invalidate() {
63c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        super.invalidate();
64c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
65c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        if (mSizeChangeListener != null) {
66c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang            final int contentHeight = getContentHeight();
67c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang            if (contentHeight != mCachedContentHeight) {
68c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang                mCachedContentHeight = contentHeight;
69c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang                mSizeChangeListener.onHeightChange(contentHeight);
70c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang            }
71c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang        }
72c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang    }
73c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang
74c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang}
75