Commit 118e25c4fd58179732aae3aac4594ffe105ef2f4

Authored by 姚旭斌
1 parent d8b159ee

no message

.idea/modules.xml
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> 5 <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
6 <module fileurl="file://$PROJECT_DIR$/mvpsdk/mvpsdk.iml" filepath="$PROJECT_DIR$/mvpsdk/mvpsdk.iml" /> 6 <module fileurl="file://$PROJECT_DIR$/mvpsdk/mvpsdk.iml" filepath="$PROJECT_DIR$/mvpsdk/mvpsdk.iml" />
7 <module fileurl="file://$PROJECT_DIR$/parentwork.iml" filepath="$PROJECT_DIR$/parentwork.iml" /> 7 <module fileurl="file://$PROJECT_DIR$/parentwork.iml" filepath="$PROJECT_DIR$/parentwork.iml" />
  8 + <module fileurl="file://$PROJECT_DIR$/roundedimageview-2.2.1/roundedimageview-2.2.1.iml" filepath="$PROJECT_DIR$/roundedimageview-2.2.1/roundedimageview-2.2.1.iml" />
8 </modules> 9 </modules>
9 </component> 10 </component>
10 </project> 11 </project>
11 \ No newline at end of file 12 \ No newline at end of file
app/src/main/AndroidManifest.xml
@@ -2,6 +2,40 @@ @@ -2,6 +2,40 @@
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.shunzhi.parent"> 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 <application 39 <application
6 android:name=".MyApplication" 40 android:name=".MyApplication"
7 android:allowBackup="true" 41 android:allowBackup="true"
@@ -10,6 +44,7 @@ @@ -10,6 +44,7 @@
10 android:roundIcon="@mipmap/ic_launcher_round" 44 android:roundIcon="@mipmap/ic_launcher_round"
11 android:supportsRtl="true" 45 android:supportsRtl="true"
12 android:theme="@style/AppTheme"> 46 android:theme="@style/AppTheme">
  47 +
13 <activity android:name=".ui.activity.LoginAndRegistActivity"> 48 <activity android:name=".ui.activity.LoginAndRegistActivity">
14 <intent-filter> 49 <intent-filter>
15 <action android:name="android.intent.action.MAIN" /> 50 <action android:name="android.intent.action.MAIN" />
app/src/main/java/com/shunzhi/parent/AppConfig.java 0 → 100644
@@ -0,0 +1,82 @@ @@ -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 @@ @@ -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 @@ @@ -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,6 +2,9 @@ package com.shunzhi.parent.model.loginandregister;
2 2
3 import com.google.gson.JsonObject; 3 import com.google.gson.JsonObject;
4 import com.share.mvpsdk.base.BaseModel; 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 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; 8 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
6 9
7 import io.reactivex.Observable; 10 import io.reactivex.Observable;
@@ -20,13 +23,15 @@ public class LoginAndRegisterModel extends BaseModel implements LoginAndRegiste @@ -20,13 +23,15 @@ public class LoginAndRegisterModel extends BaseModel implements LoginAndRegiste
20 23
21 24
22 @Override 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 @Override 31 @Override
28 public Observable<JsonObject> getRegisterResult(String adminName, String idCode, String password) { 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 @Override 37 @Override
app/src/main/java/com/shunzhi/parent/model/loginandregister/loginAndRegisterModel.java
@@ -1,37 +0,0 @@ @@ -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,39 +2,110 @@ package com.shunzhi.parent.presenter.loginandregister;
2 2
3 import android.text.TextUtils; 3 import android.text.TextUtils;
4 4
  5 +import com.google.gson.JsonObject;
  6 +import com.share.mvpsdk.helper.RetrofitCreateHelper;
5 import com.share.mvpsdk.utils.ToastUtils; 7 import com.share.mvpsdk.utils.ToastUtils;
  8 +import com.shunzhi.parent.AppConfig;
  9 +import com.shunzhi.parent.AppContext;
6 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; 10 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
7 import com.shunzhi.parent.model.loginandregister.LoginAndRegisterModel; 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 * Created by Administrator on 2018/3/6 0006. 19 * Created by Administrator on 2018/3/6 0006.
11 */ 20 */
12 21
13 public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPresenter { 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 @Override 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 return; 30 return;
19 - }else if(TextUtils.isEmpty(loginPwd)){  
20 - ToastUtils.showToast("密码不能为空"); 31 + }
  32 +
  33 + if (mIModel == null || mIView == null) {
21 return; 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 @Override 59 @Override
27 public void registerResult(String adminName, String idCode, String password) { 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 @Override 85 @Override
33 public void idCodeResult(String phoneNumber) { 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 return; 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 @Override 111 @Override
@@ -52,4 +123,11 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre @@ -52,4 +123,11 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre
52 public void onStart() { 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 package com.shunzhi.parent.ui; 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 import android.os.Bundle; 3 import android.os.Bundle;
  4 +import android.support.design.widget.BottomNavigationView;
7 5
8 -import com.share.mvpsdk.base.BasePresenter;  
9 import com.share.mvpsdk.base.activity.BaseCompatActivity; 6 import com.share.mvpsdk.base.activity.BaseCompatActivity;
10 -import com.share.mvpsdk.base.activity.BaseMVPCompatActivity;  
11 import com.share.mvpsdk.helper.BottomNavigationViewHelper; 7 import com.share.mvpsdk.helper.BottomNavigationViewHelper;
12 import com.shunzhi.parent.R; 8 import com.shunzhi.parent.R;
13 9
app/src/main/java/com/shunzhi/parent/ui/fragment/loginandregistfragment/LoginAndRegistFragment.java
1 package com.shunzhi.parent.ui.fragment.loginandregistfragment; 1 package com.shunzhi.parent.ui.fragment.loginandregistfragment;
2 2
  3 +import android.content.Intent;
3 import android.os.Bundle; 4 import android.os.Bundle;
4 import android.support.annotation.NonNull; 5 import android.support.annotation.NonNull;
5 import android.support.annotation.Nullable; 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 import android.view.View; 12 import android.view.View;
  13 +import android.view.ViewGroup;
7 import android.widget.EditText; 14 import android.widget.EditText;
  15 +import android.widget.ImageView;
8 import android.widget.LinearLayout; 16 import android.widget.LinearLayout;
  17 +import android.widget.PopupWindow;
9 import android.widget.TextView; 18 import android.widget.TextView;
10 19
11 import com.makeramen.roundedimageview.RoundedImageView; 20 import com.makeramen.roundedimageview.RoundedImageView;
12 import com.share.mvpsdk.base.BasePresenter; 21 import com.share.mvpsdk.base.BasePresenter;
13 import com.share.mvpsdk.base.fragment.BaseMVPCompatFragment; 22 import com.share.mvpsdk.base.fragment.BaseMVPCompatFragment;
  23 +import com.share.mvpsdk.utils.ToastUtils;
14 import com.shunzhi.parent.R; 24 import com.shunzhi.parent.R;
15 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; 25 import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract;
16 import com.shunzhi.parent.presenter.loginandregister.LoginAndRegisterPresenter; 26 import com.shunzhi.parent.presenter.loginandregister.LoginAndRegisterPresenter;
  27 +import com.shunzhi.parent.ui.activity.LoginAndRegistActivity;
17 28
18 29
19 public class LoginAndRegistFragment extends BaseMVPCompatFragment<LoginAndRegisterContract.LoginPresenter, LoginAndRegisterContract.ILoginModel> 30 public class LoginAndRegistFragment extends BaseMVPCompatFragment<LoginAndRegisterContract.LoginPresenter, LoginAndRegisterContract.ILoginModel>
@@ -22,8 +33,10 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist @@ -22,8 +33,10 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
22 public RoundedImageView roundedImageView; 33 public RoundedImageView roundedImageView;
23 public EditText phoneNumber, idCode, password; 34 public EditText phoneNumber, idCode, password;
24 public TextView get_idCode, loginAndRegister, tv_info, tv_goto; 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 public static String typepage; 38 public static String typepage;
  39 + public boolean open = false;
27 40
28 41
29 public static LoginAndRegistFragment getInstance(String type) { 42 public static LoginAndRegistFragment getInstance(String type) {
@@ -46,7 +59,7 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist @@ -46,7 +59,7 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
46 59
47 @Override 60 @Override
48 public void initUI(View view, @Nullable Bundle savedInstanceState) { 61 public void initUI(View view, @Nullable Bundle savedInstanceState) {
49 - 62 + main_login = view.findViewById(R.id.main_login);
50 roundedImageView = view.findViewById(R.id.photoImage); 63 roundedImageView = view.findViewById(R.id.photoImage);
51 phoneNumber = view.findViewById(R.id.et_phoneNumber); 64 phoneNumber = view.findViewById(R.id.et_phoneNumber);
52 idCode = view.findViewById(R.id.et_idCode); 65 idCode = view.findViewById(R.id.et_idCode);
@@ -58,15 +71,20 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist @@ -58,15 +71,20 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
58 phoneLayout = view.findViewById(R.id.phoneLayout); 71 phoneLayout = view.findViewById(R.id.phoneLayout);
59 idCodeLayout = view.findViewById(R.id.idCodeLayout); 72 idCodeLayout = view.findViewById(R.id.idCodeLayout);
60 passwordLayout = view.findViewById(R.id.passwordLayout); 73 passwordLayout = view.findViewById(R.id.passwordLayout);
  74 + img_eye = view.findViewById(R.id.img_eye);
61 get_idCode.setOnClickListener(this); 75 get_idCode.setOnClickListener(this);
62 tv_goto.setOnClickListener(this); 76 tv_goto.setOnClickListener(this);
63 loginAndRegister.setOnClickListener(this); 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 idCodeLayout.setVisibility(View.GONE); 83 idCodeLayout.setVisibility(View.GONE);
66 loginAndRegister.setText("登录"); 84 loginAndRegister.setText("登录");
67 tv_info.setText("还没有账号"); 85 tv_info.setText("还没有账号");
68 tv_goto.setText("注册"); 86 tv_goto.setText("注册");
69 - }else if(typepage.equals("注册")){ 87 + } else if ("注册".equals(typepage)) {
70 idCodeLayout.setVisibility(View.VISIBLE); 88 idCodeLayout.setVisibility(View.VISIBLE);
71 loginAndRegister.setText("注册"); 89 loginAndRegister.setText("注册");
72 tv_info.setText("已注册,直接登录"); 90 tv_info.setText("已注册,直接登录");
@@ -77,26 +95,79 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist @@ -77,26 +95,79 @@ public class LoginAndRegistFragment extends BaseMVPCompatFragment&lt;LoginAndRegist
77 95
78 @Override 96 @Override
79 public void getUserInfo() { 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 @Override 111 @Override
84 public void onClick(View v) { 112 public void onClick(View v) {
85 if (v == loginAndRegister) { 113 if (v == loginAndRegister) {
  114 + ToastUtils.showToast("onClick");
86 if (loginAndRegister.getText().toString().trim().equals("登录")) { 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 } else if (loginAndRegister.getText().toString().trim().equals("注册")) { 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 } else if (v == tv_goto) { 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 } else if (v == get_idCode) { 129 } else if (v == get_idCode) {
99 mPresenter.idCodeResult(phoneNumber.getText().toString()); 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,6 +7,7 @@
7 7
8 8
9 <LinearLayout 9 <LinearLayout
  10 + android:id="@+id/main_login"
10 android:layout_width="match_parent" 11 android:layout_width="match_parent"
11 android:layout_height="match_parent" 12 android:layout_height="match_parent"
12 android:orientation="vertical"> 13 android:orientation="vertical">
@@ -43,6 +44,7 @@ @@ -43,6 +44,7 @@
43 android:layout_height="50dp" 44 android:layout_height="50dp"
44 android:background="@null" 45 android:background="@null"
45 android:hint="请输入手机号码" 46 android:hint="请输入手机号码"
  47 + android:maxLength="11"
46 android:textColorHint="@color/hintTextColor" 48 android:textColorHint="@color/hintTextColor"
47 android:textSize="@dimen/sp_16" /> 49 android:textSize="@dimen/sp_16" />
48 50
@@ -113,7 +115,9 @@ @@ -113,7 +115,9 @@
113 android:layout_height="50dp" 115 android:layout_height="50dp"
114 android:layout_weight="1" 116 android:layout_weight="1"
115 android:background="@null" 117 android:background="@null"
116 - android:hint="请设置密码:6~8个字符" 118 + android:hint="请设置密码:6~16个字符"
  119 + android:maxLength="16"
  120 + android:inputType="textPassword"
117 android:textColorHint="@color/hintTextColor" 121 android:textColorHint="@color/hintTextColor"
118 android:textSize="@dimen/sp_16" /> 122 android:textSize="@dimen/sp_16" />
119 123
@@ -144,6 +148,7 @@ @@ -144,6 +148,7 @@
144 android:paddingBottom="10dp" 148 android:paddingBottom="10dp"
145 android:paddingTop="10dp" 149 android:paddingTop="10dp"
146 android:text="注册" 150 android:text="注册"
  151 + android:enabled="false"
147 android:textColor="@color/white" 152 android:textColor="@color/white"
148 android:textSize="@dimen/sp_16" /> 153 android:textSize="@dimen/sp_16" />
149 154
mvpsdk/src/main/java/com/share/mvpsdk/helper/RetrofitCreateHelper.java
1 package com.share.mvpsdk.helper; 1 package com.share.mvpsdk.helper;
2 2
3 3
4 -  
5 import com.share.mvpsdk.helper.okhttp.CacheInterceptor; 4 import com.share.mvpsdk.helper.okhttp.CacheInterceptor;
6 import com.share.mvpsdk.helper.okhttp.HttpCache; 5 import com.share.mvpsdk.helper.okhttp.HttpCache;
7 import com.share.mvpsdk.helper.okhttp.TrustManager; 6 import com.share.mvpsdk.helper.okhttp.TrustManager;
  7 +import com.share.mvpsdk.utils.StringUtils;
8 8
9 import java.util.concurrent.TimeUnit; 9 import java.util.concurrent.TimeUnit;
10 10
@@ -22,6 +22,8 @@ import retrofit2.converter.gson.GsonConverterFactory; @@ -22,6 +22,8 @@ import retrofit2.converter.gson.GsonConverterFactory;
22 public class RetrofitCreateHelper { 22 public class RetrofitCreateHelper {
23 private static final int TIMEOUT_READ = 20; 23 private static final int TIMEOUT_READ = 20;
24 private static final int TIMEOUT_CONNECTION = 10; 24 private static final int TIMEOUT_CONNECTION = 10;
  25 + private static String Authorization="",token="";
  26 + private static RetrofitCreateHelper retrofitCreateHelper=null;
25 private static final HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor() 27 private static final HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor()
26 .setLevel(HttpLoggingInterceptor.Level.BODY); 28 .setLevel(HttpLoggingInterceptor.Level.BODY);
27 private static CacheInterceptor cacheInterceptor = new CacheInterceptor(); 29 private static CacheInterceptor cacheInterceptor = new CacheInterceptor();
@@ -42,8 +44,16 @@ public class RetrofitCreateHelper { @@ -42,8 +44,16 @@ public class RetrofitCreateHelper {
42 //失败重连 44 //失败重连
43 .retryOnConnectionFailure(true) 45 .retryOnConnectionFailure(true)
44 .build(); 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 public static <T> T createApi(Class<T> clazz, String url) { 55 public static <T> T createApi(Class<T> clazz, String url) {
  56 + Authorization=token;
47 Retrofit retrofit = new Retrofit.Builder() 57 Retrofit retrofit = new Retrofit.Builder()
48 .baseUrl(url) 58 .baseUrl(url)
49 .client(okHttpClient) 59 .client(okHttpClient)
@@ -52,5 +62,23 @@ public class RetrofitCreateHelper { @@ -52,5 +62,23 @@ public class RetrofitCreateHelper {
52 .build(); 62 .build();
53 return retrofit.create(clazz); 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 package com.share.mvpsdk.utils; 1 package com.share.mvpsdk.utils;
2 2
3 import android.text.TextUtils; 3 import android.text.TextUtils;
  4 +import android.util.Base64;
4 5
5 import java.util.regex.Matcher; 6 import java.util.regex.Matcher;
6 import java.util.regex.Pattern; 7 import java.util.regex.Pattern;
@@ -122,4 +123,30 @@ public class StringUtils { @@ -122,4 +123,30 @@ public class StringUtils {
122 } 123 }
123 return true; 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 }