package com.kaixin.android.activity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.result.AlbumResult;
import com.kaixin.android.result.LocationResult;
import com.kaixin.android.service.UploadImageService;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.Encrypter;
import com.kaixin.android.utils.HttpAssist;
import com.kaixin.android.utils.HttpAssist.OnUploadProcessListener;
import com.kaixin.android.utils.MessageUtil;
import com.kaixin.android.utils.StorageUtil;
import com.kaixin.android.utils.StringUtil;
/**
* 照片分享类
*
* @author gyz
*
*/
public class PhotoShareActivity extends KXActivity implements OnUploadProcessListener {
private Button mCancel;
private Button mUpload;
private Gallery mDisplay;
private ImageView mDisplaySingle;
private TextView mLocation;
private Button mDelete;
private TextView mAlbum;
private EditText mTitle;
private GalleryAdapter mAdapter;
private int mCurrentPosition;// 当前图片的编号
private String mCurrentPath;// 当前图片的地址
private int mLocationPosition;// 当前选择的地理位置在列表的位置
private List<AlbumResult> mAlbums = new ArrayList<AlbumResult>();// 相册
private int mAlbumPosition;// 当前选择的相册在列表的位置
private Date date;
private ProgressDialog dialog;
private ProgressBar progressBar;
/**
* 去上传文件
*/
protected static final int TO_UPLOAD_FILE = 1;
/**
* 上传文件响应
*/
protected static final int UPLOAD_FILE_DONE = 2; //
/**
* 选择文件
*/
public static final int TO_SELECT_PHOTO = 3;
/**
* 上传初始化
*/
private static final int UPLOAD_INIT_PROCESS = 4;
/**
* 上传中
*/
private static final int UPLOAD_IN_PROCESS = 5;
private String[] mCompetenceItems = new String[] { "任何人可见",
"仅关注人可见", "仅自己可见" };// 权限名称
private int mCompetencePosition = 1;// 当前选择的权限在列表中的位置
private TextView mCompetence;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photoshare_activity);
findViewById();
setListener();
init();
}
private void findViewById() {
mCancel = (Button) findViewById(R.id.photoshare_cannel);
mUpload = (Button) findViewById(R.id.photoshare_upload);
mDisplay = (Gallery) findViewById(R.id.photoshare_display);
mDisplaySingle = (ImageView) findViewById(R.id.photoshare_display_single);
mLocation = (TextView) findViewById(R.id.photoshare_location);
mDelete = (Button) findViewById(R.id.photoshare_location_delete);
mAlbum = (TextView) findViewById(R.id.photoshare_album);
mTitle = (EditText) findViewById(R.id.edit_title);
dialog = new ProgressDialog(PhotoShareActivity.this);
dialog.setMessage("图片上传中。。。");
mCompetence = (TextView) findViewById(R.id.photoshare_competence);
// progressBar = (ProgressBar) findViewById(R.id.progressBar1);
}
private void setListener() {
mCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭当前界面
finish();
}
});
mUpload.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(StringUtil.isNull(mTitle.getText().toString())){
MessageUtil.showMsg(PhotoShareActivity.this, "请填写内容~");
return;
}
date = new Date(new java.util.Date().getTime());
// new UploadImageTask().execute();
// 判断手机相册界面是否关闭,如果没关闭则关闭
if (PhoneAlbumActivity.mInstance != null && !PhoneAlbumActivity.mInstance.isFinishing()) {
PhoneAlbumActivity.mInstance.finish();
}
// handler.sendEmptyMessage(TO_UPLOAD_FILE);
// 显示提示信息并关闭当前界面
Intent intent = new Intent(PhotoShareActivity.this, UploadImageService.class);
intent.putExtra("mAlbums", (Serializable)mAlbums);
intent.putExtra("photoList", (Serializable)mKXApplication.mAlbumList);
intent.putExtra("mAlbumPosition", mAlbumPosition);
intent.putExtra("mCompetencePosition", String.valueOf(mCompetencePosition));
intent.putExtra("content", mTitle.getText().toString());
intent.putExtra("date", new Date(new java.util.Date().getTime()).toString());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
finish();
}
});
mDisplay.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// 获取当前的照片编号以及照片地址传递到照片编辑类
mCurrentPosition = arg2;
mCurrentPath = mKXApplication.mAlbumList.get(mCurrentPosition)
.get("image_path");
Intent intent = new Intent();
intent.setClass(PhotoShareActivity.this,
ImageFilterActivity.class);
intent.putExtra("path", mCurrentPath);
intent.putExtra("isSetResult", true);
startActivityForResult(intent, 0);
}
});
mDisplaySingle.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 将照片地址传递到照片编辑类
Intent intent = new Intent();
intent.setClass(PhotoShareActivity.this,
ImageFilterActivity.class);
intent.putExtra("path", mCurrentPath);
intent.putExtra("isSetResult", true);
startActivityForResult(intent, 0);
}
});
mLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 显示地理位置对话框
locationDialog();
}
});
mDelete.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 更换显示,设置地理位置编号
mLocation.setText("选择当前位置");
mLocationPosition = -1;
}
});
mAlbum.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 相册对话框
AlbumDialog();
}
});
mCompetence.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 权限对话框
CompetenceDialog();
}
});
}
class UploadImageTask extends AsyncTask<Integer, String, String>{
@Override
protected String doInBackground(Integer... params) {
// CallService.uploadImage(mAlbums.get(mAlbumPosition).getId(), date.toString(), baos.toByteArray());
try {
Map<String, String> m = new HashMap<String, String>();
m.put("username", CallService.getUsername());
m.put("albumId", String.valueOf(mAlbums.get(mAlbumPosition).getId()));
m.put("content", mTitle.getText().toString());
m.put("messageTime", date.toString());
HttpAssist.uploadFile(mKXApplication.mAlbumList, m);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// 显示提示信息并关闭当前界面
Toast.makeText(PhotoShareActivity.this, "上传图片成功",
Toast.LENGTH_SHORT).show();
if(dialog.isShowing()){
dialog.dismiss();
}
PhotoShareActivity.this.finish();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.show();
}
}
/**
* 上传服务器响应回调
*/
@Override
public void onUploadDone(int responseCode, String message) {
dialog.dismiss();
Message msg = Message.obtain();
msg.what = UPLOAD_FILE_DONE;
msg.arg1 = responseCode;
msg.obj = message;
handler.sendMessage(msg);
}
private void toUploadFile()
{
HttpAssist uploadUtil = HttpAssist.getInstance();
uploadUtil.setOnUploadProcessListener(this); //设置监听器监听上传状态
try {
Map<String, String> m = new HashMap<String, String>();
m.put("username", CallService.getUsername());
m.put("content", mTitle.getText().toString());
m.put("albumId", String.valueOf(mAlbums.get(mAlbumPosition).getId()));
m.put("messageTime", date.toString());
uploadUtil.uploadFile(mKXApplication.mAlbumList, m);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TO_UPLOAD_FILE:
toUploadFile();
break;
case UPLOAD_INIT_PROCESS:
progressBar.setMax(msg.arg1);
break;
case UPLOAD_IN_PROCESS:
progressBar.setProgress(msg.arg1);
progressBar.invalidate();
break;
case UPLOAD_FILE_DONE:
PhotoShareActivity.this.finish();
break;
default:
break;
}
super.handleMessage(msg);
}
};
private Uri uri;
@Override
public void onUploadProcess(int uploadSize) {
Message msg = Message.obtain();
msg.what = UPLOAD_IN_PROCESS;
msg.arg1 = uploadSize;
handler.sendMessage(msg);
}
@Override
public void initUpload(int fileSize) {
Message msg = Message.obtain();
msg.what = UPLOAD_INIT_PROCESS;
msg.arg1 = fileSize;
handler.sendMessage(msg);
}
// 根据uri获得图片真实地址
public String getPath(Uri uri, Context context) {
String[] proj = { MediaStore.Images.Media.DATA };
ContentResolver cr = context.getContentResolver();
Cursor cursor = cr.query(uri, proj, null, null, null);
cursor.moveToFirst();
int actual_image_column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
return cursor.getString(actual_image_column_index);
}
private void init() {
Intent it = getIntent();
if (it != null && it.getAction() != null && it.getAction().equals(Intent.ACTION_SEND)) {
Bundle extras = it.getExtras();
if (extras.containsKey("android.intent.extra.STREAM")) {
uri = (Uri) extras.get("android.intent.extra.STREAM");
// set_image(uri);//这里是将我们所选的分享图片加载出来
Map<String, String> map = new HashMap<String, String>();
map.put("image_path", getPath(uri, mKXApplication));
mKXApplication.mAlbumList.add(map);
}
}
// 判断照片的数量,根据数量选择控件显示,1张图片用ImageView显示,多张用Gallery显示
if (mKXApplication.mAlbumList.size() > 1) {
mDisplaySingle.setVisibility(View.GONE);
mDisplay.setVisibility(View.VISIBLE);
mCurrentPosition = 0;
mAdapter = new GalleryAdapter();
mDisplay.setAdapter(mAdapter);
mDisplay.setSelection(mCurrentPosition);
} else if (mKXApplication.mAlbumList.size() == 1) {
mDisplaySingle.setVisibility(View.VISIBLE);
mDisplay.setVisibility(View.GONE);
mCurrentPosition = 0;
mCurrentPath = mKXApplication.mAlbumList.get(mCurrentPosition).get(
"image_path");
mDisplaySingle.setImageBitmap(mKXApplication
.getPhoneAlbum(mCurrentPath));
}
// 获取地理位置数据
getLocation();
getAlbums(CallService.getAlbums("", StorageUtil.getString(this, "username"), Encrypter.md5(StorageUtil.getString(this, "password"))));
// 显示默认地理位置、相册
mLocation.setText(mKXApplication.mMyLocationResults.get(
mLocationPosition).getName());
mAlbum.setText(mAlbums.get(mAlbumPosition).getName());
mCompetence.setText(mCompetenceItems[mCompetencePosition]);
}
/**
* 解析Json数据
*
* @param json
* @param isFriend
*/
private void getAlbums(String json) {
try {
JSONObject object = new JSONObject(json);
JSONArray albumArray = object.getJSONArray(
"data");
mAlbums = new ArrayList<AlbumResult>();
for (int j = 0; j < albumArray.length(); j++) {
AlbumResult album = new AlbumResult();
album.setId(albumArray.getJSONObject(j).getInt("id"));
album.setEmail(albumArray.getJSONObject(j).getString("email"));
album.setName(albumArray.getJSONObject(j).getString("name"));
album.setImage(albumArray.getJSONObject(j).getString("image"));
mAlbums.add(album);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
/**
* 获取地理位置数据
*/
private void getLocation() {
if (mKXApplication.mMyLocationResults.isEmpty()) {
List<String> listAddress = mKXApplication.mSaveLocationDao.queryAllLocation();
LocationResult result = null;
for (int i = 0; i < listAddress.size(); i++) {
result = new LocationResult();
result.setName(listAddress.get(i));
result.setLocation(listAddress.get(i));
mKXApplication.mMyLocationResults.add(result);
}
}
}
/**
* 地理位置对话框
*/
private void locationDialog() {
AlertDialog.Builder builder = new Builder(PhotoShareActivity.this);
builder.setTitle("选择当前位置");
builder.setAdapter(new LocationAdapter(),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mLocationPosition = which;
mLocation.setText(mKXApplication.mMyLocationResults
.get(which).getName());
dialog.dismiss();
}
});
builder.setPositiveButton("刷新", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
/**
* 相册对话框
*/
private void AlbumDialog() {
AlertDialog.Builder builder = new Builder(PhotoShareActivity.this);
builder.setTitle("请选择相册");
builder.setAdapter(new AlbumAdapter(),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(which == 0){
CreateAlbumDialog();
}else{
mAlbumPosition = which - 1;
mAlbum.setText(mAlbums.get(which - 1).getName());
}
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
/**
* 相册对话框
*/
private void CreateAlbumDialog() {
AlertDialog.Builder builder = new Builder(PhotoShareActivity.this);
builder.setTitle("请输入新相册名称");
final EditText text = new EditText(this);
builder.setView(text);
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
CallService.createAlbum(text.getText().toString(), text.getText().toString());
getAlbums(CallService.getAlbums("",StorageUtil.getString(PhotoShareActivity.this, "username"), Encrypter.md5(StorageUtil.getString(PhotoShareActivity.this, "password"))));
mAlbum.setText(mAlbums.get(mAlbums.size() - 1).getName());
mAlbumPosition = mAlbums.size() - 1;
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
//获取新的照片地址
mCurrentPath = data.getStringExtra("path");
Map<String, String> map = mKXApplication.mAlbumList
.get(mCurrentPosition);
map.put("image_path", mCurrentPath);
//更新界面显示
if (mKXApplication.mAlbumList.size() > 1) {
mAdapter.notifyDataSetChanged();
} else if (mKXApplication.mAlbumList.size() == 1) {
mDisplaySingle.setImageBitmap(mKXApplication
.getPhoneAlbum(mCurrentPath));
}
}
}
private class LocationAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mMyLocationResults.size();
}
public Object getItem(int position) {
return mKXApplication.mMyLocationResults.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(PhotoShareActivity.this)
.inflate(R.layout.photoshare_activity_location_item,
null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.photoshare_activity_location_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.photoshare_activity_location_item_name);
holder.location = (TextView) convertView
.findViewById(R.id.photoshare_activity_location_item_location);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
LocationResult result = mKXApplication.mMyLocationResults
.get(position);
if (mLocationPosition == position) {
holder.icon.setVisibility(View.VISIBLE);
} else {
holder.icon.setVisibility(View.INVISIBLE);
}
holder.name.setText(result.getName());
holder.location.setText(result.getLocation());
return convertView;
}
class ViewHolder {
ImageView icon;
TextView name;
TextView location;
}
}
private class AlbumAdapter extends BaseAdapter {
public int getCount() {
return mAlbums.size() + 1;
}
public Object getItem(int position) {
if(position == 0){
return mAlbums.get(0);
}else{
return mAlbums.get(position - 1);
}
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(PhotoShareActivity.this)
.inflate(R.layout.photoshare_activity_album_item, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.photoshare_activity_album_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.photoshare_activity_album_item_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.icon.setVisibility(View.VISIBLE);
if(position == 0){
holder.name.setText("新增相册");
}else{
holder.name.setText(mAlbums.get(position - 1).getName());
}
return convertView;
}
class ViewHolder {
ImageView icon;
TextView name;
}
}
private class GalleryAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mAlbumList.size();
}
public Object getItem(int position) {
return mKXApplication.mAlbumList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(PhotoShareActivity.this)
.inflate(R.layout.photoshare_activity_item, null);
holder = new ViewHolder();
holder.image = (ImageView) convertView
.findViewById(R.id.photoshare_item_image);
holder.delete = (Button) convertView
.findViewById(R.id.photoshare_item_delete);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Map<String, String> results = mKXApplication.mAlbumList
.get(position);
holder.image.setImageBitmap(mKXApplication.getPhoneAlbum(results
.get("image_path")));
if (mKXApplication.mAlbumList.size() > 1) {
holder.delete.setVisibility(View.VISIBLE);
} else if (mKXApplication.mAlbumList.size() == 1) {
holder.delete.setVisibility(View.GONE);
}
holder.delete.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mKXApplication.mAlbumList.remove(position);
notifyDataSetChanged();
}
});
return convertView;
}
class ViewHolder {
ImageView image;
Button delete;
}
}
/**
* 权限对话框
*/
private void CompetenceDialog() {
AlertDialog.Builder builder = new Builder(PhotoShareActivity.this);
builder.setTitle("请选择图片权限");
builder.setAdapter(new CompetenceAdapter(),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mCompetencePosition = which;
mCompetence.setText(mCompetenceItems[which]);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
private class CompetenceAdapter extends BaseAdapter {
public int getCount() {
return mCompetenceItems.length;
}
public Object getItem(int position) {
return mCompetenceItems[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(PhotoShareActivity.this)
.inflate(R.layout.writerecord_activity_competence_item,
null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.writerecord_activity_competence_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.writerecord_activity_competence_item_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (mCompetencePosition == position) {
holder.icon.setVisibility(View.VISIBLE);
} else {
holder.icon.setVisibility(View.INVISIBLE);
}
holder.name.setText(mCompetenceItems[position]);
return convertView;
}
class ViewHolder {
ImageView icon;
TextView name;
}
}
protected void onDestroy() {
super.onDestroy();
mKXApplication.mAlbumList.clear();
}
}