package com.monsterlin.pigeon.ui.family; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import com.monsterlin.pigeon.R; import com.monsterlin.pigeon.base.BaseActivity; import com.monsterlin.pigeon.bean.Family; import com.monsterlin.pigeon.bean.User; import com.monsterlin.pigeon.common.AppManager; import com.monsterlin.pigeon.utils.ToastUtils; import com.squareup.picasso.Picasso; import com.yalantis.ucrop.UCrop; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.BmobUser; import cn.bmob.v3.datatype.BmobFile; import cn.bmob.v3.exception.BmobException; import cn.bmob.v3.listener.QueryListener; import cn.bmob.v3.listener.UpdateListener; import cn.bmob.v3.listener.UploadFileListener; import de.hdodenhof.circleimageview.CircleImageView; /** * @author : monsterLin * @version : 1.0 * @email : [email protected] * @github : https://github.com/monsterLin * @time : 2017/8/6 * @desc : 编辑家庭信息 */ public class EditFamilyActivity extends BaseActivity { private Toolbar mToolBar; private TextInputLayout mFamilyNameWrapper; private EditText mEdtFamilyName; private BmobQuery<Family> familyQuery; private User mCurrentUser; private CircleImageView mFamilyPhoto; private String mCurrentPhotoStr; private Bitmap mPhotoBitmap; private static final int REQUEST_SELECT_PICTURE = 0x01; private String familyName; @Override public int getLayoutId() { return R.layout.activity_family_edit; } @Override public void initViews() { mToolBar = findView(R.id.common_toolbar); initToolBar(mToolBar, "编辑家庭", true); mFamilyNameWrapper = findView(R.id.familyNameWrapper); mFamilyNameWrapper.setHint("家庭名"); mEdtFamilyName = findView(R.id.editFamily_edt_name); mFamilyPhoto = findView(R.id.editFamily_civ_photo); } @Override public void initListener() { setOnClick(mFamilyPhoto); } @Override public void initData() { dialog.showDialog(); mCurrentUser = BmobUser.getCurrentUser(User.class); familyQuery = new BmobQuery<>(); familyQuery.getObject(mCurrentUser.getFamily().getObjectId(), new QueryListener<Family>() { @Override public void done(Family family, BmobException e) { if (e == null) { familyName = family.getFamilyName(); if (!TextUtils.isEmpty(familyName)) { mEdtFamilyName.setText(familyName); BmobFile familyIconFile = family.getFamilyIcon(); if (familyIconFile!=null) { Picasso.with(EditFamilyActivity.this).load(familyIconFile.getFileUrl()).into(mFamilyPhoto); }else { mFamilyPhoto.setImageResource(R.drawable.ic_default); } dialog.dismissDialog(); } else { dialog.dismissDialog(); } } else { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "GetFamilyInfo : " + e.getMessage()); } } }); } @Override public void processClick(View v) { switch (v.getId()) { case R.id.editFamily_civ_photo: Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(Intent.createChooser(intent, getString(R.string.label_select_picture)), REQUEST_SELECT_PICTURE); break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_operate, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_ok: dialog.showDialog(); if (!TextUtils.isEmpty(mCurrentPhotoStr)) { final BmobFile famiyIconFile = new BmobFile(new File(mCurrentPhotoStr)); famiyIconFile.upload(new UploadFileListener() { @Override public void done(BmobException e) { if (e == null) { //上传成功 String familyName = mEdtFamilyName.getText().toString(); if (!TextUtils.isEmpty(familyName)) { Family family = new Family(); family.setFamilyName(familyName); family.setFamilyIcon(famiyIconFile); family.update(mCurrentUser.getFamily().getObjectId(), new UpdateListener() { @Override public void done(BmobException e) { if (e == null) { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "更新家庭信息成功"); AppManager.getAppManager().finishActivity(); } else { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "更新家庭信息失败:" + e.getMessage()); } } }); } else { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "请正确填写信息"); } } else { //上传失败 dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, e.getMessage()); } } }); } else if (familyName.equals(mEdtFamilyName.getText().toString())) { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "无信息更新"); } else if (!familyName.equals(mEdtFamilyName.getText().toString())) { Family family = new Family(); family.setFamilyName(mEdtFamilyName.getText().toString()); family.update(mCurrentUser.getFamily().getObjectId(), new UpdateListener() { @Override public void done(BmobException e) { if (e == null) { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "更新家庭信息成功"); AppManager.getAppManager().finishActivity(); } else { dialog.dismissDialog(); ToastUtils.showToast(EditFamilyActivity.this, "更新家庭信息失败:" + e.getMessage()); } } }); } break; } return super.onOptionsItemSelected(item); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == REQUEST_SELECT_PICTURE) { final Uri selectedUri = data.getData(); if (selectedUri != null) { startCropActivity(data.getData()); } else { ToastUtils.showToast(EditFamilyActivity.this, "类型不匹配"); } } else if (requestCode == UCrop.REQUEST_CROP) { handleCropResult(data); } } if (resultCode == UCrop.RESULT_ERROR) { handleCropError(data); } } private void startCropActivity(@NonNull Uri uri) { Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = sdf.format(d); String destinationFileName = s + ".jpg"; UCrop uCrop = UCrop.of(uri, Uri.fromFile(new File(getCacheDir(), destinationFileName))); uCrop = uCrop.useSourceImageAspectRatio(); uCrop.start(EditFamilyActivity.this); } private void handleCropResult(@NonNull Intent result) { final Uri resultUri = UCrop.getOutput(result); if (resultUri != null) { mCurrentPhotoStr = resultUri.getPath(); mPhotoBitmap = BitmapFactory.decodeFile(resultUri.getPath()); mFamilyPhoto.setImageBitmap(mPhotoBitmap); } } private void handleCropError(@NonNull Intent result) { final Throwable cropError = UCrop.getError(result); if (cropError != null) { ToastUtils.showToast(EditFamilyActivity.this, cropError.getMessage()); } else { ToastUtils.showToast(EditFamilyActivity.this, "handleCropError"); } } }