package com.emop.client;
import java.io.File;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.emop.client.io.ApiResult;
import com.emop.client.io.AppConfig;
import com.emop.client.tasks.GetSinaUserInfoTask;
import com.weibo.net.AccessToken;
import com.weibo.net.Utility;
import com.weibo.net.Weibo;
import com.weibo.net.WeiboParameters;
import com.weibo.sdk.android.sso.SsoHandler;
public class ShareToWeiboActivity extends BaseActivity {
private ProgressDialog loading = null;
private SsoHandler sinaSSO = null;
private TextView message = null;
private ImageView imageView = null;
private String picUrl = null;
private String link = null;
private Weibo weibo = null;
private int loginTimes = 0;
private ProgressBar progress = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.share_to_weibo);
loading = new ProgressDialog(this);
loading.requestWindowFeature(Window.FEATURE_NO_TITLE);
loading.setMessage("登录中...");
Intent intent = this.getIntent();
picUrl = intent.getStringExtra("picUrl");
String text = intent.getStringExtra("text");
link = intent.getStringExtra("link");
message = (TextView)findViewById(R.id.share_text);
imageView = (ImageView)findViewById(R.id.taoke_pic);
Display display = null;
display = getWindowManager().getDefaultDisplay();
int disWidth = display.getWidth();
client.tmpImgLoader.loadImage(picUrl, imageView, disWidth, true); // .cache.get(picUrl, disWidth, true,true);
message.setText(text);
weibo = Weibo.getInstance();
weibo.setupConsumerConfig(Constants.SINA_APPID, Constants.SINA_APPKEY);
progress = (ProgressBar) findViewById(R.id.progressbar_loading);
progress.setVisibility(View.GONE);
if(weibo.getAccessToken() == null){
String accessToken = client.getSettings(Constants.PREFS_SINA_ACCESS_TOKEN);
String expires_in = client.getSettings(Constants.PREFS_SINA_EXPIRES_IN);
if(accessToken != null){
AccessToken token = new AccessToken(accessToken, Weibo.getAppSecret());
token.setExpiresIn(expires_in);
weibo.setAccessToken(token);
}
}
}
public void onResume(){
super.onResume();
if(loginTimes < 3 && weibo.getAccessToken() == null && !loading.isShowing()){
loginTimes++;
sinaSSO = new SsoHandler(this, sinaHandler);
loading.show();
sinaSSO.authorize();
}
}
public void onShareToWeibo(View v){
progress.setVisibility(View.VISIBLE);
Button btn = (Button)v;
btn.setClickable(false);
new Thread(){
public void run(){
WeiboParameters bundle = new WeiboParameters();
//bundle.add("access_token", token[0]);
String url = Weibo.SERVER + "statuses/upload.json";
String weiBo = message.getText().toString();
String json = null;
ApiResult result = new ApiResult();
//Display display = getWindowManager().getDefaultDisplay();
//final int disWidth = display.getWidth();
File cacheFile = client.tmpImgLoader.cache.getCachedFile(picUrl, 400);
if(cacheFile == null || !cacheFile.isFile()){
showToast("获取图片失败啦~");
return;
}
bundle.add("pic", cacheFile.getAbsolutePath());
bundle.add("status", weiBo + " " + link);
Log.d("weibo", "start to update weibo ...");
try {
synchronized(weibo){
//bundle.add("source", Weibo.getAppKey());
if(weibo.getAccessToken() != null){
bundle.add("access_token", weibo.getAccessToken().getToken());
}
json = weibo.request(ShareToWeiboActivity.this, url, bundle, Utility.HTTPMETHOD_POST,
weibo.getAccessToken());
}
Log.i("weibo", json);
result.json = (JSONObject) new JSONTokener(json).nextValue();
if(result.getString("idstr") != null){
showToast("分享微博成功");
}else {
showToast("分享微博失败, 错误code:" + result.getString("error_code"));
}
String code = result.getString("error_code");
Log.w("weibo", "error code:" + code);
if(code != null){
if(code.equals("21301") || code.equals("21315") ||
code.equals("21327") || code.equals("21327")){
client.removeSettings(Constants.PREFS_SINA_ACCESS_TOKEN);
weibo.setAccessToken(null);
}
}
} catch (Exception e) {
Log.e("weibo", e.toString(), e);
showToast("分享微博失败");
//e.printStackTrace();
}
}
}.start();
finish();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(sinaSSO != null){
sinaSSO.authorizeCallBack(requestCode, resultCode, data);
}
}
private Handler sinaHandler = new Handler(){
public void handleMessage(final Message msg) {
Log.d("emop", "message id:" + msg.what +", msg:" + msg.obj);
String message = null;
if(msg.obj != null){
message = msg.obj.toString();
if(message != null){
Toast.makeText(ShareToWeiboActivity.this, message, Toast.LENGTH_LONG).show();
}
}
if(msg.what == GetSinaUserInfoTask.LOGIN_DONE){
loading.dismiss();
}else if(msg.what == SsoHandler.START_WEB_LOGIN || msg.what == SsoHandler.SSO_LOGIN_ERROR){
loading.dismiss();
}
}
};
}