/*
* The MIT License (MIT)
*
* Copyright (c) 2014-2015 Umeng, Inc
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.umeng.comm.ui.fragments;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.text.Selection;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.EditText;
import android.widget.TextView;
import com.umeng.comm.core.beans.CommConfig;
import com.umeng.comm.core.beans.CommUser;
import com.umeng.comm.core.beans.CommUser.Gender;
import com.umeng.comm.core.constants.Constants;
import com.umeng.comm.core.imageloader.ImgDisplayOption;
import com.umeng.comm.core.imageloader.UMImageLoader;
import com.umeng.comm.core.sdkmanager.ImageLoaderManager;
import com.umeng.comm.core.utils.CommonUtils;
import com.umeng.comm.core.utils.ResFinder;
import com.umeng.comm.core.utils.ResFinder.ResType;
import com.umeng.comm.core.utils.ToastMsg;
import com.umeng.comm.ui.activities.BaseFragmentActivity;
import com.umeng.comm.ui.mvpview.MvpUserProfileSettingView;
import com.umeng.comm.ui.presenter.impl.UserSettingPresenter;
import com.umeng.comm.ui.utils.ViewFinder;
import com.umeng.comm.ui.widgets.SquareImageView;
/**
* 用户设置Fragment
*/
public class UserSettingFragment extends BaseFragment<CommUser, UserSettingPresenter> implements
OnClickListener, MvpUserProfileSettingView {
/**
* ImageLoader
*/
protected UMImageLoader mImageLoader = ImageLoaderManager.getInstance().getCurrentSDK();
private EditText mNickNameEtv;
private TextView mGendertTextView;
private SquareImageView mIconImg;
private CommUser mUser;
private Dialog mDialog;
private Gender mGender;
private boolean isFirstSetting = false;// 是否第一次登录跳转到设置页面
public boolean isRegisterUserNameInvalid = false;
private ProgressDialog mProgressDialog;
/**
* 获取用户设置页面的Fragment</br>
*
* @return
*/
public static UserSettingFragment getUserSettingFragment() {
return new UserSettingFragment();
}
@Override
protected int getFragmentLayout() {
return ResFinder.getLayout("umeng_comm_account_setting");
}
@Override
protected UserSettingPresenter createPresenters() {
return new UserSettingPresenter(getActivity(), this);
}
@Override
protected void initWidgets() {
mProgressDialog = new ProgressDialog(getActivity());
if (mUser == null || TextUtils.isEmpty(mUser.id)) {
mUser = CommConfig.getConfig().loginedUser;
}
mGender = mUser.gender;
initViews(mRootView);
mPresenter.setFirstSetting(isFirstSetting);
}
/**
* 初始化相关视图控件
*/
private void initViews(View rootView) {
mViewFinder = new ViewFinder(rootView);
int userIconResId = ResFinder.getId("umeng_comm_user_icon");
int nameEditResId = ResFinder.getId("umeng_comm_nickname_edt");
int genderTextResId = ResFinder.getId("umeng_comm_gender_textview");
mIconImg = mViewFinder.findViewById(userIconResId);
mIconImg.setOnClickListener(this);
// 初始化昵称
mNickNameEtv = mViewFinder.findViewById(nameEditResId);
if (!TextUtils.isEmpty(mUser.name)) {
mNickNameEtv.setText(mUser.name);
Selection.setSelection(mNickNameEtv.getText(), mNickNameEtv.length());
}
// 初始化性别
mGendertTextView = mViewFinder.findViewById(genderTextResId);
String genderStr = ResFinder.getString("umeng_comm_male");
if (mUser.gender == Gender.FEMALE) {
genderStr = ResFinder.getString("umeng_comm_female");
changeDefaultIcon(Gender.FEMALE);
}
if (!TextUtils.isEmpty(mUser.iconUrl)) {
// mImageLoader.reset();
mImageLoader.displayImage(mUser.iconUrl, mIconImg, getDisplayOption(mGender));
mImageLoader.resume();
}
mGendertTextView.setText(genderStr);
mGendertTextView.setOnClickListener(this);
}
/**
* 通过外部设置用户信息
*
* @param user
*/
public void setUser(CommUser user) {
mUser = user;
}
public void setFirstSetting(boolean isFirstSetting) {
this.isFirstSetting = isFirstSetting;
}
/**
* @param bmp
*/
public void showClipedBitmap(Bitmap bmp) {
if (bmp != null) {
mIconImg.setImageBitmap(bmp);
}
}
/**
* 检查检查昵称、年龄数据是否正确</br>
*
* @return
*/
private boolean checkData() {
String name = mNickNameEtv.getText().toString().trim();
if (TextUtils.isEmpty(name)) {
ToastMsg.showShortMsgByResName("umeng_comm_user_center_no_name");
return false;
}
boolean result = CommonUtils.isUserNameValid(name);
if (!result) {
ToastMsg.showShortMsgByResName("umeng_comm_user_name_tips");
}
return result;
}
@Override
public void onClick(View v) {
int id = v.getId();
int userIconResId = ResFinder.getId("umeng_comm_user_icon");
int genderTextViewResId = ResFinder.getId("umeng_comm_gender_textview");
int maleViewResId = ResFinder.getId("umeng_comm_gender_textview_male");
int femalViewResId = ResFinder.getId("umeng_comm_gender_textview_femal");
if (id == userIconResId) {
if (isRegisterUserNameInvalid) {
ToastMsg.showShortMsgByResName("umeng_comm_before_save");
} else {
selectProfile();
}
} else if (id == genderTextViewResId) {
// 显示选择性别的dialog
showGenderDialog();
} else if (id == maleViewResId) {
String maleStr = ResFinder.getString("umeng_comm_male");
mGendertTextView.setText(maleStr);
closeDialog();
changeDefaultIcon(Gender.MALE);
} else if (id == femalViewResId) {
String femalStr = ResFinder.getString("umeng_comm_female");
mGendertTextView.setText(femalStr);
closeDialog();
changeDefaultIcon(Gender.FEMALE);
}
}
/**
* 根据性别切换用户默认头像。该行为仅仅发生在用户没有头像的情况下</br>
*
* @param gender 用户性别
*/
private void changeDefaultIcon(Gender gender) {
mGender = gender;
// 头像为空的情况下才设置
if (TextUtils.isEmpty(mUser.iconUrl)) {
int resId = 0;
if (gender == Gender.MALE) {
resId = ResFinder.getResourceId(ResType.DRAWABLE, "umeng_comm_male");
} else {
resId = ResFinder.getResourceId(ResType.DRAWABLE, "umeng_comm_female");
}
mIconImg.setImageResource(resId);
}
}
private ImgDisplayOption getDisplayOption(Gender gender) {
ImgDisplayOption displayOption = new ImgDisplayOption();
int resId = ResFinder.getResourceId(ResType.DRAWABLE, "umeng_comm_male");
if (gender == Gender.FEMALE) {
resId = ResFinder.getResourceId(ResType.DRAWABLE, "umeng_comm_female");
}
displayOption.setLoadingResId(resId).setLoadFailedResId(resId);
return displayOption;
}
/**
* 从相册中选择头像</br>
*/
private void selectProfile() {
Intent pickImageIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickImageIntent.setType("image/png;image/jpeg");
getActivity().startActivityForResult(pickImageIntent, Constants.PIC_SELECT);
}
/**
* 显示选择性别的Dialog</br>
*/
private void showGenderDialog() {
int style = ResFinder.getStyle("customDialog");
int layout = ResFinder.getLayout("umeng_comm_gender_select");
int femalResId = ResFinder.getId("umeng_comm_gender_textview_femal");
int maleResId = ResFinder.getId("umeng_comm_gender_textview_male");
mDialog = new Dialog(getActivity(), style);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
View view = LayoutInflater.from(getActivity()).inflate(layout,
null, false);
mDialog.setContentView(view);
mDialog.setCanceledOnTouchOutside(true);
view.findViewById(femalResId).setOnClickListener(this);
view.findViewById(maleResId).setOnClickListener(this);
mDialog.show();
}
/**
* 注册或者更新用户信息
*/
public void registerOrUpdateUserInfo() {
boolean flag = checkData();
if (!flag) {
return;
}
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setMessage(ResFinder.getString("umeng_comm_update_user_info"));
if (isRegisterUserNameInvalid) {
register(mProgressDialog);
} else {
updateUserInfo(mProgressDialog);
}
}
private void register(final ProgressDialog dialog) {
mUser.name = mNickNameEtv.getText().toString().trim();
mUser.gender = mGender;
// mCommunitySDK.register(mUser, new FetchListener<LoginResponse>() {
//
// @Override
// public void onStart() {
// dialog.show();
// }
//
// @Override
// public void onComplete(LoginResponse response) {
// dialog.dismiss();
// if (response.errCode == 0) {
// Source source = mUser.source;
// mUser = response.result;
// LoginHelper.loginSuccess(getActivity(), mUser, source);
// Intent intent = new Intent(getActivity(), GuideActivity.class);
// getActivity().startActivity(intent);
// getActivity().finish();
// }
//
// showResponseToast(response);
// }
// });
mPresenter.register(mUser);
}
/**
* 更新用户信息</br>
*/
private void updateUserInfo(final ProgressDialog progressDialog) {
final CommUser newUser = CommConfig.getConfig().loginedUser;
newUser.name = mNickNameEtv.getText().toString();
newUser.gender = mGender;
mPresenter.updateUserProfile(newUser);
}
/**
* 检查昵称的合法性,确保在第一次登录时昵称不合法导致的问题.
*
* @return
*/
public boolean checkUserName() {
String name = mNickNameEtv.getText().toString().trim();
return CommonUtils.isUserNameValid(name);
}
/**
* 关闭Dialog</br>
*/
private void closeDialog() {
if (mDialog != null) {
mDialog.dismiss();
}
}
/**
* 隐藏输入法</br>
*/
public void hideInputMethod() {
((BaseFragmentActivity) getActivity()).hideInputMethod(mNickNameEtv);
}
@Override
public void showLoading(boolean isShow) {
if (isShow) {
mProgressDialog.show();
} else {
mProgressDialog.dismiss();
}
}
}