package com.thankcreate.care.status;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
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.Util;
import com.renren.api.connect.android.common.AbstractRequestListener;
import com.renren.api.connect.android.exception.RenrenError;
import com.renren.api.connect.android.photos.PhotoUploadRequestParam;
import com.renren.api.connect.android.photos.PhotoUploadResponseBean;
import com.renren.api.connect.android.status.StatusSetRequestParam;
import com.renren.api.connect.android.status.StatusSetResponseBean;
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.misc.MiscTool;
import com.thankcreate.care.tool.misc.PreferenceHelper;
import com.thankcreate.care.tool.misc.StringTool;
import com.thankcreate.care.tool.misc.UploadTool;
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.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.api.StatusesAPI;
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.graphics.Bitmap;
import android.graphics.BitmapFactory;
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.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
public class StatusPostActivity extends BaseActivity {
private ActionBar actionBar;
private EditText textInput;
private TextView textCount;
private ImageView imageViewThumb;
private BackKeyLinearLayout backKeyLinearLayout;
private int maxCount = 140;
private int type = EntryType.NotSet;
private String preContent;
private String imageURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status_post);
initActionBar();
initControl();
parseIntent();
changeUIByType();
}
@Override
public boolean onCreateOptionsMenu(Menu 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(StatusPostActivity.this, "PostNew");
}
@Override
public int getDrawable() {
return R.drawable.thumb_send;
}
});
addActionBarBackButton(actionBar);
}
private void initControl(){
backKeyLinearLayout = (BackKeyLinearLayout) findViewById(R.id.post_root);
backKeyLinearLayout.setActivity(this);
textInput = (EditText) findViewById(R.id.status_post_input);
textInput.addTextChangedListener(mOnTextChanged);
textCount = (TextView) findViewById(R.id.status_post_count_left);
imageViewThumb = (ImageView) findViewById(R.id.status_post_thumb_image_view);
}
private void parseIntent()
{
Intent it= this.getIntent();
type = it.getIntExtra("type", EntryType.NotSet);
preContent = it.getStringExtra("preContent");
if(preContent == null)
preContent = "";
imageURL = it.getStringExtra("imageURL");
if(type == EntryType.NotSet)
{
finish();
}
}
private void changeUIByType() {
if(type == EntryType.SinaWeibo)
{
maxCount = 140;
}
// 人人在回复时最长也是140,只是发表新状态时可以到280
else if (type == EntryType.Renren)
{
maxCount = 280;
}
else if (type == EntryType.Douban)
{
maxCount = 140;
}
else
{
finish();
return;
}
textCount.setText(String.valueOf(maxCount));
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(maxCount);
textInput.setFilters(FilterArray);
textInput.setText(preContent);
textInput.setSelection(preContent.length());
if(StringTool.isNullOrEmpty(imageURL))
{
imageViewThumb.setVisibility(View.GONE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
else
{
imageViewThumb.setVisibility(View.VISIBLE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
try {
File imgFile = new File(imageURL);
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
//Bitmap myBitmap = BitmapFactory.decodeFile("/data/data/com.thankcreate.care/files/belssing_bkg_dir/1.jpg");
imageViewThumb.setImageBitmap(myBitmap);
}
} catch (Exception e) {
imageViewThumb.setVisibility(View.GONE);
imageURL = "";
}
}
}
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(type == EntryType.SinaWeibo)
{
sinaWeiboSend();
}
else if (type == EntryType.Renren)
{
renrenSend();
}
else if (type == EntryType.Douban)
{
doubanSend();
}
}
private void sinaWeiboSend()
{
String postText = textInput.getText().toString();
Oauth2AccessToken oa = MiscTool.getOauth2AccessToken();
StatusesAPI statusesAPI = new StatusesAPI(oa);
if(StringTool.isNullOrEmpty(imageURL))
{
statusesAPI.update(postText, null, null, mSinaWeiboPostStatusRequestListner);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.VISIBLE);
}
});
}
else
{
statusesAPI.upload(postText, imageURL, null, null, mSinaWeiboPostStatusRequestListner);
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.VISIBLE);
}
});
}
}
private RequestListener mSinaWeiboPostStatusRequestListner = 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 postText = textInput.getText().toString();
AsyncRenren asyncRenren = new AsyncRenren(App.getRenren());
if(StringTool.isNullOrEmpty(imageURL))
{
StatusSetRequestParam param = new StatusSetRequestParam(postText);
asyncRenren.publishStatus(param, mRenrenPostStatusRequestListner, true);
}
else
{
File file = new File(imageURL);
PhotoUploadRequestParam param = new PhotoUploadRequestParam(file);
param.setCaption(postText);
asyncRenren.publishPhoto(param, mRenrenUploadPhotoRequestListner);
}
actionBar.getProgressBar().post(new Runnable() {
@Override
public void run() {
actionBar.setProgressBarVisibility(View.VISIBLE);
}
});
}
private AbstractRequestListener<StatusSetResponseBean> mRenrenPostStatusRequestListner = new AbstractRequestListener<StatusSetResponseBean> (){
@Override
public void onComplete(StatusSetResponseBean bean) {
if(bean.getResult() == 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);
}
});
}
}
@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);
}
});
}
};
private AbstractRequestListener<PhotoUploadResponseBean> mRenrenUploadPhotoRequestListner = new AbstractRequestListener<PhotoUploadResponseBean>() {
@Override
public void onComplete(PhotoUploadResponseBean bean) {
if(bean != null && !StringTool.isNullOrEmpty(bean.getSrc()))
{
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);
}
});
}
}
@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);
}
});
}
};
private void doubanSend()
{
final String postText = textInput.getText().toString();
final String token = PreferenceHelper.getString("Douban_Token");
new Thread(new Runnable() {
@Override
public void run() {
try {
String url = String.format("%s/shuo/v2/statuses/",
DefaultConfigs.API_URL_PREFIX);
if(StringTool.isNullOrEmpty(imageURL))
{
HttpManager httpManager = new HttpManager(token);
Map<String, String> params = new HashMap<String, String>();
params.put("text", postText);
params.put("source", AppConstants.DOUBAN_SECRET_KEY);
httpManager.postEncodedEntry(url, params, true);
}
else
{
byte[] bytes = Util.fileToByteArray(new File(imageURL));
File imageFile = new File(imageURL);
String name = imageFile.getName();
Bundle bundle = new Bundle();
bundle.putString("text", postText);
bundle.putString("source", AppConstants.DOUBAN_SECRET_KEY);
HttpURLConnection conn = UploadTool.doubanSendFormdata(url,
token, bundle, name, bytes);
StringBuilder sb = new StringBuilder();
InputStream in = conn.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(in), 1000);
for (String line = r.readLine(); line != null; line = r.readLine()) {
sb.append(line);
}
in.close();
String res = sb.toString();
}
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();
}
}