package com.xiaomai.geek.ui.module.articel;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.NestedScrollView;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.xiaomai.geek.data.module.Article;
import com.xiaomai.geek.data.pref.ArticlePref;
/**
* Created by XiaoMai on 2017/5/16.
*/
public class ArticleDetailActivity extends BaseWebViewActivity {
public static final String EXTRA_ARTICLE = "extra_article";
private String mArticleUrl;
private int mReadProgress;
public static void launch(Context context, Article article) {
Intent intent = new Intent(context, ArticleDetailActivity.class);
intent.putExtra(EXTRA_ARTICLE, article);
context.startActivity(intent);
}
@Override
protected void initWebViewClient() {
WebViewClient webViewClient = new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
showLoading();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
dismissLoading();
int readProgress = ArticlePref.getReadProgress(ArticleDetailActivity.this, mArticleUrl);
if (readProgress > 100) {
nestedScrollView.smoothScrollTo(0, readProgress);
Snackbar.make(nestedScrollView, "已跳转到上次阅读的位置", Snackbar.LENGTH_INDEFINITE)
.setAction("返回顶部", new View.OnClickListener() {
@Override
public void onClick(View v) {
nestedScrollView.smoothScrollTo(0, 0);
}
}).show();
}
}
};
// 如果用户设置了WebViewClient,则在点击新的链接以后就不会跳转到系统浏览器了,而是在本WebView中显示。
webView.setWebViewClient(webViewClient);
}
private float lastX;
@Override
protected void initViews() {
Intent intent = getIntent();
Article article = intent.getParcelableExtra(EXTRA_ARTICLE);
toolBar.setTitle(article.getName());
setSupportActionBar(toolBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mArticleUrl = article.getUrl();
webView.loadUrl(mArticleUrl);
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
mReadProgress = scrollY;
}
});
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
if (Math.abs(x - lastX) >= 5) {
((WebView) v).requestDisallowInterceptTouchEvent(true);
} else {
((WebView) v).requestDisallowInterceptTouchEvent(false);
}
lastX = x;
return false;
}
});
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
@Override
protected void onPause() {
super.onPause();
ArticlePref.saveReadProgress(this, mArticleUrl, mReadProgress);
}
}