package com.partynetwork.iparty.ishare;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.provider.MediaStore;
import android.provider.MediaStore.Images.Media;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.partynetwork.dataprovider.DataProvider.IJsonResultListener;
import com.partynetwork.dataprovider.json.NetworkEntity;
import com.partynetwork.dataprovider.json.struct.FileRequest;
import com.partynetwork.dataprovider.json.struct.FileResponse;
import com.partynetwork.dataprovider.json.struct.Ishare_releaseIshareRequest;
import com.partynetwork.dataprovider.util.BitmapUtil;
import com.partynetwork.dataprovider.util.L;
import com.partynetwork.dataprovider.util.T;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.contacts.ContactsListActivity;
import com.partynetwork.iparty.info.ContactsInfo;
import com.partynetwork.iparty.info.IsharePhotoInfo;
import com.partynetwork.iparty.map.BasicMapActivity;
import com.partynetwork.myview.mytoast.LoadingDialog;
import com.partynetwork.myview.mytoast.OkPopup;
import com.baidu.mobstat.StatService;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.util.LogUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
public class IsharePublishActivity extends Activity implements
IJsonResultListener {
private View thisView;
/**
* 上一步图标
*/
@ViewInject(R.id.menu_head_left_iv)
private ImageView leftIv;
/**
* 下一步图标
*/
@ViewInject(R.id.menu_head_right_iv)
private ImageView rightIv;
/**
* 发布文字
*/
@ViewInject(R.id.menu_head_right_tv)
private TextView rightTv;
/**
* 上一步按钮
*/
@ViewInject(R.id.menu_head_left)
private LinearLayout leftBtn;
/**
* 下一步按钮
*/
@ViewInject(R.id.menu_head_right)
private LinearLayout rightBtn;
/**
* 顶部菜单中间的文字
*/
@ViewInject(R.id.menu_head_middle_text)
private TextView middleTv;
/**
* body部分
*/
@ViewInject(R.id.body)
private LinearLayout body;
/**
* 编辑主页面
*/
private IsharePublishMain publishMain;
/**
* 照片选择界面
*/
private View photoView;
/**
* 第一步需要list
*/
private List<IsharePublishPhoto> list;
/**
* 存放图片对象的list
*/
private List<IsharePhotoInfo> photoInfoList;
/**
* 用于切换具体照片选择控件的状态的计数器
*/
private int position;
/**
* 发布的流程步骤计数器
*/
private int step;
/**
* 发布进度提示框
*/
private LoadingDialog dialog;
/**
* 发布i分享请求对象
*/
private Ishare_releaseIshareRequest request;
/**
* 发布的主题
*/
private String[] themeArray;
/**
* 当前分享链接的网络地址
*/
private String linkUrl;
/**
* i分享邀请的人
*/
private ContactsInfo[] contactsArray;
/** 消息提示框 */
private OkPopup mOkPopup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thisView = LayoutInflater.from(this).inflate(R.layout.ishare_publish,
null);
setContentView(thisView);
ViewUtils.inject(this, thisView);
init();
}
/**
* 初始化数据
*/
private void init() {
list = new ArrayList<IsharePublishPhoto>();
photoInfoList = new ArrayList<IsharePhotoInfo>();
dialog = new LoadingDialog(this, "发布中……");
initChoosePhoto();
mOkPopup = new OkPopup(this);
publishMain = new IsharePublishMain(this, photoInfoList,
publishListener);
body.addView(publishMain);
}
/**
* 照片选择界面
*/
private void initChoosePhoto() {
photoView = LayoutInflater.from(this).inflate(
R.layout.ishare_publish_photo, null);
for (int i = 0; i < 4; i++) {
IsharePublishPhoto choose = new IsharePublishPhoto(this,
changeListener, infoListener);
choose.setTag(i);
list.add(choose);
}
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
lp.setMargins(8, 0, 0, 0);
LinearLayout linearLayout1 = (LinearLayout) photoView
.findViewById(R.id.linear1);
linearLayout1.removeAllViews();
linearLayout1.addView(list.get(0).getView());
list.get(0).setState(1);
linearLayout1.addView(list.get(1).getView(), lp);
LinearLayout linearLayout2 = (LinearLayout) photoView
.findViewById(R.id.linear2);
linearLayout2.removeAllViews();
linearLayout2.addView(list.get(2).getView());
linearLayout2.addView(list.get(3).getView(), lp);
}
/**
* 事件监听
*
* @param view
*/
@OnClick({ R.id.menu_head_left, R.id.menu_head_right })
public void onClick(View view) {
switch (view.getId()) {
case R.id.menu_head_left:
if (step == 0 || step == 2) {
this.finish();
} else if (step == 1) {
body.removeView(photoView);
middleTv.setText("i分享");
body.addView(publishMain);
leftIv.setImageResource(R.drawable.menu_head_close);
rightIv.setVisibility(View.GONE);
rightTv.setVisibility(View.VISIBLE);
step = 0;
}
break;
case R.id.menu_head_right:
if (step == 1) {
if (position == 0) {
// 如果没有图片则不进入下一步
return;
}
publishMain.setPhotoArray(photoInfoList);
body.removeView(photoView);
middleTv.setText("i分享");
body.addView(publishMain);
rightIv.setVisibility(View.GONE);
rightTv.setVisibility(View.VISIBLE);
leftIv.setImageResource(R.drawable.menu_head_close);
step = 2;
} else if (step == 0 || step == 2) {
sendIshare();
}
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String filePath = "";
Object object = null;
// 选择照片的返回结果
if (data == null) {
if (requestCode == IsharePublishMain.SELECT_CAMER) {
filePath = publishMain.getImagePath();
if (filePath != "") {
LogUtils.i("filePath:" + filePath);
publishMain.addPhoto(filePath);
}
} else if (requestCode == IsharePublishPhoto.SELECT_CAMER) {
String str = "";
for (int i = 0; i < list.size(); i++) {
if (i == position) {
str = list.get(i).onActivityResult(requestCode,
resultCode, data);
if (!str.equals("")) {
IsharePhotoInfo photoInfo = new IsharePhotoInfo();
photoInfo.setPhotoUrl(str);
photoInfoList.add(i, photoInfo);
}
}
}
// 添加成功则加
if (!str.equals("")) {
changeListener.add(position);
}
for (int i = 0; i < photoInfoList.size(); i++) {
list.get(i).setImage(photoInfoList.get(i).getPhotoUrl());
}
}
return;
}
if (requestCode == IsharePublishPhoto.SELECT_CAMER
|| requestCode == IsharePublishPhoto.SELECT_PICTURE) {
String str = "";
for (int i = 0; i < list.size(); i++) {
if (i == position) {
str = list.get(i).onActivityResult(requestCode, resultCode,
data);
if (!str.equals("")) {
IsharePhotoInfo photoInfo = new IsharePhotoInfo();
photoInfo.setPhotoUrl(str);
photoInfoList.add(i, photoInfo);
}
}
}
// 添加成功则加
if (!str.equals("")) {
changeListener.add(position);
}
for (int i = 0; i < photoInfoList.size(); i++) {
list.get(i).setImage(photoInfoList.get(i).getPhotoUrl());
}
} else if (requestCode == IshareThemeActivity.THEME_REQUEST_CODE) {
// 获取选择的主题
try {
themeArray = data
.getStringArrayExtra(IshareThemeActivity.THEME_ARRAY);
publishMain.setTheme(themeArray);
publishMain.setThemeArray(themeArray);
} catch (Exception e) {
publishMain.setTheme(new String[] {});
}
} else if (requestCode == ContactsListActivity.CONTACTS_REQUEST_CODE) {
// 获取邀请的人
try {
Parcelable[] parce = data
.getParcelableArrayExtra(ContactsListActivity.CONTACTS_ARRAY);
contactsArray = new ContactsInfo[parce.length];
for (int i = 0; i < parce.length; i++) {
contactsArray[i] = (ContactsInfo) parce[i];
}
publishMain.setContactsArray(contactsArray);
if (contactsArray.length != 0) {
String[] str = new String[contactsArray.length];
for (int i = 0; i < contactsArray.length; i++) {
str[i] = contactsArray[i].getUserName();
}
publishMain.setContacts(str);
} else {
publishMain.setContacts(new String[] {});
}
} catch (Exception e) {
publishMain.setContacts(new String[] {});
}
} else if (requestCode == IsharePublishMain.SELECT_CAMER) {
// 相机拍照
if (data.getData() != null) {
// 根据返回的URI获取对应的SQLite信息
Cursor cursor = this.getContentResolver().query(data.getData(),
null, null, null, null);
if (cursor.moveToFirst()) {
filePath = cursor.getString(cursor
.getColumnIndex(Media.DATA));// 获取绝对路径
}
cursor.close();
} else {// 三星 小米(小米手机不会自动存储DCIM)
object = (Bitmap) (data.getExtras() == null ? null : data
.getExtras().get("data"));
Bitmap bitmap = object == null ? null : (Bitmap) object;
if (bitmap != null) {
try {
filePath = BitmapUtil.saveImg(bitmap, DateFormat
.format("yyyyMMddhhmmss", new Date())
.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
filePath = !filePath.equals("") ? filePath : getRealFilePath();
} else if (requestCode == IsharePublishMain.SELECT_PICTURE) {
// 相册选取
try {
Uri uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = this.managedQuery(uri, proj, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
filePath = cursor.getString(column_index);
} catch (Exception e) {
e.printStackTrace();
}
} else if (requestCode == IshareLinkActivity.LINK_REQUEST_CODE) {
// 网址链接
try {
linkUrl = data.getStringExtra(IshareLinkActivity.LINK_URL);
} catch (Exception e) {
}
if (linkUrl != null && !linkUrl.equals("")) {
publishMain.appendUrl(linkUrl);
}
} else if (requestCode == BasicMapActivity.MAP_CODE) {
// 地图选点
String address = data.getStringExtra(BasicMapActivity.ADDRESS);
double latitude = data.getDoubleExtra(BasicMapActivity.LATITUDE, 0);
double longitude = data.getDoubleExtra(BasicMapActivity.LONGITUDE,
0);
publishMain.setAddress(address);
publishMain.setLatLon(latitude, longitude);
}
if (filePath != "") {
L.i("filePath:" + filePath);
publishMain.addPhoto(filePath);
}
}
/**
* 获取系统默认存储真实文件路径 两个路径 一个是最后一张所拍图片路径
* (由于设置了存储路径所以DCIM中会存储两张一模一样的图片,所以在此获取两张图片路径以便于缩放处理后全部删除)
*
* @param filePath
* @return
*/
protected String getRealFilePath() {
String filePath = "";
// MediaStore.Images.Media.EXTERNAL_CONTENT_URI
// content://media/external/images/media
Cursor cursor = this.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,
Media.DATE_MODIFIED + " desc");
if (cursor.moveToNext()) {
/**
* _data:文件的绝对路径 Media.DATA='_data'
*/
filePath = cursor.getString(cursor.getColumnIndex(Media.DATA));
}
return filePath;
}
/**
* 用于照片选择界面的回调监听对象
*/
private photoChangeListener changeListener = new photoChangeListener() {
/**
* 添加照片成功
*/
public void add(int tag) {
if (position >= 0 && position < 4) {
position++;
}
for (int i = 0; i < 4; i++) {
if (i < position) {
list.get(i).setState(2);
} else if (i == position) {
list.get(i).setState(1);
} else {
list.get(i).setState(0);
}
}
}
/**
* 删除照片成功
*/
public void sub(int tag) {
if (position > 0 && position <= 4) {
position--;
}
for (int i = 0; i < 4; i++) {
if (i < position) {
list.get(i).setState(2);
} else if (i == position) {
list.get(i).setState(1);
} else {
list.get(i).setState(0);
}
}
photoInfoList.remove(tag);
for (int i = 0; i < photoInfoList.size(); i++) {
list.get(i).setImage(photoInfoList.get(i).getPhotoUrl());
}
}
};
/**
* 用于照片的回调监听对象
*/
private photoInfoListener infoListener = new photoInfoListener() {
public void save(String title, String url, int tag) {
IsharePublishActivity.this.setContentView(thisView);
photoInfoList.get(tag).setPhotoTitle(title);
photoInfoList.get(tag).setLinkUrl(url);
}
public void cannel() {
IsharePublishActivity.this.setContentView(thisView);
}
};
private publishMainListener publishListener = new publishMainListener() {
public void toNext() {
// 跳到照片选择页面
body.removeView(publishMain);
leftIv.setImageResource(R.drawable.menu_head_back);
rightIv.setVisibility(View.VISIBLE);
rightTv.setVisibility(View.GONE);
rightIv.setImageResource(R.drawable.menu_head_next);
middleTv.setText("投票");
step = 1;
body.addView(photoView);
}
};
/**
* 照片选择界面的监听类
*
* @author sys
*
*/
public interface photoChangeListener {
public abstract void add(int tag);
public abstract void sub(int tag);
}
/**
* 照片编辑界面的监听回调类
*/
public interface photoInfoListener {
public abstract void cannel();
public abstract void save(String title, String url, int tag);
}
/**
* 进入投票选择图片页面 com.dongcemedia.iparty.ichoose.publishMainListener
*
* @author 沈跃双 Create at 2013-12-16 下午2:36:49
*/
public interface publishMainListener {
public abstract void toNext();
}
/**
* 发布i分享
*/
private void sendIshare() {
request = publishMain.getReturnRequest();
if ((request.getEventContent() == null || request.getEventContent()
.equals(""))
&& photoInfoList.size() == 0
&& publishMain.mVideoPath == null) {
mOkPopup.setTitle("不可以发送空的i分享");
mOkPopup.showAtLocation(thisView);
return;
}
AppContext context=(AppContext) getApplication();
request.setUserId(context.getLoginUid());
dialog.show();
if (photoInfoList.size() == 0 && publishMain.mVideoPath == null) {
// 如果没有文件
context.getmDataProvider()
.getJsonFromNetwork(request, this);
} else {
// 如果有文件发送操作(包括图片和音频)
FileRequest file = new FileRequest();
// 加入音频地址到发送请求体中
String[] str = null;
if (publishMain.mVideoPath != null) {
str = new String[photoInfoList.size() + 1];
for (int i = 0; i < str.length; i++) {
if (i != str.length - 1) {
str[i] = photoInfoList.get(i).getPhotoUrl();
} else {
str[i] = publishMain.mVideoPath;
}
}
} else {
str = new String[photoInfoList.size()];
for (int i = 0; i < photoInfoList.size(); i++) {
str[i] = photoInfoList.get(i).getPhotoUrl();
}
}
file.setFilePath(str);
context.getmDataProvider().getJsonFromNetwork(file, this);
}
}
/**
* 请求开始
*/
public void onNetworkRequest() {
}
/**
* 请求成功后的回调方法
*/
public void onResultSuccess(NetworkEntity entity) {
if (entity.getRequest().getAction()
.equals(new FileRequest().getAction())) {
// 发送文件请求的返回数据
FileResponse file = (FileResponse) entity.getResponse();
String[] str = file.getDetails();
if (request == null) {
T.showTips(this, R.drawable.tips_smile, "信息输入有误!");
return;
}
/******************************************** 开始发送i分享数据 */
AppContext context=(AppContext) getApplication();
request.setUserId(context.getLoginUid());
IsharePhotoInfo[] array = new IsharePhotoInfo[photoInfoList.size()];
for (int i = 0; i < photoInfoList.size(); i++) {
IsharePhotoInfo info = new IsharePhotoInfo();
// 判断是否为图片
if (str[i].contains(".jpg") || str[i].contains(".png")
|| str[i].contains(".bmp") || str[i].contains(".jpeg")) {
info.setPhotoUrl(str[i]);
} else {
info.setPhotoUrl("");
}
info.setPhotoTitle(photoInfoList.get(i).getPhotoTitle());
info.setLinkUrl(photoInfoList.get(i).getLinkUrl());
array[i] = info;
}
request.setEventBgArray(array);
if (str.length == (photoInfoList.size() + 1)) {
if (str[str.length - 1].contains(".mp3")) {
request.setEventVideoUrl(str[str.length - 1]);
}
}
context.getmDataProvider()
.getJsonFromNetwork(request, this);
}
if (entity.getRequest().getAction()
.equals(new Ishare_releaseIshareRequest().getAction())) {
// 发布i分享请求的返回数据
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
T.showTips(this, R.drawable.tips_smile, "发布成功!");
this.finish();
}
}
/**
* 请求失败后的回调方法
*/
public void onResultFail(String result) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
T.showTips(this, R.drawable.tips_error, result);
}
/**
* 界面的暂停操作
*/
public void onPause() {
StatService.onPause(this);
super.onPause();
if (publishMain != null && publishMain.getRecorder() != null) {
publishMain.setRecorderRelease();
}
if (publishMain != null && publishMain.getPlayer() != null) {
publishMain.setPlayerRelease();
}
}
@Override
protected void onResume() {
StatService.onResume(this);
super.onResume();
}
}