/*
* Copyright (c) 2015, 张涛.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kymjs.blog.ui;
import java.util.List;
import org.kymjs.blog.R;
import org.kymjs.blog.domain.CollectData;
import org.kymjs.blog.ui.widget.EmptyLayout;
import org.kymjs.kjframe.KJDB;
import org.kymjs.kjframe.ui.BindView;
import org.kymjs.kjframe.ui.ViewInject;
import org.kymjs.kjframe.utils.StringUtils;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.text.Html;
import android.text.Spanned;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
/**
* 我的博客网站专有显示器(由于html可配置,所以处理起来要方便很多)
*
* @author kymjs (http://www.kymjs.com/)
*
*/
public class MyBlogBrowser extends TitleBarActivity {
@BindView(id = R.id.webview)
WebView mWebView;
@BindView(id = R.id.progress)
ProgressBar mProgress;
@BindView(id = R.id.empty_layout)
private EmptyLayout mEmptyLayout;
public static final String BROWSER_KEY = "browser_url";
public static final String BROWSER_TITLE_KEY = "browser_title_url";
public static final String DEFAULT = "http://blog.kymjs.com/";
private String mCurrentUrl = DEFAULT;
private String strTitle;
private final CollectData data = new CollectData();
private KJDB kjdb;
@Override
public void setRootView() {
setContentView(R.layout.aty_browser);
}
@Override
protected void onBackClick() {
super.onBackClick();
finish();
}
@Override
protected void onMenuClick() {
super.onMenuClick();
Object tag = mImgMenu.getTag();
// 如果有tag,且tag为真,则把tag改为false取消收藏
if (tag != null && tag instanceof Boolean) {
if ((Boolean) tag) {
mImgMenu.setTag(Boolean.valueOf(false));
mImgMenu.setImageResource(R.drawable.titlebar_unstar);
kjdb.deleteByWhere(CollectData.class, "url='" + mCurrentUrl
+ "'");
return;
}
}
// 如果没有tag或tag为假,则把tag改为true收藏本链接
mImgMenu.setTag(Boolean.valueOf(true));
mImgMenu.setImageResource(R.drawable.titlebar_star);
data.setName(mWebView.getTitle());
data.setUrl(mCurrentUrl);
kjdb.save(data);
}
@Override
public void initData() {
Intent intent = getIntent();
if (intent != null) {
mCurrentUrl = intent.getStringExtra(BROWSER_KEY);
strTitle = intent.getStringExtra(BROWSER_TITLE_KEY);
if (StringUtils.isEmpty(mCurrentUrl)) {
mCurrentUrl = DEFAULT;
}
if (StringUtils.isEmpty(strTitle)) {
strTitle = getString(R.string.app_name);
}
}
kjdb = KJDB.create(aty);
}
@Override
public void initWidget() {
super.initWidget();
initWebView();
mProgress.setVisibility(View.GONE);
findViewById(R.id.browser_bottom).setVisibility(View.GONE);
mWebView.loadUrl(mCurrentUrl);
}
@Override
protected void onStart() {
super.onStart();
mImgMenu.setTag(Boolean.valueOf(false));
mImgMenu.setImageResource(R.drawable.titlebar_unstar);
if (!StringUtils.isEmpty(strTitle)) {
mTvTitle.setText(strTitle);
}
}
@Override
protected void onResume() {
super.onResume();
mWebView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mWebView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mWebView.destroy();
}
@Override
public void widgetClick(View v) {
super.widgetClick(v);
switch (v.getId()) {
case R.id.browser_back:
mWebView.goBack();
break;
case R.id.browser_forward:
mWebView.goForward();
break;
case R.id.browser_refresh:
mWebView.loadUrl(mWebView.getUrl());
break;
case R.id.browser_system_browser:
try {
// 启用外部浏览器
Uri uri = Uri.parse(mCurrentUrl);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
aty.startActivity(it);
} catch (Exception e) {
ViewInject.toast("网页地址错误");
}
break;
}
}
/**
* 载入链接之前会被调用
*
* @param view
* WebView
* @param url
* 链接地址
*/
protected void onUrlLoading(WebView view, String url) {}
/**
* 链接载入成功后会被调用
*
* @param view
* WebView
* @param url
* 链接地址
*/
protected void onUrlFinished(WebView view, String url) {
mCurrentUrl = url;
List<CollectData> datas = kjdb.findAllByWhere(CollectData.class,
"url='" + url + "'");
if (datas != null && datas.size() != 0) {
mImgMenu.setImageResource(R.drawable.titlebar_star);
mImgMenu.setTag(Boolean.valueOf(true));
} else {
mImgMenu.setImageResource(R.drawable.titlebar_unstar);
mImgMenu.setTag(Boolean.valueOf(false));
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
finish();
}
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
/**
* 当前WebView显示页面的标题
*
* @param view
* WebView
* @param title
* web页面标题
*/
protected void onWebTitle(WebView view, String title) {
if (StringUtils.isEmpty(strTitle) && mTvTitle != null
&& mWebView != null) {
mTvTitle.setText(mWebView.getTitle());
}
}
/**
* 当前WebView显示页面的图标
*
* @param view
* WebView
* @param icon
* web页面图标
*/
protected void onWebIcon(WebView view, Bitmap icon) {}
/**
* 初始化浏览器设置信息
*/
private void initWebView() {
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(false); // 启用支持javascript
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);// 优先使用缓存
webSettings.setAllowFileAccess(true);// 可以访问文件
webSettings.setBuiltInZoomControls(true);// 支持缩放
if (android.os.Build.VERSION.SDK_INT >= 11) {
webSettings.setDisplayZoomControls(false);// 支持缩放
}
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.setWebChromeClient(new MyWebChromeClient());
}
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
onWebTitle(view, title);
}
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
onWebIcon(view, icon);
}
@Override
public void onProgressChanged(WebView view, int newProgress) { // 进度
super.onProgressChanged(view, newProgress);
if (newProgress > 60) {
mEmptyLayout.dismiss();
mProgress.setVisibility(View.GONE);
}
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
onUrlLoading(view, url);
boolean flag = super.shouldOverrideUrlLoading(view, url);
mCurrentUrl = url;
return flag;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
onUrlFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
ViewInject.toast("没有找到数据");
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
}
}
/**
* 移除字符串中的Html标签
*
* @author kymjs (https://github.com/kymjs)
* @param pHTMLString
* @return
*/
public static Spanned stripTags(final String pHTMLString) {
String str = pHTMLString.replaceAll(
"<footer\\s+([^>]*)\\s*>*</footer>", "");
return Html.fromHtml(str);
}
}