package com.parttime.mine;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.carson.constant.ConstantForSaveList;
import com.google.gson.Gson;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.parttime.base.LocalInitActivity;
import com.parttime.base.WithTitleActivity;
import com.parttime.common.Image.ContactImageLoader;
import com.parttime.constants.SharedPreferenceConstants;
import com.parttime.main.MainTabActivity;
import com.parttime.net.BaseRequest;
import com.parttime.net.Callback;
import com.parttime.net.ErrorHandler;
import com.parttime.pojo.AccountInfo;
import com.parttime.type.AccountType;
import com.parttime.utils.SharePreferenceUtil;
import com.parttime.widget.CountingEditText;
import com.parttime.widget.SelectLayout;
import com.qingmu.jianzhidaren.R;
import com.quark.common.Url;
import com.quark.image.UploadImg;
import com.quark.utils.Util;
import com.quark.volley.VolleySington;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by cjz on 2015/7/12.
*/
public class EditMyIntroActivity extends LocalInitActivity {
private static final String IMAGE_FILE_NAME = "faceImage.jpg";
private static final int IMAGE_REQUEST_CODE = 0;
private static final int CAMERA_REQUEST_CODE = 1;
private static final int RESULT_REQUEST_CODE = 2;
private FrameLayout flLeft;
private FrameLayout flRight;
private TextView tvCenter;
@ViewInject(R.id.cet_intro)
private CountingEditText cetIntro;
@ViewInject(R.id.sl_work_types)
private SelectLayout slWorkTypes;
@ViewInject(R.id.iv_head_image)
private ImageView ivHead;
@ViewInject(R.id.tv_work_types_title)
private TextView tvWorkTypeTitle;
private Bitmap userPhotoBmp = null;
// private String userId;
private int userType;
private Bitmap head;
// private List<Object> workTypes;
// private String[] workTypes;
private List<String> workTypes = new ArrayList<>();
AccountInfo accountInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
// loadLocalData();
setContentView(R.layout.activity_edit_my_intro);
super.onCreate(savedInstanceState);
loadData();
}
@Override
protected void initViews(){
left(TextView.class, R.string.back);
right(TextView.class, R.string.preview, new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(EditMyIntroActivity.this, PreviewMyIntroActivity.class);
intent.putExtra(PreviewMyIntroActivity.EXTRA_ACCOUNT_INFO, accountInfo);
startActivity(intent);
}
});
center(R.string.edit_intro);
ViewUtils.inject(this);
if(head != null) {
ivHead.setImageBitmap(head);
}
checkWhetherAgent();
}
private void checkWhetherAgent(){
if(userType == AccountType.AGENT){
tvWorkTypeTitle.setVisibility(View.VISIBLE);
slWorkTypes.setVisibility(View.VISIBLE);
}
initWorkTypes();
}
@Override
protected ViewGroup getLeftWrapper() {
return null;
}
@Override
protected ViewGroup getRightWrapper() {
return null;
}
@Override
protected TextView getCenter() {
return null;
}
@Override
protected void loadLocalData(){
super.loadLocalData();
// userId = SharePreferenceUtil.getInstance(this).loadStringSharedPreference("userId");
userType = getUserType();
head = ContactImageLoader.get(getCompanyId());
}
protected void loadData(){
Map<String, String> params = new HashMap<>();
params.put("company_id", getCompanyId());
new BaseRequest().request(Url.COMPANY_SHOW_INTRO, params, VolleySington.getInstance().getRequestQueue(), new Callback() {
@Override
public void success(Object obj) throws JSONException {
JSONObject json = (JSONObject) obj;
JSONObject companyInfo = json.getJSONObject("companyInfo");
accountInfo = new Gson().fromJson(companyInfo.toString(), AccountInfo.class);
updateViews();
}
@Override
public void failed(Object obj) {
new ErrorHandler(EditMyIntroActivity.this, obj).showToast();
}
});
}
private void updateViews(){
cetIntro.setText(accountInfo.introduction);
checkWhetherAgent();
if(accountInfo.type == AccountType.AGENT && accountInfo.hire_type != null) {
String[] split = accountInfo.hire_type.split("/");
if (split != null) {
int index;
for (String s : split) {
index = workTypes.indexOf(s);
if (index != -1) {
slWorkTypes.setSelected(true, index);
}
}
}
}
}
protected void initWorkTypes(){
if(userType == AccountType.AGENT){
String[] stringArray = getResources().getStringArray(R.array.work_types);
List<String> strings = Arrays.asList(stringArray);
workTypes.clear();
workTypes.addAll(strings);
slWorkTypes.removeAllViews();
for(String wt : workTypes){
slWorkTypes.add(wt);
}
}
}
@OnClick(R.id.btn_finish)
public void submit(View v){
showWait(true);
Map<String, String> params = new HashMap<>() ;
params.put("company_id", getCompanyId());
params.put("introduction", cetIntro.getText().toString());
if(userType == AccountType.AGENT){
params.put("hire_type", makeWorkTypesString());
}
new BaseRequest().request(Url.COMPANY_UPDATE_INTRO, params, VolleySington.getInstance().getRequestQueue(), new Callback() {
@Override
public void success(Object obj) {
showWait(false);
finish();
}
@Override
public void failed(Object obj) {
showWait(false);
new ErrorHandler(EditMyIntroActivity.this, obj).showToast();
}
});
}
private String makeWorkTypesString(){
List<String> selectedValues = slWorkTypes.getSelectedValues();
if(selectedValues != null){
StringBuilder sb = new StringBuilder();
int index = 0;
for(String s : selectedValues){
if(index++ > 0){
sb.append("/");
}
sb.append(s);
}
return sb.toString();
}else {
return null;
}
}
@OnClick(R.id.iv_head_image)
public void uploadPhoto(View v){
showSheetPic();
}
public Dialog showSheetPic() {
final Dialog dlg = new Dialog(this, R.style.ActionSheet);
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = (LinearLayout) inflater.inflate(
R.layout.actionsheet, null);
final int cFullFillWidth = 10000;
layout.setMinimumWidth(cFullFillWidth);
TextView mContent = (TextView) layout.findViewById(R.id.content);//
// 拍照上传
TextView mCancel = (TextView) layout.findViewById(R.id.cancel);
TextView mTitle = (TextView) layout.findViewById(R.id.title);// 相册中选择
mContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentFromCapture = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
if (Util.hasSdcard()) {
File s = Environment.getExternalStorageDirectory();
intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(),
IMAGE_FILE_NAME)));
} else {
Toast mToast = Toast.makeText(EditMyIntroActivity.this,
"未找到存储卡,无法存储照片!", Toast.LENGTH_LONG);
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show();
}
startActivityForResult(intentFromCapture, CAMERA_REQUEST_CODE);
dlg.dismiss();
}
});
mTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentFromGallery = new Intent();
intentFromGallery.setType("image/*"); // 设置文件类型
intentFromGallery.setAction(Intent.ACTION_PICK);
startActivityForResult(intentFromGallery, IMAGE_REQUEST_CODE);
dlg.dismiss();
}
});
mCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dlg.dismiss();
}
});
Window w = dlg.getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.x = 0;
final int cMakeBottom = -1000;
lp.y = cMakeBottom;
lp.gravity = Gravity.BOTTOM;
dlg.onWindowAttributesChanged(lp);
dlg.setCanceledOnTouchOutside(false);
dlg.setContentView(layout);
dlg.show();
return dlg;
}
private void afterGetPhoto(Intent data){
if (data.getData() != null) {
startPhotoZoom(data.getData(), 300, 300);
} else {
Toast mToast = Toast.makeText(this, "获取图片失败。。。",
Toast.LENGTH_LONG);
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show();
}
}
private void afterTakePhoto(Intent data){
if (Util.hasSdcard()) {
File tempFile = new File(
Environment.getExternalStorageDirectory() + "/"
+ IMAGE_FILE_NAME);
//
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
userPhotoBmp = BitmapFactory.decodeFile(
Environment.getExternalStorageDirectory() + "/"
+ IMAGE_FILE_NAME, opt);
// 获取到这个图片的原始宽度和高度
int picWidth = opt.outWidth;
int picHeight = opt.outHeight;
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
opt.inSampleSize = 2;
if (picWidth > picHeight) {
if (picWidth > screenWidth)
opt.inSampleSize = picWidth / screenWidth;
} else {
if (picHeight > screenHeight)
opt.inSampleSize = picHeight / screenHeight;
}
int degree = getBitmapDegree(Environment
.getExternalStorageDirectory()
+ "/"
+ IMAGE_FILE_NAME);
opt.inJustDecodeBounds = false;
userPhotoBmp = BitmapFactory.decodeFile(
Environment.getExternalStorageDirectory() + "/"
+ IMAGE_FILE_NAME, opt);
userPhotoBmp = rotateBitmapByDegree(userPhotoBmp, degree);
Uri tt_uri = null;
try {
// tt_uri =
// Uri.parse(MediaStore.Images.Media.insertImage(
// getActivity().getContentResolver(),
// Environment.getExternalStorageDirectory() + "/"
// + IMAGE_FILE_NAME, null, null));
tt_uri = Uri.parse(MediaStore.Images.Media.insertImage(
getContentResolver(),
userPhotoBmp, null, null));
} catch (Exception e) {
e.printStackTrace();
tt_uri = Uri.fromFile(tempFile);
}
if (tt_uri != null) {
startPhotoZoom(tt_uri, 300, 300);
} else {
Toast mToast = Toast.makeText(this,
"未找到存储卡,无法存储照片!", Toast.LENGTH_LONG);
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show();
}
} else {
Toast mToast = Toast.makeText(this,
"未找到存储卡,无法存储照片!", Toast.LENGTH_LONG);
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show();
}
}
/**
* 读取图片的旋转的角度
*
* @param path
* 图片绝对路径
* @return 图片的旋转角度
*/
private int getBitmapDegree(String path) {
int degree = 0;
try {
// 从指定路径下读取图片,并获取其EXIF信息
ExifInterface exifInterface = new ExifInterface(path);
// 获取图片的旋转信息
int orientation = exifInterface.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
/**
* 将图片按照某个角度进行旋转
*
* @param bm
* 需要旋转的图片
* @param degree
* 旋转角度
* @return 旋转后的图片
*/
private Bitmap rotateBitmapByDegree(Bitmap bm, int degree) {
Bitmap returnBm = null;
// 根据旋转角度,生成旋转矩阵
Matrix matrix = new Matrix();
matrix.postRotate(degree);
try {
// 将原始图片按照旋转矩阵进行旋转,并得到新的图片
returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
bm.getHeight(), matrix, true);
} catch (OutOfMemoryError e) {
}
if (returnBm == null) {
returnBm = bm;
}
if (bm != returnBm) {
bm.recycle();
}
return returnBm;
}
/**
* 裁剪图片方法实现
*
* @param uri
*/
public void startPhotoZoom(Uri uri, int x, int y) {
ConstantForSaveList.uploadUri = uri;// 暂时存储uri 如htc不能保存uri
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", x);
intent.putExtra("aspectY", y);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", x);
intent.putExtra("outputY", y);
intent.putExtra("noFaceDetection", true);// 取消人脸识别
intent.putExtra("return-data", false);
startActivityForResult(intent, RESULT_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode != Activity.RESULT_OK){
return;
}
switch (requestCode){
case IMAGE_REQUEST_CODE:
afterGetPhoto(data);
break;
case CAMERA_REQUEST_CODE:
afterTakePhoto(data);
break;
case RESULT_REQUEST_CODE:
if (data != null) {
Toast mToast = Toast.makeText(this, R.string.wait_while_uploading_avatar,
Toast.LENGTH_LONG);
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show();
String uploadAvatarUrl = Url.COMPANY_upload_avatar + "?token="
+ MainTabActivity.token;
UploadImg.getImageToView(this, data,
ivHead, uploadAvatarUrl, null, null,
null, "avatar", null, "company_id", getCompanyId(),
null, null);
}
break;
}
}
}