123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- package com.edufound.reader.presenter;
- import android.content.Intent;
- import android.graphics.Color;
- import android.os.Handler;
- import android.os.Message;
- import android.text.Spannable;
- import android.text.SpannableStringBuilder;
- import android.text.TextPaint;
- import android.text.TextUtils;
- import android.text.method.LinkMovementMethod;
- import android.text.style.ClickableSpan;
- import android.view.View;
- import android.widget.FrameLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.edufound.reader.activity.WebActivity;
- import com.edufound.reader.apiserver.UserApiServerImpl;
- import com.edufound.reader.base.BasePresenter;
- import com.edufound.reader.contract.LoginAlertContract;
- import com.edufound.reader.model.LoginAlertModel;
- import com.edufound.reader.util.Consts;
- import com.edufound.reader.util.DeviceUuidFactory;
- import com.edufound.reader.util.EfunboxUtil;
- import com.google.gson.Gson;
- import com.jakewharton.rxbinding4.view.RxView;
- import com.okhttplib.HttpInfo;
- import com.okhttplib.callback.Callback;
- import com.orhanobut.logger.Logger;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.TimeUnit;
- import io.reactivex.rxjava3.annotations.NonNull;
- import io.reactivex.rxjava3.functions.Consumer;
- public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View> implements LoginAlertContract.Presenter {
- LoginAlertModel mModel;
- UserApiServerImpl mUserApi;
- List<Integer> leftBrackets = new ArrayList<>();
- List<Integer> rightBrackets = new ArrayList<>();
- String mServiceText = "点击登录表示您已阅读并同意《用户隐私政策》和《服务协议》。";
- int getVCode;
- int mVCodeResCount = 60;
- public LoginAlertPresenter() {
- mModel = new LoginAlertModel();
- mUserApi = new UserApiServerImpl();
- }
- @Override
- public void initServiceText(TextView textView) {
- leftBrackets = getChildIndexFromString(mServiceText, "《");
- rightBrackets = getChildIndexFromString(mServiceText, "》");
- SpannableStringBuilder style = new SpannableStringBuilder();
- style.append(mServiceText);
- for (int i = 0; i < leftBrackets.size(); i++) {
- final int finalI = i;
- style.setSpan(new ClickableSpan() {
- @Override
- public void onClick(@NonNull View widget) {
- setClickListener(widget, o -> {
- lookPrivacy(finalI);
- });
- }
- @Override
- public void updateDrawState(@NonNull TextPaint ds) {
- ds.setUnderlineText(false);
- ds.setColor(Color.parseColor("#68a5dc"));
- }
- }, leftBrackets.get(i), rightBrackets.get(i) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- textView.setHighlightColor(Color.parseColor("#ffffff"));
- textView.setText(style);
- }
- @Override
- public void getVCode(String phoneNum) {
- if (EfunboxUtil.isMobileNO(phoneNum)) {
- //正常,获取验证码
- // getVCode = 9999;
- ((FrameLayout) mView.getVCodeText().getParent()).setClickable(false);
- ((FrameLayout) mView.getVCodeText().getParent()).setEnabled(false);
- // ((FrameLayout) mView.getVCodeText().getParent()).setBackgroundColor(mView.getActivity().getResources().getColor(R.color.translucent_background));
- mView.getVCodeText().setText(String.valueOf(mVCodeResCount));
- mLoginAlertHandler.sendEmptyMessageDelayed(LoginAlertModel.CHANGE_VCODE_TEXT, 1000);
- mModel.getVCode(mView.getActivity(), phoneNum, new Callback() {
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- String result = info.getRetDetail();
- getVCode = 9999;
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- }
- });
- } else {
- Toast.makeText(mView.getActivity(), "请输入正确的手机号", Toast.LENGTH_SHORT).show();
- //不正常
- }
- }
- @Override
- public void Login(String phoneNum, String inputVCode) {
- if (EfunboxUtil.isMobileNO(phoneNum)) {
- //手机号没有改过,正常。获取了验证码了,判断验证码
- if (TextUtils.isEmpty(inputVCode)) {
- Toast.makeText(mView.getActivity(), "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- } else {
- if (!mView.getCheckBox().isChecked()) {
- Toast.makeText(mView.getActivity(), "请勾选用户隐私政策和服务协议", Toast.LENGTH_SHORT).show();
- return;
- }
- if (Integer.valueOf(inputVCode) == getVCode) {
- //输入的和返回的是一样的
- //请求接口,根据phoneNum,Integer.valueOf(inputVCode)
- Map<String, String> params = new HashMap<>();
- params.put("channel", Consts.getUmengChannel());
- params.put("deviceCode", DeviceUuidFactory.getUuid().toString());
- params.put("mobileNo", phoneNum);
- params.put("verifyCode", inputVCode);
- params.put("verify", "true");
- mUserApi.registerUser(mView.getActivity(), new Gson().toJson(params), new Callback() {
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- Logger.e("注册成功:" + info.getRetDetail());
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- Logger.e("注册失败:" + info.getRetDetail());
- }
- });
- } else {
- Toast.makeText(mView.getActivity(), "验证码输入错误", Toast.LENGTH_SHORT).show();
- }
- }
- } else {
- Toast.makeText(mView.getActivity(), "请输入正确的手机号", Toast.LENGTH_SHORT).show();
- //不正常
- }
- }
- @Override
- public void activityDestory() {
- mLoginAlertHandler.removeMessages(LoginAlertModel.CHANGE_VCODE_TEXT);
- mLoginAlertHandler = null;
- }
- Handler mLoginAlertHandler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(@androidx.annotation.NonNull Message message) {
- switch (message.what) {
- case LoginAlertModel.CHANGE_VCODE_TEXT:
- if (mVCodeResCount > 1) {
- mVCodeResCount--;
- mView.getVCodeText().setText(String.valueOf(mVCodeResCount));
- mLoginAlertHandler.sendEmptyMessageDelayed(LoginAlertModel.CHANGE_VCODE_TEXT, 1000);
- } else {
- mVCodeResCount = 60;
- mView.getVCodeText().setText("获取验证码");
- ((FrameLayout) mView.getVCodeText().getParent()).setClickable(true);
- ((FrameLayout) mView.getVCodeText().getParent()).setEnabled(true);
- // ((FrameLayout) mView.getVCodeText().getParent()).setBackgroundResource(R.drawable.activity_loginalert_verificationcode_bg);
- }
- break;
- }
- return false;
- }
- });
- private List<Integer> getChildIndexFromString(String parent, String child) {
- int startIndex = 0;
- List<Integer> ids = new ArrayList<>();
- while (parent.indexOf(child, startIndex) != -1) {
- //ids.add(startIndex);
- startIndex = parent.indexOf(child, startIndex);
- ids.add(startIndex);
- startIndex = startIndex + child.length();
- }
- return ids;
- }
- private void lookPrivacy(int index) {
- String url = "";
- switch (index) {
- case 0:
- url = Consts.getAgreementServicesUrl();
- break;
- case 1:
- url = Consts.getPrivServiceUrl();
- break;
- }
- Intent intent = new Intent(mView.getActivity(), WebActivity.class);
- intent.putExtra("loadUrl", url);
- mView.getActivity().startActivity(intent);
- }
- private void setClickListener(View view, Consumer onNext) {
- RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext);
- }
- }
|