Commit 118e25c4fd58179732aae3aac4594ffe105ef2f4
1 parent
d8b159ee
Exists in
yxb_dev
and in
2 other branches
no message
Showing
13 changed files
with
415 additions
and
64 deletions
Show diff stats
.idea/modules.xml
| ... | ... | @@ -5,6 +5,7 @@ |
| 5 | 5 | <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> |
| 6 | 6 | <module fileurl="file://$PROJECT_DIR$/mvpsdk/mvpsdk.iml" filepath="$PROJECT_DIR$/mvpsdk/mvpsdk.iml" /> |
| 7 | 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 | 9 | </modules> |
| 9 | 10 | </component> |
| 10 | 11 | </project> |
| 11 | 12 | \ No newline at end of file | ... | ... |
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" /> | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -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<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<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<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<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 | } | ... | ... |