/* * Copyright (c) 2015, Nils Braden * * This file is part of ttrss-reader-fork. This program is free software; you * can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation; * either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. You should have received a * copy of the GNU General Public License along with this program; If * not, see http://www.gnu.org/licenses/. */ package org.ttrssreader.gui.view; import android.content.Context; import android.view.View; import android.webkit.WebView; public class MyWebView extends WebView { @SuppressWarnings("unused") private static final String TAG = MyWebView.class.getSimpleName(); public MyWebView(Context context) { super(context); } private OnEdgeReachedListener mOnTopReachedListener = null; private OnEdgeReachedListener mOnBottomReachedListener = null; @SuppressWarnings("FieldCanBeLocal") private int mMinTopDistance = 0; @SuppressWarnings("FieldCanBeLocal") private int mMinBottomDistance = 0; /** * Set the listener which will be called when the WebView is scrolled to within some * margin of the top or bottom. * * @param bottomReachedListener * @param allowedDifference */ // public void setOnTopReachedListener(OnEdgeReachedListener topReachedListener, int allowedDifference) { // mOnTopReachedListener = topReachedListener; // mMinTopDistance = allowedDifference; // } // public void setOnBottomReachedListener(OnEdgeReachedListener bottomReachedListener, int allowedDifference) { // mOnBottomReachedListener = bottomReachedListener; // mMinBottomDistance = allowedDifference; // } /** * Implement this interface if you want to be notified when the WebView has scrolled to the top or bottom. */ private interface OnEdgeReachedListener { void onTopReached(View v, boolean reached); void onBottomReached(View v, boolean reached); } private boolean topReached = true; private boolean bottomReached = false; @Override protected void onScrollChanged(int left, int top, int oldLeft, int oldTop) { if (mOnTopReachedListener != null) handleTopReached(top); if (mOnBottomReachedListener != null) handleBottomReached(top); super.onScrollChanged(left, top, oldLeft, oldTop); } private void handleTopReached(int top) { boolean reached; if (top <= mMinTopDistance) reached = true; else if (top > (mMinTopDistance * 1.5)) reached = false; else return; if (!reached && !topReached) return; if (reached && topReached) return; topReached = reached; mOnTopReachedListener.onTopReached(this, reached); } private void handleBottomReached(int top) { boolean reached; if ((getContentHeight() - (top + getHeight())) <= mMinBottomDistance) reached = true; else if ((getContentHeight() - (top + getHeight())) > (mMinBottomDistance * 1.5)) reached = false; else return; if (!reached && !bottomReached) return; if (reached && bottomReached) return; bottomReached = reached; mOnBottomReachedListener.onBottomReached(this, reached); } }