package com.dreamspace.uucampus.ui.activity.Personal; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; import com.dreamspace.uucampus.R; import com.dreamspace.uucampus.api.ApiManager; import com.dreamspace.uucampus.common.ImageCaptureManager; import com.dreamspace.uucampus.common.UploadImage; import com.dreamspace.uucampus.common.utils.CommonUtils; import com.dreamspace.uucampus.common.utils.NetUtils; import com.dreamspace.uucampus.common.utils.PreferenceUtils; import com.dreamspace.uucampus.model.ErrorRes; import com.dreamspace.uucampus.model.api.CommonStatusRes; import com.dreamspace.uucampus.model.api.LocationAllRes; import com.dreamspace.uucampus.model.api.QnRes; import com.dreamspace.uucampus.model.api.UpdateUserInfoReq; import com.dreamspace.uucampus.model.api.UserInfoRes; import com.dreamspace.uucampus.ui.base.AbsActivity; import com.dreamspace.uucampus.ui.dialog.ChangNameDialog; import com.dreamspace.uucampus.ui.dialog.MsgDialog; import com.dreamspace.uucampus.ui.dialog.ProgressDialog; import com.dreamspace.uucampus.ui.dialog.SelectPhotoDialog; import com.dreamspace.uucampus.ui.dialog.WheelDialog; import com.qiniu.android.http.ResponseInfo; import com.qiniu.android.storage.UpCompletionHandler; import org.json.JSONObject; import java.util.ArrayList; import java.util.Calendar; import butterknife.Bind; import de.hdodenhof.circleimageview.CircleImageView; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; /** * Created by Lx on 2015/10/17. */ public class PersonalInfoAct extends AbsActivity { @Bind(R.id.avater_rl) RelativeLayout avaterRl; @Bind(R.id.nickname_rl) RelativeLayout nicknameRl; @Bind(R.id.school_rl) RelativeLayout schoolRl; @Bind(R.id.year_rl) RelativeLayout yearRl; @Bind(R.id.personal_info_avater) CircleImageView avaterCiv; @Bind(R.id.nickname_tv) TextView nickNameTv; @Bind(R.id.bundling_phone_tv) TextView phoneTv; @Bind(R.id.in_school_year_tv) TextView yearTv; @Bind(R.id.loaction_tv) TextView loactionTv; public static final int SELECT_AVATER = 1; public static final int TAKE_AVATER = 2; private ChangNameDialog changNameDialog; private ProgressDialog progressDialog; private MsgDialog msgDialog; private ArrayList<String> loactions; private WheelDialog yearDialog; private WheelDialog loactionDialog; private boolean actDestory = false; private SelectPhotoDialog selectPhotoDialog; private ImageCaptureManager captureManager; private static final String TEMP_FILE = "temp_file"; @Override protected void onSaveInstanceState(Bundle outState) { captureManager.onSaveInstanceState(outState); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); captureManager.onRestoreInstanceState(savedInstanceState); } @Override protected int getContentView() { return R.layout.activity_personal_info; } @Override protected void prepareDatas() { //获取所有校区 captureManager = new ImageCaptureManager(PersonalInfoAct.this); getLoactions(); } @Override protected void initViews() { getSupportActionBar().setTitle(getString(R.string.personal_info)); //将从personalcenterframgent传递过来的userinfo显示到view CommonUtils.showImageWithGlideInCiv(this, avaterCiv, PreferenceUtils.getString(this,PreferenceUtils.Key.AVATAR)); nickNameTv.setText(PreferenceUtils.getString(this,PreferenceUtils.Key.NAME)); phoneTv.setText(PreferenceUtils.getString(this, PreferenceUtils.Key.PHONE)); loactionTv.setText(PreferenceUtils.getString(this, PreferenceUtils.Key.LOCATION)); yearTv.setText(PreferenceUtils.getString(this,PreferenceUtils.Key.ENROLL_YEAR)); initListeners(); } @Override protected View getLoadingTargetView() { return null; } private void initListeners(){ avaterRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { initSelectPhotoDialog(); selectPhotoDialog.show(); } }); nicknameRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { initChangeNameDialog(); changNameDialog.setText(PreferenceUtils.getString(PersonalInfoAct.this,PreferenceUtils.Key.NAME)); changNameDialog.show(); } }); schoolRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (loactions != null) { initLocationDialog(); loactionDialog.show(); } else { initMsgDialog(); msgDialog.show(); } } }); yearRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { initYearDialog(); yearDialog.show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(selectPhotoDialog != null){ selectPhotoDialog.dismiss(); } if(requestCode == SELECT_AVATER && resultCode == RESULT_OK){ Uri uri = data.getData(); upLoadImage(CommonUtils.getRealPathFromURI(this, uri)); }else if(requestCode == TAKE_AVATER && resultCode == RESULT_OK){ if(captureManager.getCurrentPhotoPath() != null){ upLoadImage(captureManager.getCurrentPhotoPath()); } } } //修改用户信息 private void modifyUserInfo(String imagePath,String nickName,String campus,String enrollYear){ if(!NetUtils.isNetworkConnected(this)){ showToast(getString(R.string.network_error_tips)); return; } UpdateUserInfoReq userInfo = new UpdateUserInfoReq(); userInfo.setImage(imagePath); userInfo.setName(nickName); userInfo.setLocation(campus); userInfo.setEnroll_year(enrollYear); ApiManager.getService(this).updateUserInfo(userInfo, new Callback<CommonStatusRes>() { @Override public void success(CommonStatusRes commonStatusRes, Response response) { if (commonStatusRes.getStatus().equals("ok")) { //修改成功后及时获取最新用户信息 getUserInfo(); progressDialog.dismiss(); } } @Override public void failure(RetrofitError error) { ErrorRes errorRes = (ErrorRes) error.getBodyAs(ErrorRes.class); progressDialog.dismiss(); showToast(errorRes.getReason()); } }); } //获取用户信息 private void getUserInfo(){ if(!NetUtils.isNetworkConnected(this)){ showToast(getString(R.string.network_error_tips)); progressDialog.dismiss(); return; } ApiManager.getService(this).getUserInfo(new Callback<UserInfoRes>() { @Override public void success(UserInfoRes userInfoRes, Response response) { //获取到最新的用户信息后将信息显示于界面 if (userInfoRes != null && !actDestory) { CommonUtils.showImageWithGlideInCiv(PersonalInfoAct.this, avaterCiv, userInfoRes.getImage()); nickNameTv.setText(userInfoRes.getName()); yearTv.setText(userInfoRes.getEnroll_year()); loactionTv.setText(userInfoRes.getLocation()); //将最新信息缓存到本地 PreferenceUtils.putString(PersonalInfoAct.this, PreferenceUtils.Key.AVATAR, userInfoRes.getImage()); PreferenceUtils.putString(PersonalInfoAct.this, PreferenceUtils.Key.NAME, userInfoRes.getName()); PreferenceUtils.putString(PersonalInfoAct.this, PreferenceUtils.Key.ENROLL_YEAR, userInfoRes.getEnroll_year()); PreferenceUtils.putString(PersonalInfoAct.this, PreferenceUtils.Key.PHONE, userInfoRes.getPhone_num()); PreferenceUtils.putString(PersonalInfoAct.this, PreferenceUtils.Key.LOCATION, userInfoRes.getLocation()); progressDialog.dismiss(); showToast(getString(R.string.modify_success)); } } @Override public void failure(RetrofitError error) { ErrorRes errorRes = (ErrorRes) error.getBodyAs(ErrorRes.class); progressDialog.dismiss(); showToast(errorRes.getReason()); } }); } //初始化修改昵称对话框 private void initChangeNameDialog(){ if(changNameDialog != null){ return; } changNameDialog = new ChangNameDialog(this); changNameDialog.setNegativeButton(new View.OnClickListener() { @Override public void onClick(View v) { changNameDialog.dismiss(); } }); changNameDialog.setPositiveButton(new View.OnClickListener() { @Override public void onClick(View v) { initProgressDilaog(); progressDialog.setContent(getString(R.string.nickname_in_change)); //修改框隐藏,progressdialog显示 changNameDialog.dismiss(); progressDialog.show(); modifyUserInfo(null, changNameDialog.getText(), null, null); } }); } //初始化progressdialog private void initProgressDilaog(){ if(progressDialog != null){ return; } progressDialog = new ProgressDialog(this); } //获取所有校区 private void getLoactions(){ if(!NetUtils.isNetworkConnected(this)){ showToast(getString(R.string.network_error_tips)); return; } ApiManager.getService(this).getAllLocation(new Callback<LocationAllRes>() { @Override public void success(LocationAllRes locationAllRes, Response response) { if (locationAllRes != null && !actDestory) { loactions = locationAllRes.getLocation(); } } @Override public void failure(RetrofitError error) { showInnerError(error); } }); } private void initYearDialog(){ if(yearDialog != null){ return; } //获取当前时间 Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int yearEnd = year + 5; ArrayList<String> years = new ArrayList<>(); for(int i = year - 10;i < yearEnd;i++){ years.add(i + ""); } yearDialog = new WheelDialog(this); yearDialog.setTitle(getString(R.string.select_in_school_year)); yearDialog.setData(years); yearDialog.setNegativeButton(new View.OnClickListener() { @Override public void onClick(View v) { yearDialog.dismiss(); } }); yearDialog.setPositiveButton(new View.OnClickListener() { @Override public void onClick(View v) { initProgressDilaog(); yearDialog.dismiss(); progressDialog.setContent(getString(R.string.modifing)); progressDialog.show(); modifyUserInfo(null, null, null, yearDialog.getSelectedText()); } }); } private void initLocationDialog(){ if(loactionDialog != null){ return; } loactionDialog = new WheelDialog(this); loactionDialog.setTitle(getString(R.string.choose_enroll_year)); loactionDialog.setData(loactions); loactionDialog.setPositiveButton(new View.OnClickListener() { @Override public void onClick(View v) { initProgressDilaog(); loactionDialog.dismiss(); progressDialog.setContent(getString(R.string.modifing)); progressDialog.show(); modifyUserInfo(null, null, loactionDialog.getSelectedText(), null); } }); loactionDialog.setNegativeButton(new View.OnClickListener() { @Override public void onClick(View v) { loactionDialog.dismiss(); } }); } private void initMsgDialog(){ if(msgDialog != null){ return; } msgDialog = new MsgDialog(this); msgDialog.setContent(getString(R.string.get_loaction_error)); msgDialog.setPositiveButton(new View.OnClickListener() { @Override public void onClick(View v) { getLoactions(); msgDialog.dismiss(); } }); msgDialog.setNegativeButton(new View.OnClickListener() { @Override public void onClick(View v) { msgDialog.dismiss(); } }); } private void initSelectPhotoDialog(){ if(selectPhotoDialog != null){ return; } selectPhotoDialog = new SelectPhotoDialog(this,captureManager,SELECT_AVATER,TAKE_AVATER); } //上传图片 private void upLoadImage(final String path){ initProgressDilaog(); progressDialog.show(); if(!NetUtils.isNetworkConnected(this)){ showToast(getString(R.string.network_error_tips)); } ApiManager.getService(this).createQiNiuToken(new Callback<QnRes>() { @Override public void success(QnRes qnRes, Response response) { UploadImage.upLoadImage(path, qnRes.getKey(), qnRes.getToken(), new UpCompletionHandler() { @Override public void complete(String key, ResponseInfo info, JSONObject response) { if(info.isOK()){ modifyUserInfo(key,null,null,null); } } },null); } @Override public void failure(RetrofitError error) { showToast(getString(R.string.image_upload_failed)); } }); } @Override protected void onDestroy() { super.onDestroy(); actDestory = true; } @Override public void onBackPressed() { //返回最新的用户数据 setResult(RESULT_OK); super.onBackPressed(); } }