UserFindPasswardFragment.java 12.4 KB
package com.cnlive.gundam.user.fragment;

import android.app.ProgressDialog;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.cnlive.gundam.R;
import com.cnlive.gundam.databinding.UserFragmentFindPasswordBinding;
import com.cnlive.gundam.user.util.DownTimer;
import com.cnlive.gundam.user.util.ShowTimeUtil;
import com.cnlive.gundam.user.util.SystemTools;
import com.cnlive.gundam.user.util.ToastUtil;
import com.cnlive.libs.user.IUserService;
import com.cnlive.libs.user.UserUtil;
import com.cnlive.libs.util.data.network.Callback;


/**
 * Created by luxiaoman on 2017/5/26.
 */

public class UserFindPasswardFragment extends Fragment implements View.OnClickListener{
    private UserFragmentFindPasswordBinding binding;

    //跳转页面的对话框
    private ProgressDialog dialog;

    //倒计时控件
    private DownTimer mDownTimer;

    //显示时间的字符串
    private String showTimer;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.user_fragment_find_password, container, false);
        return binding.getRoot();
    }

    public static Fragment newInstance() {
        UserFindPasswardFragment fragment = new UserFindPasswardFragment();
        return fragment;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
        initToolBar();
    }

    private void initView() {
        //返回键
        binding.backSelector.setOnClickListener(this);
        //找回密码
        binding.btnFindPassword.setOnClickListener(this);
        //获取验证码
        binding.findPasswordLayout.getVerify.setOnClickListener(this);
    }

    private void initToolBar() {
        //整个页面的大标题
        binding.findPasswordIncludeLayout.toolbarTitle.setText("找回密码");
        //mTitle.setText("找回密码");
    }

    @Override
    public void onClick(View view) {
        int i = view.getId();
        if (i == R.id.btn_find_password) {//确定
            if (0 == binding.findPasswordLayout.edtLoginNumber.getText().length()) {
                ToastUtil.show(getActivity(), "请输入手机号");
                return;
            } else if (0 != binding.findPasswordLayout.edtLoginNumber.getText().length() && 0 == binding.findPasswordLayout.edtVerify.getText().length()) {
                ToastUtil.show(getActivity(), "请输入验证码");
                return;
            } else if (0 == binding.edtInputPassward.getText().length()) {
                ToastUtil.show(getActivity(), "请输入密码");
                return;
            } else if (0 == binding.edtConfirmPassward.getText().length()) {
                ToastUtil.show(getActivity(), "请再次输入密码");
                return;
            }
            /**
             * 找回密码
             * @param mobile           手机号
             * @param verificationCode 手机验证码
             * @param newPwd           新密码
             * @param callback         回调
             *
             */
            if (binding.edtInputPassward.getText().toString().equals(binding.edtConfirmPassward.getText().toString())) {
                showDialog();
                UserUtil.modifyPwdWithMob(binding.findPasswordLayout.edtLoginNumber.getText().toString(), binding.findPasswordLayout.edtVerify.getText().toString(), binding.edtConfirmPassward.getText().toString(), userdatacall);
            } else {
                ToastUtil.show(getActivity(), "亲,您两次输入的密码不一致哦");
            }

        } else if (i == R.id.get_verify) {//获取验证码
            if (0 == binding.findPasswordLayout.edtLoginNumber.getText().length()) {
                ToastUtil.show(getActivity(), "请输入手机号");
                return;
            } else if (!SystemTools.isMobileNO(binding.findPasswordLayout.edtLoginNumber.getText().toString())) {
                ToastUtil.show(getActivity(), "请输入正确的手机号");
                return;
            }
            /**
             *  找回或修改密码前发手机验证码
             *
             * @param type
             * @param mobile        手机号
             * @param callback      回调
             *
             * 发送手机验证码需要传入一个type值用来区分发送的验证码是用来做什么的
             * QUICK_LOGIN--->快捷登陆前发送手机验证码
             * REGISTER_OR_MODIFY_MOBILE---> 注册或修改手机号前发手机验证码
             * RETRIEVE_OR_MODIFY_PASSWORD---> 找回或修改密码前发手机验证码
             */
            //调用sdk的发送短信验证码的方法
            UserUtil.sendMessage(IUserService.RETRIEVE_OR_MODIFY_PASSWORD, binding.findPasswordLayout.edtLoginNumber.getText().toString(), mobilecall);
            //初始化倒计时
            mDownTimer = new DownTimer();
            //开始倒计时
            startTimer(ShowTimeUtil.mSetTotalTime);

        } else if (i == R.id.back_selector) {//返回上一页面
            getFragmentManager().popBackStack();

        }
    }

    /**
     * 发送短信验证码的回调
     */
    protected MobileCall mobilecall = new MobileCall();
    private class MobileCall implements Callback {
        @Override
        public void onState(int what, String extra, Object obj) {
            switch (what){
                case IUserService.SUCCESS:
                    ToastUtil.show(getActivity(), "验证码已发送");
                    break;
                case IUserService.ERROR_PARAM:
                    ToastUtil.show(getActivity(), IUserService.message_error_param);
                    break;
                case IUserService.ERROR_MOBILE:
                    ToastUtil.show(getActivity(), IUserService.message_error_mobile);
                    break;
                case IUserService.ERROR_CLIENT_PLAT:
                    ToastUtil.show(getActivity(), IUserService.message_error_client_plat);
                    break;
                case IUserService.ERROR_MOBILE_NOT_REGISTER:
                    ToastUtil.show(getActivity(), IUserService.message_error_mobile_not_register);
                    break;
                case IUserService.ERROR_MESSAGE_SERVER:
                    ToastUtil.show(getActivity(), IUserService.message_error_server);
                    break;
                case IUserService.ERROR_MESSAGE_SERVER_ANALYSIS:
                    ToastUtil.show(getActivity(), IUserService.message_error_message_server_analysis);
                    break;
                case IUserService.ERROR_OTHER:
                    ToastUtil.show(getActivity(), IUserService.message_error_other);
                    break;
                case IUserService.ERROR_SEND_MESSAGE_TO_MUCH:
                    ToastUtil.show(getActivity(), IUserService.message_error_send_message_to_much);
                    break;
                case IUserService.ERROR_SEND_MESSAGE_FAILED:
                    ToastUtil.show(getActivity(), IUserService.message_error_send_message_failed);
                    break;
                case IUserService.ERROR_MESSAGE_OTHER:
                    ToastUtil.show(getActivity(), IUserService.message_error_message_other);
                    break;
            }
            if (what != 0) {
                //获取验证码按钮取消倒计时
                mDownTimer.cancel();
                //将获取验证码按钮的字样设置为"获取验证码"
                binding.findPasswordLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.findPasswordLayout.getVerify.setEnabled(true);
            }
        }
    }

    /**
     * 找回密码的回调
     */
    protected UserDataCall userdatacall = new UserDataCall();
    private class UserDataCall implements Callback {
        @Override
        public void onState(int what, String extra, Object obj) {
            switch (what) {
                case IUserService.SUCCESS:
                    ToastUtil.show(getActivity(), "找回密码成功");
                    getFragmentManager().popBackStack();
                    break;
                case IUserService.ERROR_PARAM:
                    ToastUtil.show(getActivity(), IUserService.message_error_param);
                    break;
                case IUserService.ERROR_MOBILE:
                    ToastUtil.show(getActivity(), IUserService.message_error_mobile);
                    break;
                case IUserService.ERROR_VERIFICATION_CODE_LENGTH:
                    ToastUtil.show(getActivity(), IUserService.message_error_verfication_code_length);
                    break;
                case IUserService.ERROR_PASSWORD_CONTENT:
                    ToastUtil.show(getActivity(), IUserService.message_error_password_content);
                    break;
                case IUserService.ERROR_PASSWORD_EQUAL_USERNAME:
                    ToastUtil.show(getActivity(), IUserService.message_error_password_equal_username);
                    break;
                case IUserService.ERROR_PASSWORD_CANNOT_CONTIGUOUS:
                    ToastUtil.show(getActivity(), IUserService.message_error_password_cannot_be_contiguous);
                    break;
                case IUserService.ERROR_PASSWORD_CANNOT_CONTIGUOUS_SAME:
                    ToastUtil.show(getActivity(), IUserService.message_error_password_cannot_be_contiguous_same);
                    break;
                case IUserService.ERROR_VERIFICATION_CODE:
                    ToastUtil.show(getActivity(), IUserService.message_error_verfication_code);
                    break;
                case IUserService.ERROR_MOBILE_NOT_REGISTER:
                    ToastUtil.show(getActivity(), IUserService.message_error_mobile_not_register);
                    break;
                case IUserService.ERROR_OTHER:
                    ToastUtil.show(getActivity(), IUserService.message_error_other);
                    break;
            }
            if (what!=0) {
                //获取验证码按钮取消倒计时
                mDownTimer.cancel();
                //将获取验证码按钮的字样设置为"获取验证码"
                binding.findPasswordLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.findPasswordLayout.getVerify.setEnabled(true);
            }
            closeDialog();
        }
    }

    /**
     * 显示对话框
     */
    public void showDialog() {
        if (dialog == null) {
            dialog = new ProgressDialog(getActivity());
            dialog.setMessage("正在提交,请稍等!");
        }
        if (!dialog.isShowing()) {
            dialog.show();
        }
    }

    /**
     * 关闭对话框
     */
    public void closeDialog() {
        if (dialog != null && dialog.isShowing()) {
            dialog.dismiss();
        }
    }

    /**
     * 开始倒计时
     *
     * @param totalTime 剩余时长
     */
    private void startTimer(long totalTime) {
        mDownTimer.cancel();//获取验证码按钮取消倒计时
        mDownTimer.setTotalTime(totalTime);//设置毫秒数
        mDownTimer.setIntervalTime(1000);//设置间隔数
        mDownTimer.setTimerLiener(new DownTimer.TimeListener() {
            @Override
            public void onFinish() {
                //将获取验证码按钮的字样设置为"获取验证码"
                binding.findPasswordLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.findPasswordLayout.getVerify.setEnabled(true);
            }

            @Override
            public void onInterval(long remainTime) {
                showTimer= ShowTimeUtil.changeTimerFormat(remainTime);
                //将获取验证码按钮的字样设置为显示时间
                binding.findPasswordLayout.getVerify.setText(showTimer);
                //将获取验证码按钮设置为不可点击
                binding.findPasswordLayout.getVerify.setEnabled(false);
            }
        });
        //获取验证码按钮开始倒计时
        mDownTimer.start();
    }

}