package com.sun.bingo.ui.activity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.bmob.BmobProFile; import com.bmob.btp.callback.UploadListener; import com.framework.dialog.ToastTip; import com.orhanobut.logger.Logger; import com.sun.bingo.BingoApp; import com.sun.bingo.R; import com.sun.bingo.control.NavigateManager; import com.sun.bingo.control.SingleControl; import com.sun.bingo.model.eventbus.EventEntity; import com.sun.bingo.model.eventbus.EventType; import com.sun.bingo.util.UserEntityUtil; import com.sun.bingo.util.image.GetPathFromUri4kitkat; import com.sun.bingo.widget.ActionSheet; import com.sun.bingo.widget.UploadAvatarView; import org.greenrobot.eventbus.EventBus; import butterknife.BindView; import butterknife.ButterKnife; import cn.bmob.v3.datatype.BmobFile; import cn.bmob.v3.listener.UpdateListener; /** * Created by sunfusheng on 15/7/22. */ public class ProfileActivity extends BaseActivity<SingleControl> implements View.OnClickListener { @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.iv_user_avatar) UploadAvatarView civUserAvatar; @BindView(R.id.rl_user_avatar) RelativeLayout rlUserAvatar; @BindView(R.id.tv_nick_name_title) TextView tvNickNameTitle; @BindView(R.id.tv_nick_name) TextView tvNickName; @BindView(R.id.rl_nick_name) RelativeLayout rlNickName; @BindView(R.id.tv_user_sign_title) TextView tvUserSignTitle; @BindView(R.id.tv_user_sign) TextView tvUserSign; @BindView(R.id.rl_user_sign) RelativeLayout rlUserSign; private String takePicturePath = "/" + BingoApp.APP_CACHE_DIR + "/avatar.jpg"; private String imagePath; private final String NICK_NAME = "nick_name"; private final String USER_SIGN = "user_sign"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); ButterKnife.bind(this); initData(); initView(); initListener(); } private void initData() { } private void initView() { initToolBar(toolbar, true, "个人中心"); UserEntityUtil.setUserAvatarView(mContext, myEntity.getUserAvatar(), civUserAvatar); UserEntityUtil.setTextViewData(tvNickName, myEntity.getNickName()); UserEntityUtil.setTextViewData(tvUserSign, myEntity.getUserSign()); } private void initListener() { rlUserAvatar.setOnClickListener(this); rlNickName.setOnClickListener(this); rlUserSign.setOnClickListener(this); } public void showSelectAvatarDialog() { ActionSheet.Builder builder = ActionSheet.createBuilder(mContext, getSupportFragmentManager()); builder.setOtherTextViewTitles("拍照", "从相册选择"); builder.setCancelTextViewTitle("取消"); builder.setCancelableOnTouchOutside(true); builder.setListener(new ActionSheet.ActionSheetListener() { @Override public void onDismiss(ActionSheet actionSheet, boolean isCancel) {} @Override public void onOtherTextViewClick(ActionSheet actionSheet, int index) { switch (index) { case 0: NavigateManager.gotoTakePicture(ProfileActivity.this, takePicturePath); break; case 1: NavigateManager.gotoChoosePicture(ProfileActivity.this); break; } } }); builder.show(); } private void setImageViewWithPath(String imagePath) { mImageManager.loadCircleLocalImage(imagePath, civUserAvatar); mControl.getCompressImagePath(this, imagePath); //异步压缩图片 } public void getCompressImagePathCallBack() { String compressImagePath = mModel.get(1); if (TextUtils.isEmpty(compressImagePath)) { ToastTip.show("请重新选择图片"); } else { uploadAvatar(compressImagePath); } } private void uploadAvatar(String imagePath) { BmobProFile.getInstance(this).upload(imagePath, new UploadListener() { @Override public void onSuccess(String fileName, String url, BmobFile file) { Logger.i("fileName:" + fileName); Logger.i("url:" + url); Logger.i("file.getUrl():" + file.getUrl()); myEntity.setUserAvatar(file.getUrl()); myEntity.update(ProfileActivity.this, myEntity.getObjectId(), new UpdateListener() { @Override public void onSuccess() { EventBus.getDefault().post(new EventEntity(EventType.EVENT_TYPE_UPDATE_BINGO_LIST)); civUserAvatar.setProgressOver(); setResult(NavigateManager.PROFILE_REQUEST_CODE); } @Override public void onFailure(int i, String s) { Toast.makeText(ProfileActivity.this, "头像上传失败", Toast.LENGTH_SHORT).show(); civUserAvatar.setProgressOver(); } }); } @Override public void onProgress(int progress) { civUserAvatar.setProgress(progress); } @Override public void onError(int statusCode, String errorMsg) { Toast.makeText(ProfileActivity.this, "文件上传失败", Toast.LENGTH_SHORT).show(); civUserAvatar.setProgressOver(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case NavigateManager.TAKE_PICTURE_REQUEST_CODE: imagePath = Environment.getExternalStorageDirectory() + takePicturePath; setImageViewWithPath(imagePath); break; case NavigateManager.CHOOSE_PICTURE_REQUEST_CODE: imagePath = GetPathFromUri4kitkat.getPath(this, data.getData()); if (TextUtils.isEmpty(imagePath)) { String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(data.getData(), proj, null, null, null); if (cursor != null && cursor.moveToFirst()) { imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)); cursor.close(); } } setImageViewWithPath(imagePath); break; } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.rl_user_avatar: showSelectAvatarDialog(); break; case R.id.rl_nick_name: updateNickName("昵称", NICK_NAME, myEntity.getNickName()); break; case R.id.rl_user_sign: updateNickName("个性签名", USER_SIGN, myEntity.getUserSign()); break; } } private void gotoMain() { if (TextUtils.isEmpty(myEntity.getUserAvatar())) { ToastTip.show("请上传您的靓照哦"); return; } if (TextUtils.isEmpty(myEntity.getNickName())) { ToastTip.show("给自己起个昵称吧"); return; } if (TextUtils.isEmpty(myEntity.getUserSign())) { ToastTip.show("来句个性说说吧"); return; } NavigateManager.gotoMainActivity(this); } private View view; private EditText editText; private String inputText; private void updateNickName(final String title, final String type, final String content) { MaterialDialog materialDialog = new MaterialDialog.Builder(this) .title(title) .customView(R.layout.material_dialog_input_layout, true) .positiveText(R.string.ok) .negativeText(R.string.cancel) .negativeColor(getResources().getColor(R.color.font_black_3)) .callback(new MaterialDialog.ButtonCallback() { @Override public void onPositive(MaterialDialog dialog) { super.onPositive(dialog); inputText = editText.getText().toString().trim(); if (!TextUtils.isEmpty(inputText)) { switch (type) { case NICK_NAME: myEntity.setNickName(inputText); break; case USER_SIGN: myEntity.setUserSign(inputText); break; } myEntity.update(ProfileActivity.this, myEntity.getObjectId(), new UpdateListener() { @Override public void onSuccess() { EventBus.getDefault().post(new EventEntity(EventType.EVENT_TYPE_UPDATE_BINGO_LIST)); setResult(NavigateManager.PROFILE_REQUEST_CODE); switch (type) { case NICK_NAME: tvNickName.setText(inputText); break; case USER_SIGN: tvUserSign.setText(inputText); break; } } @Override public void onFailure(int i, String s) { Toast.makeText(ProfileActivity.this, "修改" + title + "失败", Toast.LENGTH_SHORT).show(); } }); } } }).build(); view = materialDialog.getCustomView(); editText = ButterKnife.findById(view, R.id.et_dialog_input); if (!TextUtils.isEmpty(content)) { editText.setText(content); editText.setSelection(content.length()); } else { editText.setHint("请输入" + title); } materialDialog.show(); } }