276 lines
9.9 KiB
Java
276 lines
9.9 KiB
Java
package com.gh.gamecenter.fragment;
|
|
|
|
import androidx.lifecycle.Lifecycle;
|
|
import androidx.lifecycle.Observer;
|
|
import androidx.lifecycle.ViewModelProviders;
|
|
import android.content.Intent;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Bundle;
|
|
import android.os.Message;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.core.content.ContextCompat;
|
|
import android.text.Editable;
|
|
import android.text.TextUtils;
|
|
import android.text.TextWatcher;
|
|
import android.view.View;
|
|
import android.widget.EditText;
|
|
import android.widget.TextView;
|
|
|
|
import com.gh.base.fragment.WaitingDialogFragment;
|
|
import com.gh.common.util.GetLoginDataUtils;
|
|
import com.gh.common.util.LogUtils;
|
|
import com.gh.common.util.LoginUtils;
|
|
import com.gh.common.util.PatternUtils;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.entity.LoginTokenEntity;
|
|
import com.gh.gamecenter.entity.UserInfoEntity;
|
|
import com.gh.gamecenter.manager.UserManager;
|
|
import com.gh.gamecenter.normal.NormalFragment;
|
|
import com.gh.gamecenter.user.ApiResponse;
|
|
import com.gh.gamecenter.user.LoginTag;
|
|
import com.gh.gamecenter.user.UserViewModel;
|
|
import com.halo.assistant.HaloApp;
|
|
import com.tencent.connect.common.Constants;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import butterknife.BindView;
|
|
import butterknife.OnClick;
|
|
|
|
/**
|
|
* Created by khy on 14/08/17.
|
|
*/
|
|
|
|
public class LoginFragment extends NormalFragment implements LoginUtils.onCaptchaCallBackListener
|
|
, GetLoginDataUtils.OnLoginDataListener, View.OnClickListener, Observer<ApiResponse<UserInfoEntity>> {
|
|
|
|
@BindView(R.id.login_phone_et)
|
|
EditText mLoginPhoneEt;
|
|
@BindView(R.id.login_pass_et)
|
|
EditText mLoginPassEt;
|
|
@BindView(R.id.login_captcha)
|
|
TextView mLoginCaptcha;
|
|
@BindView(R.id.login_phone_btn)
|
|
TextView mLoginBtn;
|
|
|
|
private WaitingDialogFragment mLoginDialog;
|
|
|
|
private UserViewModel mUserViewModel;
|
|
|
|
private String mServiceId;
|
|
|
|
@Override
|
|
protected void handleMessage(Message msg) {
|
|
if (msg.what == 0) { // 验证码倒计时
|
|
int arg1 = msg.arg1;
|
|
arg1--;
|
|
if (arg1 >= 0) {
|
|
Message message = new Message();
|
|
message.what = 0;
|
|
message.arg1 = arg1;
|
|
mBaseHandler.sendMessageDelayed(message, 1000);
|
|
mLoginCaptcha.setText(arg1 + "s");
|
|
} else {
|
|
mLoginCaptcha.setText("重新获取");
|
|
mLoginCaptcha.setTextColor(ContextCompat.getColor(getContext(), R.color.title));
|
|
mLoginCaptcha.setBackgroundResource(R.drawable.border_black_bg);
|
|
mLoginCaptcha.setEnabled(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
if (requestCode == Constants.REQUEST_LOGIN) { // QQ Login callback
|
|
GetLoginDataUtils.getInstance(getContext()).onQQCallback(requestCode, resultCode, data);
|
|
} else if (requestCode == 32973) { // WeiBo Login callback
|
|
GetLoginDataUtils.getInstance(getContext()).onWeiboCallback(requestCode, resultCode, data);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
|
super.onActivityCreated(savedInstanceState);
|
|
setNavigationTitle("登录光环助手");
|
|
}
|
|
|
|
@Override
|
|
protected int getLayoutId() {
|
|
return R.layout.fragment_login;
|
|
}
|
|
|
|
@Override
|
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
final UserViewModel.Factory factory = new UserViewModel.Factory(HaloApp.getInstance().getApplication());
|
|
mUserViewModel = ViewModelProviders.of(this, factory).get(UserViewModel.class);
|
|
mUserViewModel.getLoginObsUserinfo().observe(this, this);
|
|
|
|
mLoginPassEt.addTextChangedListener(new LoginTextWatcher(mLoginPassEt));
|
|
mLoginPhoneEt.addTextChangedListener(new LoginTextWatcher(mLoginPhoneEt));
|
|
}
|
|
|
|
@OnClick({R.id.login_captcha, R.id.login_phone_btn, R.id.login_qq_btn, R.id.login_weibo_btn, R.id.login_wechat_btn})
|
|
public void onClick(View v) {
|
|
super.onClick(v);
|
|
switch (v.getId()) {
|
|
case R.id.login_captcha:
|
|
final String phoneNum = mLoginPhoneEt.getText().toString().trim();
|
|
if (PatternUtils.isPhoneNum(phoneNum) && phoneNum.length() == 11) {
|
|
LoginUtils.getPhoneCaptcha(getContext(), phoneNum, LoginFragment.this);
|
|
} else {
|
|
toast("请输入正确的手机号");
|
|
}
|
|
break;
|
|
case R.id.login_phone_btn:
|
|
loginByMobile();
|
|
break;
|
|
case R.id.login_qq_btn:
|
|
GetLoginDataUtils.getInstance(getContext()).QQLogin(this, getActivity());
|
|
break;
|
|
case R.id.login_weibo_btn:
|
|
GetLoginDataUtils.getInstance(getContext()).WeiBoLogin(this, getActivity());
|
|
break;
|
|
case R.id.login_wechat_btn:
|
|
GetLoginDataUtils.getInstance(getContext()).WCLogin(this);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 登录
|
|
private void loginByMobile() {
|
|
String code = mLoginPassEt.getText().toString().trim();
|
|
String phoneNum = mLoginPhoneEt.getText().toString().trim();
|
|
|
|
if (TextUtils.isEmpty(phoneNum)) {
|
|
toast("手机号码不能为空");
|
|
return;
|
|
} else if (TextUtils.isEmpty(code)) {
|
|
toast("验证码不能为空");
|
|
return;
|
|
} else if (TextUtils.isEmpty(mServiceId)) {
|
|
toast("验证码错误,请重新获取");
|
|
return;
|
|
}
|
|
|
|
Map<String, String> params = new HashMap<>();
|
|
params.put("mobile", phoneNum);
|
|
params.put("code", code);
|
|
params.put("service_id", mServiceId);
|
|
|
|
login(new JSONObject(params), LoginTag.phone);
|
|
}
|
|
|
|
@Override
|
|
public void onCaptcha(String serviceId) {
|
|
if (!TextUtils.isEmpty(serviceId)) {
|
|
mServiceId = serviceId;
|
|
|
|
// 启动验证码倒计时
|
|
Message message = new Message();
|
|
message.what = 0;
|
|
message.arg1 = 60; // 倒数时间
|
|
mBaseHandler.sendMessage(message);
|
|
mLoginCaptcha.setTextColor(ContextCompat.getColor(getContext(), R.color.hint));
|
|
mLoginCaptcha.setBackgroundResource(R.drawable.border_captcha_bg);
|
|
mLoginCaptcha.setEnabled(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void OnLoginData(JSONObject content, LoginTag loginTag) {
|
|
login(content, loginTag);
|
|
}
|
|
|
|
@Override
|
|
public void onChanged(@Nullable ApiResponse<UserInfoEntity> response) {
|
|
if (mLoginDialog != null) {
|
|
mLoginDialog.dismissAllowingStateLoss();
|
|
}
|
|
|
|
if (response != null && response.getData() != null) {
|
|
LoginTokenEntity loginTokenEntity = UserManager.getInstance().getLoginTokenEntity();
|
|
if (loginTokenEntity != null) {
|
|
String loginType = loginTokenEntity.getLoginType();
|
|
if (LoginTag.qq.name().equals(loginType) || LoginTag.wechat.name().equals(loginType)
|
|
|| LoginTag.weibo.name().equals(loginType)) {
|
|
LogUtils.login("success", loginType, mEntrance);
|
|
} else {
|
|
LogUtils.login("success", "mobile", mEntrance);
|
|
}
|
|
}
|
|
// 防止UserManager数据丢失后重复登录
|
|
if (TextUtils.isEmpty(UserManager.getInstance().getToken())) {
|
|
mUserViewModel.retryCheckLogin();
|
|
}
|
|
if (getActivity() != null) getActivity().finish();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onDestroyView() {
|
|
super.onDestroyView();
|
|
mBaseHandler.removeCallbacksAndMessages(null);
|
|
}
|
|
|
|
|
|
private void login(JSONObject content, LoginTag loginTag) {
|
|
if (loginTag.equals(LoginTag.phone)) {
|
|
LogUtils.login("logging", "mobile", mEntrance);
|
|
} else {
|
|
LogUtils.login("logging", loginTag.name(), mEntrance);
|
|
}
|
|
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
|
|
mLoginDialog = WaitingDialogFragment.newInstance(getString(R.string.logging));
|
|
mLoginDialog.show(getChildFragmentManager(), null);
|
|
}
|
|
mUserViewModel.login(content, loginTag);
|
|
}
|
|
|
|
|
|
private class LoginTextWatcher implements TextWatcher {
|
|
private EditText mEditText;
|
|
|
|
public LoginTextWatcher(EditText e) {
|
|
mEditText = e;
|
|
}
|
|
|
|
@Override
|
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
Drawable drawable;
|
|
int tvCount = s.length();
|
|
if (mEditText == mLoginPassEt) {
|
|
if (tvCount > 0) {
|
|
drawable = ContextCompat.getDrawable(getContext(), R.drawable.login_password_focused);
|
|
} else {
|
|
drawable = ContextCompat.getDrawable(getContext(), R.drawable.login_password_unfocused);
|
|
}
|
|
} else {
|
|
if (tvCount > 0) {
|
|
drawable = ContextCompat.getDrawable(getContext(), R.drawable.login_phone_focused);
|
|
} else {
|
|
drawable = ContextCompat.getDrawable(getContext(), R.drawable.login_phone_unfocused);
|
|
}
|
|
}
|
|
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
|
|
Drawable line = ContextCompat.getDrawable(getContext(), R.drawable.et_line_login);
|
|
line.setBounds(0, 0, line.getMinimumWidth(), line.getMinimumHeight());
|
|
mEditText.setCompoundDrawables(drawable, null, null, line);
|
|
}
|
|
|
|
@Override
|
|
public void afterTextChanged(Editable s) {
|
|
|
|
}
|
|
}
|
|
}
|