package com.ztspeech.simutalk2.trans;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.Media;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import cn.ac.ia.directtrans.json.JsonRequestResult;
import cn.ac.ia.directtrans.json.JsonSetUserInfo;
import cn.ac.ia.files.RequestParam;
import com.ztspeech.simutalk2.R;
import com.ztspeech.simutalk2.data.UserInfo;
import com.ztspeech.simutalk2.dictionary.activity.BaseActivity;
import com.ztspeech.simutalk2.dictionary.util.LogInfo;
import com.ztspeech.simutalk2.dictionary.util.Util;
import com.ztspeech.simutalk2.net.ImageEngine;
import com.ztspeech.simutalk2.net.PostPackageEngine;
import com.ztspeech.simutalk2.net.ResultPackage;
public class SetHeadProtraitActivity extends BaseActivity {
private static final String TAG = "SetHeadProtraitActivity";
private final static String MIME_TYPE_IMAGE_PNG = "image/*";
// �ϴ�ͼƬ�������
private static int IMAGE_SIZE_WIDTH = 100;
// �ϴ�ͼƬ�����߶�
private static int IMAGE_SIZE_HEIGHT = 120;
private static final int PHOTOS_FROM_CAMERA = 0;
private static final int PHOTOS_FROM_IMAGE = 1;
private static final int PHOTOS_RESULt_HANDLE = 2;
private String imagePath = null;
private String curr = null;
private String cancelText;
private TextView nickName;
private Bitmap image = null;
// private File out;
private final String tempFileString = Util.IMG_CACHE_PATH + "temp001.png";
private final String CachePath = Util.IMG_CACHE_PATH;
private ImageView iv;
private String path = null;
private Uri seletedUri;
// private SharedPreferences headProtraitPreferences = null;
private UserInfo mUser = UserInfo.getInstanse();
private SetHeadProtraitActivityEngine mSetHeadProtraitActivityEngine;
private Context context;
private PostPackageEngine mPostPackageEngine;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
LogInfo.LogOut(TAG, "(String) msg.obj = " + (String) msg.obj);
setUserPhoto((String) msg.obj);
break;
case 1:
savePhoto((Bitmap) msg.obj);
break;
case 2:
LogInfo.LogOut(TAG, "�û�ȡ������");
Toast.makeText(context, "�û�ȡ������", Toast.LENGTH_LONG).show();
mSetHeadProtraitActivityEngine.dismissLoading();
break;
case 104:
mSetHeadProtraitActivityEngine.dismissLoading();
LogInfo.LogOutE("haitian", "AskQuestionActivity>>>>>>>>>>>>>>>>>>> dismissLoading");
break;
case 200:
postPackageCallBack((ResultPackage) msg.obj);
break;
case 404:
mSetHeadProtraitActivityEngine.dismissLoading();
Toast.makeText(context, (String) msg.obj, Toast.LENGTH_LONG).show();
LogInfo.LogOutE("haitian", ">>>>>>>>>>>>>>>>>--(String) msg.obj =" + (String) msg.obj);
break;
default:
break;
}
};
};
protected void onStart() {
super.onStart();
Util.isTmpFile = true;
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitleAndContentView(R.layout.head_protrait, "����ͷ��");
// setContentView(R.layout.head_protrait);
context = this;
mSetHeadProtraitActivityEngine = new SetHeadProtraitActivityEngine(context, handler);
iv = (ImageView) findViewById(R.id.iv);
nickName = (TextView) findViewById(R.id.nickName);
nickName.setText("�dzƣ�" + mUser.getUserName());
// out = new File(tempFileString);
// headProtraitPreferences = this.getSharedPreferences("userInfos",
// Context.MODE_PRIVATE);
// String tmpPath = headProtraitPreferences.getString("headImgPath",
// null);
String ImgId = UserInfo.state.photo;
// if (tmpPath != null) {
// image = BitmapFactory.decodeFile(tmpPath);
// if (image != null && ImgId != null) {
// iv.setImageBitmap(image);
// } else {
// ImageEngine.setImageBitmapScale(ImgId, iv,
// R.drawable.qa_you_qa_min_friend_head, -1);
// }
// } else {
// image = BitmapFactory.decodeFile(tempFileString);
// if (image != null && ImgId != null) {
// iv.setImageBitmap(image);
// } else {
Util.isTmpFile = true;
deletTempFile(Util.tmpFilePath);
ImageEngine.setImageBitmapScale(ImgId, iv, R.drawable.qa_you_qa_min_friend_head, -1);
// }
// }
}
public void selectImage(View view) {
showImageSelectedDiaolog();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
LogInfo.LogOutE("haitian", "requestCode =" + requestCode + " resultCode = " + resultCode);
if (resultCode == RESULT_CANCELED) {
} else if (resultCode == RESULT_OK) {
switch (requestCode) {
case PHOTOS_FROM_CAMERA:// �����
startPhotoCrop(imagePath);
break;
case PHOTOS_FROM_IMAGE: // ϵͳ���
seletedUri = data.getData();
ContentResolver cr = this.getContentResolver();
Cursor cursor = cr.query(seletedUri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex("_data"));
} else {
path = seletedUri.getPath();
}
startPhotoCrop(path);
break;
case PHOTOS_RESULt_HANDLE: // ���ú��ͼƬ
Log.e("haitian", "curr = " + curr);
saveCompressImg(curr);
break;
}
}
}
/**
* ָ��·����ͼƬ���вü�
*
* @param path
*/
private void startPhotoCrop(String imgPath) {
if (imgPath == null || "".equals(imgPath.trim())) {
Toast.makeText(this, "��Ч��ͼƬ·��..", 0).show();
return;
}
copyFile(imgPath, tempFileString);
curr = tempFileString;
Uri uri = Uri.fromFile(new File(curr));
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("output", uri);
startActivityForResult(intent, PHOTOS_RESULt_HANDLE);
}
private void freeImages() {
try {
if (image != null) {
image.recycle();
image = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void deletTempFile(String path) {
try {
if (path == null || "".equals(path.trim())) {
return;
}
File f = new File(path);
if (f.exists()) {
f.delete();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
deletTempFile(Util.tmpFilePath);
Util.isTmpFile = false;
freeImages();
}
/**
* ѡ����Ƭ�Ļ�ȡ��ʽ�Ի�����ᣬ����������ģ�
*
*/
private void showImageSelectedDiaolog() {
Context dialogContext = new ContextThemeWrapper(this, android.R.style.Theme_Light);
String[] SOURCE_ITEMS = { this.getString(R.string.takePhotos), this.getString(R.string.storage_image) };
cancelText = this.getString(R.string.CANCEL_Txt);
ListAdapter adapter = new ArrayAdapter<String>(dialogContext, android.R.layout.simple_list_item_1, SOURCE_ITEMS);
AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);
builder.setTitle(this.getString(R.string.image_select_title));
builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
getImage(which);
}
});
builder.setNegativeButton(cancelText, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_BACKSLASH) {
dialog.dismiss();
}
return true;
}
});
builder.create().show();
}
/**
* Ԥ���������������ȡͼƬ
*
* @param type
*/
private void getImage(int type) {
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
new AlertDialog.Builder(this).setTitle(getString(R.string.hint))
.setMessage(getString(R.string.unableToGetResource))
.setNegativeButton(getString(R.string.OK_Txt), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).show();
return;
}
switch (type) {
case PHOTOS_FROM_CAMERA:// �������
new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(Media.TITLE, filename);
Uri photoUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
imagePath = getRealPathFromURI(photoUri, getContentResolver());
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, PHOTOS_FROM_CAMERA);
}
}).start();
break;
case PHOTOS_FROM_IMAGE:// ͼ������
new Thread(new Runnable() {
@Override
public void run() {
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
try {
// ��ϵͳ��ͼ�� ��ȡһ��ͼƬ
// Intent intent = new
// Intent(Intent.ACTION_GET_CONTENT, null);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.addCategory("android.intent.category.DEFAULT");
intent.setType(MIME_TYPE_IMAGE_PNG);
startActivityForResult(intent, PHOTOS_FROM_IMAGE);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}).start();
break;
default:
break;
}
}
/**
* �Բü����ͼƬ����ѹ������
*
* @param path
*/
private void saveCompressImg(String path) {
File imgFile = new File(path);
File dir = new File(CachePath);
if (!dir.exists()) {
dir.mkdirs();
}
if (!imgFile.exists()) {
Toast.makeText(this, "��Ч��ͼƬ·��..", 0).show();
return;
}
compressFile(path);
}
/**
* ��ԭͼ���浽����
*
* @param url
* @param bitmap
*/
private String saveImg(Bitmap bitmap) {
FileOutputStream fileOutputStream = null;
try {
File temp = new File(tempFileString);
File dir = new File(CachePath);
if (!dir.exists()) {
dir.mkdirs();
}
if (temp.exists()) {
temp.delete();
temp.createNewFile();
}
fileOutputStream = new FileOutputStream(temp);
if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream)) {
fileOutputStream.flush();
}
return temp.getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
fileOutputStream = null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return null;
}
/**
* ���Ƶ����ļ�
*
* @param oldPath
* String ԭ�ļ�·�� �磺c:/fqf.txt
* @param newPath
* String ���ƺ�·�� �磺f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
// int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { // �ļ�����ʱ
InputStream inStream = new FileInputStream(oldPath); // ����ԭ�ļ�
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1024];
while ((byteread = inStream.read(buffer)) != -1) {
// bytesum += byteread; // �ֽ��� �ļ���С
// System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
System.out.println("���Ƶ����ļ���������");
e.printStackTrace();
}
}
/**
* ��InputStreamת��Ϊbyte[]
*
* @param in
* ������
* @return ����
*/
/*
* private static byte[] getData(InputStream in) { if (in == null) { return
* null; } ByteArrayOutputStream bs = new ByteArrayOutputStream(); byte[] b
* = new byte[1024]; int len = 0; try { while ((len = in.read(b, 0,
* b.length)) != -1) { bs.write(b, 0, len); } return bs.toByteArray(); }
* catch (Exception e) { e.printStackTrace(); } return null; }
*/
private static String getRealPathFromURI(Uri uri, ContentResolver resolver) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = resolver.query(uri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String str = cursor.getString(column_index);
cursor.close();
return str;
}
private void compressFile(final String filepath) {
AsyncTask<String, String, Bitmap> compressFile = new AsyncTask<String, String, Bitmap>() {
@Override
protected void onPreExecute() {
}
@Override
protected Bitmap doInBackground(String... params) {
BitmapFactory.Options bmfoptions = new BitmapFactory.Options();
bmfoptions.inSampleSize = 1;
bmfoptions.inJustDecodeBounds = true;
image = BitmapFactory.decodeFile(filepath, bmfoptions);
freeBitmap(image);
if (bmfoptions.outWidth > IMAGE_SIZE_WIDTH || bmfoptions.outHeight > IMAGE_SIZE_HEIGHT) {
// ����ͼƬ�ijߴ�
float scaleWidth = (float) IMAGE_SIZE_WIDTH / bmfoptions.outWidth; // ���̶���С����
float scaleHeight = (float) IMAGE_SIZE_HEIGHT / bmfoptions.outHeight; // ���̶���С����
Matrix matrix = new Matrix();
if (scaleWidth > scaleHeight && scaleWidth > 1) {
scaleHeight = scaleWidth;
}
if (scaleHeight > scaleWidth && scaleHeight > 1) {
scaleWidth = scaleHeight;
}
matrix.postScale(scaleWidth, scaleHeight);
image = BitmapFactory.decodeFile(filepath);
// ��������Bitmap����
Bitmap resizeBitmap = Bitmap.createBitmap(image, 0, 0, bmfoptions.outWidth, bmfoptions.outHeight,
matrix, false);
freeBitmap(image);
image = resizeBitmap;
// saveImg(image);
} else {
image = BitmapFactory.decodeFile(filepath);
}
deletTempFile(filepath);
handler.sendMessage(Message.obtain(handler, 1, image));
return image;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
// iv.setImageBitmap(image);
mediaMount();
}
}
};
compressFile.execute();
}
private void mediaMount() {
// ģ��ϵͳ����һ�� sd�����صĹ㲥
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.parse("file:" + Environment.getExternalStorageDirectory().getAbsolutePath()));
sendBroadcast(intent);
}
/**
* ������Ƭ��������
*
* @param bm
* @return
*/
private String mUserPhotoId = "";
private boolean savePhoto(Bitmap bm) {
ByteArrayOutputStream data = new ByteArrayOutputStream(10240);
if (false == bm.compress(Bitmap.CompressFormat.PNG, 100, data)) {
return false;
}
// AsyncHttpPost post = new AsyncHttpPost(new AsyncHttpPostLisenter() {
//
// @Override
// public void onData(String fileId) {
// if (fileId == null) {
// WaitingActivity.stop();
// return;
// }
// path = Util.IMG_CACHE_PATH + fileId + ".png";
// headProtraitPreferences.edit().putString("headImgPath",
// path).commit();
// setUserPhoto(fileId);
// }
//
// @Override
// public void onBegin() {
// WaitingActivity.waiting(SetHeadProtraitActivity.this, 0);
// }
//
// @Override
// public void onEnd() {
//
// }
//
// });
// post.setHost(getString(R.string.file_host_ip), UserInfo.appId,
// UserInfo.state.id + "");
// post.postVoice(data.toByteArray(), RequestParam.FILE_TYPE_PHOTO);
Util.isTmpFile = true;
mSetHeadProtraitActivityEngine.httpRequestPostNewThread(data.toByteArray(), RequestParam.FILE_TYPE_PHOTO);
return true;
}
private void postPackageCallBack(ResultPackage result) {
if (result.isNetSucceed()) {
JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson());
if (ret != null) {
if (ret.succeed == true) {
UserInfo.getInstanse().setPhoto(mUserPhotoId);
if (image != null) {
iv.setImageBitmap(image);
}
} else {
new AlertDialog.Builder(SetHeadProtraitActivity.this).setTitle("��ʾ").setMessage(ret.explain)
.setPositiveButton("ȷ��", null).show();
}
deletTempFile(curr);
}
}
}
/**
*
*/
// public IHttpPostListener mSetUserPhotoListener = new IHttpPostListener()
// {
//
// @Override
// public void onNetPostResult(PostPackage owner, ResultPackage result) {
//
// if (result.isNetSucceed()) {
//
// JsonRequestResult ret = JsonRequestResult.fromJson(result.getJson());
// if (ret != null) {
// if (ret.succeed == true) {
//
// UserInfo.getInstanse().setPhoto(mUserPhotoId);
// } else {
// new
// AlertDialog.Builder(SetHeadProtraitActivity.this).setTitle("��ʾ").setMessage(ret.explain)
// .setPositiveButton("ȷ��", null).show();
// }
// }
// }
//
// WaitingActivity.stop();
// }
// };
/**
* ���·������û���Ƭ
*
* @param fileId
*/
protected void setUserPhoto(String fileId) {
// PostPackage post = new PostPackage(this, mSetUserPhotoListener);
Util.isTmpFile = false;
deletTempFile(Util.tmpFilePath);
JsonSetUserInfo info = new JsonSetUserInfo();
info.setUserPhoto(fileId);
mUserPhotoId = fileId;
mPostPackageEngine = new PostPackageEngine(context, info, handler);
mPostPackageEngine.post();
handler.sendEmptyMessage(104);
// if (post.post(info, true)) {
//
// } else {
// WaitingActivity.stop();
// }
}
/**
* ��ijbitmap�ͷŵ�
*/
private void freeBitmap(Bitmap bitmap) {
try {
if (bitmap != null) {
bitmap.recycle();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}