package com.kaixin.android.activity;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONArray;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
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.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
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.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.common.KaiXinAddress;
import com.kaixin.android.result.LocationResult;
import com.kaixin.android.utils.ActivityForResultUtil;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.HttpAssist;
import com.kaixin.android.utils.MessageUtil;
import com.kaixin.android.utils.StringUtil;
import com.kaixin.android.utils.TextUtil;
/**
* 写记录类
*
* @author gyz
*
*/
public class WriteRecordActivity extends KXActivity {
private LinearLayout mParent;
private Button mCancel;
private Button mSubmit;
private EditText mContent;
private Button mLocation;
private Button mPicture;
private ImageButton mFaceButton;
private ImageButton mPhotoButton;
private ImageButton mLocationButton;
private ImageButton mAtButton;
private TextView mCompetence;
private int mLocationPosition;// 当前选择的地理位置在列表的位置
private boolean mLocationIsShowing = true;// 当前是否显示地理位置
private String[] mCompetenceItems = new String[] { "任何人可见",
"仅关注人可见", "仅自己可见" };// 权限名称
private int mCompetencePosition = 1;// 当前选择的权限在列表中的位置
private String mPhotoPath;// 上传的图片路径
private boolean mPictureIsExist = false;// 是否上传图片
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.writerecord_activity);
findViewById();
setListener();
init();
}
private void findViewById() {
mParent = (LinearLayout) findViewById(R.id.writerecord_parent);
mCancel = (Button) findViewById(R.id.writerecord_cannel);
mSubmit = (Button) findViewById(R.id.writerecord_submit);
mContent = (EditText) findViewById(R.id.writerecord_content);
mLocation = (Button) findViewById(R.id.writerecord_location);
mPicture = (Button) findViewById(R.id.writerecord_picture);
mFaceButton = (ImageButton) findViewById(R.id.writerecord_face_button);
mPhotoButton = (ImageButton) findViewById(R.id.writerecord_photo_button);
mLocationButton = (ImageButton) findViewById(R.id.writerecord_location_button);
mAtButton = (ImageButton) findViewById(R.id.writerecord_at_button);
mCompetence = (TextView) findViewById(R.id.writerecord_competence);
}
private void setListener() {
mCancel.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// 关闭当前界面
finish();
}
});
mSubmit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 获取当前输入框内容
String content = mContent.getText().toString().trim();
// 内容为空时显示提示对话框,不为空则返回更新信息
if (TextUtils.isEmpty(content)) {
// 显示提示对话框
new AlertDialog.Builder(WriteRecordActivity.this)
.setTitle("OOXX")
.setIcon(android.R.drawable.ic_dialog_alert)
.setMessage("记录信息不能为空")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int which) {
dialog.dismiss();
}
}).create().show();
} else {
if(!StringUtil.isNull(mPhotoPath)){
new UploadImageTask().execute();
}else{
if(content.length() > 5){
CallService.writeDiary(content.substring(0, 4), content, mCompetencePosition);
}else{
CallService.writeDiary(content, content, mCompetencePosition);
}
}
// 显示提示信息并关闭当前界面
MessageUtil.showImgMsg(mKXApplication, "发布成功,+10");
finish();
}
}
});
mLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 地理位置对话框
locationDialog();
}
});
mPicture.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 跳转到删除图片
Intent intent = new Intent();
intent.setClass(WriteRecordActivity.this,
DeletePhotoActivity.class);
intent.putExtra("path", mPhotoPath);
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_WRITERECORD_DELETE_PHOTO);
}
});
mFaceButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 显示表情对话框
showFace(mParent);
}
});
mFaceGridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 获取当前光标所在位置
int currentPosition = mContent.getSelectionStart();
// 添加含有表情的文本
mContent.setText(new TextUtil(mKXApplication).replace(mContent
.getText().insert(currentPosition,
mKXApplication.mFacesText.get(position))));
// 关闭表情对话框
dismissFace();
}
});
mFaceClose.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭表情对话框
dismissFace();
}
});
mPhotoButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 判断是否已经添加图片,如果添加则提示消息否则则显示图片对话框
if (mPictureIsExist) {
Toast.makeText(WriteRecordActivity.this, "最多只能添加一张图片",
Toast.LENGTH_SHORT).show();
} else {
// 图片对话框
PhotoDialog();
}
}
});
mLocationButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 根据地理位置显示状态,显示或隐藏,并修改图标
if (mLocationIsShowing) {
mLocationIsShowing = false;
mLocation.setVisibility(View.GONE);
mLocationButton
.setImageResource(R.drawable.write_function_location_button);
} else {
mLocationIsShowing = true;
mLocation.setVisibility(View.VISIBLE);
mLocationButton
.setImageResource(R.drawable.write_function_locationremove_button);
}
}
});
mAtButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(WriteRecordActivity.this, "暂时不支持@功能",
Toast.LENGTH_SHORT).show();
}
});
mCompetence.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 权限对话框
CompetenceDialog();
}
});
}
private ProgressDialog dialog;
class UploadImageTask extends AsyncTask<Integer, String, String>{
@Override
protected String doInBackground(Integer... params) {
// CallService.uploadImage(mAlbums.get(mAlbumPosition).getId(), date.toString(), baos.toByteArray());
try {
Date date = new Date(new java.util.Date().getTime());
Map<String, String> m = new HashMap<String, String>();
m.put("username", CallService.getUsername());
m.put("albumId", "0");
m.put("content", mContent.getText().toString());
m.put("messageTime", date.toString());
HttpAssist.uploadFile(mPhotoPath, m);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// 显示提示信息并关闭当前界面
Toast.makeText(WriteRecordActivity.this, "上传记录成功",
Toast.LENGTH_SHORT).show();
if(dialog.isShowing()){
dialog.dismiss();
}
WriteRecordActivity.this.finish();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.show();
}
}
private void init() {
// 获取地理位置数据
getLocation();
// 初始化显示数据
mLocation.setText(mKXApplication.mMyLocationResults.get(0).getName());
mCompetence.setText(mCompetenceItems[mCompetencePosition]);
}
/**
* 获取地理位置
*/
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 PhotoDialog() {
AlertDialog.Builder builder = new Builder(WriteRecordActivity.this);
builder.setTitle("插入照片");
builder.setItems(new String[] { "拍照上传", "上传手机中的照片" },
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
switch (which) {
case 0:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File dir = new File(KaiXinAddress.SDCARED_CAMERA);
if (!dir.exists()) {
dir.mkdirs();
}
mPhotoPath = KaiXinAddress.SDCARED_CAMERA
+ UUID.randomUUID().toString();
File file = new File(mPhotoPath);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
}
}
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(file));
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_CAMERA);
break;
case 1:
intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_LOCATION);
break;
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.create().show();
}
/**
* 地理位置对话框
*/
private void locationDialog() {
AlertDialog.Builder builder = new Builder(WriteRecordActivity.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 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(WriteRecordActivity.this)
.inflate(R.layout.writerecord_activity_location_item,
null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.writerecord_activity_location_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.writerecord_activity_location_item_name);
holder.location = (TextView) convertView
.findViewById(R.id.writerecord_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 void CompetenceDialog() {
AlertDialog.Builder builder = new Builder(WriteRecordActivity.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(WriteRecordActivity.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 onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_CAMERA:
if (resultCode == RESULT_OK) {
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent();
intent.setClass(WriteRecordActivity.this,
ImageFilterActivity.class);
intent.putExtra("path", mPhotoPath);
intent.putExtra("isSetResult", true);
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_WRITERECORD_CHANGE_PHOTO);
} else {
Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show();
}
break;
case ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_LOCATION:
Uri uri = null;
if (data == null) {
Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show();
return;
}
if (resultCode == RESULT_OK) {
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show();
return;
}
uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, proj, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.getCount() > 0 && cursor.moveToFirst()) {
mPhotoPath = cursor.getString(column_index);
Intent intent = new Intent();
intent.setClass(WriteRecordActivity.this,
ImageFilterActivity.class);
intent.putExtra("path", mPhotoPath);
intent.putExtra("isSetResult", true);
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_WRITERECORD_CHANGE_PHOTO);
}
}
} else {
Toast.makeText(this, "照片获取失败", Toast.LENGTH_SHORT).show();
}
break;
case ActivityForResultUtil.REQUESTCODE_WRITERECORD_CHANGE_PHOTO:
if (resultCode == RESULT_OK) {
mPhotoPath = data.getStringExtra("path");
mPicture.setVisibility(View.VISIBLE);
mPictureIsExist = true;
}
break;
case ActivityForResultUtil.REQUESTCODE_WRITERECORD_DELETE_PHOTO:
if (resultCode == RESULT_OK) {
mPicture.setVisibility(View.GONE);
mPictureIsExist = false;
}
break;
}
}
}