package cn.eoe.app.ui;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import cn.eoe.app.R;
import cn.eoe.app.biz.DetailDao;
import cn.eoe.app.db.DetailColumn;
import cn.eoe.app.db.biz.DetailDB;
import cn.eoe.app.entity.DetailResponseEntity;
import cn.eoe.app.https.HttpUtils;
import cn.eoe.app.https.NetWorkHelper;
import cn.eoe.app.ui.base.BaseActivity;
import cn.eoe.app.utils.CommonUtil;
import cn.eoe.app.utils.IntentUtil;
import cn.eoe.app.utils.Utility;
public class DetailsActivity extends BaseActivity implements OnClickListener {
private DetailDao detailDao;
private DetailResponseEntity responseEntity;
static final String mimeType = "text/html";
static final String encoding = "utf-8";
private RelativeLayout good;
private RelativeLayout bed;
private RelativeLayout collect;
private RelativeLayout share;
private RelativeLayout discuss;
private ImageView imgGood;
private ImageView imgBed;
private ImageView imgCollect;
private ImageView imgShare;
private ImageView imgDiscuss;
private boolean IsGood = false;
private boolean IsBed = false;
private boolean IsCollect = false;
private TextView detailTitle;
private LinearLayout loadLayout;
private LinearLayout failLayout;
private Button bn_refresh;
private ImageView imgGoHome;
private WebView mWebView;
private String mUrl;
private String mTitle;
private String shareUrl;
private String shareTitle;
private int screen_width;
SharedPreferences sharePre;
private DetailDB mDetailDB;
private String mKey;
private int mDBID = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.details_activity);
Intent i = getIntent();
mUrl = i.getStringExtra("url");
mTitle = i.getStringExtra("title");
shareTitle = i.getStringExtra("sharetitle");
sharePre = getSharedPreferences(UserLoginUidActivity.SharedName,
Context.MODE_PRIVATE);
mKey = sharePre.getString(UserLoginUidActivity.KEY, "");
initData();
initControl();
initAppraise();
}
private void initData() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screen_width = dm.widthPixels;
}
private void initControl() {
detailDao = new DetailDao(this, mUrl);
detailTitle = (TextView) findViewById(R.id.details_textview_title);
detailTitle.setText(mTitle);
loadLayout = (LinearLayout) findViewById(R.id.view_loading);
failLayout = (LinearLayout) findViewById(R.id.view_load_fail);
bn_refresh=(Button)findViewById(R.id.bn_refresh);
good = (RelativeLayout) findViewById(R.id.rlGood);
bed = (RelativeLayout) findViewById(R.id.rlBed);
collect = (RelativeLayout) findViewById(R.id.rlCollect);
share = (RelativeLayout) findViewById(R.id.rlShare);
discuss = (RelativeLayout) findViewById(R.id.rlDiscuss);
mWebView = (WebView) findViewById(R.id.detail_webView);
this.mWebView.setBackgroundColor(0);
this.mWebView.setBackgroundResource(R.color.detail_bgColor);
mWebView.getSettings().setLoadsImagesAutomatically(true);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
good.setOnClickListener(this);
bed.setOnClickListener(this);
collect.setOnClickListener(this);
share.setOnClickListener(this);
discuss.setOnClickListener(this);
bn_refresh.setOnClickListener(this);
imgGood = (ImageView) findViewById(R.id.imageview_details_good);
imgBed = (ImageView) findViewById(R.id.imageview_details_bed);
imgCollect = (ImageView) findViewById(R.id.imageview_details_collect);
imgShare = (ImageView) findViewById(R.id.imageview_details_share);
imgDiscuss = (ImageView) findViewById(R.id.imageview_details_discuss);
imgGoHome = (ImageView) findViewById(R.id.details_imageview_gohome);
imgGoHome.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
MyTask mTask = new MyTask();
mTask.execute();
}
private void initAppraise() {
mDetailDB = new DetailDB(this);
Cursor cursor = mDetailDB.querySQL(mUrl);
if (cursor.moveToFirst()) {
mDBID = cursor.getInt(cursor.getColumnIndex(DetailColumn._ID));
setAppraise(
cursor.getInt(cursor.getColumnIndex(DetailColumn.GOOD)),
cursor.getInt(cursor.getColumnIndex(DetailColumn.BAD)),
cursor.getInt(cursor.getColumnIndex(DetailColumn.COLLECT)));
}
}
// [start] 初始化评价icon
public void setAppraise(int good, int bad, int collect) {
initGood(IsGood = (good == 1));
initBad(IsBed = (bad == 1));
initCollect(IsCollect = (collect == 1));
}
private void initGood(boolean b) {
if (b) {
imgGood.setImageResource(R.drawable.button_details_good_selected);
} else {
imgGood.setImageResource(R.drawable.button_details_good_default);
}
}
private void initBad(boolean b) {
if (b) {
imgBed.setImageResource(R.drawable.button_details_bed_selected);
} else {
imgBed.setImageResource(R.drawable.button_details_bed_default);
}
}
private void initCollect(boolean b) {
if (b) {
imgCollect
.setImageResource(R.drawable.button_details_collect_selected);
} else {
imgCollect
.setImageResource(R.drawable.button_details_collect_default);
}
}
// [end]
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
// 保存状态
if (mKey.equals(null) && mKey.equals("")) {
return;
}
if (mDBID == -1 && (IsGood || IsBed || IsCollect)) {
// 添加
mDetailDB.insertSQL(mUrl, mKey, IsGood ? 1 : 0, IsBed ? 1 : 0,
IsCollect ? 1 : 0);
} else if (mDBID != -1) {
// 修改
mDetailDB.updateSQL(mDBID, IsGood ? 1 : 0, IsBed ? 1 : 0,
IsCollect ? 1 : 0);
}
mDetailDB.dbClose();
}
class MyTask extends AsyncTask<String, Integer, String> {
private boolean mUseCache;
public MyTask() {
mUseCache = false;
}
public MyTask(boolean useCache) {
mUseCache = useCache;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
loadLayout.setVisibility(View.VISIBLE);
failLayout.setVisibility(View.GONE);
mWebView.setVisibility(View.GONE);
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
if ((responseEntity = detailDao.mapperJson(mUseCache)) != null) {
shareUrl = responseEntity.getShare_url();
return responseEntity.getContent();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result != null) {
String linkCss = "<link rel=\"stylesheet\" href=\"file:///android_asset/pygments.css\" type=\"text/css\"/>";
String content = linkCss + result;
try {
content = content.replace(
"img{}",
"img{width:"
+ CommonUtil.px2dip(DetailsActivity.this,
screen_width) + "}");
content = content.replaceAll("<br />", "");
} catch (NullPointerException e) {
e.printStackTrace();
}
loadLayout.setVisibility(View.GONE);
failLayout.setVisibility(View.GONE);
mWebView.setVisibility(View.VISIBLE);
mWebView.setBackgroundResource(R.color.detail_bgColor);
mWebView.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);
} else {
loadLayout.setVisibility(View.GONE);
mWebView.setVisibility(View.GONE);
failLayout.setVisibility(View.VISIBLE);
}
}
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.bn_refresh)
{
new MyTask().execute();
return;
}
if (responseEntity == null)
return;
if (mKey.equals(null) || mKey.equals("")) {
showLongToast(getResources().getString(R.string.user_login_prompt));
return;
}
String url = null;
switch (v.getId()) {
case R.id.rlGood:
url = updateUrl(IsGood, responseEntity.getBar().getUserlike()
.getGood());
break;
case R.id.rlBed:
url = updateUrl(IsBed, responseEntity.getBar().getUserlike()
.getBad());
break;
case R.id.rlCollect:
url = updateUrl(IsCollect, responseEntity.getBar().getFavorite());
break;
case R.id.rlShare:
recommandToYourFriend(shareUrl, shareTitle);
break;
case R.id.rlDiscuss:
IntentUtil.start_activity(DetailsActivity.this,
DetailsDiscussActivity.class, new BasicNameValuePair(
"discuss_list", responseEntity.getBar()
.getComment().getGet()),
new BasicNameValuePair("discuss", responseEntity.getBar()
.getComment().getSubmit()), new BasicNameValuePair(
"title", mTitle));
break;
}
if (url != null) {
if (!NetWorkHelper.checkNetState(this)) {
showLongToast(getResources().getString(R.string.httpisNull));
return;
}
new LoginAsyncTask().execute(url, v.getId());
}
}
private String updateUrl(boolean isAdd, String url) {
String result = url;
if (isAdd) {
result = result.replaceAll("add", "del");
}
String key = sharePre.getString(UserLoginUidActivity.KEY, "");
result += Utility.getParams(key);
return result;
}
class LoginAsyncTask extends AsyncTask<Object, Void, Boolean> {
private int id;
@Override
protected Boolean doInBackground(Object... params) {
// TODO Auto-generated method stub
id = Integer.parseInt(params[1].toString());
// if (!HttpUtils.isNetworkAvailable(DetailsActivity.this)) {
// showLongToast(getResources().getString(R.string.httpisNull));
// return false;
// }
String result;
try {
result = HttpUtils.getByHttpClient(DetailsActivity.this,
params[0].toString());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return false;
}
try {
JSONObject jsonObj = new JSONObject(result);
JSONObject response = jsonObj.getJSONObject("response");
int error = 1;
if ((error = response.getInt("isErr")) == 0) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
switch (id) {
case R.id.rlGood:
if (result) {
IsGood = !IsGood;
initGood(IsGood);
showShortToast("评价成功");
} else {
showShortToast("评价失败");
}
break;
case R.id.rlBed:
if (result) {
IsBed = !IsBed;
initBad(IsBed);
showShortToast("评价成功");
} else {
showShortToast("评价失败");
}
break;
case R.id.rlCollect:
if (result) {
IsCollect = !IsCollect;
initCollect(IsCollect);
if (IsCollect) {
showShortToast("收藏成功");
} else {
showShortToast("取消收藏成功");
}
} else {
showShortToast("收藏操作失败");
}
break;
}
}
}
}