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(); } }