package eVVM.apk.ui.login; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.IBinder; import android.text.Html; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextPaint; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.ScrollView; import android.widget.TextView; import com.hjq.base.BaseDialog; import com.hjq.base.BaseDialogFragment; import com.hjq.permissions.OnPermission; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.hjq.widget.ClearEditText; import com.tianma.netdetector.lib.NetworkType; import java.util.List; import butterknife.BindView; import butterknife.OnClick; import eVVM.apk.R; import eVVM.apk.helper.InputTextHelper; import eVVM.apk.helper.MD5; import eVVM.apk.helper.SPUtils; import eVVM.apk.helper.SoftKeyBoardListener; import eVVM.apk.mvp.MvpActivity; import eVVM.apk.ui.My.ExamineActivity; import eVVM.apk.ui.bean.LoginBean; import eVVM.apk.ui.home.FactorAdminActivity; import eVVM.apk.ui.home.FactoryOperatorActivity; import eVVM.apk.ui.home.HomeActivity; import eVVM.apk.ui.launcher.guide.GuideActivity; import eVVM.apk.ui.login.login.LoginContract; import eVVM.apk.ui.login.login.LoginPresenter; public class LoginActivity extends MvpActivity implements LoginContract.View { @BindView(R.id.login_et_phone) ClearEditText loginEtPhone; @BindView(R.id.login_et_pwd) ClearEditText loginEtPwd; //密码输入框 @BindView(R.id.login_tv_forgetpwd) TextView loginTvForgetpwd; //忘记密码 @BindView(R.id.login_btn_login) Button loginBtnLogin; //登录 @BindView(R.id.login_tv_goregist) TextView loginTvGoregist; //去注册 @BindView(R.id.login_scrollview) ScrollView loginScrollview; @BindView(R.id.examine_cb_agree) CheckBox examineCbAgree; @BindView(R.id.examine_tv_protocol) TextView examineTvProtocol; private String getMD5Pwd; private String userPhone; @Override protected int getLayoutId() { return R.layout.activity_login; } @Override protected int getTitleId() { return 0; } @Override protected void initView() { new InputTextHelper.Builder(this) .setMain(loginBtnLogin) .addView(loginEtPhone) .addView(loginEtPwd) .build(); loginScrollview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, arg1)) { hideKeyboard(v.getWindowToken()); } //不能滑动 return true; //可以滑动 //return false; } }); SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() { @Override public void keyBoardShow(int height) { loginScrollview.smoothScrollTo(0, height / 2); } @Override public void keyBoardHide(int height) { loginScrollview.smoothScrollTo(0, 0); } }); getBtnStact(); toProtocol(); } @Override protected void initData() { getPermissions(); String user_phone = (String) SPUtils.get("USER_PHONE", ""); String user_pwd = (String) SPUtils.get("USER_PWD", ""); if (TextUtils.isEmpty(user_phone) && TextUtils.isEmpty(user_pwd)) { //用户没有登录过 } else { showLoading(); //登陆过 进行自动登录 userPhone = user_phone; getMD5Pwd = user_pwd; getPresenter().login(user_phone, user_pwd); } } private void getPermissions() { // 联系人 String[] CONTACTS = new String[]{ Permission.CAMERA, Permission.RECEIVE_SMS, Permission.READ_SMS, Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE, Permission.ACCESS_FINE_LOCATION, Permission.ACCESS_COARSE_LOCATION, Permission.REQUEST_INSTALL_PACKAGES}; XXPermissions.with(LoginActivity.this) //.constantRequest() //可设置被拒绝后继续申请,直到用户授权或者永久拒绝 //.permission(Permission.SYSTEM_ALERT_WINDOW, Permission.REQUEST_INSTALL_PACKAGES) //支持请求6.0悬浮窗权限8.0请求安装权限 .permission(CONTACTS) //不指定权限则自动获取清单中的危险权限 .request(new OnPermission() { @Override public void hasPermission(List granted, boolean isAll) { /*if (isAll) { toast("获取权限成功"); }else { toast("获取权限成功,部分权限未正常授予"); }*/ } @Override public void noPermission(List denied, boolean quick) { /*if(quick) { toast("被永久拒绝授权,请手动授予权限"); //如果是被永久拒绝就跳转到应用权限系统设置页面 XXPermissions.gotoPermissionSettings(LoginActivity.this); }else { //toast("获取权限失败,部分功能可能无法使用"); }*/ } }); } @OnClick({R.id.login_tv_forgetpwd, R.id.login_btn_login, R.id.login_tv_goregist}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.login_tv_forgetpwd: startActivity(PasswordForgetActivity.class); break; case R.id.login_btn_login: if (examineCbAgree.isChecked()) { if (loginEtPhone.getText().toString().length() != 11) { toast(getString(R.string.common_phone_input_error)); } else { //登录 密码进行md5加密 getMD5Pwd = MD5.GetMD5Code(loginEtPwd.getText().toString().trim()); userPhone = loginEtPhone.getText().toString().trim(); getPresenter().login(userPhone, getMD5Pwd); showLoading(); } } else { toast("请勾选用户协议"); } break; case R.id.login_tv_goregist: startActivity(RegisterActivity.class); break; } } @Override protected LoginPresenter createPresenter() { return new LoginPresenter(); } @Override public void loginError(String msg) { showComplete(); toast(msg); if (msg.indexOf("请检查您的网络状态") != -1) { String user_roleId = (String) SPUtils.get("USER_ROLEID", ""); if (!TextUtils.isEmpty(user_roleId)) { switch (Integer.parseInt(user_roleId)) { case 2: //医生 startActivityFinish(HomeActivity.class); break; case 3: //医药企业管理员 startActivityFinish(FactorAdminActivity.class); break; case 4: //医药企业操作员 if (!checkGpsAndNfc()) { return; } startActivityFinish(FactoryOperatorActivity.class); break; default: toast("当前版本不支持本角色登录"); break; } } } } @Override public void loginSuccess(LoginBean data) { // 处理登录 showComplete(); LoginBean.DataBean userData = data.getData(); SPUtils.put("USER_ID", userData.getId() + ""); SPUtils.put("USER_TOKEN", userData.getToken() + ""); if (userData.getStatus() == 1) {//状态(0禁用 1正常 2删除 3未审核 4审核未通过 5未完成注册 6未同意协议) if (userData.getRoleId() != 2 && userData.getRoleId() != 3 && userData.getRoleId() != 4) { toast("当前版本不支持本角色登录"); return; } else if (userData.getRoleId() == 4 && !checkGpsAndNfc()) { return; } Log.e("userData", "" + userData.getPassword()); //保存用户数据 SPUtils.put("USER_PHONE", userPhone + ""); SPUtils.put("USER_PWD", getMD5Pwd + ""); SPUtils.put("USER_ROLEID", userData.getRoleId() + ""); SPUtils.put("USER_FACTORY_ID", userData.getFactoryId() + ""); SPUtils.put("USER_NAME", userData.getUserName() + ""); SPUtils.put("PHONE_MODEL", userData.getPhoneModel()); SPUtils.put("USER_EMAIL", userData.getEmail()); SPUtils.put("USER_CALLNUM", userData.getTelephone()); guideOrLogin(userData.getRoleId()); //根据不同角色 跳转进入不同的引导页或登录页 只有厂家管理员不需要判断nfc } else if (userData.getStatus() == 0) { toast("当前账号已被禁用"); } else if (userData.getStatus() == 2) { toast("当前账号已被删除"); } else if (userData.getStatus() == 3) { Intent in = new Intent(this, ExamineActivity.class); in.putExtra("LoginStatusCode", 3); startActivity(in); //toast("您的账号正在审核中,请耐心等待"); } else if (userData.getStatus() == 4) { Intent in = new Intent(this, ExamineActivity.class); in.putExtra("LoginStatusCode", 4); startActivity(in); //toast("审核未通过"); } else if (userData.getStatus() == 5) { // toast("未完成注册"); Intent in = new Intent(this, AuthenticationActivity.class); in.putExtra("registerUserId", data.getData().getId() + ""); startActivity(in); } else if (userData.getStatus() == 6) { Intent in = new Intent(this, ExamineActivity.class); in.putExtra("LoginStatusCode", 6); startActivity(in); } } private void guideOrLogin(int roleId) { switch (roleId) { case 2: //医生 int guide_doctor = (int) SPUtils.get("GUIDE_DOCTOR", 0); if (guide_doctor == 1) { startActivityFinish(HomeActivity.class); } else { goToGuide(roleId); } break; case 3: //医药企业管理员 int guide_admin = (int) SPUtils.get("GUIDE_ADMIN", 0); if (guide_admin == 1) { startActivityFinish(FactorAdminActivity.class); } else { goToGuide(roleId); } break; case 4: //医药企业操作员 if (!checkGpsAndNfc()) { return; } int guide_opera = (int) SPUtils.get("GUIDE_OPERA", 0); if (guide_opera == 1) { startActivityFinish(FactoryOperatorActivity.class); } else { goToGuide(roleId); } break; default: toast("当前版本不支持本角色登录"); break; } } private void goToGuide(int roleId) { //进入引导页 Intent guideIn = new Intent(this, GuideActivity.class); guideIn.putExtra("guideRoleId", roleId); startActivityFinish(guideIn); } private void getBtnStact() { examineCbAgree.setChecked(true); /* examineCbAgree.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { examineBtnTrue.setEnabled(true); } else { //forgetBtnLogin.setClickable(false); examineBtnTrue.setEnabled(false); } } });*/ } private void toProtocol() { ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { //startActivity(new Intent(SpecialLineCompanyListActivity.this, SpecialLineCreateCompanyActivity.class));//响应点击事件 // agreementView.setVisibility(View.VISIBLE); new BaseDialogFragment.Builder(getActivity()) .setContentView(R.layout.dialog_agree) .setAnimStyle(BaseDialog.AnimStyle.SCALE) .setText(R.id.agree_msg, Html.fromHtml(getString(R.string.agreement))) .setOnClickListener(R.id.agree_canale, new BaseDialog.OnClickListener() { @Override public void onClick(BaseDialog dialog, ImageView view) { dialog.dismiss(); } }) .addOnShowListener(new BaseDialog.OnShowListener() { @Override public void onShow(BaseDialog dialog) { //toast("Dialog 显示了"); } }) .addOnCancelListener(new BaseDialog.OnCancelListener() { @Override public void onCancel(BaseDialog dialog) { // toast("Dialog 取消了"); } }) .addOnDismissListener(new BaseDialog.OnDismissListener() { @Override public void onDismiss(BaseDialog dialog) { //toast("Dialog 销毁了"); } }) .show(); } @Override public void updateDrawState(TextPaint ds) { ds.setColor(Color.BLUE);//设置颜色 ds.setUnderlineText(false);//去掉下划线 ds.clearShadowLayer(); } }; SpannableStringBuilder builder = new SpannableStringBuilder(examineTvProtocol.getText().toString()); builder.setSpan(clickableSpan, 8, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); examineTvProtocol.setText(builder); examineTvProtocol.setMovementMethod(LinkMovementMethod.getInstance());//必须设置才能响应点击事件 } //点击空白 隐藏软键盘 @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, event)) { hideKeyboard(v.getWindowToken()); } } return super.onTouchEvent(event); } /** * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏 * * @param v * @param event * @return */ private boolean isShouldHideKeyboard(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { //判断是否是EditText int[] l = {0, 0}; v.getLocationInWindow(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 点击EditText的事件,忽略它。 return false; } else { return true; } } // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点 return false; } /** * 获取InputMethodManager,隐藏软键盘 * * @param token */ private void hideKeyboard(IBinder token) { if (token != null) { InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } } @Override public void onNetConnected(NetworkType networkType) { } }