Quellcode durchsuchen

验证码发送成功

詹子聪 vor 5 Jahren
Ursprung
Commit
a0301ed3d0
55 geänderte Dateien mit 412 neuen und 280 gelöschten Zeilen
  1. 29 2
      app/build.gradle
  2. 3 2
      app/src/main/AndroidManifest.xml
  3. 24 0
      app/src/main/java/com/itant/shibei/base/ApiService.java
  4. 1 3
      app/src/main/java/com/itant/shibei/base/BaseShiBeiActivity.java
  5. 1 2
      app/src/main/java/com/itant/shibei/base/ITopActionListener.java
  6. 22 142
      app/src/main/java/com/itant/shibei/bean/BeiUser.java
  7. 1 1
      app/src/main/java/com/itant/shibei/bean/GoodsBean.java
  8. 1 1
      app/src/main/java/com/itant/shibei/bean/TemplateBean.java
  9. 1 1
      app/src/main/java/com/itant/shibei/common/ConstantString.java
  10. 1 1
      app/src/main/java/com/itant/shibei/common/ConstantUrl.java
  11. 1 1
      app/src/main/java/com/itant/shibei/manager/UserInfoManager.java
  12. 1 1
      app/src/main/java/com/itant/shibei/tool/DataTool.java
  13. 1 1
      app/src/main/java/com/itant/shibei/tool/StringTool.java
  14. 1 1
      app/src/main/java/com/itant/shibei/tool/TimeTool.java
  15. 20 0
      app/src/main/java/com/itant/shibei/ui/ShibeiApplication.java
  16. 3 3
      app/src/main/java/com/itant/shibei/ui/TabActivity.java
  17. 1 1
      app/src/main/java/com/itant/shibei/ui/about/AboutFragment.java
  18. 1 1
      app/src/main/java/com/itant/shibei/ui/function/template/ITemplateView.java
  19. 1 1
      app/src/main/java/com/itant/shibei/ui/function/template/TemplateAdapter.java
  20. 1 1
      app/src/main/java/com/itant/shibei/ui/function/template/TemplatePresenter.java
  21. 1 1
      app/src/main/java/com/itant/shibei/ui/home/GoodsAdapter.java
  22. 1 1
      app/src/main/java/com/itant/shibei/ui/home/GoodsFragment.java
  23. 1 1
      app/src/main/java/com/itant/shibei/ui/home/GoodsPresenter.java
  24. 1 1
      app/src/main/java/com/itant/shibei/ui/home/IGoodsView.java
  25. 1 1
      app/src/main/java/com/itant/shibei/ui/mine/MineActivity.java
  26. 13 3
      app/src/main/java/com/itant/shibei/ui/mine/login/LoginActivity.java
  27. 0 37
      app/src/main/java/com/itant/shibei/ui/mine/login/UserInfoManager.java
  28. 1 1
      app/src/main/java/com/itant/shibei/ui/mine/login/forget/ForgetActivity.java
  29. 45 0
      app/src/main/java/com/itant/shibei/ui/mine/login/register/CodePresenter.java
  30. 18 0
      app/src/main/java/com/itant/shibei/ui/mine/login/register/ICodeView.java
  31. 118 10
      app/src/main/java/com/itant/shibei/ui/mine/login/register/RegisterActivity.java
  32. 2 2
      app/src/main/java/com/itant/shibei/ui/mine/login/register/FillDataActivity.java
  33. 1 1
      app/src/main/java/com/itant/shibei/widget/AppbarTranslateListener.java
  34. 9 10
      app/src/main/res/layout/activity_forget.xml
  35. 15 3
      app/src/main/res/layout/activity_mine.xml
  36. 12 10
      app/src/main/res/layout/activity_register.xml
  37. 1 0
      build.gradle
  38. 1 1
      common/src/main/java/com/miekir/common/provider/CommonInstaller.java
  39. 1 1
      common/src/main/java/com/miekir/common/utils/ActivityTool.java
  40. 1 1
      common/src/main/java/com/miekir/common/utils/SizeTool.java
  41. 1 1
      common/src/main/java/com/miekir/common/utils/ToastTool.java
  42. 2 3
      common/src/main/java/com/miekir/common/utils/ViewTool.java
  43. 1 1
      mvp/src/main/res/drawable/shape_dialog_bg.xml
  44. 19 1
      network/build.gradle
  45. 1 1
      network/src/main/java/com/miekir/network/constant/Code.java
  46. 2 3
      network/src/main/java/com/miekir/network/constant/RequestConst.java
  47. 4 4
      network/src/main/java/com/miekir/network/core/RetrofitHelper.java
  48. 1 1
      network/src/main/java/com/miekir/network/core/RetrofitInstaller.java
  49. 3 3
      network/src/main/java/com/miekir/network/core/base/BaseObserver.java
  50. 15 6
      network/src/main/java/com/miekir/network/core/base/BaseResponse.java
  51. 1 1
      network/src/main/java/com/miekir/network/core/base/CommonBean.java
  52. 1 1
      network/src/main/java/com/miekir/network/core/impl/ProgressObserver.java
  53. 1 1
      network/src/main/java/com/miekir/network/utils/ExceptionUtil.java
  54. 1 1
      network/src/main/java/com/miekir/network/utils/JsonTool.java
  55. 1 1
      network/src/main/java/com/miekir/network/widget/CustomProgressDialog.java

+ 29 - 2
app/build.gradle

@@ -11,7 +11,7 @@ android {
         targetSdkVersion versions.targetSdk
         applicationId "com.itant.shibei"
         versionCode 1
-        versionName "1.0"
+        versionName "1.0.1"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
 
@@ -30,13 +30,36 @@ android {
         }
     }
 
+    flavorDimensions "url"
+    productFlavors {
+        dev {
+            // 开发环境宿舍服务器
+            buildConfigField("String", "BASE_URL", '"http://192.168.0.190:8080/"')
+        }
+
+        rel {
+            // todo 正式上线
+            buildConfigField("String", "BASE_URL", '"http://188.168.0.190:8080/"')
+        }
+    }
+
     buildTypes {
+        debug {
+
+        }
         release {
             signingConfig signingConfigs.config
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
+
+    // 定义输出的APK名字
+    android.applicationVariants.all { variant ->
+        variant.outputs.all {
+            outputFileName = "Shibei_v${defaultConfig.versionName}.apk"
+        }
+    }
 }
 
 
@@ -58,7 +81,11 @@ dependencies {
     //implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
     implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
 
+    // RxActivityResult
+    implementation 'com.github.VictorAlbertos:RxActivityResult:0.5.0-2.x'
+
 }
 repositories {
     mavenCentral()
-}
+}
+

+ 3 - 2
app/src/main/AndroidManifest.xml

@@ -13,7 +13,8 @@
         android:theme="@style/AppTheme"
         tools:ignore="GoogleAppIndexingWarning"
         android:requestLegacyExternalStorage="true"
-        android:networkSecurityConfig="@xml/network">
+        android:networkSecurityConfig="@xml/network"
+        android:name=".ui.ShibeiApplication">
         <activity
             android:name=".ui.TabActivity"
             android:label="@string/app_name"
@@ -38,7 +39,7 @@
             android:windowSoftInputMode="stateVisible|adjustResize"/>
 
         <activity
-            android:name=".ui.mine.login.register.FillDataActivity"
+            android:name=".ui.mine.login.register.fill.FillDataActivity"
             android:screenOrientation="portrait"
             android:theme="@style/TextInputStyle" />
 

+ 24 - 0
app/src/main/java/com/itant/shibei/base/ApiService.java

@@ -0,0 +1,24 @@
+package com.itant.shibei.base;
+
+import com.miekir.network.core.base.BaseResponse;
+
+import java.util.Map;
+
+import io.reactivex.Observable;
+import retrofit2.http.Body;
+import retrofit2.http.POST;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/8/2 10:38
+ * Description: 请求接口
+ */
+public interface ApiService {
+
+    /**请求验证码*/
+    //@Headers({ "Content-Type: application/json;charset=UTF-8"})
+    @POST("/shibei/api/code")
+    Observable<BaseResponse<Boolean>> getCode(@Body Map<String, Object> body);
+}

+ 1 - 3
app/src/main/java/com/itant/shibei/base/BaseShiBeiActivity.java

@@ -3,10 +3,8 @@ package com.itant.shibei.base;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.View;
-import android.widget.ImageView;
 
 import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.widget.Toolbar;
 
 import com.itant.shibei.R;
@@ -15,7 +13,7 @@ import com.miekir.mvp.view.BaseMVPActivity;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/18 16:47
  * Description: 界面基类
  */

+ 1 - 2
app/src/main/java/com/itant/shibei/base/ITopActionListener.java

@@ -1,9 +1,8 @@
 package com.itant.shibei.base;
 
 /**
- * Copyright (C), 2019-2020, Genlot
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/8/2 9:19
  * Description: 监听滚动到顶部的动作
  */

+ 22 - 142
app/src/main/java/com/itant/shibei/bean/BeiUser.java

@@ -5,147 +5,27 @@ package com.itant.shibei.bean;
  */
 
 public class BeiUser {
-    private String email;
-    private String nickName;
-    private String autograph;
-    private String password;
-    private String headIcon;
-    private int sex;
-    private String token;
-    private long registerTimeMillis;
-    private long lastLoginTimeMillis;
-    private boolean isVip;
-    private String deviceId;
-    private String lastIp;
-    private int themeMode;
+    public String email;
+    public String nickName;
+    public String autograph;
+    public String password;
+    public String headIcon;
+    public int sex;
+    public String token;
+    public long registerTimeMillis;
+    public long lastLoginTimeMillis;
+    public boolean isVip;
+    public String deviceId;
+    public String lastIp;
+    public int themeMode;
+    /**当前余额,单位:分*/
+    public long currentMoney;
+    /**历史提现,单位:分*/
+    public long historyCash;
+
+    /**提现支付宝账号*/
+    public String cashAccount;
+    /**是否被禁用*/
+    public boolean isLimit;
 
-    /**
-     * 提现账号
-     */
-    private String cashAccount;
-
-    /**
-     * 余额
-     */
-    private double money;
-
-    public String getAutograph() {
-        return autograph;
-    }
-
-    public void setAutograph(String autograph) {
-        this.autograph = autograph;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getNickName() {
-        return nickName;
-    }
-
-    public void setNickName(String nickName) {
-        this.nickName = nickName;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getHeadIcon() {
-        return headIcon;
-    }
-
-    public void setHeadIcon(String headIcon) {
-        this.headIcon = headIcon;
-    }
-
-    public int getSex() {
-        return sex;
-    }
-
-    public void setSex(int sex) {
-        this.sex = sex;
-    }
-
-    public String getToken() {
-        return token;
-    }
-
-    public void setToken(String token) {
-        this.token = token;
-    }
-
-    public long getRegisterTimeMillis() {
-        return registerTimeMillis;
-    }
-
-    public void setRegisterTimeMillis(long registerTimeMillis) {
-        this.registerTimeMillis = registerTimeMillis;
-    }
-
-    public long getLastLoginTimeMillis() {
-        return lastLoginTimeMillis;
-    }
-
-    public void setLastLoginTimeMillis(long lastLoginTimeMillis) {
-        this.lastLoginTimeMillis = lastLoginTimeMillis;
-    }
-
-    public boolean isVip() {
-        return isVip;
-    }
-
-    public void setVip(boolean vip) {
-        isVip = vip;
-    }
-
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(String deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getLastIp() {
-        return lastIp;
-    }
-
-    public void setLastIp(String lastIp) {
-        this.lastIp = lastIp;
-    }
-
-    public int getThemeMode() {
-        return themeMode;
-    }
-
-    public void setThemeMode(int themeMode) {
-        this.themeMode = themeMode;
-    }
-
-    public double getMoney() {
-        return money;
-    }
-
-    public void setMoney(double money) {
-        this.money = money;
-    }
-
-    public String getCashAccount() {
-        return cashAccount;
-    }
-
-    public void setCashAccount(String cashAccount) {
-        this.cashAccount = cashAccount;
-    }
 }

+ 1 - 1
app/src/main/java/com/itant/shibei/bean/GoodsBean.java

@@ -3,7 +3,7 @@ package com.itant.shibei.bean;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 21:50
  * Description: 商品实体
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/bean/TemplateBean.java

@@ -5,7 +5,7 @@ import com.itant.shibei.common.ConstantUrl;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/7 19:37
  * Description: 模板实体
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/common/ConstantString.java

@@ -3,7 +3,7 @@ package com.itant.shibei.common;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/11 16:35
  * Description: 常量字符串
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/common/ConstantUrl.java

@@ -3,7 +3,7 @@ package com.itant.shibei.common;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 11:27
  * Description: 常量
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/manager/UserInfoManager.java

@@ -5,7 +5,7 @@ import com.itant.shibei.bean.BeiUser;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/27 20:40
  * Description: 用户信息
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/tool/DataTool.java

@@ -11,7 +11,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/8 19:36
  * Description: 模拟数据提供者
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/tool/StringTool.java

@@ -5,7 +5,7 @@ import java.text.DecimalFormat;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/11 21:59
  * Description: 字符串相关工具
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/tool/TimeTool.java

@@ -5,7 +5,7 @@ import java.util.Calendar;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/24 9:15
  * Description: 时间相关工具类
  */

+ 20 - 0
app/src/main/java/com/itant/shibei/ui/ShibeiApplication.java

@@ -0,0 +1,20 @@
+package com.itant.shibei.ui;
+
+import android.app.Application;
+
+import rx_activity_result2.RxActivityResult;
+
+/**
+ *
+ * @author Miekir
+ * @date 2020/8/2 9:34
+ * Description:
+ */
+public class ShibeiApplication extends Application {
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        RxActivityResult.register(this);
+
+    }
+}

+ 3 - 3
app/src/main/java/com/itant/shibei/ui/TabActivity.java

@@ -70,8 +70,8 @@ public class TabActivity extends BaseShiBeiActivity implements View.OnClickListe
             }
         });
 
-        ViewTool.setOnClickListener(this, new int[]{R.id.fl_search, R.id.fl_search_top,
-                R.id.fl_more}, this);
+        ViewTool.setOnClickListener(this, this,
+                new int[]{R.id.fl_search, R.id.fl_search_top, R.id.fl_more});
 
         double defaultHeight = getResources().getDimension(R.dimen.margin_default);
         double defaultWidth = getResources().getDimension(R.dimen.height_edit_text);
@@ -95,7 +95,7 @@ public class TabActivity extends BaseShiBeiActivity implements View.OnClickListe
         switch (v.getId()) {
             case R.id.fl_more:
                 // 点击更多
-                if (!UserInfoManager.getInstance().isLogin()) {
+                if (UserInfoManager.getInstance().isLogin()) {
                     startActivity(new Intent(this, MineActivity.class));
                 } else {
                     Intent intent = new Intent(this, LoginActivity.class);

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/about/AboutFragment.java

@@ -11,7 +11,7 @@ import com.itant.shibei.tool.SystemTool;
 import com.miekir.mvp.view.BaseMVPFragment;
 
 /**
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/18 16:48
  * Description: 关于界面
  * todo 点击版本号检查更新

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/function/template/ITemplateView.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/8 19:44
  * Description: Template的View
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/function/template/TemplateAdapter.java

@@ -23,7 +23,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/6 20:08
  * Description: 首页商品适配器
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/function/template/TemplatePresenter.java

@@ -9,7 +9,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/8 19:43
  * Description: 模板的Presenter
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/home/GoodsAdapter.java

@@ -29,7 +29,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/6 20:08
  * Description: 首页商品适配器
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/home/GoodsFragment.java

@@ -21,7 +21,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 22:07
  * Description: 商品列表Fragment
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/home/GoodsPresenter.java

@@ -9,7 +9,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/9 20:54
  * Description: 商品的相关数据接口处理
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/home/IGoodsView.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/9 20:52
  * Description: 商品的View回调
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/mine/MineActivity.java

@@ -48,6 +48,6 @@ public class MineActivity extends BaseShiBeiActivity implements View.OnClickList
         setTitle(String.format(ConstantString.WELCOME_HELLO, TimeTool.getCurrentTimePeriod(), "主人"));
 
 
-        ViewTool.setOnClickListener(this, new int[]{R.id.ll_user, R.id.ll_feedback}, this);
+        ViewTool.setOnClickListener(this, this, new int[]{R.id.ll_user, R.id.ll_feedback});
     }
 }

+ 13 - 3
app/src/main/java/com/itant/shibei/ui/mine/login/LoginActivity.java

@@ -15,8 +15,10 @@ import com.itant.shibei.ui.mine.login.forget.ForgetActivity;
 import com.itant.shibei.ui.mine.login.register.RegisterActivity;
 import com.miekir.common.utils.ViewTool;
 
+import rx_activity_result2.RxActivityResult;
+
 /**
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/18 16:48
  * Description: 登录界面
  */
@@ -36,7 +38,7 @@ public class LoginActivity extends BaseShiBeiActivity implements View.OnClickLis
     public void initViews(Bundle savedInstanceState) {
         setTitle("使用电子邮箱登录");
         //setOnDoneListener(this);
-        ViewTool.setOnClickListener(this, new int[]{R.id.tv_forget}, this);
+        ViewTool.setOnClickListener(this, this, new int[]{R.id.tv_forget});
     }
 
     @Override
@@ -51,7 +53,14 @@ public class LoginActivity extends BaseShiBeiActivity implements View.OnClickLis
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         switch (item.getItemId()) {
             case R.id.action_done:
-                startActivity(new Intent(this, RegisterActivity.class));
+                // 注册
+                Intent registerIntent = new Intent(this, RegisterActivity.class);
+                RxActivityResult.on(this).startIntent(registerIntent)
+                        .filter(result -> result.resultCode() == RESULT_OK)
+                        .subscribe(result -> {
+                            // 注册成功之后关闭登录界面
+                            finish();
+                        });
                 break;
             default:
                 break;
@@ -63,6 +72,7 @@ public class LoginActivity extends BaseShiBeiActivity implements View.OnClickLis
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.tv_forget:
+                // 忘记密码
                 startActivity(new Intent(this, ForgetActivity.class));
                 break;
             default:

+ 0 - 37
app/src/main/java/com/itant/shibei/ui/mine/login/UserInfoManager.java

@@ -1,37 +0,0 @@
-package com.itant.shibei.ui.mine.login;
-
-/**
- *
- *
- * @author 詹子聪
- * @date 2020/6/27 20:40
- * Description: 用户信息
- */
-public class UserInfoManager {
-    private static volatile UserInfoManager userInfoManager;
-    private UserInfoManager() {}
-
-    private boolean isLogin;
-
-    public static UserInfoManager getInstance() {
-        if (userInfoManager == null) {
-            init();
-        }
-
-        return userInfoManager;
-    }
-
-    private static synchronized void init() {
-        if (userInfoManager == null) {
-            userInfoManager = new UserInfoManager();
-        }
-    }
-
-    public boolean isLogin() {
-        return isLogin;
-    }
-
-    public void setLogin(boolean login) {
-        isLogin = login;
-    }
-}

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/mine/login/forget/ForgetActivity.java

@@ -9,7 +9,7 @@ import com.itant.shibei.R;
 import com.itant.shibei.base.BaseShiBeiActivity;
 
 /**
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/18 16:48
  * Description: 登录界面
  */

+ 45 - 0
app/src/main/java/com/itant/shibei/ui/mine/login/register/CodePresenter.java

@@ -0,0 +1,45 @@
+package com.itant.shibei.ui.mine.login.register;
+
+import com.itant.shibei.base.ApiService;
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.network.core.RetrofitHelper;
+import com.miekir.network.core.base.BaseObserver;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * @author Miekir
+ * @date 2020/7/9 20:54
+ * Description: 商品的相关数据接口处理
+ */
+public class CodePresenter extends BasePresenter<ICodeView> {
+
+    public void getCode(String email) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("email", email);
+        RetrofitHelper.getInstance()
+                .getRequestApi(ApiService.class)
+                .getCode(map)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new BaseObserver<Boolean>() {
+                    @Override
+                    public void onSuccess(Boolean result) {
+                        if (getView() != null) {
+                            getView().onGetCode(result, null);
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(Throwable e, String errMsg) {
+                        if (getView() != null) {
+                            getView().onGetCode(false, errMsg);
+                        }
+                    }
+                });
+    }
+}

+ 18 - 0
app/src/main/java/com/itant/shibei/ui/mine/login/register/ICodeView.java

@@ -0,0 +1,18 @@
+package com.itant.shibei.ui.mine.login.register;
+
+import com.miekir.mvp.view.IView;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/8/2 10:29
+ * Description: 获取验证码的回调
+ */
+public interface ICodeView extends IView {
+    /**
+     *
+     * @param isSuccess 是否成功
+     */
+    void onGetCode(boolean isSuccess, String message);
+}

+ 118 - 10
app/src/main/java/com/itant/shibei/ui/mine/login/register/RegisterActivity.java

@@ -2,27 +2,74 @@ package com.itant.shibei.ui.mine.login.register;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
 import android.view.View;
+import android.widget.Button;
 
-import androidx.annotation.Nullable;
+import androidx.annotation.NonNull;
 
+import com.google.android.material.textfield.TextInputEditText;
 import com.itant.shibei.R;
 import com.itant.shibei.base.BaseShiBeiActivity;
+import com.itant.shibei.ui.mine.login.register.fill.FillDataActivity;
+import com.miekir.common.utils.ToastTool;
+import com.miekir.common.utils.ViewTool;
+import com.miekir.mvp.presenter.InjectPresenter;
+
+import java.lang.ref.WeakReference;
+
+import rx_activity_result2.RxActivityResult;
 
 /**
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/18 16:48
  * Description: 登录界面
  */
-public class RegisterActivity extends BaseShiBeiActivity implements View.OnClickListener {
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        findViewById(R.id.btn_next).setOnClickListener(v -> {
-            startActivity(new Intent(RegisterActivity.this, FillDataActivity.class));
-            finish();
-        });
+public class RegisterActivity extends BaseShiBeiActivity implements View.OnClickListener, ICodeView {
+    public static final String KEY_EMAIL = "email";
+    public static final String KEY_CODE = "code";
+
+    private TextInputEditText et_email;
+    private TextInputEditText et_code;
+    private Button btn_get_code;
+
+    private String email;
+    private String code;
+
+    @InjectPresenter
+    CodePresenter presenter;
+
+    /**验证码倒计时*/
+    private static final int MSG_TIME = 0;
+    private static final int TIME_GET_PERIOD = 61;
+    private int mRestTime = TIME_GET_PERIOD;
+    private static class TimeHandler extends Handler {
+        private WeakReference<RegisterActivity> weakReference;
+        public TimeHandler(RegisterActivity activity) {
+            weakReference = new WeakReference<>(activity);
+        }
+
+        @Override
+        public void handleMessage(@NonNull Message msg) {
+            super.handleMessage(msg);
+            RegisterActivity activity = weakReference.get();
+            if (activity == null) {
+                return;
+            }
+            activity.mRestTime -= 1;
+            if (activity.mRestTime == 0) {
+                activity.btn_get_code.setText("获取验证码");
+                activity.btn_get_code.setEnabled(true);
+                activity.mRestTime = TIME_GET_PERIOD;
+            } else {
+                activity.btn_get_code.setText("重新获取(" + activity.mRestTime + "S)");
+                activity.mTimeHandler.sendEmptyMessageDelayed(MSG_TIME, 1000);
+            }
+        }
     }
+    private Handler mTimeHandler = new TimeHandler(this);
 
     @Override
     public int getLayoutID() {
@@ -32,13 +79,74 @@ public class RegisterActivity extends BaseShiBeiActivity implements View.OnClick
     @Override
     public void initViews(Bundle savedInstanceState) {
         setTitle("使用电子邮箱注册");
+        ViewTool.setOnClickListener(this, this, new int[]{R.id.btn_get_code, R.id.btn_next});
+        et_email = findViewById(R.id.et_email);
+        et_code = findViewById(R.id.et_code);
+        btn_get_code = findViewById(R.id.btn_get_code);
     }
 
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
+            case R.id.btn_next:
+                // 完善资料
+                if (TextUtils.isEmpty(email)) {
+                    ToastTool.showShort("邮箱不能为空");
+                    return;
+                }
+
+                code = et_code.getEditableText().toString();
+                if (TextUtils.isEmpty(code)) {
+                    ToastTool.showShort("验证码不能为空");
+                    return;
+                }
+
+                Intent fillDataIntent = new Intent(this, FillDataActivity.class);
+                fillDataIntent.putExtra(KEY_EMAIL, email);
+                fillDataIntent.putExtra(KEY_CODE, code);
+                RxActivityResult.on(this).startIntent(fillDataIntent)
+                        .filter(result -> result.resultCode() == RESULT_OK)
+                        .subscribe(result -> {
+                            // 注册成功之后关闭登录界面
+                            setResult(RESULT_OK);
+                            finish();
+                        });
+                break;
+
+            case R.id.btn_get_code:
+                // 获取验证码
+                email = et_email.getEditableText().toString();
+                if (TextUtils.isEmpty(email)) {
+                    ToastTool.showShort("邮箱不能为空");
+                    return;
+                }
+                showLoading();
+                presenter.getCode(email);
+                break;
             default:
                 break;
         }
     }
+
+    @Override
+    public void onGetCode(boolean isSuccess, String message) {
+        dismissLoading();
+        if (isSuccess) {
+            ToastTool.showShort("验证码发送成功");
+            btn_get_code.setEnabled(false);
+            mTimeHandler.sendEmptyMessage(MSG_TIME);
+        } else {
+            if (TextUtils.isEmpty(message)) {
+                ToastTool.showShort("验证码发送失败");
+            } else {
+                ToastTool.showShort(message);
+            }
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mTimeHandler.removeMessages(MSG_TIME);
+    }
 }

+ 2 - 2
app/src/main/java/com/itant/shibei/ui/mine/login/register/FillDataActivity.java

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register;
+package com.itant.shibei.ui.mine.login.register.fill;
 
 import android.os.Bundle;
 import android.view.View;
@@ -9,7 +9,7 @@ import com.itant.shibei.R;
 import com.itant.shibei.base.BaseShiBeiActivity;
 
 /**
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/18 16:48
  * Description: 完善资料界面
  */

+ 1 - 1
app/src/main/java/com/itant/shibei/widget/AppbarTranslateListener.java

@@ -11,7 +11,7 @@ import com.google.android.material.appbar.AppBarLayout;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/21 8:35
  * Description: AppBar移动时的图标动画监听
  */

+ 9 - 10
app/src/main/res/layout/activity_forget.xml

@@ -75,24 +75,23 @@
         <!--用android.widget.Button代替Button就不会有Material风格了,当前style下Button的background无效-->
         <android.widget.Button
             style="?android:attr/borderlessButtonStyle"
-            android:layout_width="@dimen/size_image_big"
-            android:layout_height="match_parent"
-            android:layout_gravity="end"
-            android:layout_marginStart="@dimen/margin_ss"
-            android:layout_marginTop="9dp"
-            android:layout_marginEnd="@dimen/margin_ss"
-            android:layout_marginBottom="@dimen/margin_ss"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical|end"
             android:elevation="0dp"
+            android:layout_marginTop="@dimen/margin_sss"
+            android:layout_marginEnd="@dimen/margin_ss"
             android:minWidth="0dp"
             android:minHeight="0dp"
-            android:paddingStart="@dimen/margin_ss"
+            android:paddingStart="@dimen/margin_s"
             android:paddingTop="@dimen/margin_ss"
-            android:paddingEnd="@dimen/margin_ss"
+            android:paddingEnd="@dimen/margin_s"
             android:paddingBottom="@dimen/margin_ss"
             android:text="获取验证码"
             android:textColor="@color/green_logo"
             android:textSize="@dimen/text_s"
-            android:textStyle="bold" />
+            android:textStyle="bold"
+            android:background="?selectableItemBackground" />
     </FrameLayout>
 
 

+ 15 - 3
app/src/main/res/layout/activity_mine.xml

@@ -96,7 +96,7 @@
 
         <!--处理提现-->
         <TextView
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="@dimen/height_tab_bar"
             android:background="?attr/selectableItemBackground"
             android:gravity="center_vertical"
@@ -108,9 +108,8 @@
 
         <include layout="@layout/view_divider_common"/>
 
-        <!--处理提现-->
         <TextView
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="@dimen/height_tab_bar"
             android:background="?attr/selectableItemBackground"
             android:gravity="center_vertical"
@@ -122,6 +121,19 @@
 
         <include layout="@layout/view_divider_common" />
 
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/height_tab_bar"
+            android:background="?attr/selectableItemBackground"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:paddingStart="@dimen/activity_horizontal_margin"
+            android:paddingEnd="@dimen/activity_horizontal_margin"
+            android:text="上架新优惠券"
+            android:textColor="@color/black_text" />
+
+        <include layout="@layout/view_divider_common" />
+
     </LinearLayout>
 
     <View

+ 12 - 10
app/src/main/res/layout/activity_register.xml

@@ -31,6 +31,7 @@
         app:boxStrokeWidthFocused="@dimen/width_stroke">
 
         <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/et_email"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textEmailAddress"
@@ -63,6 +64,7 @@
             app:boxStrokeWidthFocused="@dimen/width_stroke">
 
             <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/et_code"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:digits="0123456789"
@@ -75,25 +77,25 @@
         <!--去除按钮阴影style="?android:attr/borderlessButtonStyle"-->
         <!--用android.widget.Button代替Button就不会有Material风格了,当前style下Button的background无效-->
         <android.widget.Button
+            android:id="@+id/btn_get_code"
             style="?android:attr/borderlessButtonStyle"
-            android:layout_width="@dimen/size_image_big"
-            android:layout_height="match_parent"
-            android:layout_gravity="end"
-            android:layout_marginStart="@dimen/margin_ss"
-            android:layout_marginTop="9dp"
-            android:layout_marginEnd="@dimen/margin_ss"
-            android:layout_marginBottom="@dimen/margin_ss"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical|end"
             android:elevation="0dp"
+            android:layout_marginTop="@dimen/margin_sss"
+            android:layout_marginEnd="@dimen/margin_ss"
             android:minWidth="0dp"
             android:minHeight="0dp"
-            android:paddingStart="@dimen/margin_ss"
+            android:paddingStart="@dimen/margin_s"
             android:paddingTop="@dimen/margin_ss"
-            android:paddingEnd="@dimen/margin_ss"
+            android:paddingEnd="@dimen/margin_s"
             android:paddingBottom="@dimen/margin_ss"
             android:text="获取验证码"
             android:textColor="@color/green_logo"
             android:textSize="@dimen/text_s"
-            android:textStyle="bold" />
+            android:textStyle="bold"
+            android:background="?selectableItemBackground"/>
     </FrameLayout>
 
     <android.widget.Button

+ 1 - 0
build.gradle

@@ -20,6 +20,7 @@ allprojects {
     repositories {
         google()
         jcenter()
+        maven { url "https://jitpack.io" }
     }
 }
 

+ 1 - 1
common/src/main/java/com/miekir/common/provider/CommonInstaller.java

@@ -13,7 +13,7 @@ import com.miekir.common.utils.ToastTool;
 
 /**
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 0:17
  * Description: 免手动初始化
  */

+ 1 - 1
common/src/main/java/com/miekir/common/utils/ActivityTool.java

@@ -7,7 +7,7 @@ import android.net.Uri;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/6/21 21:32
  * Description: 关于Activity的工具
  */

+ 1 - 1
common/src/main/java/com/miekir/common/utils/SizeTool.java

@@ -3,7 +3,7 @@ package com.miekir.common.utils;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 11:35
  * Description: 尺寸工具
  */

+ 1 - 1
common/src/main/java/com/miekir/common/utils/ToastTool.java

@@ -6,7 +6,7 @@ import android.widget.Toast;
 import java.lang.ref.WeakReference;
 
 /**
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 0:08
  * Description: Toast工具
  */

+ 2 - 3
common/src/main/java/com/miekir/common/utils/ViewTool.java

@@ -1,13 +1,12 @@
 package com.miekir.common.utils;
 
 import android.app.Activity;
-import android.content.Context;
 import android.view.View;
 
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/7/5 8:21
  * Description: View相关的工具
  */
@@ -20,7 +19,7 @@ public class ViewTool {
      * @param viewIdArray 需要监听的控件ID列表
      * @param listener 监听回调
      */
-    public static void setOnClickListener(Activity activity, int[] viewIdArray, View.OnClickListener listener) {
+    public static void setOnClickListener(Activity activity, View.OnClickListener listener, int[] viewIdArray) {
         if (activity == null || viewIdArray == null || listener == null || viewIdArray.length == 0) {
             return;
         }

+ 1 - 1
mvp/src/main/res/drawable/shape_dialog_bg.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- 内部颜色 -->
-    <solid android:color="#444444" />
+    <solid android:color="#A61B1B1B" />
 
     <!-- 圆角的幅度 -->
     <corners

+ 19 - 1
network/build.gradle

@@ -17,7 +17,25 @@ android {
     buildTypes {
         release {
             minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+
+        debug {
+            minifyEnabled false
+
+        }
+    }
+
+    // 开发与发布的URL
+    flavorDimensions "url"
+    productFlavors {
+        dev {
+            // 开发环境宿舍服务器
+            buildConfigField("String", "BASE_URL", '"http://192.168.0.190:8080"')
+        }
+
+        rel {
+            // todo 正式上线
+            buildConfigField("String", "BASE_URL", '"http://188.168.0.190:8080"')
         }
     }
 }

+ 1 - 1
network/src/main/java/com/miekir/network/constant/Code.java

@@ -2,7 +2,7 @@ package com.miekir.network.constant;
 
 /**
  * 请求码
- * @author 詹子聪
+ * @author Miekir
  */
 
 public class Code {

+ 2 - 3
network/src/main/java/com/miekir/network/constant/RequestConst.java

@@ -3,15 +3,14 @@ package com.miekir.network.constant;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/1/19 11:27
  * Description: 请求相关的常量
  */
 public interface RequestConst {
     /**
      * 请求域名
-     * todo 改成项目真正的请求域名,或者在调用网络请求之后手动调用以下代码设置请求的Host
      * RetrofitHelper.getInstance().setRequestHost()
      */
-    String BASE_URL = "http://www.baidu.com";
+    String BASE_URL = "http://192.168.0.190:8080";
 }

+ 4 - 4
network/src/main/java/com/miekir/network/core/RetrofitHelper.java

@@ -2,7 +2,7 @@ package com.miekir.network.core;
 
 import android.content.Context;
 
-import com.miekir.network.constant.RequestConst;
+import com.miekir.network.BuildConfig;
 import com.readystatesoftware.chuck.ChuckInterceptor;
 
 import java.util.concurrent.TimeUnit;
@@ -15,7 +15,7 @@ import retrofit2.converter.gson.GsonConverterFactory;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/1/19 10:58
  * Description: 请求类,适用于请求链接和配置随时变动
  */
@@ -32,9 +32,9 @@ public class RetrofitHelper {
         // 默认请求的超时等配置
         mOkHttpClient = getDefaultOkHttpClient();
 
-        // 默认请求的地址、转换规则等配置
+        // 默认请求的地址、转换规则等配置,Base URL以不能包含路径,只能是http://加上IP或域名
         mRetrofit = new Retrofit.Builder()
-                .baseUrl(RequestConst.BASE_URL)
+                .baseUrl(BuildConfig.BASE_URL)
                 .client(mOkHttpClient)
                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                 .addConverterFactory(GsonConverterFactory.create())

+ 1 - 1
network/src/main/java/com/miekir/network/core/RetrofitInstaller.java

@@ -14,7 +14,7 @@ import java.util.Objects;
 /**
  *
  *
- * @author 詹子聪
+ * @author Miekir
  * @date 2020/1/19 11:37
  * Description: 初始化入口
  */

+ 3 - 3
network/src/main/java/com/miekir/network/core/base/BaseObserver.java

@@ -9,7 +9,7 @@ import io.reactivex.disposables.Disposable;
 
 /**
  * 返回结果处理
- * @author 詹子聪
+ * @author Miekir
  */
 
 public abstract class BaseObserver<T> implements Observer<BaseResponse<T>> {
@@ -22,11 +22,11 @@ public abstract class BaseObserver<T> implements Observer<BaseResponse<T>> {
             } else if (response.getCode() == Code.TOKEN_TIMEOUT) {
                 // todo 重新登录
             } else {
-                onFailure(new Exception(response.getMsg()), response.getMsg());
+                onFailure(new Exception(response.getMessage()), response.getMessage());
             }
         } catch (Exception e) {
             e.printStackTrace();
-            onFailure(new Exception("null"), "null");
+            onFailure(new Exception("null"), null);
         }
     }
 

+ 15 - 6
network/src/main/java/com/miekir/network/core/base/BaseResponse.java

@@ -2,12 +2,13 @@ package com.miekir.network.core.base;
 
 /**
  * 统一返回封装
- * @author 詹子聪
+ * @author Miekir
  */
 
 public class BaseResponse<T> {
     private int code;
-    private String msg;
+    private String message;
+    private String extra;
     private T content;
 
     /**
@@ -37,11 +38,19 @@ public class BaseResponse<T> {
      *
      * @return 返回信息
      */
-    public String getMsg() {
-        return msg;
+    public String getMessage() {
+        return message;
     }
 
-    public void setMsg(String msg) {
-        this.msg = msg;
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getExtra() {
+        return extra;
+    }
+
+    public void setExtra(String extra) {
+        this.extra = extra;
     }
 }

+ 1 - 1
network/src/main/java/com/miekir/network/core/base/CommonBean.java

@@ -2,7 +2,7 @@ package com.miekir.network.core.base;
 
 /**
  * 公共返回内容
- * @author 詹子聪
+ * @author Miekir
  */
 
 public class CommonBean {

+ 1 - 1
network/src/main/java/com/miekir/network/core/impl/ProgressObserver.java

@@ -13,7 +13,7 @@ import io.reactivex.disposables.Disposable;
  * 进度条观察者
  * 需要进度条时,调用onSubscribe同时显示进度条,
  * 流程走到onComplete/onError时隐藏进度条。
- * @author 詹子聪
+ * @author Miekir
  */
 
 public abstract class ProgressObserver<T> extends BaseObserver<T> {

+ 1 - 1
network/src/main/java/com/miekir/network/utils/ExceptionUtil.java

@@ -11,7 +11,7 @@ import retrofit2.HttpException;
 
 /**
  * 异常信息
- * @author 詹子聪
+ * @author Miekir
  */
 
 public class ExceptionUtil {

+ 1 - 1
network/src/main/java/com/miekir/network/utils/JsonTool.java

@@ -10,7 +10,7 @@ import java.util.Map;
 
 /**
  * 网络工具类
- * @author 詹子聪
+ * @author Miekir
  */
 public class JsonTool {
 

+ 1 - 1
network/src/main/java/com/miekir/network/widget/CustomProgressDialog.java

@@ -9,7 +9,7 @@ import com.miekir.network.R;
 
 /**
  * 网络请求进度条
- * @author 詹子聪
+ * @author Miekir
  */
 
 public class CustomProgressDialog extends Dialog {