/*
* Copyright 2011 Sina.
*
* Licensed under the Apache License and Weibo License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.open.weibo.com
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.weibo.net;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.qinzi.activity.R;
import com.weibo.net.AsyncWeiboRunner.RequestListener;
/**
* A dialog activity for sharing any text or image message to weibo. Three
* parameters , accessToken, tokenSecret, consumer_key, are needed, otherwise a
* WeiboException will be throwed.
*
* ShareActivity should implement an interface, RequestListener which will
* return the request result.
*
* @author ZhangJie (zhangjie2@staff.sina.com.cn)
*/
public class ShareActivity extends Activity implements OnClickListener, RequestListener {
private TextView mTextNum;
private Button mSend;
private EditText mEdit;
private FrameLayout mPiclayout;
private String mPicPath = "";
private String mContent = "";
private String mAccessToken = "";
private String mTokenSecret = "";
public static final String EXTRA_WEIBO_CONTENT = "com.weibo.android.content";
public static final String EXTRA_PIC_URI = "com.weibo.android.pic.uri";
public static final String EXTRA_ACCESS_TOKEN = "com.weibo.android.accesstoken";
public static final String EXTRA_TOKEN_SECRET = "com.weibo.android.token.secret";
public static final int WEIBO_MAX_LENGTH = 140;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.share_mblog_view);
Intent in = this.getIntent();
mPicPath = in.getStringExtra(EXTRA_PIC_URI);
mContent = in.getStringExtra(EXTRA_WEIBO_CONTENT);
mAccessToken = in.getStringExtra(EXTRA_ACCESS_TOKEN);
mTokenSecret = in.getStringExtra(EXTRA_TOKEN_SECRET);
AccessToken accessToken = new AccessToken(mAccessToken, mTokenSecret);
Weibo weibo = Weibo.getInstance();
weibo.setAccessToken(accessToken);
Button close = (Button) this.findViewById(R.id.btnClose);
close.setOnClickListener(this);
mSend = (Button) this.findViewById(R.id.btnSend);
mSend.setOnClickListener(this);
LinearLayout total = (LinearLayout) this.findViewById(R.id.ll_text_limit_unit);
total.setOnClickListener(this);
mTextNum = (TextView) this.findViewById(R.id.tv_text_limit);
ImageView picture = (ImageView) this.findViewById(R.id.ivDelPic);
picture.setOnClickListener(this);
mEdit = (EditText) this.findViewById(R.id.etEdit);
mEdit.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
String mText = mEdit.getText().toString();
String mStr;
int len = mText.length();
if (len <= WEIBO_MAX_LENGTH) {
len = WEIBO_MAX_LENGTH - len;
mTextNum.setTextColor(R.color.text_num_gray);
if (!mSend.isEnabled())
mSend.setEnabled(true);
} else {
len = len - WEIBO_MAX_LENGTH;
mTextNum.setTextColor(Color.RED);
if (mSend.isEnabled())
mSend.setEnabled(false);
}
mTextNum.setText(String.valueOf(len));
}
});
mEdit.setText(mContent);
mPiclayout = (FrameLayout) ShareActivity.this.findViewById(R.id.flPic);
if (TextUtils.isEmpty(this.mPicPath)) {
mPiclayout.setVisibility(View.GONE);
} else {
mPiclayout.setVisibility(View.VISIBLE);
File file = new File(mPicPath);
if (file.exists()) {
Bitmap pic = BitmapFactory.decodeFile(this.mPicPath);
ImageView image = (ImageView) this.findViewById(R.id.ivImage);
image.setImageBitmap(pic);
} else {
mPiclayout.setVisibility(View.GONE);
}
}
}
public void onClick(View v) {
int viewId = v.getId();
if (viewId == R.id.btnClose) {
finish();
} else if (viewId == R.id.btnSend) {
Weibo weibo = Weibo.getInstance();
try {
if (!TextUtils.isEmpty((String) (weibo.getAccessToken().getToken()))) {
this.mContent = mEdit.getText().toString();
if (!TextUtils.isEmpty(mPicPath)) {
upload(weibo, Weibo.getAppKey(), this.mPicPath, this.mContent, "", "");
} else {
// Just update a text weibo!
update(weibo, Weibo.getAppKey(), mContent, "", "");
}
} else {
Toast.makeText(this, this.getString(R.string.please_login), Toast.LENGTH_LONG);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (WeiboException e) {
e.printStackTrace();
}
} else if (viewId == R.id.ll_text_limit_unit) {
Dialog dialog = new AlertDialog.Builder(this).setTitle(R.string.attention)
.setMessage(R.string.delete_all)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mEdit.setText("");
}
}).setNegativeButton(R.string.cancel, null).create();
dialog.show();
} else if (viewId == R.id.ivDelPic) {
Dialog dialog = new AlertDialog.Builder(this).setTitle(R.string.attention)
.setMessage(R.string.del_pic)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mPiclayout.setVisibility(View.GONE);
}
}).setNegativeButton(R.string.cancel, null).create();
dialog.show();
}
}
private String upload(Weibo weibo, String source, String file, String status, String lon,
String lat) throws WeiboException {
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", source);
bundle.add("pic", file);
bundle.add("status", status);
if (!TextUtils.isEmpty(lon)) {
bundle.add("lon", lon);
}
if (!TextUtils.isEmpty(lat)) {
bundle.add("lat", lat);
}
String rlt = "";
String url = Weibo.SERVER + "statuses/upload.json";
AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
return rlt;
}
private String update(Weibo weibo, String source, String status, String lon, String lat)
throws MalformedURLException, IOException, WeiboException {
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", source);
bundle.add("status", status);
if (!TextUtils.isEmpty(lon)) {
bundle.add("lon", lon);
}
if (!TextUtils.isEmpty(lat)) {
bundle.add("lat", lat);
}
String rlt = "";
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
return rlt;
}
public void onComplete(String response) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(ShareActivity.this, R.string.send_sucess, Toast.LENGTH_LONG).show();
}
});
this.finish();
}
public void onIOException(IOException e) {
// TODO Auto-generated method stub
}
public void onError(final WeiboException e) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(
ShareActivity.this,
String.format(ShareActivity.this.getString(R.string.send_failed) + ":%s",
e.getMessage()), Toast.LENGTH_LONG).show();
}
});
}
}