diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1afdc1683..c91e509f7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -466,6 +466,17 @@ android:label="输入验证码界面" android:launchMode="singleTop" android:screenOrientation="portrait" /> + + + { + getSmsCode(); + }); + } + + @Override + protected boolean needSteepStateBar() { + return true; + } + + + @Override + protected void onDestroy() { + codeEt = null; + super.onDestroy(); + stopCountDownTimer(); + } + + + @Override + public boolean onTouchEvent(MotionEvent event) { + View view = getCurrentFocus(); + boolean isPressEdit = false; + if (view instanceof EditText) { + if (event.getRawX() >= view.getX() && event.getRawX() <= view.getX() + view.getWidth() && event.getRawY() >= view.getY() && event.getRawY() <= view.getY() + view.getHeight()) { + isPressEdit = true; + } + } + if (!isPressEdit) { + hideIME(); + } + return super.onTouchEvent(event); + + } + + + /** + * 获取验证码 + */ + @SuppressLint("CheckResult") + private void getSmsCode() { + if (mPhone.length() != 11){ + return; + } + AuthModel.get() + .sendLoginCode(mPhone,TYPE_SMS) + .observeOn(AndroidSchedulers.mainThread()) + .compose(bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onSuccess(String s) { + tvDesc.setText(getString(R.string.str_send_code_success)+mPhone); + startCountDownTimer(); + toast(s); + setResult(RESULT_OK); + } + + @Override + public void onError(Throwable e) { + toast(e.getMessage()); +// finish(); + LogUtils.e( "获取短信失败!"); + } + }); + } + + + + @Override + public void dealWithLoginError(Throwable e) { + if (!(e instanceof IsSuperAdminException)) { + String msg = e.getMessage(); + StringBuilder eventLabel = new StringBuilder("登录注册页-登录失败"); + if (!TextUtils.isEmpty(msg)) { + eventLabel.append(msg); + } + // 2004可以完整写入 + StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_LOGIN_FAILED_CLICK, eventLabel.toString()); + } + if (e instanceof BanAccountException) { + isSuperAdmin = false; + BanAccountException exception = (BanAccountException) e; + String text = "您的账号因" + exception.getMessage() + "被封禁\n解封时间:"; + int start = text.length(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()); + text += simpleDateFormat.format(new Date(exception.getDate())); + SpannableString spannableString = new SpannableString(text); + spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(BindCodeActivity.this, R.color.appColor)), + start, text.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + getDialogManager().showOkCancelWithTitleDialog("您被封号了", + spannableString, "确定", "取消", null); + } else if (e instanceof ShowPhoneCodeException) { + isSuperAdmin = false; + ShowPhoneCodeException showPhoneCodeException = (ShowPhoneCodeException) e; + toast(e.getMessage()); + } else { + isSuperAdmin = false; + toast(e.getMessage()); + } + } + + private void startCountDownTimer() { + stopCountDownTimer(); + timer = new CodeDownDescTimer(tvSecond, tvGetCode,60000, 1000); + timer.start(); + } + + private void stopCountDownTimer() { + if (timer != null) { + timer.cancel(); + timer = null; + } + } + + private void bindPhone() { + getDialogManager().showProgressDialog(BindCodeActivity.this, "正在绑定请稍后..."); + AuthModel.get().bindPhone( + mPhone, + codeEt.getText().toString() + ) + .compose(bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onSuccess(UserInfo s) { + getDialogManager().dismissDialog(); + toast("绑定手机号成功"); + finish(); + } + + @Override + public void onError(Throwable e) { + getDialogManager().dismissDialog(); + toast(e.getMessage()); + } + }); + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/login/BindPhoneActivity.java b/app/src/main/java/com/yizhuan/erban/ui/login/BindPhoneActivity.java new file mode 100644 index 000000000..7550ea15c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/login/BindPhoneActivity.java @@ -0,0 +1,175 @@ +package com.yizhuan.erban.ui.login; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; + +import com.yizhuan.erban.R; +import com.yizhuan.erban.base.BaseActivity; +import com.yizhuan.erban.ui.login.helper.LogoutHelper; +import com.yizhuan.xchat_android_core.auth.event.LoginEvent; +import com.yizhuan.xchat_android_library.utils.NetworkUtils; +import com.yizhuan.xchat_android_library.utils.TextWatcherWrapper; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +/** + * @author zhouxiangfeng + * @date 17/2/26 + */ +public class BindPhoneActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "LoginPhoneActivity"; + + private EditText accountEt; + private Button btnNext; + private ImageView ivBack; + public static final String KEY_BACK_LOGIN = "key_back_login"; + private int REQUEST_CODE = 100; + + private AccountValidator accountValidator = new AccountValidator(); + private TextWatcher textWatcher = new TextWatcherWrapper() { + @Override + public void afterTextChanged(Editable s) { + checkInput(); + } + }; + + + public static void start(Context context) { + Intent intent = new Intent(context, BindPhoneActivity.class); + context.startActivity(intent); + } + + public static void startForResult(Activity context, int requestCode) { + Intent intent = new Intent(context, BindPhoneActivity.class); + context.startActivityForResult(intent, requestCode); // startActivityForResult会导致singletop,singletask失效 + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login_phone); + onFindViews(); + onSetListener(); + + accountEt.setFocusable(true); + accountEt.setFocusableInTouchMode(true); + accountEt.requestFocus(); + this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); +// permission(); +// showLoginTip(); +// AuthModel.get().isFromLogin = true; + } + + @Override + protected void setStatusBar() { + StatusBarLightModes(true); + } + + private void onFindViews() { + accountEt = findViewById(R.id.et_account); + btnNext = findViewById(R.id.btn_next); + ivBack = findViewById(R.id.iv_back); + } + + private void onSetListener() { + btnNext.setOnClickListener(this); + btnNext.setEnabled(false); + accountEt.addTextChangedListener(textWatcher); + ivBack.setOnClickListener(this); + } + + private void checkInput() { + if (!TextUtils.isEmpty(accountEt.getText().toString()) && accountEt.getText().toString().length() >= 7) { + btnNext.setEnabled(true); + } else { + btnNext.setEnabled(false); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_next: + if (!NetworkUtils.isNetworkStrictlyAvailable(this)) { + checkNetToast(); + return; + } + if (!accountValidator.isValid(accountEt.getText().toString())) { + toast(accountValidator.getErrorMessage()); + return; + } + BindCodeActivity.startForResult(BindPhoneActivity.this,accountEt.getText().toString(),REQUEST_CODE); + break; + + case R.id.iv_back: + handleFinish(); + break; + default: + break; + } + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_CODE &&resultCode == RESULT_OK){ + finish(); + } + } + + @Override + protected boolean needSteepStateBar() { + return true; + } + + + @Override + protected void onDestroy() { + accountEt = null; + super.onDestroy(); + } + + + @Override + public boolean onTouchEvent(MotionEvent event) { + View view = getCurrentFocus(); + boolean isPressEdit = false; + if (view instanceof EditText) { + if (event.getRawX() >= view.getX() && event.getRawX() <= view.getX() + view.getWidth() && event.getRawY() >= view.getY() && event.getRawY() <= view.getY() + view.getHeight()) { + isPressEdit = true; + } + } + if (!isPressEdit) { + hideIME(); + } + return super.onTouchEvent(event); + } + + + + @Override + public void onBackPressed() { + handleFinish(); + } + + private void handleFinish() { + LogoutHelper.logout(); + finish(); + } + +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/auth/event/BindPhoneEvent.java b/core/src/main/java/com/yizhuan/xchat_android_core/auth/event/BindPhoneEvent.java new file mode 100644 index 000000000..dbcbe3bf4 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/auth/event/BindPhoneEvent.java @@ -0,0 +1,11 @@ +package com.yizhuan.xchat_android_core.auth.event; + +import lombok.Data; + +/** + * 登录成功事件 + */ +@Data +public class BindPhoneEvent { + +}