RegisterFragment.java 13.7 KB
package com.cnlive.gundam.user.fragment;

import android.accounts.Account;
import android.accounts.AccountManager;
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.UserFragmentRegisterBinding;
import com.cnlive.gundam.user.auth.UserService;
import com.cnlive.gundam.user.model.User;
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.user.model.DataEntity;
import com.cnlive.libs.user.model.UserData;
import com.cnlive.libs.util.data.network.Callback;


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

public class RegisterFragment extends Fragment implements View.OnClickListener {
    private UserFragmentRegisterBinding binding;

    //用户数据信息
    public static DataEntity data;

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

    //倒计时控件
    private DownTimer mDownTimer;

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

    //管理用户
    private Account account;

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

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

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

    private void initToolBar() {
        //整个页面的大标题
        binding.registerIncludeLayout.toolbarTitle.setText("注册");
    }

    private void initView() {
        //返回键
        binding.backSelector.setOnClickListener(this);
        //注册
        binding.btnRegister.setOnClickListener(this);
        //获取验证码
        binding.mobileKeycodeLayout.getVerify.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int i = view.getId();
        if (i == R.id.btn_register) {//注册
            if (0 == binding.mobileKeycodeLayout.edtLoginNumber.getText().length()) {
                ToastUtil.show(getActivity(), "请输入手机号");
                return;
            } else if (0 != binding.mobileKeycodeLayout.edtLoginNumber.getText().length() && 0 == binding.mobileKeycodeLayout.edtVerify.getText().length()) {
                ToastUtil.show(getActivity(), "请输入验证码");
                return;
            } else if (0 == binding.edtInputPassward.getText().length()) {
                ToastUtil.show(getActivity(), "请输入密码");
                return;
            }
            /**
             * 注册
             *
             * @param userName         邮箱或手机
             * @param pwd              密码
             * @param verificationCode 手机验证码(手机号注册时必填)
             * @param invitationCode   邀请码(非必传参数,可以传"")
             * @param frmId            渠道ID(非必传参数,可传入"")
             * @param callback         回调
             */
            if (!("").equals(binding.edtInputPassward.getText().toString())) {
                showDialog();
                //可以连接服务器进行注册,这里为了简单略过
                account = new Account(binding.mobileKeycodeLayout.edtLoginNumber.getText().toString(), User.ACCOUNT_TYPE);
                AccountManager am = AccountManager.get(view.getContext());
                am.addAccountExplicitly(account, binding.edtInputPassward.getText().toString(), null);
                //调用sdk的注册的方法
                UserUtil.register(binding.mobileKeycodeLayout.edtLoginNumber.getText().toString(), binding.edtInputPassward.getText().toString(), binding.mobileKeycodeLayout.edtVerify.getText().toString(), "invitationCode", "frmId", userdatacall);
            } else {
                ToastUtil.show(getActivity(), "密码不一致");
            }

        } else if (i == R.id.get_verify) {//获取验证码
            if (0 == binding.mobileKeycodeLayout.edtLoginNumber.getText().length()) {
                ToastUtil.show(getActivity(), "请输入手机号");
                return;
            } else if (!SystemTools.isMobileNO(binding.mobileKeycodeLayout.edtLoginNumber.getText().toString())) {
                ToastUtil.show(getActivity(), "请输入正确的手机号码");
                return;
            }
            //调用sdk的发送短信验证码的方法
            UserUtil.sendMessage(IUserService.REGISTER_OR_MODIFY_MOBILE, binding.mobileKeycodeLayout.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.mobileKeycodeLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.mobileKeycodeLayout.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(), "注册成功");
                    UserData userData = (UserData) obj;
                    data = userData.getData();
                    if (getActivity() != null) {
                        UserService userService = UserService.getInstance(getActivity());
                        userService.setUserInfo(account,data);
                        //userService.isAutoLogin();
                        userService.autoLogin(binding.mobileKeycodeLayout.edtLoginNumber.getText().toString(),binding.edtInputPassward.getText().toString(),data);
                        if (null != data.toString()) {
                            getActivity().finish();
                        }
                    }
                    break;
                case IUserService.ERROR_PARAM:
                    ToastUtil.show(getActivity(), IUserService.message_error_param);
                    break;
                case IUserService.ERROR_USER_NAME:
                    ToastUtil.show(getActivity(), IUserService.message_error_user_name);
                    break;
                case IUserService.ERROR_VERIFICATION_CODE_LENGTH:
                    ToastUtil.show(getActivity(), IUserService.message_error_verfication_code_length);
                    break;
                case IUserService.ERROR_MAIL:
                    ToastUtil.show(getActivity(), IUserService.message_error_mail);
                    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_CLIENT_PLAT:
                    ToastUtil.show(getActivity(), IUserService.message_error_client_plat);
                    break;
                case IUserService.ERROR_MOBILE_EXIST:
                    ToastUtil.show(getActivity(), IUserService.message_error_mobile_exist);
                    break;
                case IUserService.ERROR_MAIL_EXIST:
                    ToastUtil.show(getActivity(), IUserService.message_error_mail_exist);
                    break;
                case IUserService.ERROR_NICK_NAME_EXIST:
                    ToastUtil.show(getActivity(), IUserService.message_error_nick_name_exist);
                    break;
                case IUserService.ERROR_VERIFICATION_CODE:
                    ToastUtil.show(getActivity(), IUserService.message_error_verfication_code);
                    break;
                case IUserService.ERROR_OTHER:
                    ToastUtil.show(getActivity(), IUserService.message_error_other);
                    break;
            }
            if (what!=0){
                //获取验证码按钮取消倒计时
                mDownTimer.cancel();
                //将获取验证码按钮的字样设置为"获取验证码"
                binding.mobileKeycodeLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.mobileKeycodeLayout.getVerify.setEnabled(true);
            }
            closeDialog();
        }
    }

    /**
     * 开始倒计时
     *
     * @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.mobileKeycodeLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.mobileKeycodeLayout.getVerify.setEnabled(true);
            }

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

    /**
     * 显示对话框
     */
    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();
        }
    }

}