/**
* $id$
* Copyright 2011-2012 Renren Inc. All rights reserved.
*/
package com.renren.api.connect.android.photos;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.renren.api.connect.android.AuthorizationHelper;
import com.renren.api.connect.android.R;
import com.renren.api.connect.android.Util;
import com.renren.api.connect.android.common.AbstractRenrenRequestActivity;
import com.renren.api.connect.android.common.AbstractRequestListener;
import com.renren.api.connect.android.exception.RenrenAuthError;
import com.renren.api.connect.android.exception.RenrenError;
import com.renren.api.connect.android.view.ProfileNameView;
import com.renren.api.connect.android.view.ProfilePhotoView;
import com.renren.api.connect.android.view.RenrenAuthListener;
/**
* 上传照片的界面
*
* @author sunting ting.sun@renren-inc.com
*
*/
public class UploadPhotoActivity extends AbstractRenrenRequestActivity {
/**
* 标识数据状态的消息值,依次为发送成功,出现异常,出现严重错误
*/
private final static int DATA_COMPLETE = 0xffff;
private final static int DATA_ERROR = 0xfffe;
private final static int DATA_FAULT = 0xfffd;
/**
* bundle中错误信息的标识符
*/
private final static String ERROR_MSG = "error_message";
/**
* 上传的文件
*/
File file;
/**
* 照片描述
*/
String caption;
/**
* 相册aid
*/
TextView photoAidValue;
/**
* 照片的描述
*/
EditText photoCaptionValue;
/**
* 照片描述的字数计数器
*/
TextView photoCaptionCounter;
/**
* 照片的缩略图
*/
ImageView photoViewImage;
/**
* 提交按钮,上传照片
*/
Button submit;
/**
* 取消上传
*/
Button cancel;
/**
* 上传的照片请求参数实体
*/
PhotoUploadRequestParam photoParam = new PhotoUploadRequestParam();
@Override
public void onCreate(Bundle savedInstanceState) {
// 隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
// 获取intent传来的文件数据和renren对象
Intent intent = getIntent();
file = (File) intent.getSerializableExtra("file");
if (intent.hasExtra("caption")) {
caption = intent.getStringExtra("caption");
}
if (renren == null) {
// 人人对象获取失败,无法执行创建相册的操作,直接退出本Activity
Util.logger("renren object is null, can't upload photo!");
showTip("无法上传照片,请稍后重试!");
finish();
}
renren.init(this);
// 权限验证,如果用户已经登录并且权限满足,则初始化界面,否则结束Activity
authorize();
}
private void initComponents() {
setContentView(R.layout.renren_sdk_upload_photo);
// 初始化头像和名字控件
ProfilePhotoView profilePhotoView = (ProfilePhotoView) findViewById(R.id.renren_sdk_profile_photo);
profilePhotoView.setUid(renren.getCurrentUid());
ProfileNameView profileNameView = (ProfileNameView) findViewById(R.id.renren_sdk_profile_name);
profileNameView.setUid(renren.getCurrentUid(), renren);
// 用renren创建相册帮助类,方便后面调用API接口
final PhotoHelper photoHelper = new PhotoHelper(renren);
photoCaptionValue = (EditText) findViewById(R.id.renren_sdk_photo_caption_value);
photoCaptionCounter = (TextView) findViewById(R.id.renren_sdk_photo_caption_counter);
// 显示默认的照片描述和字数统计
if (caption != null) {
int length = caption.length();
if (length > PhotoUploadRequestParam.CAPTION_MAX_LENGTH) {
caption = caption.substring(0, 140);
}
photoCaptionValue.setText(caption);
int index = caption.length();
photoCaptionValue.setSelection(index);
photoCaptionCounter.setText(length + "/"
+ PhotoUploadRequestParam.CAPTION_MAX_LENGTH);
}
// 增加相片描述文本框的监听事件
photoCaptionValue.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// 设置计数器
photoCaptionCounter.setText(s.length() + "/"
+ PhotoUploadRequestParam.CAPTION_MAX_LENGTH);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
photoViewImage = (ImageView) findViewById(R.id.renren_sdk_photo_view_image);
// 设置缩略图
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(new FileInputStream(file));
} catch (FileNotFoundException e) {
Util.logger("exception in setting thumbnail: " + e.getMessage());
}
photoViewImage.setImageBitmap(bitmap);
submit = (Button) findViewById(R.id.renren_sdk_upload_photo_submit);
cancel = (Button) findViewById(R.id.renren_sdk_upload_photo_cancel);
submit.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// 设置caption参数
String caption = photoCaptionValue.getText().toString();
if (!"".equals(caption)) {
photoParam.setCaption(caption);
}
photoParam.setFile(file);
photoHelper.asyncUploadPhoto(photoParam,
new AbstractRequestListener<PhotoUploadResponseBean>() {
@Override
public void onRenrenError(RenrenError renrenError) {
if (renrenError != null) {
// 传递消息
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString(ERROR_MSG,
renrenError.getMessage());
message.what = DATA_ERROR;
message.setData(bundle);
handler.sendMessage(message);
Util.logger("exception in uploading photo: "
+ renrenError.getMessage());
}
}
@Override
public void onFault(Throwable fault) {
if (fault != null) {
handler.sendEmptyMessage(DATA_FAULT);
Util.logger("fault in uploading photo: "
+ fault.getMessage());
}
}
@Override
public void onComplete(
PhotoUploadResponseBean photoResponse) {
if (photoResponse != null) {
handler.sendEmptyMessage(DATA_COMPLETE);
Util.logger("sucess uploading photo! \n"
+ photoResponse);
}
}
});
// 正在上传照片,显示进度框
showProgress("上传中...");
}
});
cancel.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
/**
* 调用AuthorizationHelper.check进行验证
*/
private void authorize() {
AuthorizationHelper.check(renren, UploadPhotoActivity.this,
new String[] { PhotoHelper.UPLOAD_PHPTO_PERMISSION },
new RenrenAuthListener() {
@Override
public void onRenrenAuthError(
RenrenAuthError renrenAuthError) {
finish();
}
@Override
public void onComplete(Bundle values) {
initComponents();
}
@Override
public void onCancelLogin() {
finish();
}
@Override
public void onCancelAuth(Bundle values) {
finish();
}
});
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case DATA_COMPLETE:
// 界面显示完成,结束进度框
finishProgress();
// 上传成功,直接显示成功
showTip("上传成功");
UploadPhotoActivity.this.finish();
break;
case DATA_ERROR:
finishProgress();
Bundle bundle = msg.getData();
String errorMessage = "上传失败";
if (bundle != null) {
String error = bundle.getString(ERROR_MSG);
if (error != null || !"".equals(error)) {
errorMessage = "," + error;
}
}
showTip(errorMessage);
break;
case DATA_FAULT:
finishProgress();
// 上传出现未知系统错误,直接显示失败
showTip("上传失败");
break;
default:
finishProgress();
break;
}
}
};
}