d3094e1543ac9f0b4def9c07b6b9ea0c627298f3.svn-base 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package eVVM.apk.ui.login;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.os.IBinder;
  5. import android.text.TextUtils;
  6. import android.util.Log;
  7. import android.view.MotionEvent;
  8. import android.view.View;
  9. import android.view.inputmethod.InputMethodManager;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.ScrollView;
  13. import android.widget.TextView;
  14. import com.hjq.permissions.OnPermission;
  15. import com.hjq.permissions.Permission;
  16. import com.hjq.permissions.XXPermissions;
  17. import com.hjq.widget.ClearEditText;
  18. import java.util.List;
  19. import butterknife.BindView;
  20. import butterknife.OnClick;
  21. import eVVM.apk.R;
  22. import eVVM.apk.helper.InputTextHelper;
  23. import eVVM.apk.helper.MD5;
  24. import eVVM.apk.helper.SPUtils;
  25. import eVVM.apk.helper.SoftKeyBoardListener;
  26. import eVVM.apk.mvp.MvpActivity;
  27. import eVVM.apk.ui.My.ExamineActivity;
  28. import eVVM.apk.ui.bean.LoginBean;
  29. import eVVM.apk.ui.home.FactorAdminActivity;
  30. import eVVM.apk.ui.home.FactoryOperatorActivity;
  31. import eVVM.apk.ui.home.HomeActivity;
  32. import eVVM.apk.ui.login.login.LoginContract;
  33. import eVVM.apk.ui.login.login.LoginPresenter;
  34. public class LoginActivity extends MvpActivity<LoginPresenter> implements LoginContract.View {
  35. @BindView(R.id.login_et_phone)
  36. ClearEditText loginEtPhone;
  37. @BindView(R.id.login_et_pwd)
  38. ClearEditText loginEtPwd; //密码输入框
  39. @BindView(R.id.login_tv_forgetpwd)
  40. TextView loginTvForgetpwd; //忘记密码
  41. @BindView(R.id.login_btn_login)
  42. Button loginBtnLogin; //登录
  43. @BindView(R.id.login_tv_goregist)
  44. TextView loginTvGoregist; //去注册
  45. @BindView(R.id.login_scrollview)
  46. ScrollView loginScrollview;
  47. private String getMD5Pwd;
  48. private String userPhone;
  49. @Override
  50. protected int getLayoutId() {
  51. return R.layout.activity_login;
  52. }
  53. @Override
  54. protected int getTitleId() {
  55. return 0;
  56. }
  57. @Override
  58. protected void initView() {
  59. new InputTextHelper.Builder(this)
  60. .setMain(loginBtnLogin)
  61. .addView(loginEtPhone)
  62. .addView(loginEtPwd)
  63. .build();
  64. loginScrollview.setOnTouchListener(new View.OnTouchListener() {
  65. @Override
  66. public boolean onTouch(View arg0, MotionEvent arg1) {
  67. View v = getCurrentFocus();
  68. if (isShouldHideKeyboard(v, arg1)) {
  69. hideKeyboard(v.getWindowToken());
  70. }
  71. //不能滑动
  72. return true;
  73. //可以滑动
  74. //return false;
  75. }
  76. });
  77. SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
  78. @Override
  79. public void keyBoardShow(int height) {
  80. loginScrollview.smoothScrollTo(0, height / 2);
  81. }
  82. @Override
  83. public void keyBoardHide(int height) {
  84. loginScrollview.smoothScrollTo(0, 0);
  85. }
  86. });
  87. }
  88. @Override
  89. protected void initData() {
  90. getPermissions();
  91. String user_phone = (String) SPUtils.get("USER_PHONE", "");
  92. String user_pwd = (String) SPUtils.get("USER_PWD", "");
  93. if (TextUtils.isEmpty(user_phone) && TextUtils.isEmpty(user_pwd)) {
  94. //用户没有登录过
  95. } else {
  96. showLoading();
  97. //登陆过 进行自动登录
  98. userPhone = user_phone;
  99. getMD5Pwd = user_pwd;
  100. getPresenter().login(user_phone, user_pwd);
  101. }
  102. }
  103. private void getPermissions() {
  104. // 联系人
  105. String[] CONTACTS = new String[]{
  106. Permission.CAMERA,
  107. Permission.RECEIVE_SMS,
  108. Permission.READ_SMS,
  109. Permission.READ_EXTERNAL_STORAGE,
  110. Permission.WRITE_EXTERNAL_STORAGE,
  111. Permission.ACCESS_FINE_LOCATION,
  112. Permission.ACCESS_COARSE_LOCATION,
  113. Permission.REQUEST_INSTALL_PACKAGES};
  114. XXPermissions.with(LoginActivity.this)
  115. //.constantRequest() //可设置被拒绝后继续申请,直到用户授权或者永久拒绝
  116. //.permission(Permission.SYSTEM_ALERT_WINDOW, Permission.REQUEST_INSTALL_PACKAGES) //支持请求6.0悬浮窗权限8.0请求安装权限
  117. .permission(CONTACTS) //不指定权限则自动获取清单中的危险权限
  118. .request(new OnPermission() {
  119. @Override
  120. public void hasPermission(List<String> granted, boolean isAll) {
  121. /*if (isAll) {
  122. toast("获取权限成功");
  123. }else {
  124. toast("获取权限成功,部分权限未正常授予");
  125. }*/
  126. }
  127. @Override
  128. public void noPermission(List<String> denied, boolean quick) {
  129. /*if(quick) {
  130. toast("被永久拒绝授权,请手动授予权限");
  131. //如果是被永久拒绝就跳转到应用权限系统设置页面
  132. XXPermissions.gotoPermissionSettings(LoginActivity.this);
  133. }else {
  134. //toast("获取权限失败,部分功能可能无法使用");
  135. }*/
  136. }
  137. });
  138. }
  139. @OnClick({R.id.login_tv_forgetpwd, R.id.login_btn_login, R.id.login_tv_goregist})
  140. public void onViewClicked(View view) {
  141. switch (view.getId()) {
  142. case R.id.login_tv_forgetpwd:
  143. startActivity(PasswordForgetActivity.class);
  144. break;
  145. case R.id.login_btn_login:
  146. if (loginEtPhone.getText().toString().length() != 11) {
  147. toast(getString(R.string.common_phone_input_error));
  148. } else {
  149. //登录 密码进行md5加密
  150. getMD5Pwd = MD5.GetMD5Code(loginEtPwd.getText().toString().trim());
  151. userPhone = loginEtPhone.getText().toString().trim();
  152. getPresenter().login(userPhone, getMD5Pwd);
  153. showLoading();
  154. }
  155. break;
  156. case R.id.login_tv_goregist:
  157. startActivity(RegisterActivity.class);
  158. break;
  159. }
  160. }
  161. @Override
  162. protected LoginPresenter createPresenter() {
  163. return new LoginPresenter();
  164. }
  165. @Override
  166. public void loginError(String msg) {
  167. showComplete();
  168. toast(msg);
  169. }
  170. @Override
  171. public void loginSuccess(LoginBean data) {
  172. // 处理登录
  173. showComplete();
  174. LoginBean.DataBean userData = data.getData();
  175. SPUtils.put("USER_ID", userData.getId() + "");
  176. SPUtils.put("USER_TOKEN", userData.getToken() + "");
  177. if (userData.getStatus() == 1) {//状态(0禁用 1正常 2删除 3未审核 4审核未通过 5未完成注册 6未同意协议)
  178. Log.e("userData", "" + userData.getPassword());
  179. //保存用户数据
  180. SPUtils.put("USER_PHONE", userPhone + "");
  181. SPUtils.put("USER_PWD", getMD5Pwd + "");
  182. SPUtils.put("USER_ROLEID", userData.getRoleId() + "");
  183. SPUtils.put("USER_FACTORY_ID", userData.getFactoryId() + "");
  184. SPUtils.put("USER_NAME", userData.getUserName() + "");
  185. SPUtils.put("PHONE_MODEL", userData.getPhoneModel());
  186. SPUtils.put("USER_EMAIL", userData.getEmail());
  187. SPUtils.put("USER_CALLNUM", userData.getTelephone());
  188. switch (userData.getRoleId()) { //根据不同角色 跳转进入不同的页面 只有厂家管理员不需要判断nfc
  189. case 2: //医生
  190. // if (!checkGpsAndNfc()) {
  191. // return;
  192. // }
  193. startActivityFinish(HomeActivity.class);
  194. break;
  195. case 3: //医药企业管理员
  196. startActivityFinish(FactorAdminActivity.class);
  197. break;
  198. case 4: //医药企业操作员
  199. if (!checkGpsAndNfc()) {
  200. return;
  201. }
  202. startActivityFinish(FactoryOperatorActivity.class);
  203. break;
  204. default:
  205. toast("当前版本不支持本角色登录");
  206. break;
  207. }
  208. } else if (userData.getStatus() == 0) {
  209. toast("当前账号已被禁用");
  210. } else if (userData.getStatus() == 2) {
  211. toast("当前账号已被删除");
  212. } else if (userData.getStatus() == 3) {
  213. Intent in = new Intent(this, ExamineActivity.class);
  214. in.putExtra("LoginStatusCode", 3);
  215. startActivity(in);
  216. //toast("您的账号正在审核中,请耐心等待");
  217. } else if (userData.getStatus() == 4) {
  218. Intent in = new Intent(this, ExamineActivity.class);
  219. in.putExtra("LoginStatusCode", 4);
  220. startActivity(in);
  221. //toast("审核未通过");
  222. } else if (userData.getStatus() == 5) {
  223. // toast("未完成注册");
  224. Intent in = new Intent(this, AuthenticationActivity.class);
  225. in.putExtra("registerUserId", data.getData().getId() + "");
  226. startActivity(in);
  227. } else if (userData.getStatus() == 6) {
  228. Intent in = new Intent(this, ExamineActivity.class);
  229. in.putExtra("LoginStatusCode", 6);
  230. startActivity(in);
  231. }
  232. }
  233. //点击空白 隐藏软键盘
  234. @Override
  235. public boolean onTouchEvent(MotionEvent event) {
  236. if (event.getAction() == MotionEvent.ACTION_DOWN) {
  237. View v = getCurrentFocus();
  238. if (isShouldHideKeyboard(v, event)) {
  239. hideKeyboard(v.getWindowToken());
  240. }
  241. }
  242. return super.onTouchEvent(event);
  243. }
  244. /**
  245. * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏
  246. *
  247. * @param v
  248. * @param event
  249. * @return
  250. */
  251. private boolean isShouldHideKeyboard(View v, MotionEvent event) {
  252. if (v != null && (v instanceof EditText)) { //判断是否是EditText
  253. int[] l = {0, 0};
  254. v.getLocationInWindow(l);
  255. int left = l[0],
  256. top = l[1],
  257. bottom = top + v.getHeight(),
  258. right = left + v.getWidth();
  259. if (event.getX() > left && event.getX() < right
  260. && event.getY() > top && event.getY() < bottom) {
  261. // 点击EditText的事件,忽略它。
  262. return false;
  263. } else {
  264. return true;
  265. }
  266. }
  267. // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点
  268. return false;
  269. }
  270. /**
  271. * 获取InputMethodManager,隐藏软键盘
  272. *
  273. * @param token
  274. */
  275. private void hideKeyboard(IBinder token) {
  276. if (token != null) {
  277. InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  278. im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
  279. }
  280. }
  281. }