package com.yidianling.user.ui;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.ydl.webview.H5Params;
import com.ydl.webview.NewH5Activity;
import com.ydl.ydlcommon.base.BaseActivity;
import com.ydl.ydlcommon.base.config.YDLConstants;
import com.ydl.ydlcommon.bean.StatusBarOptions;
import com.ydl.ydlcommon.data.http.RxUtils;
import com.ydl.ydlcommon.data.http.ThrowableConsumer;
import com.ydl.ydlcommon.router.YdlCommonOut;
import com.ydl.ydlcommon.utils.log.LogHelper;
import com.ydl.ydlcommon.utils.remind.ToastHelper;
import com.ydl.ydlcommon.view.DeleteEditTextView;
import com.ydl.ydlcommon.view.JumpTextView;
import com.ydl.ydlcommon.view.RoundCornerButton;
import com.ydl.ydlcommon.view.dialog.CommonDialog;
import com.yidianling.common.tools.ToastUtil;
import com.yidianling.user.R;
import com.yidianling.user.UserConstants;
import com.yidianling.user.http.UserHttp;
import com.yidianling.user.http.UserHttpImpl;
import com.yidianling.user.http.request.CodeParam;
import com.yidianling.user.http.request.ExistParam;
import com.yidianling.user.http.response.ExistResponse;
import com.yidianling.user.ui.login.RegisterAndLoginActivity;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.TimeUnit;
/**
* 注册手机号或绑定手机号
* Created by softrice on 15/11/23.
*/
public class InputPhoneActivity extends BaseActivity implements View.OnClickListener {
JumpTextView jtv_country;
DeleteEditTextView detv_phone;
TextView tv_protocol;
LinearLayout ll_protocol;
RoundCornerButton rcb_next;
TextView tvFreePacketHint;
private String country_code = "0086";
private String country_name = "中国";
private String FORMAT = "%s +%s";
String phoneNum;
String smsAction = UserConstants.REGISTER_ACTION;//验证码类型,注册:register找回密码:forget 绑定手机 wxbind
private boolean isFromSplash;
private boolean isRegisterFromRedPacket;
private static final String SMS_ACTION = "smsAction";
private static final String PHONE = "phone";
private static final String ISFROMSPLASH = "isFromSplash";
public static Intent newIntent(Activity activity, String smsAction) {
Intent intent = new Intent(activity, InputPhoneActivity.class);
Bundle bundle = new Bundle();
bundle.putString(SMS_ACTION, smsAction);
intent.putExtra(YDLConstants.BUNDLE, bundle);
return intent;
}
public static void start(Activity activity, String smsAction, String phone, boolean isFromSplash) {
Intent intent = new Intent(activity, InputPhoneActivity.class);
Bundle bundle = new Bundle();
bundle.putString(SMS_ACTION, smsAction);
bundle.putString(PHONE, phone);
bundle.putBoolean(ISFROMSPLASH, isFromSplash);
intent.putExtra(YDLConstants.BUNDLE, bundle);
activity.startActivity(intent);
}
public static void start(Activity activity, String smsAction, boolean isRegisterFromRedPacket) {
Intent intent = new Intent(activity, InputPhoneActivity.class);
Bundle bundle = new Bundle();
bundle.putString(SMS_ACTION, smsAction);
bundle.putBoolean(UserConstants.IS_REGISTER_FROM_PACKET, isRegisterFromRedPacket);
intent.putExtra(YDLConstants.BUNDLE, bundle);
activity.startActivity(intent);
}
@NotNull
@Override
public StatusBarOptions getStatusViewOptions() {
return new StatusBarOptions(true,true);
}
@Override
protected int layoutResId() {
return R.layout.user_activity_input_phone;
}
@Override
protected void initDataAndEvent() {
jtv_country = findViewById(R.id.jtv_country);
detv_phone = findViewById(R.id.detv_phone);
tv_protocol = findViewById(R.id.tv_protocol);
ll_protocol = findViewById(R.id.ll_protocol);
tvFreePacketHint = findViewById(R.id.tv_free_packet_hint);
rcb_next = findViewById(R.id.rcb_next);
jtv_country.setOnClickListener(this);
tv_protocol.setOnClickListener(this);
rcb_next.setOnClickListener(this);
String action = null;
Bundle bundle = getIntent().getBundleExtra(YDLConstants.BUNDLE);
if (bundle != null) {
action = bundle.getString(SMS_ACTION);
LogHelper.Companion.getInstance().writeLogSync(String.format("%s页面创建", action));
phoneNum = bundle.getString(PHONE);
isFromSplash = bundle.getBoolean(ISFROMSPLASH, false);
isRegisterFromRedPacket = bundle.getBoolean(UserConstants.IS_REGISTER_FROM_PACKET, false);
} else {
ToastUtil.toastShort("请稍后重试");
finish();
}
if (action == null) {
smsAction = UserConstants.REGISTER_ACTION;
} else {
smsAction = action;
}
detv_phone.requestFocus();
InputMethodManager manager = (InputMethodManager) detv_phone.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}
init();
Observable.timer(300, TimeUnit.MILLISECONDS)
.subscribe(aLong -> {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(detv_phone, 0);
}, t -> {
});
}
void init() {
if (isRegisterFromRedPacket) {
tvFreePacketHint.setVisibility(View.VISIBLE);
}
jtv_country.setLeftText(String.format(FORMAT, country_name, country_code));
if (smsAction.equals(UserConstants.REGISTER_ACTION)) {
ll_protocol.setVisibility(View.VISIBLE);
} else {
ll_protocol.setVisibility(View.INVISIBLE);
}
if (!TextUtils.isEmpty(phoneNum)) {
detv_phone.setText(phoneNum);
}
}
@Override
public void onClick(View v) {
int i = v.getId();
if (i == R.id.jtv_country) {
startActivityForResult(new Intent(this, CountryListActivity.class), 44);
} else if (i == R.id.tv_protocol) {
NewH5Activity.start(this, new H5Params("http://www.yidianling.com/agreement/reg", "用户协议"));
} else if (i == R.id.rcb_next) {
if ("0086".equals(country_code)) {
if (detv_phone.getText().toString().length() != 11) {
ToastHelper.Companion.show("请输入11位手机号");
return;
}
} else {
if (TextUtils.isEmpty(detv_phone.getText())) {
YdlCommonOut.Companion.showToast("请输入正确的手机号");
return;
}
}
if (TextUtils.isEmpty(detv_phone.getText().toString())) {
ToastHelper.Companion.show("请输入手机号!");
return;
}
switch (smsAction) {
case UserConstants.BIND_PHONE_ACTION://绑定手机
judge(UserConstants.BIND_PHONE_ACTION);
break;
case UserConstants.REGISTER_ACTION://注册
judge(UserConstants.REGISTER_ACTION);
break;
case UserConstants.FORGET_ACTION://忘记密码
judge(UserConstants.FORGET_ACTION);
break;
case UserConstants.SIGNIN_ACTION:// 短信快捷登录
judge(UserConstants.SIGNIN_ACTION);
break;
}
}
}
private void judge(final String action) {
UserHttp userHttp = UserHttpImpl.Companion.getInstance();
userHttp.phoneExist(new ExistParam(country_code, detv_phone.getText().toString()))
.compose(RxUtils.resultData())
.map(ExistResponse::isExist)
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> showProgressDialog(""))
.doAfterTerminate(this::dismissProgressDialog)
.subscribe(isExist -> {
LogHelper.Companion.getInstance().writeLogSync(String.format("%s成功", action));
switch (action) {
case UserConstants.BIND_PHONE_ACTION:
if (isExist == 1) {
getCode(action, true);
} else {
getCode(action, false);
}
break;
case UserConstants.REGISTER_ACTION:
if (isExist == 1) {
new CommonDialog(InputPhoneActivity.this)
.setMessage("该手机号已注册")
.setRightClick("登录", v -> {
startActivity(new Intent(InputPhoneActivity.this, RegisterAndLoginActivity.class));
finish();
})
.setLeftOnclick("取消", null)
.show();
} else {
getCode(action, false);
}
break;
case UserConstants.FORGET_ACTION:
if (isExist == 0) {
ToastHelper.Companion.show("该手机还未注册");
} else {
getCode(action, true);
}
break;
case UserConstants.SIGNIN_ACTION:
if (isExist == 0) {
getCode(UserConstants.REGISTER_ACTION, false);
} else {
SmsLoginActivity.Companion.start(this, country_code, detv_phone.getText().toString(), isFromSplash);
finish();
}
break;
}
}, new ThrowableConsumer() {
@Override
public void accept(@NotNull String msg) {
ToastHelper.Companion.show(msg);
}
});
}
private void getCode(final String action, final boolean phoneIsExits) {
UserHttp userHttp = UserHttpImpl.Companion.getInstance();
userHttp.code(new CodeParam(country_code, detv_phone.getText().toString(), action))
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> showProgressDialog(""))
.doAfterTerminate(this::dismissProgressDialog)
.subscribe(o -> {
LogHelper.Companion.getInstance().writeLogSync("获取验证码成功");
Intent intent = new Intent(InputPhoneActivity.this, GetIdentifyingCodeActivity.class);
intent.putExtra("action", action);
intent.putExtra("code", country_code);
intent.putExtra("isRegisted", phoneIsExits);
intent.putExtra("isFromSplash", isFromSplash);
intent.putExtra("lastGetCodeTime", (int) (System.currentTimeMillis() / 1000));
intent.putExtra("phoneNum", detv_phone.getText().toString());
intent.putExtra(UserConstants.IS_REGISTER_FROM_PACKET, isRegisterFromRedPacket);
startActivity(intent);
finish();
}, new ThrowableConsumer() {
@Override
public void accept(@NotNull String msg) {
ToastHelper.Companion.show(msg);
LogHelper.Companion.getInstance().writeLogSync(String.format("获取验证码失败:%s", msg));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 44 && resultCode == 45) {
country_code = data.getStringExtra("code");
country_name = data.getStringExtra("name");
jtv_country.setLeftText(String.format("%s +%s", country_name, country_code));
}
}
}