package com.weikou.beibeivideo.ui.login;
|
|
import android.app.Dialog;
|
import android.app.ProgressDialog;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.SharedPreferences;
|
import android.content.SharedPreferences.Editor;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.graphics.Color;
|
import android.graphics.Paint;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.view.View.OnClickListener;
|
import android.widget.CheckBox;
|
import android.widget.EditText;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.LinearLayout.LayoutParams;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.cmic.sso.sdk.AuthRegisterViewConfig;
|
import com.lcjian.library.util.SingleToast;
|
import com.lcjian.library.util.common.StringUtils;
|
import com.mobile.auth.gatewayauth.AuthUIConfig;
|
import com.mobile.auth.gatewayauth.CustomInterface;
|
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.tencent.mm.opensdk.modelmsg.SendAuth;
|
import com.umeng.analytics.MobclickAgent;
|
import com.umeng.socialize.UMAuthListener;
|
import com.umeng.socialize.UMShareAPI;
|
import com.umeng.socialize.bean.SHARE_MEDIA;
|
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
|
import com.weikou.beibeivideo.BeibeiVideoAPI;
|
import com.weikou.beibeivideo.BeibeiVideoApplication;
|
import com.weikou.beibeivideo.R;
|
import com.weikou.beibeivideo.ui.BaseActivity;
|
import com.weikou.beibeivideo.ui.dialog.LoadingDialogUtil;
|
import com.weikou.beibeivideo.ui.mine.BrowserActivity;
|
import com.weikou.beibeivideo.util.BeibeiConstant;
|
import com.weikou.beibeivideo.util.DimenUtils;
|
import com.weikou.beibeivideo.util.IsEmail;
|
import com.weikou.beibeivideo.util.UserUtil;
|
import com.weikou.beibeivideo.util.XGPush;
|
|
import org.apache.http.Header;
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Timer;
|
import java.util.TimerTask;
|
import java.util.regex.Matcher;
|
|
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;
|
|
private EditText et_phone, et_verfication_code;
|
|
private CheckBox cb_user_agreement;
|
|
private boolean showOneKeyLoginToast = false;
|
|
private boolean login;
|
|
private Dialog loadingDialog;
|
|
private void initView() {
|
loadingDialog = LoadingDialogUtil.getLoadingDialog(this, "");
|
|
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_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);
|
findViewById(R.id.tv_confirm).setOnClickListener(this);
|
findViewById(R.id.tv_back).setOnClickListener(this);
|
}
|
|
private void initOneKeyLogin() {
|
if (!loadingDialog.isShowing()) {
|
loadingDialog.show();
|
}
|
sdkInit(BeibeiConstant.ALIYUN_ONE_KEY_LOGIN_SECRETINFO);
|
initUI();
|
}
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.act_phone_login);
|
/*
|
* 计算状态栏高度并设置
|
*/
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
int result = 0;
|
int resourceId = getResources().getIdentifier("status_bar_height",
|
"dimen", "android");
|
if (resourceId > 0) {
|
result = getResources().getDimensionPixelSize(resourceId);
|
}
|
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
|
result);
|
findViewById(R.id.v_status_bar).setLayoutParams(params);
|
} else {
|
findViewById(R.id.v_status_bar).setVisibility(View.GONE);
|
}
|
initView();
|
login = getIntent().getBooleanExtra("login", false);
|
tv_title.setText(login ? "登录" : "绑定手机号");
|
|
|
openOneKeyLogin(false);
|
|
}
|
|
|
private synchronized void openOneKeyLogin(final boolean notify) {
|
BeibeiVideoAPI.allowOneKeyLogin(this, UserUtil.getLoginUid(this), new BasicTextHttpResponseHandler() {
|
|
@Override
|
public void onStart() {
|
if (loadingDialog != null && !loadingDialog.isShowing()) {
|
loadingDialog.show();
|
}
|
}
|
|
@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() {
|
if (loadingDialog != null && loadingDialog.isShowing()) {
|
loadingDialog.dismiss();
|
}
|
}
|
});
|
|
|
}
|
|
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.BLACK)
|
.setStatusBarColor(Color.BLACK)
|
|
.setLogoWidth(147)
|
.setLogoHeight(36)
|
.setLogoImgPath("ic_login_logo")
|
.setLogoOffsetY(24 - 10)
|
|
.setSloganOffsetY(171 - 10)
|
.setSloganTextSize(12)
|
.setSloganTextColor(Color.parseColor("#F4DE4A"))
|
|
.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.WHITE)
|
.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(true)
|
.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_obtain_verfication_code:
|
String phone = et_phone.getText().toString();
|
if (!StringUtils.isMobileNumber(phone)) {
|
SingleToast.showToast(this, "请输入正确的电话号码");
|
break;
|
}
|
tv_obtain_verfication_code.setEnabled(false);
|
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;
|
}
|
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);
|
mPhoneNumberAuthHelper.getLoginToken(PhoneLoginActivity.this, 5000);
|
break;
|
|
case ResultCode.CODE_START_AUTHPAGE_SUCCESS:
|
Log.i(TAG, "唤起授权页成功:" + s);
|
if (loadingDialog.isShowing()) {
|
loadingDialog.dismiss();
|
}
|
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) {
|
if (loadingDialog.isShowing()) {
|
loadingDialog.dismiss();
|
}
|
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 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();
|
if (loadingDialog != null && !loadingDialog.isShowing())
|
loadingDialog.show();
|
}
|
|
@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();
|
if (loadingDialog != null && loadingDialog.isShowing())
|
loadingDialog.dismiss();
|
}
|
});
|
|
|
}
|
|
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;
|
}
|
}
|
};
|
|
|
}
|