package com.miris.ui.activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.media.ExifInterface; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.animation.OvershootInterpolator; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.miris.R; import com.miris.net.MemberListData; import com.miris.net.SessionPreferences; import com.miris.ui.utils.CircleTransformation; import com.miris.ui.utils.DisplayUtil; import com.miris.ui.view.FloatLabeledEditText; import com.parse.GetCallback; import com.parse.GetDataCallback; import com.parse.ParseException; import com.parse.ParseFile; import com.parse.ParseObject; import com.parse.ParseQuery; import com.parse.SaveCallback; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import butterknife.InjectView; import butterknife.OnClick; import butterknife.Optional; /** * Created by Miris on 09.02.15. */ public class MyinfoActivity extends BaseActivity { @InjectView(R.id.ivUserProfilePhoto) ImageView ivUserProfilePhoto; @InjectView(R.id.user_id) EditText user_id; @InjectView(R.id.user_name) EditText user_name; @InjectView(R.id.user_email) EditText user_email; @InjectView(R.id.user_number) EditText user_number; @InjectView(R.id.user_age) EditText user_age; @InjectView(R.id.user_rank) EditText user_rank; @InjectView(R.id.btn_cancel) Button btn_cancel; @InjectView(R.id.btn_ok) Button btn_ok; @InjectView(R.id.user_id_hint) FloatLabeledEditText user_id_hint; @InjectView(R.id.user_name_hint) FloatLabeledEditText user_name_hint; @InjectView(R.id.user_email_hint) FloatLabeledEditText user_email_hint; @InjectView(R.id.user_number_hint) FloatLabeledEditText user_number_hint; @InjectView(R.id.user_age_hint) FloatLabeledEditText user_age_hint; @InjectView(R.id.user_rank_hint) FloatLabeledEditText user_rank_hint; private Uri photoUri = null; ProgressDialog myLoadingDialog; List<ParseObject> ob; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_myinfo); session = new SessionPreferences(getApplicationContext()); toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); try { intView(); } catch (FileNotFoundException e) { e.printStackTrace(); } ivUserProfilePhoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent clsIntent = new Intent(Intent.ACTION_PICK); clsIntent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE); clsIntent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(clsIntent, 100); } }); } private void intView() throws FileNotFoundException { if (memberData.get(0).getuserImgurl() == null) { Picasso.with(getApplicationContext()) .load(memberData.get(0).getinforimgfile()) .placeholder(R.drawable.img_circle_placeholder) .resize(getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size), getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size)) .centerCrop() .transform(new CircleTransformation()) .into(ivUserProfilePhoto, new Callback() { @Override public void onSuccess() { ivUserProfilePhoto.animate() .scaleX(1.f).scaleY(1.f) .setInterpolator(new OvershootInterpolator()) .setDuration(400) .setStartDelay(200) .start(); } @Override public void onError() { } }); } else { Picasso.with(getApplicationContext()) .load(memberData.get(0).getuserImgurl()) .placeholder(R.drawable.img_circle_placeholder) .resize(getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size), getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size)) .centerCrop() .transform(new CircleTransformation()) .into(ivUserProfilePhoto, new Callback() { @Override public void onSuccess() { ivUserProfilePhoto.animate() .scaleX(1.f).scaleY(1.f) .setInterpolator(new OvershootInterpolator()) .setDuration(400) .setStartDelay(200) .start(); } @Override public void onError() { } }); } user_id_hint.setHint("아이디 : " + memberData.get(0).getuserId() + " (*수정불가)"); user_id.setFocusable(false); user_name_hint.setHint("이름 : " + memberData.get(0).getuser_name()); user_email_hint.setHint("이메일 : " + memberData.get(0).getuser_email()); user_number_hint.setHint("연락처 : " + memberData.get(0).getuser_phonenumber()); user_age_hint.setHint("나이 : " + memberData.get(0).getuser_age()); user_rank_hint.setHint("직급 : " + memberData.get(0).getuser_rank()); } protected void onActivityResult( int requestCode, int resultCode, Intent data ) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK) { if(requestCode == 100) { Uri uri = data.getData(); photoUri = uri; Picasso.with(getApplicationContext()) .load(uri) .placeholder(R.drawable.img_circle_placeholder) .resize(getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size), getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size)) .centerCrop() .transform(new CircleTransformation()) .into(ivUserProfilePhoto, new Callback() { @Override public void onSuccess() { ivUserProfilePhoto.animate() .scaleX(1.f).scaleY(1.f) .setInterpolator(new OvershootInterpolator()) .setDuration(400) .setStartDelay(200) .start(); } @Override public void onError() { } }); } else { super.onActivityResult(requestCode, resultCode, data); } } } @Optional @OnClick(R.id.btn_cancel) public void onbtn_cancelClick(final View v) { finish(); overridePendingTransition(0, 0); } private void showDialog() { myLoadingDialog = new ProgressDialog(MyinfoActivity.this); myLoadingDialog.setMessage(getString(R.string.show_lodingbar)); myLoadingDialog.setIndeterminate(false); myLoadingDialog.setCancelable(false); myLoadingDialog.show(); } @Optional @OnClick(R.id.btn_ok) public void onibtn_okClick(final View v) { boolean checkVal = checkFeild(); if (checkVal) { showDialog(); new modifyTask().execute(); } } class modifyTask extends AsyncTask<Void, Void, Void> { final String[] input_user_name = {""}; final String[] input_user_email = {""}; final String[] input_user_number = {""}; final String[] input_user_age = {""}; final String[] input_user_rank = {""}; @Override protected Void doInBackground(Void... arg0) { ParseQuery<ParseObject> offerQuery = ParseQuery.getQuery("miris_member"); offerQuery.whereEqualTo("user_id", memberData.get(0).getuserId()); offerQuery.whereEqualTo("user_password", memberData.get(0).getuser_password()); offerQuery.getFirstInBackground(new GetCallback<ParseObject>() { @Override public void done(ParseObject parseObject, ParseException e) { if (e == null) { if (photoUri != null) { ParseFile file = null; try { file = new ParseFile("user_img.png", readBytes(photoUri)); } catch (IOException e1) { e1.printStackTrace(); } parseObject.put("user_img", file); } input_user_name[0] = user_name.getText().toString(); if (input_user_name[0] == null || "".equals(input_user_name[0])) { input_user_name[0] = memberData.get(0).getuser_name(); } input_user_email[0] = user_email.getText().toString(); if (input_user_email[0] == null || "".equals(input_user_email[0])) { input_user_email[0] = memberData.get(0).getuser_email(); } input_user_number[0] = user_number.getText().toString(); if (input_user_number[0] == null || "".equals(input_user_number[0])) { input_user_number[0] = memberData.get(0).getuser_phonenumber(); } input_user_age[0] = user_age.getText().toString(); if (input_user_age[0] == null || "".equals(input_user_age[0])) { input_user_age[0] = memberData.get(0).getuser_age(); } input_user_rank[0] = user_rank.getText().toString(); if (input_user_rank[0] == null || "".equals(input_user_rank[0])) { input_user_rank[0] = memberData.get(0).getuser_rank(); } parseObject.put("user_name", input_user_name[0]); parseObject.put("user_email", input_user_email[0]); parseObject.put("user_phonenumber", input_user_number[0]); parseObject.put("user_age", input_user_age[0]); parseObject.put("user_rank", input_user_rank[0]); parseObject.saveInBackground(); parseObject.saveInBackground(new SaveCallback() { @Override public void done(ParseException e) { if (e == null) { ParseQuery<ParseObject> loginQuery = ParseQuery.getQuery("miris_member"); loginQuery.whereEqualTo("user_id", memberData.get(0).getuserId()); loginQuery.whereEqualTo("user_password", memberData.get(0).getuser_password()); loginQuery.getFirstInBackground(new GetCallback<ParseObject>() { @Override public void done(final ParseObject mamberparseObject, ParseException e) { memberData.clear(); memberData = null; memberData = new ArrayList<MemberListData>(); final ParseFile userFile = (ParseFile) mamberparseObject.get("user_img"); userFile.getDataInBackground(new GetDataCallback() { public void done(byte[] data, ParseException e) { if (e == null) { memberData.add(new MemberListData( mamberparseObject.get("user_id").toString(), mamberparseObject.get("user_password").toString(), mamberparseObject.get("user_name").toString(), mamberparseObject.get("user_age").toString(), BitmapFactory.decodeByteArray(data, 0, data.length), userFile.getUrl(), mamberparseObject.getInt("user_totallike"), mamberparseObject.getInt("user_totalcommit"), mamberparseObject.getInt("user_registernumber"), mamberparseObject.get("user_rank").toString(), mamberparseObject.get("user_email").toString(), mamberparseObject.get("user_phonenumber").toString())); try { if (userFile.getUrl() == null) { memberData.get(0).setinforimgfile(userFile.getFile()); } } catch (ParseException e1) { e1.printStackTrace(); } if (myLoadingDialog != null) { myLoadingDialog.dismiss(); } Toast.makeText(getApplication(), getString(R.string.changeMyinfo_pass), Toast.LENGTH_SHORT).show(); finish(); } } }); } }); } else { Toast.makeText(getApplication(), getString(R.string.changeMyinfo_fail), Toast.LENGTH_SHORT).show(); Log.d("내정보수정 오류", "[" + e.toString() + "]"); } } }); } } }); return null ; } } public byte[] readBytes(Uri uri) throws IOException { byte[] data = null; Bitmap bitmap; try { bitmap = imgUriPath(uri); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); data = baos.toByteArray(); bitmap.recycle(); System.gc(); Runtime.getRuntime().gc(); } catch (FileNotFoundException e) { e.printStackTrace(); } return data; } public Bitmap imgUriPath(Uri uri) throws IOException { Bitmap bitmap; AssetFileDescriptor afd = getContentResolver().openAssetFileDescriptor(uri, "r"); BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inJustDecodeBounds = true; BitmapFactory.decodeFile(uri.getPath(), opt); if (opt.outHeight > 2000 || opt.outWidth > 2000) { opt.inJustDecodeBounds = false; opt.inSampleSize = 4; bitmap = BitmapFactory.decodeFileDescriptor(afd.getFileDescriptor(), null, opt); } else if (opt.outHeight > 1000 || opt.outWidth > 1000) { opt.inJustDecodeBounds = false; opt.inSampleSize = 2; bitmap = BitmapFactory.decodeFileDescriptor(afd.getFileDescriptor(), null, opt); } else { bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); } ExifInterface exif = new ExifInterface(uri.getPath()); int exifOrientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); int exifDegree = exifOrientationToDegrees(exifOrientation); bitmap = rotate(bitmap, exifDegree); return bitmap; } public int exifOrientationToDegrees(int exifOrientation) { if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { return 90; } else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) { return 180; } else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) { return 270; } return 0; } public Bitmap rotate(Bitmap bitmap, int degrees) { if(degrees != 0 && bitmap != null) { Matrix m = new Matrix(); m.setRotate(degrees, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2); try { Bitmap converted = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true); if(bitmap != converted) { bitmap.recycle(); bitmap = converted; } } catch(OutOfMemoryError ex) { } } return bitmap; } public boolean checkFeild() { boolean returnVal = true; int ckcnt = 0; String input_user_name = user_name.getText().toString(); String input_user_email = user_email.getText().toString(); String input_user_number = user_number.getText().toString(); String input_user_age = user_age.getText().toString(); String input_user_rank = user_rank.getText().toString(); if (input_user_name == null || "".equals(input_user_name)) { ckcnt ++ ; } if (input_user_email == null || "".equals(input_user_email)) { input_user_email = memberData.get(0).getuser_email(); ckcnt ++ ; }if (input_user_number == null || "".equals(input_user_number)) { input_user_number = memberData.get(0).getuser_phonenumber(); ckcnt ++ ; } if (input_user_age == null || "".equals(input_user_age)) { ckcnt ++ ; } if (input_user_rank == null || "".equals(input_user_rank)) { ckcnt ++ ; } if (ckcnt == 5) { returnVal = false; Toast.makeText(getApplication(), getString(R.string.nonChange), Toast.LENGTH_SHORT).show(); } if (input_user_email.contains("@") == false) { //이메일 형식 체크 returnVal = false; Toast.makeText(getApplication(), getString(R.string.checkEmail), Toast.LENGTH_SHORT).show(); } if (DisplayUtil.isCellPhone(input_user_number) == false) { //폰번호 형식 체크 returnVal = false; Toast.makeText(getApplication(), getString(R.string.checkPhone), Toast.LENGTH_SHORT).show(); } return returnVal; } }