package name.caiyao.microreader.ui.activity; import android.annotation.TargetApi; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.widget.NestedScrollView; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import butterknife.BindView; import butterknife.ButterKnife; import name.caiyao.microreader.R; import name.caiyao.microreader.bean.itHome.ItHomeArticle; import name.caiyao.microreader.bean.itHome.ItHomeItem; import name.caiyao.microreader.config.Config; import name.caiyao.microreader.presenter.IItHomeArticlePresenter; import name.caiyao.microreader.presenter.impl.ItHomeArticlePresenterImpl; import name.caiyao.microreader.ui.iView.IItHomeArticle; import name.caiyao.microreader.utils.WebUtil; /** * Created by 蔡小木 on 2016/3/25 0025. */ public class ItHomeActivity extends BaseActivity implements IItHomeArticle { @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.wv_it) WebView wvIt; @BindView(R.id.pb_web) ProgressBar pbWeb; @BindView(R.id.nest) NestedScrollView nest; @BindView(R.id.fabButton) FloatingActionButton fabButton; private ItHomeItem itHomeItem; private IItHomeArticlePresenter mIItHomeArticlePresenter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ithome); ButterKnife.bind(this); initData(); initView(); getData(); } private void initData() { itHomeItem = getIntent().getParcelableExtra("item"); mIItHomeArticlePresenter = new ItHomeArticlePresenterImpl(this); } private void initView() { toolbar.setTitle(itHomeItem.getTitle()); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } setToolBar(fabButton, toolbar, true, true, null); fabButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nest.smoothScrollTo(0, 0); } }); setWebView(); } private void getData() { mIItHomeArticlePresenter.getItHomeArticle(itHomeItem.getNewsid()); } private void setWebView() { WebSettings settings = wvIt.getSettings(); settings.setDomStorageEnabled(true); settings.setAppCacheEnabled(true); settings.setJavaScriptEnabled(true); settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setAppCachePath(getCacheDir().getAbsolutePath() + "/webViewCache"); settings.setAppCacheEnabled(true); settings.setLoadWithOverviewMode(true); wvIt.setWebViewClient(new WebViewClient() { @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().getHost()); return true; } @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); wvIt.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (pbWeb != null) {//修复未加载完成,用户返回会崩溃 if (newProgress == 100) { pbWeb.setVisibility(View.GONE); } else { if (pbWeb.getVisibility() == View.GONE) { pbWeb.setVisibility(View.VISIBLE); } pbWeb.setProgress(newProgress); } } super.onProgressChanged(view, newProgress); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_share, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && wvIt.canGoBack()) { wvIt.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_share) { Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, itHomeItem.getTitle() + " http://ithome.com" + itHomeItem.getUrl() + getString(R.string.share_tail)); shareIntent.setType("text/plain"); //设置分享列表的标题,并且每次都显示分享列表 startActivity(Intent.createChooser(shareIntent, getString(R.string.share))); } if (item.getItemId() == R.id.action_use_browser) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://ithome.com" + itHomeItem.getUrl()))); } return super.onOptionsItemSelected(item); } @Override protected void onDestroy() { super.onDestroy(); if (wvIt != null) { ((ViewGroup) wvIt.getParent()).removeView(wvIt); wvIt.destroy(); wvIt = null; } mIItHomeArticlePresenter.unsubcrible(); } @Override public void showError(String error) { Snackbar.make(wvIt, getString(R.string.common_loading_error) + error, Snackbar.LENGTH_INDEFINITE).setAction(getString(R.string.comon_retry), new View.OnClickListener() { @Override public void onClick(View v) { getData(); } }).show(); } @Override public void showItHomeArticle(ItHomeArticle itHomeArticle) { if (TextUtils.isEmpty(itHomeArticle.getDetail())) { wvIt.loadUrl(itHomeItem.getUrl()); } else { String data = WebUtil.buildHtmlForIt(itHomeArticle.getDetail(), Config.isNight); wvIt.loadDataWithBaseURL(WebUtil.BASE_URL, data, WebUtil.MIME_TYPE, WebUtil.ENCODING, itHomeItem.getUrl()); } } }