QuickLoginFragment.java 11.8 KB
package com.cnlive.gundam.user.fragment;

import android.accounts.Account;
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.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.cnlive.gundam.R;
import com.cnlive.gundam.databinding.FragmentQuickLoginBinding;
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 QuickLoginFragment extends Fragment implements View.OnClickListener {
    private FragmentQuickLoginBinding binding;

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

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

    //倒计时控件
    private DownTimer mDownTimer;

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

    //管理用户
    private Account account;

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

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

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

    }

    private void initView() {
        //返回键
        binding.backSelector.setOnClickListener(this);
        //快捷登录
        binding.btnLogin.setOnClickListener(this);
        //获取验证码
        binding.quickLoginLayout.getVerify.setOnClickListener(this);
    }

    private void initToolBar() {
        //整个页面的大标题
        binding.quickLoginIncludeLayout.toolbarTitle.setText("短信验证登录");
    }

    @Override
    public void onClick(View view) {
        int i = view.getId();
        if (i == R.id.get_verify) {//获取验证码
            if (0 == binding.quickLoginLayout.edtLoginNumber.getText().length()) {
                ToastUtil.show(getActivity(), "请输入手机号");
                return;
            } else if (!SystemTools.isMobileNO(binding.quickLoginLayout.edtLoginNumber.getText().toString())) {
                ToastUtil.show(getActivity(), "请输入正确的手机号");
                return;
            }
            //调用sdk的发送短信验证码的方法
            UserUtil.sendMessage(IUserService.QUICK_LOGIN, binding.quickLoginLayout.edtLoginNumber.getText().toString(), mobilecall);
            //初始化倒计时
            mDownTimer = new DownTimer();
            //开始倒计时
            startTimer(ShowTimeUtil.mSetTotalTime);
        } else if (i == R.id.btn_login) {//快捷登录
            if (0 == binding.quickLoginLayout.edtLoginNumber.getText().length()) {
                ToastUtil.show(getActivity(), "请输入手机号");
                return;
            } else if (0 != binding.quickLoginLayout.edtLoginNumber.getText().length() && 0 == binding.quickLoginLayout.edtVerify.getText().length()) {
                ToastUtil.show(getActivity(), "请输入验证码");
                return;
            }
            /**
             * 快捷登录
             * @param userName         手机号
             * @param verificationCode 验证码
             * @param frmId            渠道ID(非必传参数,可传"")
             * @param callback         回调
             */
            //显示对话框
            showDialog();
            //可以连接服务器进行快捷登录
            account = new Account(binding.quickLoginLayout.edtLoginNumber.getText().toString(), User.ACCOUNT_TYPE);
            //调用sdk的快捷登录的方法
            UserUtil.quickLogin(String.valueOf(binding.quickLoginLayout.edtLoginNumber.getText()), String.valueOf(binding.quickLoginLayout.edtVerify.getText()), "frmId", userdatacall);

        } 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) {
            Log.v("MobileCall",extra);
            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.quickLoginLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.quickLoginLayout.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.autoLogin(binding.quickLoginLayout.edtLoginNumber.getText().toString(),"userutil",data);
                        //userService.isAutoLogin();
                        if (null != data.toString()) {
                            getActivity().finish();
                        }
                    }
                    break;
                case IUserService.ERROR_PARAM:
                    ToastUtil.show(getActivity(), IUserService.message_error_param);
                    break;
                case IUserService.ERROR_CLIENT_PLAT:
                    ToastUtil.show(getActivity(), IUserService.message_error_client_plat);
                    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_VERIFICATION_CODE:
                    ToastUtil.show(getActivity(), IUserService.message_error_verfication_code);
                    break;
                case IUserService.ERROR_MOBILE_EXIST:
                    ToastUtil.show(getActivity(), IUserService.message_error_mobile_exist);
                    break;
                case IUserService.ERROR_NICK_NAME_EXIST:
                    ToastUtil.show(getActivity(), IUserService.message_error_nick_name_exist);
                    break;
                case IUserService.ERROR_OTHER:
                    ToastUtil.show(getActivity(), IUserService.message_error_other);
                    break;
            }
            if (what!=0){
                //获取验证码按钮取消倒计时
                mDownTimer.cancel();
                //将获取验证码按钮的字样设置为"获取验证码"
                binding.quickLoginLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.quickLoginLayout.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.quickLoginLayout.getVerify.setText("获取验证码");
                //将获取验证码按钮设置为可点击
                binding.quickLoginLayout.getVerify.setEnabled(true);
            }

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

}