package com.lling.qiqu.activitys; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.ref.WeakReference; import org.json.JSONObject; import android.app.Dialog; import android.content.ContentResolver; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.lidroid.xutils.ViewUtils; import com.lidroid.xutils.view.annotation.ContentView; import com.lidroid.xutils.view.annotation.ViewInject; import com.lidroid.xutils.view.annotation.event.OnClick; import com.lling.qiqu.App; import com.lling.qiqu.R; import com.lling.qiqu.beans.KeyToken; import com.lling.qiqu.commons.Constants; import com.lling.qiqu.service.IUserService; import com.lling.qiqu.service.impl.UserServiceImpl; import com.lling.qiqu.utils.BitmapUtil; import com.lling.qiqu.utils.FastjsonUtil; import com.lling.qiqu.utils.ProgressDialogUtils; import com.lling.qiqu.utils.ToastUtils; import com.lling.qiqu.utils.ToolsUtils; import com.qiniu.android.http.ResponseInfo; import com.qiniu.android.storage.UpCompletionHandler; import com.qiniu.android.storage.UploadManager; import com.umeng.analytics.MobclickAgent; /** * @ClassName: UserInfoActivity * @Description: 用户基本信息界面 * @author lling * @date 2015-7-5 */ @ContentView(R.layout.activity_user_info) public class UserInfoActivity extends BaseActivity { private final String TAG = "UserInfoActivity"; private final int PIC_SIZE = 200; private final int CHOSE_PIC_CODE = 1; private final int TAKE_PHOTO_CODE = 2; private final int CROP_CODE = 3; /* 头像名称 */ private final String IMAGE_FILE_NAME = "portrait.jpg"; @ViewInject(R.id.userinfo_user_protrait) private ImageView mPortraitIV; @ViewInject(R.id.userinfo_user_nickname) private TextView mNickTV; @ViewInject(R.id.userinfo_user_sex) private TextView mSexTV; private Dialog mSexDialog; private Dialog mPortraitDialog; private IUserService mUserService = new UserServiceImpl(this); private ClassHandler mHandler = new ClassHandler(this); private KeyToken mKeyToken = null; private String mPortraitURL; private int mSexFlag = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewUtils.inject(this); init(); } /** * 初始化界面信息 */ private void init() { if(App.currentUser == null) { return; } BitmapUtil.display(mPortraitIV, App.currentUser.getPortraitUrl()); mNickTV.setText(App.currentUser.getUserNike()); mSexTV.setText(App.currentUser.getSex()==1?"男":"女"); } @Override protected void onResume() { init(); MobclickAgent.onPageStart("UserInfoActivity"); //统计页面 super.onResume(); } @Override protected void onPause() { MobclickAgent.onPageEnd("UserInfoActivity"); super.onPause(); } /* 修改昵称 */ @OnClick(R.id.user_nickname_biglayout) private void setNick(View view) { Intent intent = new Intent(this, UpdateNickActivity.class); startActivityWithAnimation(intent); } /* 修改性别 */ @OnClick(R.id.user_sex_biglayout) private void setSex(View view) { if (mSexDialog == null) { createSexDialog(); } mSexDialog.show(); } /** * 创建性别选择对话框 */ private void createSexDialog() { mSexDialog = new Dialog(this, R.style.Translucent_NoTitle); mSexDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置对话框无title mSexDialog.setContentView(R.layout.dialog_userinfo); TextView title = (TextView) mSexDialog .findViewById(R.id.dialog_userinfo_title); title.setText(R.string.sex); ListView listview = (ListView) mSexDialog .findViewById(R.id.dialog_userinfo_listview); String[] strings = new String[] { "男", "女" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>( getApplicationContext(), R.layout.listitem_userinfo_dialog, R.id.name, strings); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(position == 0) { mSexTV.setText(R.string.sex_man); mSexFlag = 1; } else { mSexTV.setText(R.string.sex_women); mSexFlag = 0; } mSexDialog.dismiss(); if(mSexFlag == App.currentUser.getSex()) { return; } ProgressDialogUtils.showProgressDialog(UserInfoActivity.this, "正在处理中..."); mUserService.setNickAndSex(mHandler, String.valueOf(App.currentUser.getId()), null, String.valueOf(mSexFlag)); } }); ToolsUtils.setDialogBgAndAnim(mSexDialog); } /* 修改头像 */ @OnClick(R.id.user_portrait_biglayout) private void setPortrait(View view) { if (mPortraitDialog == null) { createPortraitDialog(); } mPortraitDialog.show(); } private void createPortraitDialog() { mPortraitDialog = new Dialog(this, R.style.Translucent_NoTitle); mPortraitDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置对话框无title mPortraitDialog.setContentView(R.layout.dialog_userinfo); TextView title = (TextView) mPortraitDialog .findViewById(R.id.dialog_userinfo_title); title.setText(R.string.set_portrait); ListView listview = (ListView) mPortraitDialog .findViewById(R.id.dialog_userinfo_listview); String[] strings = new String[] { "相册", "相机" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>( getApplicationContext(), R.layout.listitem_userinfo_dialog, R.id.name, strings); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: // 选中相册 Intent intentFromGallery = new Intent(); intentFromGallery.setType("image/*"); // 设置文件类型 intentFromGallery.setAction(Intent.ACTION_GET_CONTENT); startActivityForResultWithAnimation(intentFromGallery, CHOSE_PIC_CODE); break; case 1: // 选中照相机 Intent intentFromCapture = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); // 判断存储卡是否可以用,可用进行存储 if(ToolsUtils.hasSdcard()) { intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment .getExternalStorageDirectory(), IMAGE_FILE_NAME))); startActivityForResultWithAnimation(intentFromCapture, TAKE_PHOTO_CODE); } else { ToastUtils.showMessageLong(getApplicationContext(), "未找到存储卡,无法存储照片!"); } break; } mPortraitDialog.dismiss(); } }); ToolsUtils.setDialogBgAndAnim(mPortraitDialog); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } switch (requestCode) { case CHOSE_PIC_CODE: //从相册选择照片成功 try { startPhotoZoom(data.getData()); } catch (Exception e) { e.printStackTrace(); } break; case TAKE_PHOTO_CODE: //从相机拍照成功 File tempFile = new File(Environment.getExternalStorageDirectory() + "/" + IMAGE_FILE_NAME); try { startPhotoZoom(Uri.fromFile(tempFile)); } catch (Exception e) { e.printStackTrace(); } break; case CROP_CODE: //裁剪照片成功 if (data == null) { return; } getImageToView(); break; } } /** * 保存裁剪之后的图片数据 * @param pic data * @throws IOException */ private void getImageToView() { ProgressDialogUtils.showProgressDialog(this, "正在处理中..."); mUserService.getQiNiuToken(mHandler); } /** * 裁剪图片方法实现 * * @param uri * @throws Exception * @throws FileNotFoundException */ public void startPhotoZoom(Uri uri) throws Exception { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File( Environment.getExternalStorageDirectory(), IMAGE_FILE_NAME))); byte[] mContent; ContentResolver resolver = getContentResolver(); // 将图片内容解析成字节数组 mContent = ToolsUtils.readStream(resolver .openInputStream(Uri.parse(uri.toString()))); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 2; // 将字节数组转换为ImageView可调用的Bitmap对象 Bitmap myBitmap = ToolsUtils.getPicFromBytes(mContent, opts); if (myBitmap.getWidth() >= PIC_SIZE && myBitmap.getHeight() >= PIC_SIZE) { // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); } intent.putExtra("return-data", true); startActivityForResult(intent, CROP_CODE); } /** * 消息处理类 * @author lling */ static class ClassHandler extends Handler { WeakReference<UserInfoActivity> mActivityReference; ClassHandler(UserInfoActivity activity) { mActivityReference = new WeakReference<UserInfoActivity>(activity); } public void handleMessage(Message msg) { final UserInfoActivity activity = mActivityReference.get(); if(activity == null) { return; } switch (msg.what) { case Constants.FAILURE: // 获取七牛token失败 ProgressDialogUtils.dismiss(); break; case Constants.SUCCESS: // 获取七牛token成功 if(msg.obj == null) { break; } activity.mKeyToken = FastjsonUtil.deserialize( msg.obj.toString(), KeyToken.class); activity.uploadPortrait(); break; case Constants.FAILURE_1: //设置头像失败 ProgressDialogUtils.dismiss(); break; case Constants.SUCCESS_1: //设置头像成功 activity.setPortraitSuccess(); ProgressDialogUtils.dismiss(); ToastUtils.showMessageInCenter(activity, activity.getString(R.string.set_portrait_success)); break; case Constants.FAILURE_2: //设置性别失败 ProgressDialogUtils.dismiss(); break; case Constants.SUCCESS_2: //设置性别成功 activity.setSexSuccess(); ProgressDialogUtils.dismiss(); break; } } } /** * 设置昵称和性别成功 */ private void setSexSuccess() { if(App.currentUser == null) { return; } App.currentUser.setSex(mSexFlag); spUtil.putObject("user", App.currentUser); } /** * 上传头像 */ private void uploadPortrait() { if(mKeyToken == null) { ToastUtils.showMessage(getApplicationContext(), R.string.set_portrait_fail); return; } UploadManager uploadManager = new UploadManager(); File file = new File(Environment.getExternalStorageDirectory() + "/" + IMAGE_FILE_NAME); uploadManager.put(file, mKeyToken.getKey(), mKeyToken.getToken(), new UpCompletionHandler() { @Override public void complete(String fileName, ResponseInfo responseInfo, JSONObject jsonObject) { mPortraitURL = Constants.UPLOADFILE_PRE + fileName; if (responseInfo.isOK()) { //上传成功,更新用户头像 mUserService.setPortrait(mHandler, String.valueOf(App.currentUser.getId()), mPortraitURL); } else { ToastUtils.showMessage(getApplicationContext(), R.string.set_portrait_fail); ProgressDialogUtils.dismiss(); } } }, null); } /** * 设置头像成功 */ private void setPortraitSuccess() { BitmapUtil.display(mPortraitIV, mPortraitURL); if(App.currentUser == null) { return; } App.currentUser.setPortraitUrl(mPortraitURL); spUtil.putObject("user", App.currentUser); } /** * 注销当前账号 * @param view */ @OnClick(R.id.login_out_btn) private void loginOut(View view) { App.currentUser = null; spUtil.remove("user"); finishWithAnimation(); } @OnClick(R.id.back) private void back(View view) { finishWithAnimation(); } }