package cn.fanfan.detail.essay;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.client.CookieStore;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import cn.fanfan.common.Config;
import cn.fanfan.main.R;
import cn.fanfan.topic.imageload.ImageDownLoader;
import cn.fanfan.topic.imageload.ImageDownLoader.onImageLoaderListener;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.PersistentCookieStore;
import com.loopj.android.http.RequestParams;
import com.umeng.analytics.MobclickAgent;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
public class EssayCommentActivity extends Activity implements OnItemClickListener,
OnScrollListener {
private AsyncHttpClient client;
private int totalItem;
private CookieStore myCookieStore;
private boolean isFirstEnter;
private int mFirstVisibleItem;
private int mVisibleItemCount;
private Dialog aDialog;
private ListView comlist;
private ImageDownLoader imageDownLoader;
private List<EssayCommentModel> comitems;
private EssayCommentAdapter comAdapter;
private String id;
private EditText comment;
private ImageButton publish;
private String atuid = null;
private int voteval = 0;
private Button zan;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.comment_list);
ActionBar actionBar = getActionBar();
actionBar.setIcon(null);
actionBar.setTitle("��������");
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.show();
Intent intent = getIntent();
id = intent.getStringExtra("artid");
client = new AsyncHttpClient();
myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
comment = (EditText) findViewById(R.id.comment);
publish = (ImageButton) findViewById(R.id.publish);
publish.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
RequestParams params = new RequestParams();
params.put("article_id", id);
params.put("message", comment.getText().toString());
params.put("at_uid", atuid);
postcom(params);
comment.setText("");
refresh();
}
});
comitems = new ArrayList<EssayCommentModel>();
imageDownLoader = new ImageDownLoader(this);
comlist = (ListView) findViewById(R.id.comlist);
isFirstEnter = true;
comlist.setOnItemClickListener(this);
comlist.setOnScrollListener(this);
Getcom(id);
}
public boolean checkKeyboardShowing(){
comlist.requestFocus();
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
boolean active = imm.isActive(comment);
imm.hideSoftInputFromWindow(comment.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
comment.clearFocus();
return active;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
aDialog = new Dialog(this);
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog, null);
zan = (Button) view.findViewById(R.id.zan);
Button back = (Button) view.findViewById(R.id.backanswer);
Button cancel = (Button) view.findViewById(R.id.cancel);
voteval = comitems.get(arg2).getVotevalue();
zanstatus();
aDialog.setTitle("ѡ��");
aDialog.setCanceledOnTouchOutside(true);
aDialog.setContentView(view);
zan.setOnClickListener(new Click(arg2));
back.setOnClickListener(new Click(arg2));
cancel.setOnClickListener(new Click(arg2));
aDialog.show();
}
class Click implements android.view.View.OnClickListener {
private int arg2;
public Click(int arg2) {
// TODO Auto-generated constructor stub
this.arg2 = arg2;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.zan:
if (voteval == 1) {
voteval = 0;
dozan(comitems.get(arg2).getId(), 0);
} else {
voteval = 1;
dozan(comitems.get(arg2).getId(), 1);
}
zanstatus();
aDialog.hide();
break;
case R.id.backanswer:
atuid = comitems.get(arg2).getUid();
aDialog.hide();
break;
case R.id.cancel:
aDialog.hide();
break;
default:
break;
}
}
}
private void zanstatus() {
if (voteval == 1) {
zan.setText("������");
} else {
zan.setText("��");
}
}
private void dozan(int id, int value) {
String url = Config.getValue("EssayComment");
RequestParams params = new RequestParams();
params.put("type", "comment");
params.put("item_id", id);
params.put("rating", value);
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
// TODO Auto-generated method stub
Toast.makeText(EssayCommentActivity.this, "����ʧ��", Toast.LENGTH_LONG).show();
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
String info = new String(arg2);
JSONObject jsonObject = null;
int errno = 0;
try {
jsonObject = new JSONObject(info);
errno = jsonObject.getInt("errno");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (errno == 1) {
Toast.makeText(EssayCommentActivity.this, "�����ɹ�", Toast.LENGTH_LONG).show();
refresh();
} else {
try {
String err = jsonObject.getString("err");
Toast.makeText(EssayCommentActivity.this, err, Toast.LENGTH_LONG)
.show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
private void Getcom(String id) {
String url = "http://w.hihwei.com/?/api/article/comment/?id=" + id;
client.get(url, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
String info = new String(arg2);
JSONObject jsonObject = null;
JSONObject jsonObject2 = null;
JSONObject rsm = null;
int errno = 0;
int total_rows = 0;
try {
jsonObject = new JSONObject(info);
errno = jsonObject.getInt("errno");
} catch (JSONException e) {
// TODO: handle exception
e.printStackTrace();
}
if (errno == 1) {
try {
rsm = jsonObject.getJSONObject("rsm");
total_rows = rsm.getInt("total_rows");
if (total_rows != 0) {
JSONArray rows = rsm.getJSONArray("rows");
for (int i = 0; i < rows.length(); i++) {
jsonObject2 = rows.getJSONObject(i);
EssayCommentModel comitemno = new EssayCommentModel();
comitemno.setUid(jsonObject2.getString("uid"));
JSONObject user_info = jsonObject2
.getJSONObject("user_info");
comitemno.setUsername(user_info
.getString("user_name"));
comitemno.setAvatarfile(user_info
.getString("avatar_file"));
comitemno.setComcontent(jsonObject2
.getString("message"));
comitemno.setAgreecount(jsonObject2
.getString("votes"));
comitemno.setVotevalue(jsonObject2
.getInt("vote_value"));
comitemno.setId(jsonObject2.getInt("id"));
if (jsonObject2.getInt("at_uid") != 0) {
JSONObject atuser = jsonObject2
.getJSONObject("at_user_info");
comitemno.setBackname(atuser
.getString("user_name"));
comitemno.setBackuid(atuser
.getString("uid"));
} else {
comitemno.setBackname("");
comitemno.setBackuid("");
}
comitems.add(comitemno);
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
try {
String err = jsonObject.getString("err");
Toast.makeText(EssayCommentActivity.this, err, Toast.LENGTH_LONG)
.show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
comAdapter = new EssayCommentAdapter(EssayCommentActivity.this, comitems,
imageDownLoader);
comlist.setAdapter(comAdapter);
}
});
}
private void refresh(){
comitems.clear();
checkKeyboardShowing();
Thread.currentThread();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Getcom(id);
}
private void postcom(RequestParams params) {
String url = "http://w.hihwei.com/?/api/publish/save_comment/";
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
// TODO Auto-generated method stub
Toast.makeText(EssayCommentActivity.this, "����ʧ��", Toast.LENGTH_LONG).show();
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
atuid="";
Toast.makeText(EssayCommentActivity.this, "���۳ɹ�", Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
showImage(mFirstVisibleItem, mVisibleItemCount);
} else {
cancleTask();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
mFirstVisibleItem = firstVisibleItem;
mVisibleItemCount = visibleItemCount;
totalItem = totalItemCount;
// ���������Ϊ�״ν����������������
if (isFirstEnter && visibleItemCount > 0) {
showImage(mFirstVisibleItem, mVisibleItemCount);
isFirstEnter = false;
}
}
private void showImage(int firstVisibleItem, int visibleItemCount) {
// ע��firstVisibleItem + visibleItemCount-1 = 20 1���а�����footview�����һ��ҪС�ģ�
for (int i = firstVisibleItem; i < firstVisibleItem + visibleItemCount; i++) {
String mImageUrl = comitems.get(i).getAvatarfile();
if (!mImageUrl.equals("")) {
mImageUrl = Config.getValue("userImageBaseUrl") + mImageUrl;
final ImageView mImageView = (ImageView) comlist
.findViewWithTag(mImageUrl);
imageDownLoader.getBitmap(mImageUrl,
new onImageLoaderListener() {
public void onImageLoader(Bitmap bitmap, String url) {
if (mImageView != null && bitmap != null) {
mImageView.setImageBitmap(bitmap);
}
}
});
} else {
continue;
}
}
}
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
public void cancleTask() {
imageDownLoader.cacelTask();
}
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
}