package com.simtice.cnbeta.ui;
import java.lang.ref.WeakReference;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
import com.simtice.cnbeta.R;
import com.simtice.cnbeta.util.CommonLog;
import com.simtice.cnbeta.util.CommonUtil;
import com.simtice.cnbeta.util.Constant;
import com.simtice.cnbeta.util.ExceptionUtil;
import com.simtice.cnbeta.util.HttpUtil;
import com.simtice.cnbeta.util.PreferencesUtil;
/**
* 新闻详情
*
* @author simtice
*
*/
public class NewsDetailActivity extends SherlockActivity {
private WebView webView;
private CommonLog log;
private long articleID;
private Button btReload;
private String title;
private WebSettings wSet;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_PROGRESS);
setTheme(R.style.Sherlock___Theme_Light);
super.onCreate(savedInstanceState);
setContentView(R.layout.news_detail);
initView();
init();
}
@Override
public void onActionModeFinished(ActionMode mode) {
// TODO Auto-generated method stub
super.onActionModeFinished(mode);
}
private void init() {
log = new CommonLog("NewsDetail");
Intent intent = getIntent();
articleID = intent.getLongExtra("ArticleID", 0);
title = intent.getStringExtra("title");
requestHtml();
}
private void requestHtml() {
setSupportProgress(2000);// actionbar进度条满格为10000 1000代表10%的进度
final MyHandler handler = new MyHandler(this);
new Thread(new Runnable() {
@Override
public void run() {
HttpUtil util = new HttpUtil(getApplicationContext(), handler);
util.httpGet(Constant.URL_NEWDDETAIL + articleID);
}
}).start();
}
@SuppressLint("SetJavaScriptEnabled")
private void initView() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setIcon(R.drawable.icon);
btReload = (Button) this.findViewById(R.id.btn_detail_bt);
webView = (WebView) findViewById(R.id.wv_newsdetail);
wSet = webView.getSettings();
wSet.setJavaScriptEnabled(true);
wSet.setDefaultTextEncodingName("utf-8");
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
setSupportProgress(progress * 100);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
@Override
// 页面加载错误
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
view.stopLoading();
view.clearView();
btReload.setVisibility(View.VISIBLE);
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
System.out.println(url);
view.loadUrl(url);
return true;
}
});
// 点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法)
// webView.setOnKeyListener(new View.OnKeyListener() {
// @Override
// public boolean onKey(View v, int keyCode, KeyEvent event) {
// if (event.getAction() == KeyEvent.ACTION_DOWN) {
// if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { //
// 表示按返回键时的操作
// webView.goBack(); // 后退
// return true; // 已处理
// }
// }
// return false;
// }
// });
setTextSize(PreferencesUtil.getFontPreference(getApplicationContext()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
String url = "http://www.cnbeta.com/articles/" + articleID + ".htm";
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.comment:
Intent intent = new Intent(NewsDetailActivity.this, CommentListActivity.class);
intent.putExtra("ArticleID", articleID);
startActivity(intent);
break;
case R.id.share:
Intent intent1 = new Intent(Intent.ACTION_SEND);
intent1.setType("text/plain");
intent1.putExtra(Intent.EXTRA_TEXT, title + "\n" + url + "\n[cnBeta资讯]");
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent1, "将资讯分享到"));
break;
case R.id.web:
Uri u = Uri.parse(url);
Intent it = new Intent(Intent.ACTION_VIEW, u);
startActivity(it);
break;
case R.id.font:
String[] items = getResources().getStringArray(R.array.entries_preference_font);
AlertDialog.Builder dialog = new AlertDialog.Builder(this).setTitle("字体设置").setSingleChoiceItems(items,
PreferencesUtil.getFontPreference(getApplicationContext()), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTextSize(which);
PreferencesUtil.setTextSize(getApplicationContext(), which);
dialog.dismiss();
}
});
dialog.setNegativeButton("取消", null);
dialog.create().show();
break;
}
return super.onOptionsItemSelected(item);
}
private void setTextSize(int fontsize) {
switch (fontsize) {
case 0:
wSet.setTextSize(WebSettings.TextSize.LARGER);
break;
case 1:
wSet.setTextSize(WebSettings.TextSize.NORMAL);
break;
case 2:
wSet.setTextSize(WebSettings.TextSize.SMALLER);
break;
}
PreferencesUtil.setTextSize(this, fontsize);
}
public void reLoad(View v) {
webView.clearView();
requestHtml();
btReload.setVisibility(View.GONE);
}
static class MyHandler extends Handler{
WeakReference<NewsDetailActivity> mActivity;
MyHandler(NewsDetailActivity activity){
mActivity = new WeakReference<NewsDetailActivity>(activity);
}
public void handleMessage(android.os.Message msg) {
NewsDetailActivity activity = mActivity.get();
if (activity == null)
return;
switch (msg.what) {
case Constant.REQUEST_SUCCESS:
activity.log.d(msg.obj);
activity.webView.loadDataWithBaseURL(null, (String) msg.obj, "text/html", "utf-8", null);
break;
case Constant.REQUEST_FAILED:
ExceptionUtil.handlException((Exception) msg.obj, activity);
activity.setSupportProgress(0);
activity.btReload.setVisibility(View.VISIBLE);
break;
case Constant.NO_NETWORK:
CommonUtil.showNoNetworkToast(activity);
break;
}
};
}
}