package com.tencent.hq.qq.ui; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import cn.bmob.im.BmobChatManager; import cn.bmob.im.config.BmobConfig; import cn.bmob.im.db.BmobDB; import cn.bmob.im.util.BmobLog; import cn.bmob.v3.datatype.BmobFile; import cn.bmob.v3.listener.FindListener; import cn.bmob.v3.listener.PushListener; import cn.bmob.v3.listener.SaveListener; import cn.bmob.v3.listener.UpdateListener; import cn.bmob.v3.listener.UploadFileListener; import com.nostra13.universalimageloader.core.ImageLoader; import com.tencent.hq.qq.CustomApplcation; import com.tencent.hq.qq.R; import com.tencent.hq.qq.config.BmobConstants; import com.tencent.hq.qq.entity.Blog; import com.tencent.hq.qq.entity.User; import com.tencent.hq.qq.util.CollectionUtils; import com.tencent.hq.qq.util.ImageLoadOptions; import com.tencent.hq.qq.util.PhotoUtil; import com.tencent.hq.qq.widget.dialog.DialogTips; /** * * @ClassName: SetMyInfoActivity * @Description: TODO * @author smile * @date 2014-6-10 2:55:19 */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @SuppressLint({ "SimpleDateFormat", "ClickableViewAccessibility", "InflateParams" }) public class SetMyInfoActivity extends ActivityBase implements OnClickListener { TextView tv_set_name, tv_set_nick, tv_set_gender; ImageView iv_set_avator, iv_arraw, iv_nickarraw; LinearLayout layout_all; Button btn_chat, btn_back, btn_add_friend; RelativeLayout layout_head, layout_nick, layout_gender, layout_black_tips; String from = ""; String username = ""; User user; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= 14) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } setContentView(R.layout.activity_set_info); from = getIntent().getStringExtra("from");//me add other username = getIntent().getStringExtra("username"); initView(); } private void initView() { layout_all = (LinearLayout) findViewById(R.id.layout_all); iv_set_avator = (ImageView) findViewById(R.id.iv_set_avator); iv_arraw = (ImageView) findViewById(R.id.iv_arraw); iv_nickarraw = (ImageView) findViewById(R.id.iv_nickarraw); tv_set_name = (TextView) findViewById(R.id.tv_set_name); tv_set_nick = (TextView) findViewById(R.id.tv_set_nick); layout_head = (RelativeLayout) findViewById(R.id.layout_head); layout_nick = (RelativeLayout) findViewById(R.id.layout_nick); layout_gender = (RelativeLayout) findViewById(R.id.layout_gender); layout_black_tips = (RelativeLayout) findViewById(R.id.layout_black_tips); tv_set_gender = (TextView) findViewById(R.id.tv_set_gender); btn_chat = (Button) findViewById(R.id.btn_chat); btn_back = (Button) findViewById(R.id.btn_back); btn_add_friend = (Button) findViewById(R.id.btn_add_friend); btn_add_friend.setEnabled(false); btn_chat.setEnabled(false); btn_back.setEnabled(false); if (from.equals("me")) { initTopBarForLeft("个人资料"); layout_head.setOnClickListener(this); layout_nick.setOnClickListener(this); layout_gender.setOnClickListener(this); iv_nickarraw.setVisibility(View.VISIBLE); iv_arraw.setVisibility(View.VISIBLE); btn_back.setVisibility(View.GONE); btn_chat.setVisibility(View.GONE); btn_add_friend.setVisibility(View.GONE); } else { initTopBarForLeft("详细资料"); iv_nickarraw.setVisibility(View.INVISIBLE); iv_arraw.setVisibility(View.INVISIBLE); btn_chat.setVisibility(View.VISIBLE); btn_chat.setOnClickListener(this); if (from.equals("add")) { if (mApplication.getContactList().containsKey(username)) { // btn_chat.setVisibility(View.VISIBLE); // btn_chat.setOnClickListener(this); btn_back.setVisibility(View.VISIBLE); btn_back.setOnClickListener(this); } else { // btn_chat.setVisibility(View.GONE); btn_back.setVisibility(View.GONE); btn_add_friend.setVisibility(View.VISIBLE); btn_add_friend.setOnClickListener(this); } } else {// // btn_chat.setVisibility(View.VISIBLE); // btn_chat.setOnClickListener(this); btn_back.setVisibility(View.VISIBLE); btn_back.setOnClickListener(this); } initOtherData(username); } } private void initMeData() { User user = userManager.getCurrentUser(User.class); BmobLog.i("hight = "+user.getHight()+",sex= "+user.getSex()); initOtherData(user.getUsername()); } private void initOtherData(String name) { userManager.queryUser(name, new FindListener<User>() { @Override public void onError(int arg0, String arg1) { // TODO Auto-generated method stub ShowLog("onError onError:" + arg1); } @Override public void onSuccess(List<User> arg0) { // TODO Auto-generated method stub if (arg0 != null && arg0.size() > 0) { user = arg0.get(0); btn_chat.setEnabled(true); btn_back.setEnabled(true); btn_add_friend.setEnabled(true); updateUser(user); } else { ShowLog("onSuccess "); } } }); } private void updateUser(User user) { refreshAvatar(user.getAvatar()); tv_set_name.setText(user.getUsername()); tv_set_nick.setText(user.getNick()); tv_set_gender.setText(user.getSex() == true ? "男" : "女"); if (from.equals("other")) { if (BmobDB.create(this).isBlackUser(user.getUsername())) { btn_back.setVisibility(View.GONE); layout_black_tips.setVisibility(View.VISIBLE); } else { btn_back.setVisibility(View.VISIBLE); layout_black_tips.setVisibility(View.GONE); } } } /** * * @return void * @throws */ private void refreshAvatar(String avatar) { if (avatar != null && !avatar.equals("")) { ImageLoader.getInstance().displayImage(avatar, iv_set_avator, ImageLoadOptions.getOptions()); } else { iv_set_avator.setImageResource(R.drawable.default_head); } } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); if (from.equals("me")) { initMeData(); } } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btn_chat:// Intent intent = new Intent(this, ChatActivity.class); intent.putExtra("user", user); startAnimActivity(intent); finish(); break; case R.id.layout_head: showAvatarPop(); break; case R.id.layout_sign: startAnimActivity(UpdateInfoActivity.class); break; case R.id.layout_nick: startAnimActivity(UpdateInfoActivity.class); // addBlog(); break; case R.id.layout_gender:// showSexChooseDialog(); break; case R.id.btn_back:// showBlackDialog(user.getUsername()); break; case R.id.btn_add_friend: addFriend(); break; } } String[] sexs = new String[]{ "男", "女" }; private void showSexChooseDialog() { new AlertDialog.Builder(this) .setTitle("性别") .setIcon(android.R.drawable.ic_dialog_info) .setSingleChoiceItems(sexs, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { BmobLog.i("点击的是"+sexs[which]); updateInfo(which); dialog.dismiss(); } }) .setNegativeButton("取消", null) .show(); } /** * updateInfo * @Title: updateInfo * @return void * @throws */ private void updateInfo(int which) { final User u = new User(); if(which==0){ u.setSex(true); }else{ u.setSex(false); } updateUserData(u,new UpdateListener() { @Override public void onSuccess() { // TODO Auto-generated method stub ShowToast("修改成功"); tv_set_gender.setText(u.getSex() == true ? "男" : "女"); } @Override public void onFailure(int arg0, String arg1) { // TODO Auto-generated method stub ShowToast("onFailure:" + arg1); } }); } /** * ��Ӻ������� * * @Title: addFriend * @Description: TODO * @param * @return void * @throws */ private void addFriend() { final ProgressDialog progress = new ProgressDialog(this); progress.setMessage("正在添加..."); progress.setCanceledOnTouchOutside(false); progress.show(); BmobChatManager.getInstance(this).sendTagMessage(BmobConfig.TAG_ADD_CONTACT, user.getObjectId(), new PushListener() { @Override public void onSuccess() { // TODO Auto-generated method stub progress.dismiss(); ShowToast("发送请求成功,等待对方验证!"); } @Override public void onFailure(int arg0, final String arg1) { // TODO Auto-generated method stub progress.dismiss(); ShowToast("发送请求成功,等待对方验证!"); ShowLog("发送请求失败:" + arg1); } }); } /** * ��ʾ������ʾ�� * * @Title: showBlackDialog * @Description: TODO * @param * @return void * @throws */ 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) { // ��ӵ������б� userManager.addBlack(username, new UpdateListener() { @Override public void onSuccess() { // TODO Auto-generated method stub ShowToast("黑名单添加成功!"); btn_back.setVisibility(View.GONE); layout_black_tips.setVisibility(View.VISIBLE); // �����������ڴ��б���ĺ����б� CustomApplcation.getInstance().setContactList(CollectionUtils.list2map(BmobDB.create(SetMyInfoActivity.this).getContactList())); } @Override public void onFailure(int arg0, String arg1) { // TODO Auto-generated method stub ShowToast("黑名单添加失败:" + arg1); } }); } }); dialog.show(); dialog = null; } RelativeLayout layout_choose; RelativeLayout layout_photo; PopupWindow avatorPop; public String filePath = ""; @SuppressWarnings("deprecation") private void showAvatarPop() { View view = LayoutInflater.from(this).inflate(R.layout.pop_showavator, null); layout_choose = (RelativeLayout) view.findViewById(R.id.layout_choose); layout_photo = (RelativeLayout) view.findViewById(R.id.layout_photo); layout_photo.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { ShowLog("点击拍照"); // TODO Auto-generated method stub layout_choose.setBackgroundColor(getResources().getColor( R.color.base_color_text_white)); layout_photo.setBackgroundDrawable(getResources().getDrawable( R.drawable.pop_bg_press)); File dir = new File(BmobConstants.MyAvatarDir); if (!dir.exists()) { dir.mkdirs(); } // ԭͼ File file = new File(dir, new SimpleDateFormat("yyMMddHHmmss") .format(new Date())); filePath = file.getAbsolutePath();// ��ȡ��Ƭ�ı���·�� Uri imageUri = Uri.fromFile(file); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, BmobConstants.REQUESTCODE_UPLOADAVATAR_CAMERA); } }); layout_choose.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub ShowLog("点击相册"); layout_photo.setBackgroundColor(getResources().getColor( R.color.base_color_text_white)); layout_choose.setBackgroundDrawable(getResources().getDrawable( R.drawable.pop_bg_press)); Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, BmobConstants.REQUESTCODE_UPLOADAVATAR_LOCATION); } }); avatorPop = new PopupWindow(view, mScreenWidth, 600); avatorPop.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { avatorPop.dismiss(); return true; } return false; } }); avatorPop.setWidth(WindowManager.LayoutParams.MATCH_PARENT); avatorPop.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); avatorPop.setTouchable(true); avatorPop.setFocusable(true); avatorPop.setOutsideTouchable(true); avatorPop.setBackgroundDrawable(new BitmapDrawable()); avatorPop.setAnimationStyle(R.style.Animations_GrowFromBottom); avatorPop.showAtLocation(layout_all, Gravity.BOTTOM, 0, 0); } /** * @Title: startImageAction * @return void * @throws */ private void startImageAction(Uri uri, int outputX, int outputY, int requestCode, boolean isCrop) { Intent intent = null; if (isCrop) { intent = new Intent("com.android.camera.action.CROP"); } else { intent = new Intent(Intent.ACTION_GET_CONTENT, null); } intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", outputX); intent.putExtra("outputY", outputY); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra("return-data", true); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent, requestCode); } Bitmap newBitmap; boolean isFromCamera = false;// int degree = 0; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case BmobConstants.REQUESTCODE_UPLOADAVATAR_CAMERA:// �����޸�ͷ�� if (resultCode == RESULT_OK) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { ShowToast("SD不可用"); return; } isFromCamera = true; File file = new File(filePath); degree = PhotoUtil.readPictureDegree(file.getAbsolutePath()); Log.i("life", "拍照后的角度" + degree); startImageAction(Uri.fromFile(file), 200, 200, BmobConstants.REQUESTCODE_UPLOADAVATAR_CROP, true); } break; case BmobConstants.REQUESTCODE_UPLOADAVATAR_LOCATION:// �����޸�ͷ�� if (avatorPop != null) { avatorPop.dismiss(); } Uri uri = null; if (data == null) { return; } if (resultCode == RESULT_OK) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { ShowToast("SD不可用"); return; } isFromCamera = false; uri = data.getData(); startImageAction(uri, 200, 200, BmobConstants.REQUESTCODE_UPLOADAVATAR_CROP, true); } else { ShowToast("照片获取失败"); } break; case BmobConstants.REQUESTCODE_UPLOADAVATAR_CROP:// �ü�ͷ�񷵻� // TODO sent to crop if (avatorPop != null) { avatorPop.dismiss(); } if (data == null) { // Toast.makeText(this, "ȡ��ѡ��", Toast.LENGTH_SHORT).show(); return; } else { saveCropAvator(data); } filePath = ""; uploadAvatar(); break; default: break; } } private void uploadAvatar() { BmobLog.i("头像地址" + path); final BmobFile bmobFile = new BmobFile(new File(path)); bmobFile.upload(this, new UploadFileListener() { @Override public void onSuccess() { // TODO Auto-generated method stub String url = bmobFile.getFileUrl(SetMyInfoActivity.this); // ����BmobUser���� updateUserAvatar(url); } @Override public void onProgress(Integer arg0) { // TODO Auto-generated method stub } @Override public void onFailure(int arg0, String msg) { // TODO Auto-generated method stub ShowToast("头像上传失败" + msg); } }); } private void updateUserAvatar(final String url) { User u =new User(); u.setAvatar(url); updateUserData(u,new UpdateListener() { @Override public void onSuccess() { // TODO Auto-generated method stub ShowToast("头像更新成功"); // ����ͷ�� refreshAvatar(url); } @Override public void onFailure(int code, String msg) { // TODO Auto-generated method stub ShowToast("头像更新失败" + msg); } }); } String path; /** * ����ü���ͷ�� * * @param data */ private void saveCropAvator(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap bitmap = extras.getParcelable("data"); Log.i("life", "avatar - bitmap = " + bitmap); if (bitmap != null) { bitmap = PhotoUtil.toRoundCorner(bitmap, 10); if (isFromCamera && degree != 0) { bitmap = PhotoUtil.rotaingImageView(degree, bitmap); } iv_set_avator.setImageBitmap(bitmap); // ����ͼƬ String filename = new SimpleDateFormat("yyMMddHHmmss") .format(new Date())+".png"; path = BmobConstants.MyAvatarDir + filename; PhotoUtil.saveBitmap(BmobConstants.MyAvatarDir, filename, bitmap, true); // �ϴ�ͷ�� if (bitmap != null && bitmap.isRecycled()) { bitmap.recycle(); } } } } /** ���Թ�����ϵ�Ƿ���� * @Title: addBlog * @Description: TODO * @param * @return void * @throws */ public void addBlog(){ // BmobRelation relation = new BmobRelation(); // blog.setObjectId("c7a9ca9c0c"); // relation.add(blog); // user.setBlogs(relation); final Blog blog = new Blog(); blog.setBrief("你好"); blog.save(this, new SaveListener() { @Override public void onSuccess() { // TODO Auto-generated method stub BmobLog.i("blog保存成功"); User u =new User(); u.setBlog(blog); updateUserData(u, new UpdateListener() { @Override public void onSuccess() { // TODO Auto-generated method stub BmobLog.i("user更新成功"); } @Override public void onFailure(int code, String msg) { // TODO Auto-generated method stub BmobLog.i("code = "+code+",msg = "+msg); } }); } @Override public void onFailure(int arg0, String arg1) { // TODO Auto-generated method stub } }); } private void updateUserData(User user,UpdateListener listener){ User current = (User) userManager.getCurrentUser(User.class); user.setObjectId(current.getObjectId()); user.update(this, listener); } }