/*
* 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.utils;
import java.util.List;
import org.kymjs.blog.domain.SimpleBackPage;
import org.kymjs.blog.domain.User;
import org.kymjs.blog.ui.Browser;
import org.kymjs.blog.ui.ImageActivity;
import org.kymjs.blog.ui.MyBlogBrowser;
import org.kymjs.blog.ui.SimpleBackActivity;
import org.kymjs.blog.ui.fragment.OSCBlogDetailFragment;
import org.kymjs.kjframe.KJDB;
import org.kymjs.kjframe.utils.StringUtils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ZoomButtonsController;
public class UIHelper {
private static User user = null;
/** 全局web样式 */
// 链接样式文件,代码块高亮的处理
public final static String linkCss = "<script type=\"text/javascript\" src=\"file:///android_asset/shCore.js\"></script>"
+ "<script type=\"text/javascript\" src=\"file:///android_asset/brush.js\"></script>"
+ "<script type=\"text/javascript\" src=\"file:///android_asset/client.js\"></script>"
+ "<link rel=\"stylesheet\" type=\"text/css\" href=\"file:///android_asset/shThemeDefault.css\">"
+ "<link rel=\"stylesheet\" type=\"text/css\" href=\"file:///android_asset/shCore.css\">"
+ "<script type=\"text/javascript\">SyntaxHighlighter.all();</script>"
+ "<script type=\"text/javascript\">function showImagePreview(var url){window.location.url= url;}</script>";
public final static String WEB_STYLE = linkCss
+ "<style>* {font-size:16px;line-height:20px;} p {color:#333;} a {color:#3E62A6;} img {max-width:310px;} "
+ "img.alignleft {float:left;max-width:120px;margin:0 10px 5px 0;border:1px solid #ccc;background:#fff;padding:2px;} "
+ "pre {font-size:9pt;line-height:12pt;font-family:Courier New,Arial;border:1px solid #ddd;border-left:5px solid #6CE26C;background:#f6f6f6;padding:5px;overflow: auto;} "
+ "a.tag {font-size:15px;text-decoration:none;background-color:#cfc;color:#060;border-bottom:1px solid #B1D3EB;border-right:1px solid #B1D3EB;color:#3E6D8E;margin:2px 2px 2px 0;padding:2px 4px;white-space:nowrap;position:relative}</style>";
public static final String WEB_LOAD_IMAGES = "<script type=\"text/javascript\"> var allImgUrls = getAllImgSrc(document.body.innerHTML);</script>";
private static final String SHOWIMAGE = "ima-api:action=showImage&data=";
public static void toHome(Context cxt) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 注意
intent.addCategory(Intent.CATEGORY_HOME);
cxt.startActivity(intent);
}
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
public static void initWebView(WebView webView) {
WebSettings settings = webView.getSettings();
settings.setDefaultFontSize(15);
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
int sysVersion = Build.VERSION.SDK_INT;
if (sysVersion >= 11) {
settings.setDisplayZoomControls(false);
} else {
ZoomButtonsController zbc = new ZoomButtonsController(webView);
zbc.getZoomControls().setVisibility(View.GONE);
}
webView.setWebViewClient(UIHelper.getWebViewClient());
}
public static String setHtmlCotentSupportImagePreview(String body) {
// 读取用户设置:是否加载文章图片--默认有wifi下始终加载图片
// if ( ) {
// 过滤掉 img标签的width,height属性
body = body.replaceAll("(<img[^>]*?)\\s+width\\s*=\\s*\\S+", "$1");
body = body.replaceAll("(<img[^>]*?)\\s+height\\s*=\\s*\\S+", "$1");
// 添加点击图片放大支持
// 添加点击图片放大支持
body = body.replaceAll("(<img[^>]+src=\")(\\S+)\"",
"$1$2\" onClick=\"showImagePreview('$2')\"");
// } else {
// // 过滤掉 img标签
// body = body.replaceAll("<\\s*img\\s+([^>]*)\\s*>", "");
// }
return body;
}
/**
* 添加网页的点击图片展示支持
*/
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
@JavascriptInterface
public static void addWebImageShow(final Context cxt, WebView wv) {
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new OnWebViewImageListener() {
@Override
@JavascriptInterface
public void showImagePreview(String bigImageUrl) {
if (bigImageUrl != null && !StringUtils.isEmpty(bigImageUrl)) {
UIHelper.showImagePreview(cxt, new String[] { bigImageUrl });
}
}
}, "mWebViewImageListener");
}
/**
* 获取webviewClient对象
*/
public static WebViewClient getWebViewClient() {
return new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 载入webview
return true;
}
};
}
@JavascriptInterface
public static void showImagePreview(Context context, String[] imageUrls) {
// ImagePreviewActivity.showImagePrivew(context, 0, imageUrls);
}
@JavascriptInterface
public static void showImagePreview(Context context, int index,
String[] imageUrls) {
// ImagePreviewActivity.showImagePrivew(context, index, imageUrls);
}
/**
* 监听webview上的图片
*/
public interface OnWebViewImageListener {
/**
* 点击webview上的图片,传入该缩略图的大图Url
*/
void showImagePreview(String bigImageUrl);
}
public static void toBrowser(Context cxt, String url) {
if (StringUtils.isEmpty(url)) {
return;
}
if (url.indexOf("oschina") > 0) {
Bundle bundle = new Bundle();
bundle.putString(OSCBlogDetailFragment.DATA_URL_KEY, url);
SimpleBackActivity.postShowWith(cxt,
SimpleBackPage.OSC_BLOG_DETAIL, bundle);
} else if (url.indexOf("blog.kymjs.com") > 0) {
Intent intent = new Intent(cxt, MyBlogBrowser.class);
intent.putExtra(MyBlogBrowser.BROWSER_KEY, url);
intent.putExtra(MyBlogBrowser.BROWSER_TITLE_KEY, "博客详情");
cxt.startActivity(intent);
} else if (url.indexOf("www.kymjs.com") > 0) {
Intent intent = new Intent(cxt, MyBlogBrowser.class);
intent.putExtra(MyBlogBrowser.BROWSER_TITLE_KEY, "开源实验室");
intent.putExtra(MyBlogBrowser.BROWSER_KEY, url);
cxt.startActivity(intent);
} else {
Intent intent = new Intent(cxt, Browser.class);
intent.putExtra(MyBlogBrowser.BROWSER_KEY, url);
cxt.startActivity(intent);
}
}
public static void toGallery(Context cxt, String url) {
if (!StringUtils.isEmpty(url)) {
Intent intent = new Intent();
intent.putExtra(ImageActivity.URL_KEY, url);
intent.setClass(cxt, ImageActivity.class);
cxt.startActivity(intent);
}
}
public static void saveUser(Context cxt, User u) {
KJDB kjdb = KJDB.create(cxt);
kjdb.deleteByWhere(User.class, "");
user = u;
kjdb.save(u);
}
public static User getUser(Context cxt) {
if (user != null) {
return user;
}
KJDB kjdb = KJDB.create(cxt);
List<User> datas = kjdb.findAll(User.class);
if (datas != null && datas.size() > 0) {
user = datas.get(0);
} else {
user = new User();
user.setUid(2332925);
user.setPortrait("http://www.kymjs.com/image/default_head.png");
user.setName("爱看博客用户");
user.setPwd("");
user.setAccount("");
user.setCookie("oscid=8N57Os9FG%2F%2B%2FFIA9vyogCJYPf0yMQGHmZhyzKMyuza2hL%2BW4xL7DPVVS%2B1BREZZzJGVMZrm4jNnkRHJmiDzNhjZIjp4pKbDtS4hUVFfAysLMq%2Fy5vIojQA%3D%3D;JSESSIONID=9B7tJ9RSZ4YYbdRhvg2xcTQ7skNJBwK3tMzdttnZwJpqmtx1d6hn!-25520330;");
kjdb.save(user);
}
return user;
}
}