LoginAlertPresenter.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package com.edufound.reader.presenter;
  2. import android.content.Intent;
  3. import android.graphics.Color;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.text.Spannable;
  7. import android.text.SpannableStringBuilder;
  8. import android.text.TextPaint;
  9. import android.text.TextUtils;
  10. import android.text.method.LinkMovementMethod;
  11. import android.text.style.ClickableSpan;
  12. import android.view.View;
  13. import android.widget.FrameLayout;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16. import com.edufound.reader.activity.WebActivity;
  17. import com.edufound.reader.apiserver.UserApiServerImpl;
  18. import com.edufound.reader.base.BasePresenter;
  19. import com.edufound.reader.contract.LoginAlertContract;
  20. import com.edufound.reader.model.LoginAlertModel;
  21. import com.edufound.reader.util.Consts;
  22. import com.edufound.reader.util.DeviceUuidFactory;
  23. import com.edufound.reader.util.EfunboxUtil;
  24. import com.google.gson.Gson;
  25. import com.jakewharton.rxbinding4.view.RxView;
  26. import com.okhttplib.HttpInfo;
  27. import com.okhttplib.callback.Callback;
  28. import com.orhanobut.logger.Logger;
  29. import java.io.IOException;
  30. import java.util.ArrayList;
  31. import java.util.HashMap;
  32. import java.util.List;
  33. import java.util.Map;
  34. import java.util.concurrent.TimeUnit;
  35. import io.reactivex.rxjava3.annotations.NonNull;
  36. import io.reactivex.rxjava3.functions.Consumer;
  37. public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View> implements LoginAlertContract.Presenter {
  38. LoginAlertModel mModel;
  39. UserApiServerImpl mUserApi;
  40. List<Integer> leftBrackets = new ArrayList<>();
  41. List<Integer> rightBrackets = new ArrayList<>();
  42. String mServiceText = "点击登录表示您已阅读并同意《用户隐私政策》和《服务协议》。";
  43. int getVCode;
  44. int mVCodeResCount = 60;
  45. public LoginAlertPresenter() {
  46. mModel = new LoginAlertModel();
  47. mUserApi = new UserApiServerImpl();
  48. }
  49. @Override
  50. public void initServiceText(TextView textView) {
  51. leftBrackets = getChildIndexFromString(mServiceText, "《");
  52. rightBrackets = getChildIndexFromString(mServiceText, "》");
  53. SpannableStringBuilder style = new SpannableStringBuilder();
  54. style.append(mServiceText);
  55. for (int i = 0; i < leftBrackets.size(); i++) {
  56. final int finalI = i;
  57. style.setSpan(new ClickableSpan() {
  58. @Override
  59. public void onClick(@NonNull View widget) {
  60. setClickListener(widget, o -> {
  61. lookPrivacy(finalI);
  62. });
  63. }
  64. @Override
  65. public void updateDrawState(@NonNull TextPaint ds) {
  66. ds.setUnderlineText(false);
  67. ds.setColor(Color.parseColor("#68a5dc"));
  68. }
  69. }, leftBrackets.get(i), rightBrackets.get(i) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  70. }
  71. textView.setMovementMethod(LinkMovementMethod.getInstance());
  72. textView.setHighlightColor(Color.parseColor("#ffffff"));
  73. textView.setText(style);
  74. }
  75. @Override
  76. public void getVCode(String phoneNum) {
  77. if (EfunboxUtil.isMobileNO(phoneNum)) {
  78. //正常,获取验证码
  79. // getVCode = 9999;
  80. ((FrameLayout) mView.getVCodeText().getParent()).setClickable(false);
  81. ((FrameLayout) mView.getVCodeText().getParent()).setEnabled(false);
  82. // ((FrameLayout) mView.getVCodeText().getParent()).setBackgroundColor(mView.getActivity().getResources().getColor(R.color.translucent_background));
  83. mView.getVCodeText().setText(String.valueOf(mVCodeResCount));
  84. mLoginAlertHandler.sendEmptyMessageDelayed(LoginAlertModel.CHANGE_VCODE_TEXT, 1000);
  85. mModel.getVCode(mView.getActivity(), phoneNum, new Callback() {
  86. @Override
  87. public void onSuccess(HttpInfo info) throws IOException {
  88. String result = info.getRetDetail();
  89. getVCode = 9999;
  90. }
  91. @Override
  92. public void onFailure(HttpInfo info) throws IOException {
  93. }
  94. });
  95. } else {
  96. Toast.makeText(mView.getActivity(), "请输入正确的手机号", Toast.LENGTH_SHORT).show();
  97. //不正常
  98. }
  99. }
  100. @Override
  101. public void Login(String phoneNum, String inputVCode) {
  102. if (EfunboxUtil.isMobileNO(phoneNum)) {
  103. //手机号没有改过,正常。获取了验证码了,判断验证码
  104. if (TextUtils.isEmpty(inputVCode)) {
  105. Toast.makeText(mView.getActivity(), "请输入验证码", Toast.LENGTH_SHORT).show();
  106. return;
  107. } else {
  108. if (!mView.getCheckBox().isChecked()) {
  109. Toast.makeText(mView.getActivity(), "请勾选用户隐私政策和服务协议", Toast.LENGTH_SHORT).show();
  110. return;
  111. }
  112. if (Integer.valueOf(inputVCode) == getVCode) {
  113. //输入的和返回的是一样的
  114. //请求接口,根据phoneNum,Integer.valueOf(inputVCode)
  115. Map<String, String> params = new HashMap<>();
  116. params.put("channel", Consts.getUmengChannel());
  117. params.put("deviceCode", DeviceUuidFactory.getUuid().toString());
  118. params.put("mobileNo", phoneNum);
  119. params.put("verifyCode", inputVCode);
  120. params.put("verify", "true");
  121. mUserApi.registerUser(mView.getActivity(), new Gson().toJson(params), new Callback() {
  122. @Override
  123. public void onSuccess(HttpInfo info) throws IOException {
  124. Logger.e("注册成功:" + info.getRetDetail());
  125. }
  126. @Override
  127. public void onFailure(HttpInfo info) throws IOException {
  128. Logger.e("注册失败:" + info.getRetDetail());
  129. }
  130. });
  131. } else {
  132. Toast.makeText(mView.getActivity(), "验证码输入错误", Toast.LENGTH_SHORT).show();
  133. }
  134. }
  135. } else {
  136. Toast.makeText(mView.getActivity(), "请输入正确的手机号", Toast.LENGTH_SHORT).show();
  137. //不正常
  138. }
  139. }
  140. @Override
  141. public void activityDestory() {
  142. mLoginAlertHandler.removeMessages(LoginAlertModel.CHANGE_VCODE_TEXT);
  143. mLoginAlertHandler = null;
  144. }
  145. Handler mLoginAlertHandler = new Handler(new Handler.Callback() {
  146. @Override
  147. public boolean handleMessage(@androidx.annotation.NonNull Message message) {
  148. switch (message.what) {
  149. case LoginAlertModel.CHANGE_VCODE_TEXT:
  150. if (mVCodeResCount > 1) {
  151. mVCodeResCount--;
  152. mView.getVCodeText().setText(String.valueOf(mVCodeResCount));
  153. mLoginAlertHandler.sendEmptyMessageDelayed(LoginAlertModel.CHANGE_VCODE_TEXT, 1000);
  154. } else {
  155. mVCodeResCount = 60;
  156. mView.getVCodeText().setText("获取验证码");
  157. ((FrameLayout) mView.getVCodeText().getParent()).setClickable(true);
  158. ((FrameLayout) mView.getVCodeText().getParent()).setEnabled(true);
  159. // ((FrameLayout) mView.getVCodeText().getParent()).setBackgroundResource(R.drawable.activity_loginalert_verificationcode_bg);
  160. }
  161. break;
  162. }
  163. return false;
  164. }
  165. });
  166. private List<Integer> getChildIndexFromString(String parent, String child) {
  167. int startIndex = 0;
  168. List<Integer> ids = new ArrayList<>();
  169. while (parent.indexOf(child, startIndex) != -1) {
  170. //ids.add(startIndex);
  171. startIndex = parent.indexOf(child, startIndex);
  172. ids.add(startIndex);
  173. startIndex = startIndex + child.length();
  174. }
  175. return ids;
  176. }
  177. private void lookPrivacy(int index) {
  178. String url = "";
  179. switch (index) {
  180. case 0:
  181. url = Consts.getAgreementServicesUrl();
  182. break;
  183. case 1:
  184. url = Consts.getPrivServiceUrl();
  185. break;
  186. }
  187. Intent intent = new Intent(mView.getActivity(), WebActivity.class);
  188. intent.putExtra("loadUrl", url);
  189. mView.getActivity().startActivity(intent);
  190. }
  191. private void setClickListener(View view, Consumer onNext) {
  192. RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext);
  193. }
  194. }