package com.talk.demo.setting;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.talk.demo.R;
import com.talk.demo.util.NetworkUtilities;
import com.talk.demo.util.TalkUtil;
import java.io.File;
public class SelectAvatarActivity extends Activity implements OnClickListener{
private static String TAG = "SelectAvatarActivity";
private String account_name = null;
private File tempFile = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.change_avatar);
Bundle bundle = getIntent().getExtras();
account_name = bundle.getString("account");
tempFile = new File(Environment.getExternalStorageDirectory(),
account_name);
Button photoBtn = (Button)findViewById(R.id.change_dialog_take_photo);
photoBtn.setOnClickListener(this);
Button galleryBtn = (Button)findViewById(R.id.change_dialog_take_gallery);
galleryBtn.setOnClickListener(this);
Button cancelBtn = (Button)findViewById(R.id.change_dialog_take_cancel);
cancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.change_dialog_take_photo:
Log.d(TAG, "send to photo");
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
startActivityForResult(takePictureIntent, TalkUtil.REQUEST_IMAGE_CAPTURE_CROP);
}
break;
case R.id.change_dialog_take_gallery:
Log.d(TAG, "send to gallery");
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), TalkUtil.REQUEST_SELECT_PICTURE);
break;
default:
break;
}
}
private void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// crop为true是设置在开启的intent中设置显示的view可以剪裁
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX,outputY 是剪裁图片的宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, TalkUtil.REQUEST_PHOTO_CROPPER);
}
private void uploadAvatarServer(String path) {
NetworkUtilities.addAvatar(path, account_name);
}
private class syncAvatarTask extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... params) {
uploadAvatarServer(params[0]);
return null;
}
@Override
protected void onPostExecute(Integer e) {
}
@Override
protected void onCancelled() {
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "got the return :"+requestCode+" :"+resultCode);
switch(requestCode) {
case TalkUtil.REQUEST_IMAGE_CAPTURE_CROP:
if (resultCode == RESULT_OK) {
/*
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
String fileName = account_name;
TalkUtil.createDirAndSaveFile(imageBitmap, fileName);
//TODO: upload to server
AvatarDrawableFactory avatarDrawableFactory = new AvatarDrawableFactory(getResources());
Drawable roundedAvatarDrawable = avatarDrawableFactory.getRoundedAvatarDrawable(imageBitmap);
user_avatar.setImageDrawable(roundedAvatarDrawable);
*/
if(null == tempFile) {
tempFile = new File(Environment.getExternalStorageDirectory(),
account_name);
}
startPhotoZoom(Uri.fromFile(tempFile));
}
break;
case TalkUtil.REQUEST_SELECT_PICTURE:
if (resultCode == RESULT_OK) {
if(data != null ) {
Uri selectedImageUri = data.getData();
startPhotoZoom(selectedImageUri);
}
}
break;
case TalkUtil.REQUEST_PHOTO_CROPPER:// 返回的结果
if (resultCode == RESULT_OK) {
if(data != null ) {
Bundle bundle = data.getExtras();
if (bundle != null) {
Bitmap imageBitmap = bundle.getParcelable("data");
String fileName = account_name;
String resultPath = TalkUtil.createDirAndSaveFile(imageBitmap, fileName);
new syncAvatarTask().execute(resultPath);
Intent resIntent = new Intent();
setResult(RESULT_OK, resIntent);
finish();
}
}
}
break;
}
}
}