package com.todayinfo.ui.activity;
import java.io.File;
import java.io.IOException;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewStub;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.jinghua.todayinformation.R;
import com.squareup.picasso.Picasso;
import com.todayinfo.model.User;
import com.todayinfo.ui.component.DateDialog;
import com.todayinfo.ui.component.DateDialog.DateBtnListener;
import com.todayinfo.ui.component.pulltozoomview.PullToZoomScrollViewEx;
import com.todayinfo.utils.DateUtils;
import com.todayinfo.utils.SharedpreferncesUtil;
/**
* 用户信息界面
*
* @author zhou.ni 2015年4月20日
*/
public class MyInfoActivity extends SuperActivity implements OnClickListener{
private static final String TAG = "MyInfoActivity";
private ImageView logo;
private TextView nameText;
private TextView sexText;
private TextView birthdayText;
private ViewStub viewStubModifyName; //修改姓名
private ViewStub viewStubModifySex; //修改性别
private ViewStub viewStubExit; //退出账户
private ViewStub viewStubModifyPic; //修改头像
private PullToZoomScrollViewEx scrollView;
private User user = new User();
private DateDialog dateDialog = new DateDialog();
private static final String IMAGE_UNSPECIFIED = "image/*";
private static final int PHOTO_GRAPH = 1; // 拍照
private static final int PHOTO_ZOOM = 2; // 缩放
private static final int PHOTO_RESOULT = 3; // 结果
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info);
getWindow().setBackgroundDrawable(null);
initView();
}
/**
* 初始化控件
*/
@SuppressWarnings("unused")
@SuppressLint("InflateParams")
private void initView() {
RelativeLayout headView = (RelativeLayout) this.findViewById(R.id.head);
RelativeLayout back = (RelativeLayout) headView.findViewById(R.id.back_left);
TextView title = (TextView) headView.findViewById(R.id.head_title);
scrollView = (PullToZoomScrollViewEx) findViewById(R.id.scroll_view);
View zoomView = LayoutInflater.from(this).inflate(R.layout.include_info_head, null, false);
View contentView = LayoutInflater.from(this).inflate(R.layout.include_info_content, null, false);
scrollView.setZoomView(zoomView);
scrollView.setScrollContentView(contentView);
logo = (ImageView) zoomView.findViewById(R.id.logo);
logo.setOnClickListener(this);
ImageView carmera = (ImageView) zoomView.findViewById(R.id.camera_photo);
carmera.setOnClickListener(this);
nameText = (TextView) contentView.findViewById(R.id.name);
RelativeLayout nameRl = (RelativeLayout) contentView.findViewById(R.id.name_rl);
nameRl.setOnClickListener(this);
sexText = (TextView) contentView.findViewById(R.id.sex);
RelativeLayout sexRl = (RelativeLayout) contentView.findViewById(R.id.sex_rl);
sexRl.setOnClickListener(this);
birthdayText = (TextView) contentView.findViewById(R.id.brithday);
RelativeLayout birthdayRl = (RelativeLayout) contentView.findViewById(R.id.brithday_rl);
birthdayRl.setOnClickListener(this);
TextView exit = (TextView) contentView.findViewById(R.id.exit);
exit.setOnClickListener(this);
back.setOnClickListener(this);
title.setOnClickListener(this);
title.setText("个人资料");
DisplayMetrics localDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(localDisplayMetrics);
int mScreenHeight = localDisplayMetrics.heightPixels;
int mScreenWidth = localDisplayMetrics.widthPixels;
LinearLayout.LayoutParams localObject = new LinearLayout.LayoutParams(mScreenWidth, (int) (9.0F * (mScreenWidth / 16.0F)));
scrollView.setHeaderLayoutParams(localObject);
// 更新用户生日
dateDialog.setDateBtnListener(new DateBtnListener() {
@Override
public void pressDateBtn(int id) {
switch (id) {
case R.id.ok_button:
String brithday = birthdayText.getText().toString();
if ( !TextUtils.isEmpty(brithday) ){
long date = DateUtils.getString2Date(brithday);
Log.i(TAG, "" + date);
user.birthday = date;
SharedpreferncesUtil.saveUserInfo(mContext, user);
Toast.makeText(mContext, "更新成功", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
});
fullData();
}
/**
* 填充数据数据
* @param resul
*/
private void fullData(){
User userInfo = mUserController.getUserInfo();
if ( userInfo!=null ) {
user = userInfo;
if( !TextUtils.isEmpty(userInfo.picUrl) ){
Picasso.with(mContext).load(userInfo.picUrl).placeholder(R.drawable.touxing).error(R.drawable.touxing).into(logo);
}
if ( !TextUtils.isEmpty(userInfo.name) ) {
nameText.setText(userInfo.name);
} else {
nameText.setText("");
}
if ( userInfo.gender==2 ) {
sexText.setText("女");
} else if( userInfo.gender==1 ){
sexText.setText("男");
}else {
sexText.setText("-");
}
if( userInfo.birthday != 0 ){
birthdayText.setText(DateUtils.formatDate(userInfo.birthday));
}else{
birthdayText.setText("");
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.back_left:
case R.id.head_title:
finish();
break;
case R.id.name_rl: //修改用户姓名
if ( viewStubModifyName==null ) {
viewStubModifyName = (ViewStub) this.findViewById(R.id.modify_name);
View inflatedView = viewStubModifyName.inflate();
TextView ok = (TextView) inflatedView.findViewById(R.id.ok_button);
TextView cancel = (TextView) inflatedView.findViewById(R.id.cancel_button);
RelativeLayout backarea = (RelativeLayout) inflatedView.findViewById(R.id.blankarea);
final EditText nameEdit = (EditText) inflatedView.findViewById(R.id.name_edittext);
if( mUserController.getUserInfo()!=null ) {
nameEdit.setText(mUserController.getUserInfo().name);
}
backarea.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubModifyName.setVisibility(View.GONE);
}
});
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String newName = nameEdit.getText().toString();
if ( !TextUtils.isEmpty(newName) ) {
user.name = newName;
SharedpreferncesUtil.saveUserInfo(mContext, user);
Toast.makeText(mContext, "更新成功", Toast.LENGTH_SHORT).show();
viewStubModifyName.setVisibility(View.GONE);
} else {
showToast("用户名不能为空");
}
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubModifyName.setVisibility(View.GONE);
}
});
}
viewStubModifyName.setVisibility(View.VISIBLE);
break;
case R.id.brithday_rl: //修改用户生日
dateDialog.showDatePicker(this, birthdayText);
break;
case R.id.sex_rl: //修改用户性别
if ( viewStubModifySex==null ) {
viewStubModifySex = (ViewStub) this.findViewById(R.id.modify_sex);
View inflatedView = viewStubModifySex.inflate();
TextView ok = (TextView) inflatedView.findViewById(R.id.ok_button);
TextView cancel = (TextView) inflatedView.findViewById(R.id.cancel_button);
final TextView radiobtnOne = (TextView) inflatedView.findViewById(R.id.nan_radiobtn);
final TextView radiobtnTow = (TextView) inflatedView.findViewById(R.id.nv_radiobtn);
RelativeLayout backarea = (RelativeLayout) inflatedView.findViewById(R.id.blankarea);
LinearLayout nan = (LinearLayout) inflatedView.findViewById(R.id.nan);
LinearLayout nv = (LinearLayout) inflatedView.findViewById(R.id.nv);
nan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setRbCheck(radiobtnOne, radiobtnTow);
user.gender = 1;//男
}
});
nv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setRbCheck(radiobtnTow, radiobtnOne);
user.gender = 2;//女
}
});
if ( mUserController.getUserInfo()!=null ) {
int gender = mUserController.getUserInfo().gender;
if ( gender == 2 ) {
radiobtnTow.setBackgroundResource(R.drawable.rediobox1);
} else if( gender == 1 ) {
radiobtnOne.setBackgroundResource(R.drawable.rediobox1);
}
}
backarea.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubModifySex.setVisibility(View.GONE);
}
});
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedpreferncesUtil.saveUserInfo(mContext, user);
Toast.makeText(mContext, "更新成功", Toast.LENGTH_SHORT).show();
viewStubModifySex.setVisibility(View.GONE);
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubModifySex.setVisibility(View.GONE);
}
});
}
viewStubModifySex.setVisibility(View.VISIBLE);
break;
case R.id.exit: //退出当前账户
if ( viewStubExit==null ) {
viewStubExit = (ViewStub) this.findViewById(R.id.confirm_exit);
View inflatedView = viewStubExit.inflate();
TextView ok = (TextView) inflatedView.findViewById(R.id.ok_button);
TextView cancel = (TextView) inflatedView.findViewById(R.id.cancel_button);
TextView phoneSelect = (TextView) inflatedView.findViewById(R.id.phone_select);
RelativeLayout backarea = (RelativeLayout) inflatedView.findViewById(R.id.blankarea);
backarea.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubExit.setVisibility(View.GONE);
}
});
if ( mUserController.getUserInfo()!=null ) {
phoneSelect.setText(mUserController.getUserInfo().phone);
}
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 清除用户信息缓存
mUserController. loginOut();
viewStubExit.setVisibility(View.GONE);
finish();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubExit.setVisibility(View.GONE);
}
});
}
viewStubExit.setVisibility(View.VISIBLE);
break;
case R.id.logo:
case R.id.camera_photo: //换图片
if ( viewStubModifyPic==null ) {
viewStubModifyPic = (ViewStub) this.findViewById(R.id.modify_picture);
View inflatedView = viewStubModifyPic.inflate();
TextView cancel = (TextView) inflatedView.findViewById(R.id.select_cancel);
TextView selectPicture = (TextView) inflatedView.findViewById(R.id.photo_album);
TextView selectCamera = (TextView) inflatedView.findViewById(R.id.photo_camera);
RelativeLayout backarea = (RelativeLayout) inflatedView.findViewById(R.id.blankarea);
backarea.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubModifyPic.setVisibility(View.GONE);
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewStubModifyPic.setVisibility(View.GONE);
}
});
selectPicture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
startActivityForResult(intent, PHOTO_ZOOM);
viewStubModifyPic.setVisibility(View.GONE);
}
});
selectCamera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"temp.jpg")));
startActivityForResult(intent, PHOTO_GRAPH);
viewStubModifyPic.setVisibility(View.GONE);
}
});
}
viewStubModifyPic.setVisibility(View.VISIBLE);
break;
default:
break;
}
}
@SuppressWarnings("deprecation")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PHOTO_GRAPH && resultCode == -1) { // 拍照
// 设置文件保存路径
File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
String path = picture.getPath();
if (path != null && !path.equals("")) {
startPhotoZoom(Uri.fromFile(picture));
}
} else if (requestCode == PHOTO_ZOOM && data != null) { // 读取相册缩放图片
Uri originalUri = data.getData(); // 获得图片的uri
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = this.managedQuery(originalUri, proj, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
Log.i(TAG, "before:" + path);
startPhotoZoom(data.getData());
} else {
Toast.makeText(mContext, "读取相册文件失败", Toast.LENGTH_SHORT).show();
}
} else if (requestCode == PHOTO_RESOULT && data != null) { // 处理结果
if ( mUserController.getUserInfo()!=null ) {
//处理图片
handlePicture(getTempUri());
logo.setImageURI(getTempUri());
}
Log.i(TAG, getTempUri().getPath());
}
}
/**
* 处理磁盘图片,如果大于512*512 则缩小图片
*/
private void handlePicture(final Uri uri){
Rect rect = mBitmapUtils.getBitmapBounds(uri);
int area = rect.right*rect.bottom;
if( area > 512*512 ){
Bitmap bitmap = mBitmapUtils.getBitmap(uri, 512, 512);
mBitmapUtils.saveBitmap(bitmap, Environment.getExternalStorageDirectory().getAbsolutePath(), TEMP_PHOTO_FILE, Bitmap.CompressFormat.JPEG);
}
}
/**
* 收缩图片
*
* @param uri
*/
private void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");
// //aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
// intent.putExtra("outputX", 720);
// intent.putExtra("outputY", 480);
intent.putExtra("return-data", false);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, PHOTO_RESOULT);
}
/**
* 生成一个图片URI
*
* @param position
* 图片角标
* @return
*/
private Uri getTempUri() {
return Uri.fromFile(getTempFile());
}
public static final String TEMP_PHOTO_FILE = "vclubs_head_img";
private File getTempFile() {
if (isSDCARDMounted()) {
File f = new File(Environment.getExternalStorageDirectory(),
TEMP_PHOTO_FILE + ".jpg");
try {
f.createNewFile();
} catch (IOException e) {
Toast.makeText(mContext, "创建文件失败", Toast.LENGTH_LONG).show();
}
return f;
} else {
return null;
}
}
private boolean isSDCARDMounted() {
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED))
return true;
return false;
}
/**
* 单选按钮切换
* @param rbTrue
* @param rbFlase
*/
private void setRbCheck(TextView rbTrue, TextView rbFlase) {
rbTrue.setBackgroundResource(R.drawable.rediobox1);
rbFlase.setBackgroundResource(R.drawable.rediobox2);
}
@Override
public void retry() {
}
@Override
public void netError() {
}
@Override
public void pwdError() {
}
@Override
protected void obtainInfo() {
}
}