/**
*
*/
package coolbuy360.searchhealth;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import coolbuy360.dbhelper.DBnewshelper;
import coolbuy360.logic.Article;
import coolbuy360.logic.Article.ArticleType;
import coolbuy360.logic.NoticeStateConfig;
import coolbuy360.service.BuilderGestureExt;
import coolbuy360.service.CommandResult;
import coolbuy360.service.Util;
import coolbuy360.service.searchApp;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebSettings.ZoomDensity;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import coolbuy360.service.CommonMethod;
/**
* @author yangxc
*
*/
public class ArticleDetail extends Activity {
private String articleid = "";
private String articletype = "";
private String title = "";
private String resume = "";
private String createtime = "";
private String updatetime = "";
CommandResult resultmessage;
LinearLayout async_begin;
LinearLayout async_error;
TextView article_detail_author;
private WebView webview;
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.article_detail);
// Ϊ�˳�����
searchApp.getInstance().addActivity(this);
Bundle bundle = getIntent().getExtras();
articleid = bundle.getString("articleid");
title = bundle.getString("title");
resume = bundle.getString("resume");
articletype = bundle.getString("articletype");
if (articletype != null
&& articletype.equals(Article.ArticleType.column.toString())) {
updatetime = bundle.getString("updatetime");
} else {
createtime = bundle.getString("createtime");
}
async_begin = (LinearLayout) findViewById(R.id.async_begin);
async_error = (LinearLayout) findViewById(R.id.async_error);
ImageButton actionbar_pre_btn = (ImageButton) this
.findViewById(R.id.actionbar_pre_btn);
actionbar_pre_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ArticleDetail.this.finish();
overridePendingTransition(R.anim.push_no,R.anim.push_top_out);
}
});
TextView article_detail_title = (TextView) this
.findViewById(R.id.article_detail_title);
article_detail_title.setText(title);
TextView article_detail_date = (TextView) this
.findViewById(R.id.article_detail_date);
if (articletype != null
&& articletype.equals(Article.ArticleType.column.toString())) {
article_detail_date.setText(Util
.getDateFormat(updatetime,
"yyyy-MM-dd E"));
} else {
article_detail_date.setText(Util
.getDateFormat(createtime,
"yyyy-MM-dd E"));
}
article_detail_author = (TextView) this
.findViewById(R.id.article_detail_author);
webview = (WebView) this.findViewById(R.id.article_detail_webview);
WebSettings settings = webview.getSettings();
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
CommonMethod.addWebImageShow(this, webview);
new AsyLoadDrugInfo().execute();
GestureEvent();
webview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
});
}
private void GestureEvent() {
gestureDetector = new BuilderGestureExt(this,new BuilderGestureExt.OnGestureResult() {
@Override
public void onGestureResult(int direction) {
if(direction==2||direction==3)
{
//show(Integer.toString(direction));
ArticleDetail.this.finish();
overridePendingTransition(R.anim.push_no,R.anim.push_right_out);
}
}
}
).Buile();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
private void show(String value){
Toast.makeText(this, value, Toast.LENGTH_SHORT).show();
}
/**
* �첽����ҩƷ��Ϣ
*/
private class AsyLoadDrugInfo extends AsyncTask<Integer, Void, Integer> {
List<Map<String, String>> innerlist;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
async_begin.setVisibility(View.VISIBLE);
}
@Override
protected Integer doInBackground(Integer... params) {
// TODO Auto-generated method stub
try {
if (articletype != null
&& articletype.equals(Article.ArticleType.column
.toString())) {
Map<String, String> innerMap = new HashMap<String, String>();
DBnewshelper dBnewshelper = new DBnewshelper(
ArticleDetail.this);
innerMap = dBnewshelper.FindByID(Integer
.parseInt(articleid));
String webData = "";
if (innerMap != null) {
webData = innerMap.get("Detail");
}
if (webData != null && !(webData.equals(""))) {
innerlist = new ArrayList<Map<String, String>>();
innerlist.add(innerMap);
} else {
innerlist = coolbuy360.logic.Article.getInfo(articleid);
if (innerlist != null && innerlist.size() > 0) {
dBnewshelper.update(innerlist.get(0), "detail");
}
}
} else {
innerlist = coolbuy360.logic.Article.getInfo(articleid);
}
if (innerlist != null) {
return (innerlist.size() > 0) ? 0 : 1;
} else {
return 2;// �������Ӵ���
}
} catch (Exception e) {
// TODO Auto-generated catch block
return 2;
}
}
/**
* ��ʼ��webview������
* @param list
* �첽��ȡ��listֵ
*/
@SuppressLint("NewApi")
private void initWebView(Map<String, String> sourceMap) {
String webData = sourceMap.get("Detail");
String author = sourceMap.get("Author");
if (author != null && !(author.equals(""))) {
article_detail_author.setText(author);
article_detail_author.setVisibility(View.VISIBLE);
}
// webview.loadData(webData, mimeType, encoding)
// webview.loadData(webData, "text/html", "utf-8");
String html = "";
html = "<html>" + "<body>" + Html.fromHtml(webData) + "</body>"
+ "</html>";
html=html.replaceAll("(<img[^>]+src=\")(\\S+)\"",
"$1$2\" onClick=\"javascript:mWebViewImageListener.onImageClick('$2')\"");
System.out.println(html);
//Log.i("chenlinwei", html);
webview.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
webview.setWebChromeClient(new WebChromeClient());
// ��ͬ�ֱַ��ʵ������,��Ļ�ܶȲ�һ���������,�Զ�����ҳ��:
/*DisplayMetrics dm = getResources().getDisplayMetrics();
int scale = dm.densityDpi;*/
// ��ò�ͬ���ܶ�ֵ
/*if (scale == 240) {
webview.getSettings().setDefaultZoom(ZoomDensity.FAR);
} else if (scale == 160) {
webview.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);
} else {
webview.getSettings().setDefaultZoom(ZoomDensity.CLOSE);
}*/
// ����WebView��һЩ���ܵ�:
webview.getSettings().setJavaScriptEnabled(true);
// ����scrollbar
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setHorizontalScrollBarEnabled(false);
webview.setVerticalScrollbarOverlay(true);
// ����֧��֧������
webview.getSettings().setSupportZoom(false);
webview.getSettings().setBuiltInZoomControls(false);
// ��ʼ����ֵ
//webview.setInitialScale(100);
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
if (result == 0) {
initWebView(innerlist.get(0));
async_begin.setVisibility(View.GONE);
} else if (result == 1) {
async_begin.setVisibility(View.GONE);
LinearLayout async_error = (LinearLayout) findViewById(R.id.async_error);
TextView async_error_txt = (TextView) async_error
.findViewById(R.id.async_error_txt);
async_error_txt.setText("û���ҵ���Ӧ�ı�����");
Button async_error_reflesh = (Button) async_error
.findViewById(R.id.async_error_reflesh);
async_error_reflesh.setVisibility(View.GONE);
async_error.setVisibility(View.VISIBLE);
} else if (result == 2) {
async_begin.setVisibility(View.GONE);
async_error.setVisibility(View.VISIBLE);
TextView async_error_txt = (TextView) async_error
.findViewById(R.id.async_error_txt);
async_error_txt.setText(R.string.error_nonetwork);
Button async_error_reflesh = (Button) async_error
.findViewById(R.id.async_error_reflesh);
async_error_reflesh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
async_error.setVisibility(View.GONE);
async_begin.setVisibility(View.VISIBLE);
new AsyLoadDrugInfo().execute();
}
});
return;
}
}
}
/* (non-Javadoc)
* @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
}