package com.weikou.beibeivideo.ui.login; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.lcjian.library.dialog.DialogUtil; import com.lcjian.library.util.SingleToast; import com.lcjian.library.util.common.StringUtils; import com.mobile.auth.gatewayauth.AuthUIConfig; import com.mobile.auth.gatewayauth.PhoneNumberAuthHelper; import com.mobile.auth.gatewayauth.ResultCode; import com.mobile.auth.gatewayauth.TokenResultListener; import com.mobile.auth.gatewayauth.model.TokenRet; import com.weikou.beibeivideo.BasicTextHttpResponseHandler; import com.weikou.beibeivideo.BeibeiVideoAPI; import com.weikou.beibeivideo.R; import com.weikou.beibeivideo.ui.BaseActivity; import com.weikou.beibeivideo.ui.mine.BrowserActivity; import com.weikou.beibeivideo.util.BeibeiConstant; import com.weikou.beibeivideo.util.DimenUtils; import com.weikou.beibeivideo.util.UserUtil; import com.weikou.beibeivideo.util.ui.TopStatusSettings; import org.apache.http.Header; import org.json.JSONObject; import java.util.Timer; import java.util.TimerTask; public class PhoneLoginActivity extends BaseActivity implements OnClickListener, TokenResultListener { private final static String TAG = "PhoneLoginActivity"; private PhoneNumberAuthHelper mPhoneNumberAuthHelper; private TextView tv_login_onekey, tv_obtain_verfication_code, tv_title, tv_confirm; private EditText et_phone, et_verfication_code; private CheckBox cb_user_agreement; private boolean showOneKeyLoginToast = false; private boolean login; private void initView() { tv_login_onekey = findViewById(R.id.tv_login_onekey); tv_obtain_verfication_code = findViewById(R.id.tv_obtain_verfication_code); et_phone = findViewById(R.id.et_phone); tv_login_onekey = findViewById(R.id.tv_login_onekey); tv_login_onekey = findViewById(R.id.tv_login_onekey); cb_user_agreement = findViewById(R.id.cb_user_agreement); et_verfication_code = findViewById(R.id.et_verfication_code); tv_title = findViewById(R.id.tv_title); tv_confirm = findViewById(R.id.tv_confirm); tv_login_onekey.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下划线 tv_login_onekey.getPaint().setAntiAlias(true);//抗锯齿 tv_obtain_verfication_code.setOnClickListener(this); tv_login_onekey.setOnClickListener(this); tv_confirm.setOnClickListener(this); findViewById(R.id.tv_back).setOnClickListener(this); findViewById(R.id.tv_user_agreement).setOnClickListener(this); findViewById(R.id.tv_privacy_policy).setOnClickListener(this); } private void initOneKeyLogin() { DialogUtil.show(loadingDialog); sdkInit(BeibeiConstant.ALIYUN_ONE_KEY_LOGIN_SECRETINFO); initUI(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_phone_login); TopStatusSettings.setStatusViewAndDeepColor(this); initView(); login = getIntent().getBooleanExtra("login", false); tv_title.setText(login ? "登录" : "绑定手机号"); tv_confirm.setText(login ? "登录" : "绑定"); if (login) { tv_login_onekey.setVisibility(View.GONE); } if (!login) { openOneKeyLogin(false); } findViewById(R.id.tv_user_agreement_text).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { cb_user_agreement.setChecked(!cb_user_agreement.isChecked()); } }); } private synchronized void openOneKeyLogin(final boolean notify) { BeibeiVideoAPI.allowOneKeyLogin(this, UserUtil.getLoginUid(this), new BasicTextHttpResponseHandler() { @Override public void onStart() { DialogUtil.show(loadingDialog); } @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { if (jsonObject.optBoolean("IsPost")) { initOneKeyLogin(); //检测环境 mPhoneNumberAuthHelper.checkEnvAvailable(2); } else { if (notify) { Toast.makeText(PhoneLoginActivity.this, jsonObject.optString("Error"), Toast.LENGTH_SHORT).show(); } } } @Override public void onFinish() { DialogUtil.dismiss(loadingDialog); } }); } private void initUI() { int width = DimenUtils.getScreenWidth(this); int widthDP = DimenUtils.px2dip(this, width); AuthUIConfig uiCOnfig = new AuthUIConfig.Builder() .setPageBackgroundPath("shape_login_onkey_bg") .setNavText("") .setNavColor(Color.WHITE) .setNavHidden(false) .setNavReturnImgPath("ic_login_close") .setNavReturnImgWidth(22) .setNavReturnImgHeight(22) .setNavReturnScaleType(ImageView.ScaleType.FIT_XY) .setWebNavColor(Color.BLACK) .setWebNavReturnImgPath("ic_back_two") .setWebViewStatusBarColor(Color.WHITE) .setStatusBarColor(Color.WHITE) .setLogoWidth(147) .setLogoHeight(36) .setLogoImgPath("ic_login_logo") .setLogoOffsetY(24 - 10) .setSloganOffsetY(171 - 10) .setSloganTextSize(12) .setSloganTextColor(Color.parseColor("#F804F5")) .setLogBtnText("⼀键登录") .setLogBtnTextSize(17) .setLogBtnTextColor(Color.parseColor("#F4DE4A")) .setLogBtnBackgroundPath("shape_login_btn") .setLogBtnOffsetY(229 - 10) .setLogBtnHeight(44) .setDialogWidth(305 * widthDP / 375) .setDialogHeight(454) .setNavColor(Color.RED) .setSwitchAccHidden(true) .setNumberColor(Color.parseColor("#0052F6")) .setNumberSize(36) .setNumFieldOffsetY(128 - 10) .setAppPrivacyOne("《用户服务协议》", BeibeiConstant.USER_AGREEMENT) .setAppPrivacyTwo("《隐私政策》", BeibeiConstant.PRIVACY_POLICY) .setAppPrivacyColor(Color.parseColor("#B3B8D3"), Color.parseColor("#51B3FF")) .setPrivacyBefore("登录即表示同意") .setPrivacyEnd("") .setCheckedImgPath("ic_login_privacy_checked") .setPrivacyTextSize(11) .setPrivacyState(false) .setVendorPrivacyPrefix("《") .setVendorPrivacySuffix("》") .create(); mPhoneNumberAuthHelper.setAuthUIConfig(uiCOnfig); } public void sdkInit(String secretInfo) { mPhoneNumberAuthHelper = PhoneNumberAuthHelper.getInstance(this, this); mPhoneNumberAuthHelper.getReporter().setLoggerEnable(true); mPhoneNumberAuthHelper.setAuthSDKInfo(secretInfo); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_back: finish(); break; case R.id.tv_user_agreement: { Intent intent = new Intent(this, BrowserActivity.class); intent.putExtra("url", BeibeiConstant.USER_AGREEMENT); startActivity(intent); } break; case R.id.tv_privacy_policy: { Intent intent = new Intent(this, BrowserActivity.class); intent.putExtra("url", BeibeiConstant.PRIVACY_POLICY); startActivity(intent); } break; case R.id.tv_obtain_verfication_code: String phone = et_phone.getText().toString(); if (!StringUtils.isMobileNumber(phone)) { SingleToast.showToast(this, "请输入正确的手机号"); break; } if (!cb_user_agreement.isChecked()) { SingleToast.showToast(this, "请同意用户使用协议与隐私政策"); break; } tv_obtain_verfication_code.setEnabled(false); if (login) { sendLoginVerifyCode(phone); } else { sendBindVerifyCode(phone); } break; case R.id.tv_confirm: if (!cb_user_agreement.isChecked()) { SingleToast.showToast(this, "请同意用户使用协议与隐私政策"); break; } String phone1 = et_phone.getText().toString(); String verficationCode = et_verfication_code.getText().toString(); if (!StringUtils.isMobileNumber(phone1)) { SingleToast.showToast(this, "请输入正确的手机号"); return; } if (StringUtils.isEmpty(verficationCode)) { SingleToast.showToast(this, "验证码不能为空"); return; } if (login) { phoneLogin(); } else { bindPhone(null); } break; case R.id.tv_login_onekey: openOneKeyLogin(true); break; } } @Override public void onTokenSuccess(String s) { Log.i(TAG, "onTokenSuccess:" + s); TokenRet tokenRet = null; try { tokenRet = TokenRet.fromJson(s); switch (tokenRet.getCode()) { case ResultCode.CODE_ERROR_ENV_CHECK_SUCCESS: Log.i(TAG, "终端环境校验成功:" + s); try { mPhoneNumberAuthHelper.getLoginToken(PhoneLoginActivity.this, 5000); } catch (Exception e) { } break; case ResultCode.CODE_START_AUTHPAGE_SUCCESS: Log.i(TAG, "唤起授权页成功:" + s); DialogUtil.dismiss(loadingDialog); break; case ResultCode.CODE_SUCCESS: bindPhone(tokenRet.getToken()); Log.i(TAG, "获取token成功:" + s); mPhoneNumberAuthHelper.setAuthListener(null); break; } } catch (Exception e) { e.printStackTrace(); } showOneKeyLoginToast = true; } @Override public void onTokenFailed(String s) { DialogUtil.dismiss(loadingDialog); Log.i(TAG, "onTokenFailed:" + s); TokenRet tokenRet = null; try { tokenRet = TokenRet.fromJson(s); switch (tokenRet.getCode()) { //用户主动取消 case ResultCode.CODE_ERROR_USER_CANCEL: break; case ResultCode.CODE_ERROR_NO_SIM_FAIL: case ResultCode.CODE_ERROR_NO_MOBILE_NETWORK_FAIL: if (showOneKeyLoginToast) { Toast.makeText(this, "请打开移动网络", Toast.LENGTH_SHORT).show(); } break; default: if (showOneKeyLoginToast) { Toast.makeText(this, "暂无法使用手机号一键登录", Toast.LENGTH_SHORT).show(); } break; } if (ResultCode.CODE_ERROR_USER_CANCEL.equals(tokenRet.getCode())) { //模拟的是必须登录 否则直接退出app的场景 // finish(); mPhoneNumberAuthHelper.quitLoginPage(); } else { // Toast.makeText(getApplicationContext(), "一键登录失败切换到其他登录方式", Toast.LENGTH_SHORT).show(); // Intent pIntent = new Intent(PhoneLoginActivity.this, MessageActivity.class); // startActivityForResult(pIntent, 1002); } } catch (Exception e) { e.printStackTrace(); } mPhoneNumberAuthHelper.setAuthListener(null); showOneKeyLoginToast = true; } int timecount = 59; private Timer timer; class MyTask extends TimerTask { @Override public void run() { if (timecount > 0) { handler.sendEmptyMessage(0); } else { handler.sendEmptyMessage(1); } } } private void sendBindVerifyCode(String phone) { timer = new Timer(); timer.schedule(new PhoneLoginActivity.MyTask(), 1000, 1000); String loginUid = UserUtil.getLoginUid(this); BeibeiVideoAPI.sendBindVerifyCode(PhoneLoginActivity.this, loginUid, phone, new BasicTextHttpResponseHandler() { @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { if (jsonObject.optBoolean("IsPost")) { SingleToast.showToast(PhoneLoginActivity.this, "验证码发送成功,请注意查收"); } else { SingleToast.showToast(PhoneLoginActivity.this, "获取验证码失败,请重新获取!"); handler.sendEmptyMessage(1); } } @Override public void onFinish() { super.onFinish(); tv_obtain_verfication_code.setEnabled(true); } }); } private void sendLoginVerifyCode(String phone) { timer = new Timer(); timer.schedule(new PhoneLoginActivity.MyTask(), 1000, 1000); String loginUid = UserUtil.getLoginUid(this); BeibeiVideoAPI.sendLoginVerifyCode(PhoneLoginActivity.this, phone, new BasicTextHttpResponseHandler() { @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { if (jsonObject.optBoolean("IsPost")) { SingleToast.showToast(PhoneLoginActivity.this, "验证码发送成功,请注意查收"); } else { SingleToast.showToast(PhoneLoginActivity.this, "获取验证码失败,请重新获取!"); handler.sendEmptyMessage(1); } } @Override public void onFinish() { super.onFinish(); tv_obtain_verfication_code.setEnabled(true); } }); } private void bindPhone(String accessToken) { String loginUid = UserUtil.getLoginUid(this); String phone = (et_phone.getText() + "").trim(); String code = (et_verfication_code.getText() + "").trim(); BeibeiVideoAPI.bindPhone(this, loginUid, phone, code, accessToken, new BasicTextHttpResponseHandler() { @Override public void onStart() { super.onStart(); DialogUtil.show(loadingDialog); } @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { if (jsonObject.optBoolean("IsPost")) { //绑定成功 Toast.makeText(PhoneLoginActivity.this, "绑定成功", Toast.LENGTH_SHORT).show(); PhoneLoginActivity.this.finish(); } else { Toast.makeText(PhoneLoginActivity.this, jsonObject.optString("Error"), Toast.LENGTH_SHORT).show(); } } @Override public void onFinish() { super.onFinish(); DialogUtil.dismiss(loadingDialog); if (mPhoneNumberAuthHelper != null) { mPhoneNumberAuthHelper.quitLoginPage(); } } }); } private void phoneLogin() { String phone = (et_phone.getText() + "").trim(); String code = (et_verfication_code.getText() + "").trim(); BeibeiVideoAPI.phoneLogin(this, phone, code, new BasicTextHttpResponseHandler() { @Override public void onStart() { super.onStart(); DialogUtil.show(loadingDialog); } @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { if (jsonObject.optBoolean("IsPost")) { JSONObject user = jsonObject.optJSONObject("Data"); SharedPreferences.Editor edit = getSharedPreferences("user", Context.MODE_PRIVATE).edit(); edit.putString("portrait", user.optString("Portrait")); edit.putString("LoginUid", user.optString("Id")); edit.putString("name", user.optString("Nickname")); edit.commit(); //绑定成功 Toast.makeText(PhoneLoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); PhoneLoginActivity.this.finish(); } else { Toast.makeText(PhoneLoginActivity.this, jsonObject.optString("Error"), Toast.LENGTH_SHORT).show(); } } @Override public void onFinish() { super.onFinish(); DialogUtil.dismiss(loadingDialog); } }); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: tv_obtain_verfication_code.setClickable(false); tv_obtain_verfication_code.setText("重新发送(" + timecount + "s)"); timecount--; break; case 1: timer.cancel(); tv_obtain_verfication_code.setText("发送验证码"); tv_obtain_verfication_code.setClickable(true); timecount = 59; break; } } }; }