package com.easemob.chatuidemo.ui; import java.io.ByteArrayOutputStream; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.easemob.EMValueCallBack; import com.easemob.chat.EMChatManager; import com.easemob.chatuidemo.DemoHelper; import com.easemob.chatuidemo.R; import com.easemob.easeui.domain.EaseUser; import com.easemob.easeui.utils.EaseUserUtils; public class UserProfileActivity extends BaseActivity implements OnClickListener{ private static final int REQUESTCODE_PICK = 1; private static final int REQUESTCODE_CUTTING = 2; private ImageView headAvatar; private ImageView headPhotoUpdate; private ImageView iconRightArrow; private TextView tvNickName; private TextView tvUsername; private ProgressDialog dialog; private RelativeLayout rlNickName; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.em_activity_user_profile); initView(); initListener(); } private void initView() { headAvatar = (ImageView) findViewById(R.id.user_head_avatar); headPhotoUpdate = (ImageView) findViewById(R.id.user_head_headphoto_update); tvUsername = (TextView) findViewById(R.id.user_username); tvNickName = (TextView) findViewById(R.id.user_nickname); rlNickName = (RelativeLayout) findViewById(R.id.rl_nickname); iconRightArrow = (ImageView) findViewById(R.id.ic_right_arrow); } private void initListener() { Intent intent = getIntent(); String username = intent.getStringExtra("username"); boolean enableUpdate = intent.getBooleanExtra("setting", false); if (enableUpdate) { headPhotoUpdate.setVisibility(View.VISIBLE); iconRightArrow.setVisibility(View.VISIBLE); rlNickName.setOnClickListener(this); headAvatar.setOnClickListener(this); } else { headPhotoUpdate.setVisibility(View.GONE); iconRightArrow.setVisibility(View.INVISIBLE); } if(username != null){ if (username.equals(EMChatManager.getInstance().getCurrentUser())) { tvUsername.setText(EMChatManager.getInstance().getCurrentUser()); EaseUserUtils.setUserNick(username, tvNickName); EaseUserUtils.setUserAvatar(this, username, headAvatar); } else { tvUsername.setText(username); EaseUserUtils.setUserNick(username, tvNickName); EaseUserUtils.setUserAvatar(this, username, headAvatar); asyncFetchUserInfo(username); } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.user_head_avatar: uploadHeadPhoto(); break; case R.id.rl_nickname: final EditText editText = new EditText(this); new AlertDialog.Builder(this).setTitle(R.string.setting_nickname).setIcon(android.R.drawable.ic_dialog_info).setView(editText) .setPositiveButton(R.string.dl_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String nickString = editText.getText().toString(); if (TextUtils.isEmpty(nickString)) { Toast.makeText(UserProfileActivity.this, getString(R.string.toast_nick_not_isnull), Toast.LENGTH_SHORT).show(); return; } updateRemoteNick(nickString); } }).setNegativeButton(R.string.dl_cancel, null).show(); break; default: break; } } public void asyncFetchUserInfo(String username){ DemoHelper.getInstance().getUserProfileManager().asyncGetUserInfo(username, new EMValueCallBack<EaseUser>() { @Override public void onSuccess(EaseUser user) { if (user != null) { DemoHelper.getInstance().saveContact(user); if(isFinishing()){ return; } tvNickName.setText(user.getNick()); if(!TextUtils.isEmpty(user.getAvatar())){ Glide.with(UserProfileActivity.this).load(user.getAvatar()).placeholder(R.drawable.em_default_avatar).into(headAvatar); }else{ Glide.with(UserProfileActivity.this).load(R.drawable.em_default_avatar).into(headAvatar); } } } @Override public void onError(int error, String errorMsg) { } }); } private void uploadHeadPhoto() { AlertDialog.Builder builder = new Builder(this); builder.setTitle(R.string.dl_title_upload_photo); builder.setItems(new String[] { getString(R.string.dl_msg_take_photo), getString(R.string.dl_msg_local_upload) }, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); switch (which) { case 0: Toast.makeText(UserProfileActivity.this, getString(R.string.toast_no_support), Toast.LENGTH_SHORT).show(); break; case 1: Intent pickIntent = new Intent(Intent.ACTION_PICK,null); pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(pickIntent, REQUESTCODE_PICK); break; default: break; } } }); builder.create().show(); } private void updateRemoteNick(final String nickName) { dialog = ProgressDialog.show(this, getString(R.string.dl_update_nick), getString(R.string.dl_waiting)); new Thread(new Runnable() { @Override public void run() { boolean updatenick = DemoHelper.getInstance().getUserProfileManager().updateCurrentUserNickName(nickName); if (UserProfileActivity.this.isFinishing()) { return; } if (!updatenick) { runOnUiThread(new Runnable() { public void run() { Toast.makeText(UserProfileActivity.this, getString(R.string.toast_updatenick_fail), Toast.LENGTH_SHORT) .show(); dialog.dismiss(); } }); } else { runOnUiThread(new Runnable() { @Override public void run() { dialog.dismiss(); Toast.makeText(UserProfileActivity.this, getString(R.string.toast_updatenick_success), Toast.LENGTH_SHORT) .show(); tvNickName.setText(nickName); } }); } } }).start(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUESTCODE_PICK: if (data == null || data.getData() == null) { return; } startPhotoZoom(data.getData()); break; case REQUESTCODE_CUTTING: if (data != null) { setPicToView(data); } break; default: break; } super.onActivityResult(requestCode, resultCode, data); } public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("return-data", true); intent.putExtra("noFaceDetection", true); startActivityForResult(intent, REQUESTCODE_CUTTING); } /** * save the picture data * * @param picdata */ private void setPicToView(Intent picdata) { Bundle extras = picdata.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); Drawable drawable = new BitmapDrawable(getResources(), photo); headAvatar.setImageDrawable(drawable); uploadUserAvatar(Bitmap2Bytes(photo)); } } private void uploadUserAvatar(final byte[] data) { dialog = ProgressDialog.show(this, getString(R.string.dl_update_photo), getString(R.string.dl_waiting)); new Thread(new Runnable() { @Override public void run() { final String avatarUrl = DemoHelper.getInstance().getUserProfileManager().uploadUserAvatar(data); runOnUiThread(new Runnable() { @Override public void run() { dialog.dismiss(); if (avatarUrl != null) { Toast.makeText(UserProfileActivity.this, getString(R.string.toast_updatephoto_success), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(UserProfileActivity.this, getString(R.string.toast_updatephoto_fail), Toast.LENGTH_SHORT).show(); } } }); } }).start(); dialog.show(); } public byte[] Bitmap2Bytes(Bitmap bm){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } }