package com.thankcreate.care.status;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import com.dongxuexidu.douban4j.constants.DefaultConfigs;
import com.dongxuexidu.douban4j.utils.HttpManager;
import com.markupartist.android.widget.ActionBar;
import com.markupartist.android.widget.ActionBar.Action;
import com.renren.api.connect.android.AsyncRenren;
import com.renren.api.connect.android.exception.RenrenError;
import com.thankcreate.care.App;
import com.thankcreate.care.AppConstants;
import com.thankcreate.care.BaseActivity;
import com.thankcreate.care.R;
import com.thankcreate.care.R.layout;
import com.thankcreate.care.R.menu;
import com.thankcreate.care.control.BackKeyLinearLayout;
import com.thankcreate.care.tool.converter.DoubanConverter;
import com.thankcreate.care.tool.converter.RenrenConverter;
import com.thankcreate.care.tool.misc.MiscTool;
import com.thankcreate.care.tool.misc.PreferenceHelper;
import com.thankcreate.care.tool.misc.StringTool;
import com.thankcreate.care.tool.ui.ToastHelper;
import com.thankcreate.care.viewmodel.CommentViewModel;
import com.thankcreate.care.viewmodel.EntryType;
import com.thankcreate.care.viewmodel.ItemViewModel;
import com.thankcreate.care.viewmodel.RenrenType;
import com.umeng.analytics.MobclickAgent;
import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.api.CommentsAPI;
import com.weibo.sdk.android.net.RequestListener;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class StatusAddCommentActivity extends BaseActivity {
private ActionBar actionBar;
private EditText textInput;
private TextView textCount;
private ItemViewModel itemViewModel;
private CommentViewModel commentViewModel;
private BackKeyLinearLayout backKeyLinearLayout;
private int maxCount = 140;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status_add_comment);
initActionBar();
initControl();
parseIntent();
changeUIByType();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_status_add_comment, menu);
return false;
}
private void initActionBar() {
actionBar = (ActionBar) findViewById(R.id.actionbar);
actionBar.setTitle("评论");
actionBar.addActionRight(new Action() {
@Override
public void performAction(View view) {
sendClick();
MobclickAgent.onEvent(StatusAddCommentActivity.this, "PostComment");
}
@Override
public int getDrawable() {
return R.drawable.thumb_send;
}
});
addActionBarBackButton(actionBar);
}
private void initControl(){
backKeyLinearLayout = (BackKeyLinearLayout) findViewById(R.id.comment_add_root);
backKeyLinearLayout.setActivity(this);
textInput = (EditText) findViewById(R.id.comment_add_input);
textInput.addTextChangedListener(mOnTextChanged);
textCount = (TextView) findViewById(R.id.comment_add_count_left);
}
private void parseIntent()
{
Intent it=this.getIntent();
itemViewModel = (ItemViewModel) it.getSerializableExtra("itemViewModel");
commentViewModel = (CommentViewModel) it.getSerializableExtra("commentViewModel");
if(itemViewModel == null)
finish();
}
private void changeUIByType() {
int type = itemViewModel.type;
if(type == EntryType.SinaWeibo)
{
maxCount = 140;
}
// 人人在回复时最长也是140,只是发表新状态时可以到280
else if (type == EntryType.Renren)
{
maxCount = 140;
}
else if (type == EntryType.Douban)
{
maxCount = 140;
}
textCount.setText(String.valueOf(maxCount));
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(maxCount);
textInput.setFilters(FilterArray);
// m_commentViewModel不为空说明是对评论本身的评论
// 各平台目前对评论的回复其实和对状态本身的回复没有本质区别
// 都是调用一样的接口,但是前面加上了一对“对XX说”之类的文字
if (commentViewModel != null)
{
String preContentString = "";
if (type == EntryType.SinaWeibo)
{
preContentString = String.format("回复@%s: ", commentViewModel.title);
}
else if (type == EntryType.Renren)
{
preContentString = String.format("回复%s: ", commentViewModel.title);
}
else if (type == EntryType.Douban)
{
preContentString = String.format("@%s: ", commentViewModel.doubanUID);
}
textInput.setText(preContentString);
textInput.setSelection(preContentString.length());
}
}
private TextWatcher mOnTextChanged = new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
int length = s.toString().length();
textCount.setText(String.valueOf(maxCount - length));
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
};
private void sendClick() {
new AlertDialog.Builder(this)
.setIcon(R.drawable.thumb_send)
.setTitle("确认提交?")
.setPositiveButton("确认", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
sendInternal();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.create().show();
}
private void sendInternal()
{
String commentText = textInput.getText().toString();
if(StringTool.isNullOrEmpty(commentText))
{
ToastHelper.show("只有智商超过250才能看见大人写的字么?",true);
return;
}
if(commentText.length() > maxCount)
{
ToastHelper.show("内容超长勒喵~",true);
}
if(itemViewModel == null)
return;
int type = itemViewModel.type;
if(type == EntryType.SinaWeibo)
{
sinaWeiboSend();
}
else if (type == EntryType.Renren)
{
renrenSend();
}
else if (type == EntryType.Douban)
{
doubanSend();
}
}
private void sinaWeiboSend()
{
String commentText = textInput.getText().toString();
Oauth2AccessToken oa = MiscTool.getOauth2AccessToken();
CommentsAPI commentsAPI = new CommentsAPI(oa);
commentsAPI.create(commentText, Long.valueOf(itemViewModel.ID), false, mSinaWeiboSendCommentRequestListner);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.VISIBLE);
}
});
}
private RequestListener mSinaWeiboSendCommentRequestListner = new RequestListener(){
@Override
public void onComplete(String arg0) {
ToastHelper.show("发送成功", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
finish();
}
@Override
public void onError(WeiboException arg0) {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
@Override
public void onIOException(IOException arg0) {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
};
private void renrenSend()
{
String commentText = textInput.getText().toString();
AsyncRenren asyncRenren = new AsyncRenren(App.getRenren());
Bundle bd = new Bundle();
int renrenType = itemViewModel.renrenFeedType;
// 对普通状态的评论
if(renrenType == RenrenType.TextStatus)
{
bd.putString("method", "status.addComment");
bd.putString("status_id", itemViewModel.ID);
bd.putString("owner_id", itemViewModel.ownerID);
bd.putString("content", commentText);
}
// 对原创上传照片的评论
else if(renrenType == RenrenType.UploadPhoto)
{
bd.putString("method", "photos.addComment");
bd.putString("pid", itemViewModel.ID);
bd.putString("uid", itemViewModel.ownerID);
bd.putString("content", commentText);
}
// 对照片分享的评论
else if(renrenType == RenrenType.SharePhoto)
{
bd.putString("method", "share.addComment");
bd.putString("share_id", itemViewModel.ID);
bd.putString("user_id", itemViewModel.ownerID);
bd.putString("content", commentText);
}
asyncRenren.requestJSON(bd, mRenrenSendCommentRequestListener);
}
private com.renren.api.connect.android.RequestListener mRenrenSendCommentRequestListener = new com.renren.api.connect.android.RequestListener() {
@Override
public void onRenrenError(RenrenError renrenError) {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
@Override
public void onFault(Throwable fault) {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
@Override
public void onComplete(String response) {
try {
JSONObject result = new JSONObject(response);
String flag = result.optString("result","0");
if(flag.equals("1"))
{
ToastHelper.show("发送成功", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
finish();
}
else {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
} catch (Exception e) {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
}
};
/**
* 豆瓣比较特殊,转发的评论其实就是原始广播的评论
*/
private void doubanSend()
{
final String commentText = textInput.getText().toString();
final String token = PreferenceHelper.getString("Douban_Token");
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpManager httpManager = new HttpManager(token);
String itemID = itemViewModel.ID;
if(itemViewModel.forwardItem != null)
itemID = itemViewModel.forwardItem.ID;
String url = String.format("%s/shuo/v2/statuses/%s/comments",
DefaultConfigs.API_URL_PREFIX, itemID);
Map<String, String> params = new HashMap<String, String>();
params.put("text", commentText);
params.put("source", AppConstants.DOUBAN_SECRET_KEY);
String result = httpManager.postEncodedEntry(url, params, true);
ToastHelper.show("发送成功", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
finish();
} catch (Exception e) {
ToastHelper.show(">_< 由于未知原因,发送失败,请保持网络畅通", true);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.GONE);
}
});
}
}
}).start();
}
}