package com.cheikh.lazywaimai.ui.fragment;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.View;
import com.cheikh.lazywaimai.R;
import com.cheikh.lazywaimai.base.BaseController;
import com.cheikh.lazywaimai.base.BaseFragment;
import com.cheikh.lazywaimai.context.AppContext;
import com.cheikh.lazywaimai.controller.UserController;
import com.cheikh.lazywaimai.model.bean.ResponseError;
import com.cheikh.lazywaimai.model.bean.User;
import com.cheikh.lazywaimai.ui.Display;
import com.cheikh.lazywaimai.util.ContentView;
import com.cheikh.lazywaimai.util.FileUtil;
import com.cheikh.lazywaimai.util.SDCardUtil;
import com.cheikh.lazywaimai.util.StringUtil;
import com.cheikh.lazywaimai.util.ToastUtil;
import com.cheikh.lazywaimai.widget.PicassoImageView;
import com.cheikh.lazywaimai.widget.section.SectionExtensionItemView;
import com.cheikh.lazywaimai.widget.section.SectionTextItemView;
import com.jph.takephoto.app.TakePhoto;
import com.jph.takephoto.app.TakePhotoImpl;
import com.jph.takephoto.model.CropOptions;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import butterknife.Bind;
import butterknife.OnClick;
/**
* author: cheikh.wang on 17/1/5
* email: wanghonghi@126.com
*/
@ContentView(R.layout.fragment_user_profile)
public class UserProfileFragment extends BaseFragment<UserController.UserUiCallbacks>
implements UserController.UserProfileUi {
@Bind(R.id.item_avatar)
SectionExtensionItemView mAvatarItem;
@Bind(R.id.img_avatar)
PicassoImageView mAvatarImg;
@Bind(R.id.item_nickname)
SectionTextItemView mNicknameItem;
@Bind(R.id.item_username)
SectionTextItemView mUsernameItem;
@Bind(R.id.item_mobile)
SectionTextItemView mMobileItem;
@Bind(R.id.item_email)
SectionTextItemView mEmailItem;
@Bind(R.id.item_password)
SectionTextItemView mPasswordItem;
private TakePhoto mTakePhoto;
private CropOptions mCropOptions;
private User mUser;
protected BaseController getController() {
return AppContext.getContext().getMainController().getUserController();
}
@Override
protected String getTitle() {
return getString(R.string.title_user_profile);
}
@Override
public void onCreate(Bundle savedInstanceState) {
getTakePhoto().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
getTakePhoto().onSaveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
getTakePhoto().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void showUserInfo(User user) {
mUser = user;
mAvatarImg.loadProfile(user);
mMobileItem.setSubtitle(user.getMobile());
mNicknameItem.setSubtitle(StringUtil.isNotEmpty(user.getNickname()) ? user.getNickname() : "无");
mUsernameItem.setSubtitle(StringUtil.isNotEmpty(user.getUsername()) ? user.getUsername() : "无");
mEmailItem.setSubtitle(StringUtil.isNotEmpty(user.getEmail()) ? user.getEmail() : "无");
}
@Override
public void uploadAvatarFinish() {
cancelLoading();
ToastUtil.showToast(R.string.toast_success_upload_avatar);
}
@Override
public void onResponseError(ResponseError error) {
cancelLoading();
ToastUtil.showToast(error.getMessage());
}
@OnClick({R.id.item_avatar, R.id.item_nickname, R.id.item_username, R.id.item_mobile, R.id.item_email, R.id.item_password})
public void onClick(View view) {
switch (view.getId()) {
case R.id.item_avatar:
selectUpdateAvatarMethod();
break;
case R.id.item_nickname:
wantToSetNickname();
break;
case R.id.item_username:
wantToSetUsername();
break;
case R.id.item_mobile:
ToastUtil.showToast("还未开发");
break;
case R.id.item_email:
ToastUtil.showToast("还未开发");
break;
case R.id.item_password:
ToastUtil.showToast("还未开发");
break;
}
}
/**
* 显示选择更换头像的方式
*/
private void selectUpdateAvatarMethod() {
new AlertDialog.Builder(getContext())
.setTitle(R.string.dialog_update_avatar_title)
.setItems(R.array.update_avatar, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Uri originUri = getOriginUri();
if (originUri != null) {
if (which == 0) {
getTakePhoto().onPickFromCaptureWithCrop(originUri, getCropOptions());
} else {
getTakePhoto().onPickFromGalleryWithCrop(originUri, getCropOptions());
}
}
}
})
.show();
}
/**
* 设置昵称
*/
private void wantToSetNickname() {
Display display = getDisplay();
if (display != null) {
display.showSetNicknameFragment();
}
}
/**
* 设置用户名
*/
private void wantToSetUsername() {
if (mUser != null && TextUtils.isEmpty(mUser.getUsername())) {
Display display = getDisplay();
if (display != null) {
display.showSetUsernameFragment();
}
} else {
ToastUtil.showToast(R.string.toast_error_already_set_username);
}
}
/**
* 获取TakePhoto实例
*/
private TakePhoto getTakePhoto(){
if (mTakePhoto == null){
mTakePhoto = new TakePhotoImpl(this, new TakePhoto.TakeResultListener() {
@Override
public void takeSuccess(String imagePath) {
// 开始上传图片
showLoading(R.string.label_being_something);
getCallbacks().uploadAvatar(new File(imagePath));
}
@Override
public void takeFail(String msg) {
ToastUtil.showToast(msg);
}
@Override
public void takeCancel() {
}
});
}
return mTakePhoto;
}
/**
* 获取裁剪的选项
*/
private CropOptions getCropOptions() {
if (mCropOptions == null) {
mCropOptions = new CropOptions.Builder()
.setAspectX(1)
.setAspectY(1)
.create();
}
return mCropOptions;
}
/**
* 获取裁剪后的图片的存储位置
*/
@SuppressLint("SimpleDateFormat")
private Uri getOriginUri() {
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
String fileName = "lazy_crop_" + timeStamp + ".jpg";
if (SDCardUtil.isAvailable()) {
File cropFile = FileUtil.createImageFile(getContext(), fileName);
return Uri.fromFile(cropFile);
} else {
ToastUtil.showToast(R.string.toast_error_have_not_sd_card_to_store_photo);
return null;
}
}
}