Simplify WebView Callbacks into one interface

This commit is contained in:
Rashiq 2017-01-01 15:00:46 +01:00
parent abb610c0ad
commit 89c1f31fe0
3 changed files with 75 additions and 103 deletions

View File

@ -1177,82 +1177,6 @@ public class KiwixMobileActivity extends AppCompatActivity implements WebViewCal
// However, it must notify the bookmark system when a page is finished loading // However, it must notify the bookmark system when a page is finished loading
// so that it can refresh the menu. // so that it can refresh the menu.
getCurrentWebView().setOnPageChangedListener(new KiwixWebView.OnPageChangeListener() {
@Override
public void onPageChanged(int page, int maxPages) {
if (isBackToTopEnabled) {
if (getCurrentWebView().getScrollY() > 200) {
if (backToTopButton.getVisibility() == View.INVISIBLE && TTSControls.getVisibility() == View.GONE ) {
backToTopButton.setText(R.string.button_backtotop);
backToTopButton.setVisibility(View.VISIBLE);
backToTopButton.startAnimation(
AnimationUtils.loadAnimation(KiwixMobileActivity.this, android.R.anim.fade_in));
backToTopButton.setVisibility(View.INVISIBLE);
Animation fadeAnimation =
AnimationUtils.loadAnimation(KiwixMobileActivity.this, android.R.anim.fade_out);
fadeAnimation.setStartOffset(1200);
backToTopButton.startAnimation(fadeAnimation);
}
} else {
if (backToTopButton.getVisibility() == View.VISIBLE) {
backToTopButton.setVisibility(View.INVISIBLE);
backToTopButton.clearAnimation();
backToTopButton.startAnimation(
AnimationUtils.loadAnimation(KiwixMobileActivity.this, android.R.anim.fade_out));
} else {
backToTopButton.clearAnimation();
}
}
}
}
});
getCurrentWebView().setOnLongClickListener(new KiwixWebView.OnLongClickListener() {
@Override
public void onLongClick(final String url) {
boolean handleEvent = false;
if (url.startsWith(ZimContentProvider.CONTENT_URI.toString())) {
// This is my web site, so do not override; let my WebView load the page
handleEvent = true;
} else if (url.startsWith("file://") && !url.contains("selectzimfile")) {
// To handle help page (loaded from resources)
handleEvent = true;
} else if (url.startsWith(ZimContentProvider.UI_URI.toString()) && !url.contains("selectzimfile")) {
handleEvent = true;
}
if (handleEvent) {
AlertDialog.Builder builder = new AlertDialog.Builder(KiwixMobileActivity.this);
builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if (isOpenNewTabInBackground) {
newTabInBackground(url);
Snackbar snackbar = Snackbar.make(snackbarLayout,
getString(R.string.new_tab_snackbar),
Snackbar.LENGTH_LONG)
.setAction(getString(R.string.open), v -> {
if (mWebViews.size() > 1) selectTab(mWebViews.size() - 1);
});
snackbar.setActionTextColor(getResources().getColor(R.color.white));
snackbar.show();
} else {
newTab(url);
}
}
});
builder.setNegativeButton(android.R.string.no, null);
builder.setMessage(getString(R.string.open_in_new_tab));
AlertDialog dialog = builder.create();
dialog.show();
}
}
});
backToTopButton.setOnClickListener(new View.OnClickListener() { backToTopButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -1527,6 +1451,75 @@ public class KiwixMobileActivity extends AppCompatActivity implements WebViewCal
tabDrawerAdapter.notifyDataSetChanged(); tabDrawerAdapter.notifyDataSetChanged();
} }
@Override public void webViewPageChanged(int page, int maxPages) {
if (isBackToTopEnabled) {
if (getCurrentWebView().getScrollY() > 200) {
if (backToTopButton.getVisibility() == View.INVISIBLE && TTSControls.getVisibility() == View.GONE ) {
backToTopButton.setText(R.string.button_backtotop);
backToTopButton.setVisibility(View.VISIBLE);
backToTopButton.startAnimation(
AnimationUtils.loadAnimation(KiwixMobileActivity.this, android.R.anim.fade_in));
backToTopButton.setVisibility(View.INVISIBLE);
Animation fadeAnimation =
AnimationUtils.loadAnimation(KiwixMobileActivity.this, android.R.anim.fade_out);
fadeAnimation.setStartOffset(1200);
backToTopButton.startAnimation(fadeAnimation);
}
} else {
if (backToTopButton.getVisibility() == View.VISIBLE) {
backToTopButton.setVisibility(View.INVISIBLE);
backToTopButton.clearAnimation();
backToTopButton.startAnimation(
AnimationUtils.loadAnimation(KiwixMobileActivity.this, android.R.anim.fade_out));
} else {
backToTopButton.clearAnimation();
}
}
}
}
@Override public void webViewLongClick(final String url) {
boolean handleEvent = false;
if (url.startsWith(ZimContentProvider.CONTENT_URI.toString())) {
// This is my web site, so do not override; let my WebView load the page
handleEvent = true;
} else if (url.startsWith("file://") && !url.contains("selectzimfile")) {
// To handle help page (loaded from resources)
handleEvent = true;
} else if (url.startsWith(ZimContentProvider.UI_URI.toString()) && !url.contains("selectzimfile")) {
handleEvent = true;
}
if (handleEvent) {
AlertDialog.Builder builder = new AlertDialog.Builder(KiwixMobileActivity.this);
builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if (isOpenNewTabInBackground) {
newTabInBackground(url);
Snackbar snackbar = Snackbar.make(snackbarLayout,
getString(R.string.new_tab_snackbar),
Snackbar.LENGTH_LONG)
.setAction(getString(R.string.open), v -> {
if (mWebViews.size() > 1) selectTab(mWebViews.size() - 1);
});
snackbar.setActionTextColor(getResources().getColor(R.color.white));
snackbar.show();
} else {
newTab(url);
}
}
});
builder.setNegativeButton(android.R.string.no, null);
builder.setMessage(getString(R.string.open_in_new_tab));
AlertDialog dialog = builder.create();
dialog.show();
}
}
public void selectSettings() { public void selectSettings() {
final String zimFile = ZimContentProvider.getZimFile(); final String zimFile = ZimContentProvider.getZimFile();
Intent i = new Intent(this, KiwixSettingsActivity.class); Intent i = new Intent(this, KiwixSettingsActivity.class);

View File

@ -18,4 +18,8 @@ public interface WebViewCallback {
void webViewProgressChanged(int progress); void webViewProgressChanged(int progress);
void webViewTitleUpdated(String title); void webViewTitleUpdated(String title);
void webViewPageChanged(int page, int maxPages);
void webViewLongClick(String url);
} }

View File

@ -59,10 +59,6 @@ public class KiwixWebView extends WebView {
}; };
private WebViewCallback callback; private WebViewCallback callback;
private OnPageChangeListener mChangeListener;
private OnLongClickListener mOnLongClickListener;
@Override @Override
public void loadUrl(String url) { public void loadUrl(String url) {
super.loadUrl(url); super.loadUrl(url);
@ -161,7 +157,7 @@ public class KiwixWebView extends WebView {
HitTestResult result = getHitTestResult(); HitTestResult result = getHitTestResult();
if (result.getType() == HitTestResult.SRC_ANCHOR_TYPE) { if (result.getType() == HitTestResult.SRC_ANCHOR_TYPE) {
mOnLongClickListener.onLongClick(result.getExtra()); callback.webViewLongClick(result.getExtra());
return true; return true;
} }
return super.performLongClick(); return super.performLongClick();
@ -197,33 +193,12 @@ public class KiwixWebView extends WebView {
int pages = getContentHeight() / windowHeight; int pages = getContentHeight() / windowHeight;
int page = t / windowHeight; int page = t / windowHeight;
// Alert the listener callback.webViewPageChanged(page, pages);
if (mChangeListener != null) {
mChangeListener.onPageChanged(page, pages);
}
} }
public void disableZoomControls() { public void disableZoomControls() {
getSettings().setBuiltInZoomControls(true); getSettings().setBuiltInZoomControls(true);
getSettings().setDisplayZoomControls(false); getSettings().setDisplayZoomControls(false);
} }
public void setOnPageChangedListener(OnPageChangeListener listener) {
mChangeListener = listener;
}
public void setOnLongClickListener(OnLongClickListener listener) {
mOnLongClickListener = listener;
}
public interface OnPageChangeListener {
void onPageChanged(int page, int maxPages);
}
public interface OnLongClickListener {
void onLongClick(String url);
}
} }