package com.diandi.demo.ui.activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.diandi.demo.CustomApplication;
import com.diandi.demo.R;
import com.diandi.demo.config.Constant;
import com.diandi.demo.model.User;
import com.diandi.demo.util.CacheUtils;
import com.diandi.demo.util.CollectionUtils;
import com.diandi.demo.util.ImageLoadOptions;
import com.diandi.demo.util.L;
import com.diandi.demo.util.OverridePendingUtil;
import com.diandi.demo.util.Sputil;
import com.diandi.demo.widget.dialog.DialogTips;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.bmob.im.BmobChatManager;
import cn.bmob.im.db.BmobDB;
import cn.bmob.im.inteface.MsgTag;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.PushListener;
import cn.bmob.v3.listener.UpdateListener;
import cn.bmob.v3.listener.UploadFileListener;
/**
* *******************************************************************************
* ********* Author : klob(kloblic@gmail.com) .
* ********* Date : 2014-11-29 .
* ********* Time : 11:46 .
* ********* Project name : Diandi1.18 .
* ********* Version : 1.0
* ********* Copyright @ 2014, klob, All Rights Reserved
* *******************************************************************************
*/
public class ProfileActivity extends ActivityBase implements View.OnClickListener {
public static final int UPDATE_NICK_CONTENT = 20;
public static final int UPDATE_SIGNATURE_CONTENT = 21;
public static final int UPDATE_SCHOOL_CONTENT = 22;
static final int UPDATE_AVATAR = 11;
static final int UPDATE_NICK = 12;
static final int UPDATE_SEX = 13;
static final int UPDATE_SIGN = 14;
static final int EDIT_SIGN = 15;
static final int GO_LOGIN = 16;
private final static String USER_ID = "user_id_";
protected Sputil mSputil;
String[] sexs = new String[]{"女", "男"};
String dateTime;
AlertDialog albumDialog;
private ImageView mAvatarImg;
private TextView mNickText;
private TextView mAccountText;
private TextView mSignatureText;
private Button mAddFriendBtn;
private Button mLaunchChatBtn;
private Button mAddBlackBtn;
private Button mLogOutBtn;
private RelativeLayout mAvatarLayout;
private RelativeLayout mNickLayout;
private RelativeLayout mAccountLayout;
private RelativeLayout mSignatrueLayout;
private String from = "";
private String username = "";
private User mUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findView();
initView();
}
@Override
public void onResume() {
super.onResume();
if (from.equals("me")) {
initMeInfo();
} else {
loadData(mUser);
}
}
public void onStop() {
super.onStop();
if (mUser != null) {
CustomApplication.getInstance().getCache().put(USER_ID + mUser.getUsername(), mUser);
}
}
void findView() {
setContentView(R.layout.activity_profile);
mAvatarLayout = (RelativeLayout) findViewById(R.id.activity_setting_user_avatar_layout);
mNickLayout = (RelativeLayout) findViewById(R.id.activity_setting_user_nick_layout);
mAccountLayout = (RelativeLayout) findViewById(R.id.activity_setting_user_account_layout);
mSignatrueLayout = (RelativeLayout) findViewById(R.id.activity_setting_user_sign_layout);
mAvatarImg = (ImageView) findViewById(R.id.activity_setting_user_avatar_img);
mNickText = (TextView) findViewById(R.id.activity_setting_user_nick_text);
mAccountText = (TextView) findViewById(R.id.activity_setting_user_account_text);
mSignatureText = (TextView) findViewById(R.id.activity_setting_user_sign_text);
mAddFriendBtn = (Button) findViewById(R.id.activity_add_friend_btn);
mLaunchChatBtn = (Button) findViewById(R.id.activity_setting_launch_chat_btn);
mAddBlackBtn = (Button) findViewById(R.id.activity_setting_add_black_btn);
mLogOutBtn = (Button) findViewById(R.id.activity_setting_logout_btn);
}
void initView() {
initData();
if (mSputil == null) {
mSputil = new Sputil(this, Constant.PRE_NAME);
mSputil.getInstance().registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
}
});
}
mLaunchChatBtn.setEnabled(false);
mAddBlackBtn.setEnabled(false);
mAvatarLayout.setOnClickListener(this);
if (from.equals("me")) {
initTopBarForLeft("个人资料");
mNickLayout.setOnClickListener(this);
mSignatrueLayout.setOnClickListener(this);
mLogOutBtn.setOnClickListener(this);
mAddFriendBtn.setVisibility(View.GONE);
mLaunchChatBtn.setVisibility(View.GONE);
mAddBlackBtn.setVisibility(View.GONE);
mLogOutBtn.setVisibility(View.VISIBLE);
} else {
initTopBarForLeft("详细资料");
if (from.equals("add")) {// 从附近的人列表添加好友--因为获取附近的人的方法里面有是否显示好友的情况,因此在这里需要判断下这个用户是否是自己的好友
if (mApplication.getContactList().containsKey(username)) {// 是好友
mLaunchChatBtn.setVisibility(View.VISIBLE);
mAddBlackBtn.setVisibility(View.VISIBLE);
mLaunchChatBtn.setOnClickListener(this);
mAddBlackBtn.setOnClickListener(this);
} else {
mLaunchChatBtn.setVisibility(View.GONE);
mAddBlackBtn.setVisibility(View.GONE);
mAddFriendBtn.setVisibility(View.VISIBLE);
mAddFriendBtn.setOnClickListener(this);
}
} else {// 查看他人
mLaunchChatBtn.setVisibility(View.VISIBLE);
mAddBlackBtn.setVisibility(View.VISIBLE);
mLaunchChatBtn.setOnClickListener(this);
mAddBlackBtn.setOnClickListener(this);
}
initOtherInfo(username);
}
mAddBlackBtn.setVisibility(View.GONE);
}
void initData() {
from = getIntent().getStringExtra("from");
username = getIntent().getStringExtra("username");
}
@Override
void bindEvent() {
super.bindEvent();
}
private void loadData(User user) {
if (user != null) {
mNickText.setText(user.getNick());
mSignatureText.setText(user.getSignature());
mAccountText.setText(user.getUsername());
BmobFile avatarFile = user.getAvatarImg();
if (avatarFile != null) {
ImageLoader.getInstance().displayImage(user.getAvatar(), mAvatarImg, ImageLoadOptions.getOptions());
} else {
mAvatarImg.setImageResource(R.drawable.default_head_cry);
}
if (from.equals("other")) {
if (BmobDB.create(this).isBlackUser(user.getUsername())) {
mAddBlackBtn.setVisibility(View.GONE);
} else {
mAddBlackBtn.setVisibility(View.VISIBLE);
}
}
}
}
private void initMeInfo() {
User user = mUserManager.getCurrentUser(User.class);
initOtherInfo(user.getUsername());
}
private void initOtherInfo(String name) {
if (name != null && CustomApplication.getInstance().getCache().getAsObject(USER_ID + name) != null) {
mUser = (User) CustomApplication.getInstance().getCache().getAsObject(USER_ID + name);
loadData(mUser);
}
mUserManager.queryUser(name, new FindListener<User>() {
@Override
public void onError(int arg0, String arg1) {
LogE("onError onError:" + arg1);
}
@Override
public void onSuccess(List<User> arg0) {
// TODO Auto-generated method stub
if (arg0 != null && arg0.size() > 0) {
mUser = arg0.get(0);
mLaunchChatBtn.setEnabled(true);
mAddFriendBtn.setEnabled(true);
mAddBlackBtn.setEnabled(true);
loadData(mUser);
} else {
LogE("onSuccess 查无此人");
}
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.activity_setting_launch_chat_btn:// 发起聊天
Intent intent = new Intent(this, ChatActivity.class);
intent.putExtra("user", mUser);
startAnimActivity(intent);
finish();
break;
case R.id.activity_setting_add_black_btn:// 黑名单
showBlackDialog(mUser.getUsername());
break;
case R.id.activity_add_friend_btn:// 添加好友
addFriend();
break;
case R.id.activity_setting_user_avatar_layout://修改头像
if (from.equals("me")) {
showAlbumDialog();
} else {
Intent intent2 = new Intent(mContext, ImageBrowserActivity.class);
ArrayList<String> photos = new ArrayList<String>();
photos.add(mUser.getAvatar());
intent2.putStringArrayListExtra("photos", photos);
intent2.putExtra("position", 0);
mContext.startActivity(intent2);
}
break;
case R.id.activity_setting_user_nick_layout: //修改昵称
Intent intent1 = new Intent(ProfileActivity.this, UpdateInfoActivity.class);
intent1.putExtra(Constant.UPDATE_ACTIONBAR_NAME, "修改昵称");
intent1.putExtra(Constant.UPDATE_TEXT, "昵称");
intent1.putExtra(Constant.UPDATE_EDIT_HINT, "请输入昵称");
this.startActivityForResult(intent1, UPDATE_NICK_CONTENT);
OverridePendingUtil.in(ProfileActivity.this);
break;
case R.id.activity_setting_user_sign_layout: //修改签名
Intent intent2 = new Intent(ProfileActivity.this, UpdateInfoActivity.class);
intent2.putExtra(Constant.UPDATE_ACTIONBAR_NAME, "个性签名");
intent2.putExtra(Constant.UPDATE_TEXT, "签名");
intent2.putExtra(Constant.UPDATE_EDIT_HINT, "请输入签名");
this.startActivityForResult(intent2, UPDATE_SIGNATURE_CONTENT);
OverridePendingUtil.in(ProfileActivity.this);
break;
case R.id.activity_setting_logout_btn:
CustomApplication.getInstance().logout();
finish();
startAnimActivity(new Intent(ProfileActivity.this, LoginActivity.class));
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case UPDATE_NICK_CONTENT:
Bundle b;
b = data.getExtras();
String nick = b.getString(Constant.UPDATE_BACK_CONTENT);
updateNick(nick);
break;
case UPDATE_SIGNATURE_CONTENT:
Bundle c;
c = data.getExtras();
String signatrue = c.getString(Constant.UPDATE_BACK_CONTENT);
updateSign(signatrue);
break;
case UPDATE_AVATAR:
initMeInfo();
mAvatarLayout.performClick();
break;
case UPDATE_SIGN:
initMeInfo();
mAvatarLayout.performClick();
case UPDATE_NICK:
initMeInfo();
mNickLayout.performClick();
break;
case Constant.REQUESTCODE_UPLOADAVATAR_CAMERA:
String files = CacheUtils.getCacheDirectory(mContext, true, "icon") + dateTime;
File file = new File(files);
if (file.exists() && file.length() > 0) {
Uri uri = Uri.fromFile(file);
startPhotoZoom(uri);
} else {
}
break;
case Constant.REQUESTCODE_UPLOADAVATAR_LOCATION:
if (data == null) {
return;
}
startPhotoZoom(data.getData());
break;
case Constant.REQUESTCODE_UPLOADAVATAR_CROP:
if (data != null) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap bitmap = extras.getParcelable("data");
String iconUrl = saveToSdCard(bitmap);
mAvatarImg.setImageBitmap(bitmap);
updateAvatar(iconUrl);
}
}
default:
break;
}
}
}
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 120);
intent.putExtra("outputY", 120);
intent.putExtra("crop", "true");
intent.putExtra("scale", true);
intent.putExtra("scaleUpIfNeeded", true);
// intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}
private void redictToLogin(int requestCode) {
Intent intent = new Intent();
intent.setClass(this, LoginActivity.class);
startActivityForResult(intent, requestCode);
OverridePendingUtil.in(ProfileActivity.this);
ShowToast("请先登录。");
}
public void showAlbumDialog() {
albumDialog = new AlertDialog.Builder(mContext).create();
albumDialog.setCanceledOnTouchOutside(true);
View v = LayoutInflater.from(mContext).inflate(R.layout.dialog_usericon, null);
albumDialog.show();
albumDialog.setContentView(v);
albumDialog.getWindow().setGravity(Gravity.CENTER);
TextView albumPic = (TextView) v.findViewById(R.id.album_pic);
TextView cameraPic = (TextView) v.findViewById(R.id.camera_pic);
albumPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
albumDialog.dismiss();
Date date1 = new Date(System.currentTimeMillis());
dateTime = date1.getTime() + "";
getAvataFromAlbum();
}
});
cameraPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
albumDialog.dismiss();
Date date = new Date(System.currentTimeMillis());
dateTime = date.getTime() + "";
getAvataFromCamera();
}
});
}
private void getAvataFromCamera() {
File f = new File(CacheUtils.getCacheDirectory(mContext, true, "icon") + dateTime);
if (f.exists()) {
f.delete();
}
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri uri = Uri.fromFile(f);
Log.e("uri", uri + "");
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(camera, 1);
OverridePendingUtil.in(ProfileActivity.this);
}
private void getAvataFromAlbum() {
Intent intent2 = new Intent(Intent.ACTION_GET_CONTENT);
intent2.setType("image/*");
startActivityForResult(intent2, 2);
OverridePendingUtil.in(ProfileActivity.this);
}
private void addFriend() {
final ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("正在添加...");
progress.setCanceledOnTouchOutside(false);
progress.show();
// 发送tag请求
BmobChatManager.getInstance(this).sendTagMessage(MsgTag.ADD_CONTACT,
mUser.getObjectId(), new PushListener() {
@Override
public void onSuccess() {
progress.dismiss();
ShowToast("发送请求成功,等待对方验证!");
}
@Override
public void onFailure(int arg0, final String arg1) {
progress.dismiss();
ShowToast("发送请求成功,等待对方验证!");
LogE("发送请求失败:" + arg1);
}
}
);
}
private void showBlackDialog(final String username) {
DialogTips dialog = new DialogTips(this, "加入黑名单",
"加入黑名单,你将不再收到对方的消息,确定要继续吗?", "确定", true, true);
dialog.SetOnSuccessListener(new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int userId) {
// 添加到黑名单列表
mUserManager.addBlack(username, new UpdateListener() {
@Override
public void onSuccess() {
ShowToast("黑名单添加成功!");
mAddBlackBtn.setVisibility(View.GONE);
// 重新设置下内存中保存的好友列表
CustomApplication.getInstance().setContactList(
CollectionUtils.list2map(BmobDB.create(
ProfileActivity.this)
.getContactList())
);
}
@Override
public void onFailure(int arg0, String arg1) {
ShowToast("黑名单添加失败:" + arg1);
}
});
}
});
// 显示确认对话框
dialog.show();
dialog = null;
}
/**
* 更新信息
*/
private void updateAvatar(String avatarPath) {
if (avatarPath != null) {
final BmobFile file = new BmobFile(new File(avatarPath));
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("上传头像");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
file.upload(this, new UploadFileListener() {
@Override
public void onProgress(Integer integer) {
progressDialog.setMessage(integer + "");
}
@Override
public void onSuccess() {
User currentUser = BmobUser.getCurrentUser(mContext, User.class);
currentUser.setAvatarImg(file);
currentUser.setAvatar(file.getFileUrl(mContext));
refreshAvatar(file.getFileUrl(mContext));
currentUser.update(mContext, new UpdateListener() {
@Override
public void onSuccess() {
ShowToast("更改头像成功。");
}
@Override
public void onFailure(int arg0, String arg1) {
ShowToast("更新头像失败。请检查网络~");
L.i(TAG, "更新失败2-->" + arg1);
}
});
progressDialog.dismiss();
}
@Override
public void onFailure(int i, String s) {
ShowToast("上传头像失败。请检查网络~");
L.i(TAG, "上传文件失败。" + s);
progressDialog.dismiss();
}
});
}
}
private void refreshAvatar(String avatar) {
if (avatar != null && !avatar.equals("")) {
ImageLoader.getInstance().displayImage(avatar, mAvatarImg, ImageLoadOptions.getOptions());
}
}
private void updateNick(String nick) {
User user = BmobUser.getCurrentUser(mContext, User.class);
if (user != null) {
user.setNick(nick);
user.update(mContext, new UpdateListener() {
@Override
public void onSuccess() {
L.i(TAG, "更新信息成功。");
}
@Override
public void onFailure(int arg0, String arg1) {
ShowToast("更新信息失败。请检查网络~");
L.i(TAG, "更新失败1-->" + arg1);
}
});
} else {
redictToLogin(UPDATE_NICK);
}
}
private void updateSign(String signature) {
User user = BmobUser.getCurrentUser(mContext, User.class);
if (user != null) {
user.setSignature(signature);
user.update(mContext, new UpdateListener() {
@Override
public void onSuccess() {
L.i(TAG, "更新信息成功。");
}
@Override
public void onFailure(int arg0, String arg1) {
// TODO Auto-generated method stub
ShowToast("更新信息失败。请检查网络~");
L.i(TAG, "更新失败1-->" + arg1);
}
});
} else {
redictToLogin(UPDATE_NICK);
}
}
public String saveToSdCard(Bitmap bitmap) {
String files = CacheUtils.getCacheDirectory(mContext, true, "icon") + dateTime + "_12.png";
File file = new File(files);
try {
FileOutputStream out = new FileOutputStream(file);
if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
L.i(TAG, file.getAbsolutePath());
return file.getAbsolutePath();
}
/* private void initPersonalInfo() {
mUser = BmobUser.getCurrentUser(this, User.class);
if (mUser != null) {
mNickText.setText(mUser.getNick());
mSignatureText.setText(mUser.getSignature());
mAccountText.setText(mUser.getUsername());
if (mUser.getSex().equals(Constant.SEX_FEMALE)) {
mSexSwitch.setChecked(true);
sputil.setValue("sex_settings", 0);
} else {
mSexSwitch.setChecked(false);
sputil.setValue("sex_settings", 1);
}
BmobFile avatarFile = mUser.getAvatarImg();
if (avatarFile != null) {
ImageLoader.getInstance()
.displayImage(avatarFile.getFileUrl(), mAvatarImg,
CustomApplication.getInstance().getOptions(R.drawable.user_icon_default_main),
new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
// TODO Auto-generated method stub
super.onLoadingComplete(imageUri, view, loadedImage);
}
}
);
}
}
}*/
}