Commit 7485281aa06a9e79bcb4139cc5230bf79f0b0c92

Authored by 陶汉栋
2 parents 860a2088 118e25c4

Merge branch 'yxb_dev' of http://git.shunzhi.net/taohd/parentwork into developer

app/src/main/AndroidManifest.xml
... ... @@ -2,6 +2,40 @@
2 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 3 package="com.shunzhi.parent">
4 4  
  5 + <uses-permission android:name="android.permission.GET_TASKS" />
  6 + <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  7 + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  8 + <!-- Android 6.0版本可去除,用于选举信息(通道复用)的同步 -->
  9 + <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  10 + <!-- 进行网络访问和网络状态监控相关的权限声明 -->
  11 + <uses-permission android:name="android.permission.INTERNET" />
  12 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  13 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  14 + <!-- 允许对sd卡进行读写操作 -->
  15 + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  16 + <!-- 网络库使用,当网络操作时需要确保事务完成不被杀掉 -->
  17 + <uses-permission android:name="android.permission.WAKE_LOCK" />
  18 + <!-- 用于读取手机硬件信息等,用于机型过滤 -->
  19 + <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  20 + <!-- 选举使用,当应用有删除或者更新时需要重新选举,复用推送通道 -->
  21 + <uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
  22 + <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
  23 + <uses-permission android:name="android.permission.RESTART_PACKAGES" />
  24 + <!-- 补偿通道小米PUSH使用,不用可去除 -->
  25 + <!-- <uses-permission android:name="android.permission.GET_TASKS" /> -->
  26 + <!-- 补偿通道GCM使用,不使用可去除 -->
  27 + <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  28 + <!-- 允许监听启动完成事件 -->
  29 + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  30 + <!-- 允许访问震动器 -->
  31 + <uses-permission android:name="android.permission.VIBRATE" />
  32 + <!-- 允许task重排序 -->
  33 + <uses-permission android:name="android.permission.REORDER_TASKS" />
  34 +
  35 +
  36 +
  37 +
  38 +
5 39 <application
6 40 android:name=".MyApplication"
7 41 android:allowBackup="true"
... ... @@ -10,6 +44,7 @@
10 44 android:roundIcon="@mipmap/ic_launcher_round"
11 45 android:supportsRtl="true"
12 46 android:theme="@style/AppTheme">
  47 +
13 48 <activity android:name=".ui.activity.LoginAndRegistActivity">
14 49 <intent-filter>
15 50 <action android:name="android.intent.action.MAIN" />
... ...
app/src/main/java/com/shunzhi/parent/AppConfig.java 0 → 100644
... ... @@ -0,0 +1,82 @@
  1 +package com.shunzhi.parent;
  2 +
  3 +import android.content.Context;
  4 +import android.content.SharedPreferences;
  5 +import android.os.Environment;
  6 +import android.preference.PreferenceManager;
  7 +import android.text.TextUtils;
  8 +
  9 +import java.io.File;
  10 +
  11 +/**
  12 + * Created by Administrator on 2018/3/7 0007.
  13 + */
  14 +
  15 +public class AppConfig {
  16 + //保存键值对
  17 + public static String SCHOOL_ID = "school_id";
  18 + public static String LOGIN_NAME = "login_name";
  19 + public static String LOGIN_PWD = "login_pwd";
  20 + public static String ACCESS_TOKEN = "access_token";
  21 +
  22 + //默认日志保存的路径
  23 + public final static String DEFAULT_SAVE_LOG_PATH = Environment
  24 + .getExternalStorageDirectory()
  25 + + File.separator
  26 + + "Eboardmenwei"
  27 + + File.separator
  28 + + "logs"
  29 + + File.separator;
  30 +
  31 +
  32 +
  33 + private static AppConfig appConfig = null;
  34 + private static Context mContext = null;
  35 +
  36 + public static AppConfig getAppConfig(Context context) {
  37 + if (appConfig == null) {
  38 + appConfig = new AppConfig();
  39 + mContext = context;
  40 + }
  41 + return appConfig;
  42 + }
  43 +
  44 +
  45 +
  46 +
  47 +
  48 +
  49 +
  50 + //默认下载保存的路径
  51 + public final static String DEFAULT_SAVE_DOWNLOAD_PATH = Environment
  52 + .getExternalStorageDirectory()
  53 + + File.separator
  54 + + "Eboard"
  55 + + File.separator
  56 + + "download"
  57 + + File.separator;
  58 +
  59 + //得到保存的值
  60 + public String get(String key) {
  61 + return getSharedPreferences(mContext).getString(key, null);
  62 + }
  63 +
  64 + private SharedPreferences getSharedPreferences(Context context) {
  65 + return PreferenceManager.getDefaultSharedPreferences(context);
  66 + }
  67 +
  68 + //保存键值对
  69 + public void set(Context context, String key, String value) {
  70 + SharedPreferences.Editor editor = getSharedPreferences(context).edit();
  71 + if (TextUtils.isEmpty(value)) {
  72 + editor.putString(key, value);
  73 + } else {
  74 + editor.putString(key, value.trim());
  75 + }
  76 + editor.commit();
  77 + }
  78 +
  79 +
  80 +
  81 +
  82 +}
... ...
app/src/main/java/com/shunzhi/parent/AppContext.java 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +package com.shunzhi.parent;
  2 +
  3 +import com.share.mvpsdk.global.GlobalApplication;
  4 +
  5 +/**
  6 + * Created by Administrator on 2018/3/7 0007.
  7 + */
  8 +
  9 +public class AppContext extends GlobalApplication {
  10 + private static AppContext appContext;
  11 +
  12 +
  13 + @Override
  14 + public void onCreate() {
  15 + appContext=this;
  16 + super.onCreate();
  17 + }
  18 +
  19 + public static AppContext getInstance() {
  20 + return appContext;
  21 + }
  22 +
  23 +
  24 +
  25 +
  26 +}
... ...
app/src/main/java/com/shunzhi/parent/api/LoginRegisterApi.java 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +package com.shunzhi.parent.api;
  2 +
  3 +import com.google.gson.JsonObject;
  4 +
  5 +import io.reactivex.Observable;
  6 +import retrofit2.http.Field;
  7 +import retrofit2.http.FormUrlEncoded;
  8 +import retrofit2.http.POST;
  9 +
  10 +/**
  11 + * Created by Administrator on 2018/3/7 0007.
  12 + */
  13 +
  14 +public interface LoginRegisterApi {
  15 + String url="http://campus.myjxt.com/";
  16 +
  17 +
  18 + @FormUrlEncoded
  19 + @POST("Token")
  20 + Observable<JsonObject> loginResult(
  21 + @Field("grant_type") String grant_type, @Field("username") String username
  22 + , @Field("password") String password);
  23 +
  24 + @FormUrlEncoded
  25 + @POST("api/Account/CurrentInfo")
  26 + Observable<JsonObject> registerResult(
  27 + @Field("grant_type") String grant_type, @Field("username") String username
  28 + , @Field("idcode") String idCode,@Field("password") String password);
  29 +
  30 + @FormUrlEncoded
  31 + @POST("api/Account/CurrentInfo")
  32 + Observable<JsonObject> getUserInfo(@Field("grant_type") String grant_type);
  33 +
  34 +}
... ...
app/src/main/java/com/shunzhi/parent/model/loginandregister/LoginAndRegisterModel.java
... ... @@ -2,6 +2,9 @@ package com.shunzhi.parent.model.loginandregister;
2 2  
3 3 import com.google.gson.JsonObject;
4 4 import com.share.mvpsdk.base.BaseModel;
  5 +import com.share.mvpsdk.helper.RetrofitCreateHelper;
  6 +import com.share.mvpsdk.helper.RxHelper;
  7 +import com.shunzhi.parent.api.LoginRegisterApi;
5 8 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
6 9  
7 10 import io.reactivex.Observable;
... ... @@ -20,13 +23,15 @@ public class LoginAndRegisterModel extends BaseModel implements LoginAndRegiste
20 23  
21 24  
22 25 @Override
23   - public Observable<JsonObject> getLoginResult(String loginName, String loginPed) {
24   - return null;
  26 + public Observable<JsonObject> getLoginResult(String loginName, String loginPwd) {
  27 + return RetrofitCreateHelper.loginApi(LoginRegisterApi.class,LoginRegisterApi.url).loginResult("password",loginName,loginPwd)
  28 + .compose(RxHelper.<JsonObject>rxSchedulerHelper());
25 29 }
26 30  
27 31 @Override
28 32 public Observable<JsonObject> getRegisterResult(String adminName, String idCode, String password) {
29   - return null;
  33 + return RetrofitCreateHelper.createApi(LoginRegisterApi.class,LoginRegisterApi.url).registerResult("idcode",adminName,idCode,password)
  34 + .compose(RxHelper.<JsonObject>rxSchedulerHelper());
30 35 }
31 36  
32 37 @Override
... ...
app/src/main/java/com/shunzhi/parent/model/loginandregister/loginAndRegisterModel.java
... ... @@ -1,37 +0,0 @@
1   -package com.shunzhi.parent.model.loginandregister;
2   -
3   -import com.google.gson.JsonObject;
4   -import com.share.mvpsdk.base.BaseModel;
5   -import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
6   -
7   -import io.reactivex.Observable;
8   -
9   -/**
10   - * Created by Administrator on 2018/3/6 0006.
11   - */
12   -
13   -public class LoginAndRegisterModel extends BaseModel implements LoginAndRegisterContract.ILoginModel {
14   -
15   -
16   -
17   - public static LoginAndRegisterModel newInstance() {
18   - return new LoginAndRegisterModel();
19   - }
20   -
21   -
22   - @Override
23   - public Observable<JsonObject> getLoginResult(String loginName, String loginPed) {
24   - return null;
25   - }
26   -
27   - @Override
28   - public Observable<JsonObject> getRegisterResult(String adminName, String idCode, String password) {
29   - return null;
30   - }
31   -
32   - @Override
33   - public Observable<JsonObject> getidCodeResult(String phoneNumber) {
34   - return null;
35   - }
36   -
37   -}
app/src/main/java/com/shunzhi/parent/presenter/loginandregister/LoginAndRegisterPresenter.java
... ... @@ -2,39 +2,110 @@ package com.shunzhi.parent.presenter.loginandregister;
2 2  
3 3 import android.text.TextUtils;
4 4  
  5 +import com.google.gson.JsonObject;
  6 +import com.share.mvpsdk.helper.RetrofitCreateHelper;
5 7 import com.share.mvpsdk.utils.ToastUtils;
  8 +import com.shunzhi.parent.AppConfig;
  9 +import com.shunzhi.parent.AppContext;
6 10 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
7 11 import com.shunzhi.parent.model.loginandregister.LoginAndRegisterModel;
8 12  
  13 +import java.util.regex.Matcher;
  14 +import java.util.regex.Pattern;
  15 +
  16 +import io.reactivex.functions.Consumer;
  17 +
9 18 /**
10 19 * Created by Administrator on 2018/3/6 0006.
11 20 */
12 21  
13 22 public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPresenter {
  23 +
  24 + public static final String REGEX_MOBILE = "^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$";
  25 +
14 26 @Override
15   - public void loginResult(String loginName, String loginPwd) {
16   - if (TextUtils.isEmpty(loginName)){
17   - ToastUtils.showToast("登录名不能为空");
  27 + public void loginResult(final String loginName, final String loginPwd) {
  28 + if (!isMate(loginName, REGEX_MOBILE)) {
  29 + ToastUtils.showToast("请输入正确的手机号!!");
18 30 return;
19   - }else if(TextUtils.isEmpty(loginPwd)){
20   - ToastUtils.showToast("密码不能为空");
  31 + }
  32 +
  33 + if (mIModel == null || mIView == null) {
21 34 return;
22 35 }
  36 + mRxManager.register(mIModel.getLoginResult(loginName, loginPwd).subscribe(new Consumer<JsonObject>() {
  37 + @Override
  38 + public void accept(JsonObject jsonObject) throws Exception {
  39 + if (jsonObject != null && !TextUtils.isEmpty(jsonObject.get("access_token").getAsString())) {
  40 + AppConfig.getAppConfig(AppContext.getInstance()).set(AppContext.getInstance()
  41 + , AppConfig.ACCESS_TOKEN, jsonObject.get("access_token").getAsString());
  42 + AppConfig.getAppConfig(AppContext.getInstance()).set(AppContext.getInstance(), AppConfig.LOGIN_NAME,loginName);
  43 + AppConfig.getAppConfig(AppContext.getInstance()).set(AppContext.getInstance(), AppConfig.LOGIN_PWD, loginPwd);
  44 + RetrofitCreateHelper.getInstance().setAuthorization("Bearer "+jsonObject.get("access_token").getAsString());
  45 + getUserInfo();
  46 + } else {
  47 + ToastUtils.showToast(jsonObject.get("error").getAsString());
  48 + }
  49 + }
  50 + }, new Consumer<Throwable>() {
  51 + @Override
  52 + public void accept(Throwable throwable) throws Exception {
  53 + ToastUtils.showToast(throwable.getMessage());
  54 + }
  55 + }));
23 56  
24 57 }
25 58  
26 59 @Override
27 60 public void registerResult(String adminName, String idCode, String password) {
  61 + if (!isMate(adminName, REGEX_MOBILE)) {
  62 + ToastUtils.showToast("请输入正确的手机号!!");
  63 + return;
  64 + }
  65 + if (mIModel == null || mIView == null) {
  66 + return;
  67 + }
  68 + mIView.getUserInfo();
  69 + mRxManager.register(mIModel.getRegisterResult(adminName, idCode, password).subscribe(new Consumer<JsonObject>() {
  70 + @Override
  71 + public void accept(JsonObject jsonObject) throws Exception {
  72 + //TODO 注册成功返回
28 73  
29 74  
  75 + }
  76 + }, new Consumer<Throwable>() {
  77 + @Override
  78 + public void accept(Throwable throwable) throws Exception {
  79 + ToastUtils.showToast(throwable.getMessage());
  80 + }
  81 + }));
  82 +
30 83 }
31 84  
32 85 @Override
33 86 public void idCodeResult(String phoneNumber) {
34   - if(TextUtils.isEmpty(phoneNumber)){
35   - ToastUtils.showToast("请先输入手机号");
  87 + if (!isMate(phoneNumber, REGEX_MOBILE)) {
  88 + ToastUtils.showToast("请输入正确的手机号!!");
  89 + return;
  90 + }
  91 + if (mIModel == null || mIView == null) {
36 92 return;
37 93 }
  94 + mRxManager.register(mIModel.getidCodeResult(phoneNumber).subscribe(new Consumer<JsonObject>() {
  95 + @Override
  96 + public void accept(JsonObject jsonObject) throws Exception {
  97 + //TODO 获取验证码返回
  98 +
  99 +
  100 + }
  101 + }, new Consumer<Throwable>() {
  102 + @Override
  103 + public void accept(Throwable throwable) throws Exception {
  104 + ToastUtils.showToast(throwable.getMessage());
  105 + }
  106 + }));
  107 +
  108 +
38 109 }
39 110  
40 111 @Override
... ... @@ -52,4 +123,11 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre
52 123 public void onStart() {
53 124  
54 125 }
  126 +
  127 +
  128 + public boolean isMate(String str, String rulStr) {
  129 + Pattern pattern = Pattern.compile(rulStr);
  130 + Matcher matcher = pattern.matcher(str);
  131 + return matcher.matches();
  132 + }
55 133 }
... ...
app/src/main/java/com/shunzhi/parent/ui/MainActivity.java
1 1 package com.shunzhi.parent.ui;
2 2  
3   -import android.support.annotation.NonNull;
4   -import android.support.design.widget.BottomNavigationView;
5   -import android.support.v7.app.AppCompatActivity;
6 3 import android.os.Bundle;
  4 +import android.support.design.widget.BottomNavigationView;
7 5  
8   -import com.share.mvpsdk.base.BasePresenter;
9 6 import com.share.mvpsdk.base.activity.BaseCompatActivity;
10   -import com.share.mvpsdk.base.activity.BaseMVPCompatActivity;
11 7 import com.share.mvpsdk.helper.BottomNavigationViewHelper;
12 8 import com.shunzhi.parent.R;
13 9  
... ...
app/src/main/java/com/shunzhi/parent/ui/fragment/loginandregistfragment/LoginAndRegistFragment.java
1 1 package com.shunzhi.parent.ui.fragment.loginandregistfragment;
2 2  
  3 +import android.content.Intent;
3 4 import android.os.Bundle;
4 5 import android.support.annotation.NonNull;
5 6 import android.support.annotation.Nullable;
  7 +import android.text.Editable;
  8 +import android.text.TextUtils;
  9 +import android.text.TextWatcher;
  10 +import android.util.Log;
  11 +import android.view.Gravity;
6 12 import android.view.View;
  13 +import android.view.ViewGroup;
7 14 import android.widget.EditText;
  15 +import android.widget.ImageView;
8 16 import android.widget.LinearLayout;
  17 +import android.widget.PopupWindow;
9 18 import android.widget.TextView;
10 19  
11 20 import com.makeramen.roundedimageview.RoundedImageView;
12 21 import com.share.mvpsdk.base.BasePresenter;
13 22 import com.share.mvpsdk.base.fragment.BaseMVPCompatFragment;
  23 +import com.share.mvpsdk.utils.ToastUtils;
14 24 import com.shunzhi.parent.R;
15 25 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
16 26 import com.shunzhi.parent.presenter.loginandregister.LoginAndRegisterPresenter;
  27 +import com.shunzhi.parent.ui.activity.LoginAndRegistActivity;
17 28  
18 29  
19 30 public class LoginAndRegistFragment extends BaseMVPCompatFragment<LoginAndRegisterContract.LoginPresenter, LoginAndRegisterContract.ILoginModel>
... ... @@ -22,8 +33,10 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
22 33 public RoundedImageView roundedImageView;
23 34 public EditText phoneNumber, idCode, password;
24 35 public TextView get_idCode, loginAndRegister, tv_info, tv_goto;
25   - public LinearLayout phoneLayout, idCodeLayout, passwordLayout;
  36 + public LinearLayout phoneLayout, idCodeLayout, passwordLayout,main_login;
  37 + public ImageView img_eye;
26 38 public static String typepage;
  39 + public boolean open = false;
27 40  
28 41  
29 42 public static LoginAndRegistFragment getInstance(String type) {
... ... @@ -46,7 +59,7 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
46 59  
47 60 @Override
48 61 public void initUI(View view, @Nullable Bundle savedInstanceState) {
49   -
  62 + main_login = view.findViewById(R.id.main_login);
50 63 roundedImageView = view.findViewById(R.id.photoImage);
51 64 phoneNumber = view.findViewById(R.id.et_phoneNumber);
52 65 idCode = view.findViewById(R.id.et_idCode);
... ... @@ -58,15 +71,20 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
58 71 phoneLayout = view.findViewById(R.id.phoneLayout);
59 72 idCodeLayout = view.findViewById(R.id.idCodeLayout);
60 73 passwordLayout = view.findViewById(R.id.passwordLayout);
  74 + img_eye = view.findViewById(R.id.img_eye);
61 75 get_idCode.setOnClickListener(this);
62 76 tv_goto.setOnClickListener(this);
63 77 loginAndRegister.setOnClickListener(this);
64   - if (typepage.equals("登录")) {
  78 + img_eye.setOnClickListener(this);
  79 + phoneNumber.addTextChangedListener(textWatcher);
  80 + idCode.addTextChangedListener(textWatcher);
  81 + password.addTextChangedListener(textWatcher);
  82 + if ("登录".equals(typepage)) {
65 83 idCodeLayout.setVisibility(View.GONE);
66 84 loginAndRegister.setText("登录");
67 85 tv_info.setText("还没有账号");
68 86 tv_goto.setText("注册");
69   - }else if(typepage.equals("注册")){
  87 + } else if ("注册".equals(typepage)) {
70 88 idCodeLayout.setVisibility(View.VISIBLE);
71 89 loginAndRegister.setText("注册");
72 90 tv_info.setText("已注册,直接登录");
... ... @@ -77,26 +95,79 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
77 95  
78 96 @Override
79 97 public void getUserInfo() {
  98 + Log.e("sss","sss");
  99 + PopupWindow popupWindow=new PopupWindow();
  100 + popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
  101 + popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
  102 + TextView textView=new TextView(getActivity());
  103 + textView.setText("注册成功");
  104 + popupWindow.setContentView(textView);
  105 + popupWindow.showAtLocation(main_login, Gravity.CENTER,0,0);
  106 +
  107 +
80 108  
81 109 }
82 110  
83 111 @Override
84 112 public void onClick(View v) {
85 113 if (v == loginAndRegister) {
  114 + ToastUtils.showToast("onClick");
86 115 if (loginAndRegister.getText().toString().trim().equals("登录")) {
87   - mPresenter.loginResult(phoneNumber.getText().toString(), password.getText().toString());
  116 + mPresenter.loginResult(phoneNumber.getText().toString(), password.getText().toString());
88 117 } else if (loginAndRegister.getText().toString().trim().equals("注册")) {
89   - mPresenter.registerResult(phoneNumber.getText().toString(), idCode.getText().toString(), password.getText().toString());
  118 + mPresenter.registerResult(phoneNumber.getText().toString(), idCode.getText().toString(), password.getText().toString());
90 119 }
91 120  
92 121 } else if (v == tv_goto) {
93   - if (tv_goto.equals("登录")) {
94   -
95   - } else if (tv_goto.equals("注册")) {
  122 + if (tv_goto.getText().toString().equals("登录")) {
  123 + startActivity(new Intent().putExtra("type", "登录").setClass(getActivity(), LoginAndRegistActivity.class));
96 124  
  125 + } else if (tv_goto.getText().toString().equals("注册")) {
  126 + startActivity(new Intent().putExtra("type", "注册").setClass(getActivity(), LoginAndRegistActivity.class));
97 127 }
  128 + getActivity().finish();
98 129 } else if (v == get_idCode) {
99 130 mPresenter.idCodeResult(phoneNumber.getText().toString());
  131 + } else if (v == img_eye) {
  132 + if (open) {
  133 + img_eye.setImageResource(R.drawable.eye_close);
  134 + password.setInputType(0x81);
  135 + open = false;
  136 + } else {
  137 + img_eye.setImageResource(R.drawable.eye_open);
  138 + password.setInputType(0x90);
  139 + open = true;
  140 + }
  141 + password.setSelection(password.getText().toString().length());
100 142 }
101 143 }
  144 + TextWatcher textWatcher = new TextWatcher() {
  145 + @Override
  146 + public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  147 +
  148 + }
  149 +
  150 + @Override
  151 + public void onTextChanged(CharSequence s, int start, int before, int count) {
  152 + if (loginAndRegister.getText().toString().trim().equals("登录")) {
  153 + if (!TextUtils.isEmpty(phoneNumber.getText().toString()) && !TextUtils.isEmpty(password.getText().toString())) {
  154 + loginAndRegister.setEnabled(true);
  155 + } else {
  156 + loginAndRegister.setEnabled(false);
  157 + }
  158 + } else if (loginAndRegister.getText().toString().trim().equals("注册")) {
  159 + if (!TextUtils.isEmpty(phoneNumber.getText().toString()) && !TextUtils.isEmpty(idCode.getText().toString()) && !TextUtils.isEmpty(password.getText().toString())) {
  160 + loginAndRegister.setEnabled(true);
  161 + } else {
  162 + loginAndRegister.setEnabled(false);
  163 + }
  164 + }
  165 + }
  166 +
  167 + @Override
  168 + public void afterTextChanged(Editable s) {
  169 +
  170 + }
  171 + };
  172 +
102 173 }
... ...
app/src/main/res/layout/fragment_login_and_regist.xml
... ... @@ -7,6 +7,7 @@
7 7  
8 8  
9 9 <LinearLayout
  10 + android:id="@+id/main_login"
10 11 android:layout_width="match_parent"
11 12 android:layout_height="match_parent"
12 13 android:orientation="vertical">
... ... @@ -43,6 +44,7 @@
43 44 android:layout_height="50dp"
44 45 android:background="@null"
45 46 android:hint="请输入手机号码"
  47 + android:maxLength="11"
46 48 android:textColorHint="@color/hintTextColor"
47 49 android:textSize="@dimen/sp_16" />
48 50  
... ... @@ -113,7 +115,9 @@
113 115 android:layout_height="50dp"
114 116 android:layout_weight="1"
115 117 android:background="@null"
116   - android:hint="请设置密码:6~8个字符"
  118 + android:hint="请设置密码:6~16个字符"
  119 + android:maxLength="16"
  120 + android:inputType="textPassword"
117 121 android:textColorHint="@color/hintTextColor"
118 122 android:textSize="@dimen/sp_16" />
119 123  
... ... @@ -144,6 +148,7 @@
144 148 android:paddingBottom="10dp"
145 149 android:paddingTop="10dp"
146 150 android:text="注册"
  151 + android:enabled="false"
147 152 android:textColor="@color/white"
148 153 android:textSize="@dimen/sp_16" />
149 154  
... ...
mvpsdk/src/main/java/com/share/mvpsdk/helper/RetrofitCreateHelper.java
1 1 package com.share.mvpsdk.helper;
2 2  
3 3  
4   -
5 4 import com.share.mvpsdk.helper.okhttp.CacheInterceptor;
6 5 import com.share.mvpsdk.helper.okhttp.HttpCache;
7 6 import com.share.mvpsdk.helper.okhttp.TrustManager;
  7 +import com.share.mvpsdk.utils.StringUtils;
8 8  
9 9 import java.util.concurrent.TimeUnit;
10 10  
... ... @@ -22,6 +22,8 @@ import retrofit2.converter.gson.GsonConverterFactory;
22 22 public class RetrofitCreateHelper {
23 23 private static final int TIMEOUT_READ = 20;
24 24 private static final int TIMEOUT_CONNECTION = 10;
  25 + private static String Authorization="",token="";
  26 + private static RetrofitCreateHelper retrofitCreateHelper=null;
25 27 private static final HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor()
26 28 .setLevel(HttpLoggingInterceptor.Level.BODY);
27 29 private static CacheInterceptor cacheInterceptor = new CacheInterceptor();
... ... @@ -42,8 +44,16 @@ public class RetrofitCreateHelper {
42 44 //失败重连
43 45 .retryOnConnectionFailure(true)
44 46 .build();
45   -
  47 + public static RetrofitCreateHelper getInstance(){
  48 + if (null==retrofitCreateHelper){
  49 + synchronized (RetrofitCreateHelper.class){
  50 + if (null==retrofitCreateHelper)retrofitCreateHelper=new RetrofitCreateHelper();
  51 + }
  52 + }
  53 + return retrofitCreateHelper;
  54 + }
46 55 public static <T> T createApi(Class<T> clazz, String url) {
  56 + Authorization=token;
47 57 Retrofit retrofit = new Retrofit.Builder()
48 58 .baseUrl(url)
49 59 .client(okHttpClient)
... ... @@ -52,5 +62,23 @@ public class RetrofitCreateHelper {
52 62 .build();
53 63 return retrofit.create(clazz);
54 64 }
  65 +
  66 + public static <T> T loginApi(Class<T> clazz, String url) {
  67 + Authorization= StringUtils.getSign();
  68 + Retrofit retrofit = new Retrofit.Builder()
  69 + .baseUrl(url)
  70 + .client(okHttpClient)
  71 + .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
  72 + .addConverterFactory(GsonConverterFactory.create())
  73 + .build();
  74 + return retrofit.create(clazz);
  75 + }
  76 + public void setAuthorization(String Authorization){
  77 + this.token=Authorization;
  78 + }
  79 +
  80 +
  81 +
  82 +
55 83 }
56 84  
... ...
mvpsdk/src/main/java/com/share/mvpsdk/utils/StringUtils.java
1 1 package com.share.mvpsdk.utils;
2 2  
3 3 import android.text.TextUtils;
  4 +import android.util.Base64;
4 5  
5 6 import java.util.regex.Matcher;
6 7 import java.util.regex.Pattern;
... ... @@ -122,4 +123,30 @@ public class StringUtils {
122 123 }
123 124 return true;
124 125 }
  126 +
  127 + private final static String appSecret = "f71467cfd98d";
  128 + public static String getSign(){
  129 + String sign = "";
  130 + try {
  131 + String clientid = MD5(System.currentTimeMillis() + new int[(int) (Math.random() * 100)].toString());
  132 + sign = "Basic " + Base64.encodeToString((clientid + ":" + MD5(clientid + appSecret)).getBytes("ASCII"), Base64.NO_WRAP);
  133 + } catch (Exception err) {
  134 + err.printStackTrace();
  135 + }
  136 + return sign;
  137 + }
  138 +
  139 + public static String MD5(String str) {
  140 + try {
  141 + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
  142 + byte[] array = md.digest(str.getBytes("utf-8"));
  143 + StringBuffer sb = new StringBuffer();
  144 + for (int i = 0; i < array.length; ++i) {
  145 + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
  146 + }
  147 + return sb.toString().toUpperCase();
  148 + } catch (Exception e) {
  149 + }
  150 + return "";
  151 + }
125 152 }
... ...