Procházet zdrojové kódy

忘记密码调试完成

詹子聪 před 5 roky
rodič
revize
05b596f9b0

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

@@ -32,4 +32,8 @@ public interface ApiService {
     /**邮箱+加密的密码 登录*/
     @POST("/shibei/api/login/normal")
     Observable<BaseResponse<BeiUser>> submitLogin(@Query("email") String email, @Query("password") String password);
+
+    /**忘记密码*/
+    @POST("/shibei/api/password")
+    Observable<BaseResponse<BeiUser>> resetPassword(@Body Map<String, Object> body);
 }

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

@@ -28,8 +28,6 @@ import com.miekir.common.utils.ViewTool;
 import java.util.ArrayList;
 import java.util.List;
 
-import rx_activity_result2.RxActivityResult;
-
 public class TabActivity extends BaseBeiActivity implements View.OnClickListener {
 
 
@@ -99,14 +97,9 @@ public class TabActivity extends BaseBeiActivity implements View.OnClickListener
                 if (UserInfoManager.getInstance().isLogin()) {
                     startActivity(new Intent(this, MineActivity.class));
                 } else {
+                    // 登录
                     Intent intent = new Intent(this, LoginActivity.class);
-                    RxActivityResult.on(this)
-                            .startIntent(intent)
-                            .filter(result -> result.resultCode() == RESULT_OK)
-                            .subscribe(result -> {
-                                // 登录成功之后关闭登录界面
-                                startActivity(new Intent(TabActivity.this, MineActivity.class));
-                            });
+                    startActivity(intent);
                 }
                 break;
             case R.id.fl_search_top:

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

@@ -3,6 +3,7 @@ package com.itant.shibei.ui.mine;
 
 import android.content.DialogInterface;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.view.View;
 
 import androidx.appcompat.app.AlertDialog;
@@ -19,6 +20,27 @@ import com.miekir.common.utils.ViewTool;
 public class MineActivity extends BaseBeiActivity implements View.OnClickListener {
     private BeiUser mUser;
 
+    @Override
+    public int getLayoutID() {
+        return R.layout.activity_mine;
+    }
+
+    @Override
+    public void initViews(Bundle savedInstanceState) {
+        mUser = UserInfoManager.getInstance().getBeiUser();
+        setTitle(String.format(ConstantString.WELCOME_HELLO, TimeTool.getCurrentTimePeriod(), mUser.nickName));
+        ViewTool.setOnClickListener(this, this,
+                new int[]{R.id.ll_user, R.id.ll_feedback, R.id.btn_exit_login});
+
+        // 只有我才能管理后台
+        View ll_admin = findViewById(R.id.ll_admin);
+        if (TextUtils.equals("[email protected]", mUser.email)) {
+            ll_admin.setVisibility(View.VISIBLE);
+        } else {
+            ll_admin.setVisibility(View.GONE);
+        }
+    }
+
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
@@ -54,16 +76,5 @@ public class MineActivity extends BaseBeiActivity implements View.OnClickListene
         alertDialog.show();
     }
 
-    @Override
-    public int getLayoutID() {
-        return R.layout.activity_mine;
-    }
 
-    @Override
-    public void initViews(Bundle savedInstanceState) {
-        mUser = UserInfoManager.getInstance().getBeiUser();
-        setTitle(String.format(ConstantString.WELCOME_HELLO, TimeTool.getCurrentTimePeriod(), mUser.nickName));
-        ViewTool.setOnClickListener(this, this,
-                new int[]{R.id.ll_user, R.id.ll_feedback, R.id.btn_exit_login});
-    }
 }

+ 92 - 7
app/src/main/java/com/itant/shibei/ui/mine/forget/ForgetActivity.java

@@ -1,24 +1,40 @@
 package com.itant.shibei.ui.mine.forget;
 
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.view.View;
 
-import androidx.annotation.Nullable;
-
+import com.google.android.material.textfield.TextInputEditText;
 import com.itant.shibei.R;
 import com.itant.shibei.base.BaseBeiActivity;
+import com.itant.shibei.bean.BeiUser;
+import com.itant.shibei.manager.UserInfoManager;
+import com.itant.shibei.tool.StringTool;
+import com.itant.shibei.ui.mine.register.CodePresenter;
+import com.itant.shibei.ui.mine.register.ICodeView;
+import com.miekir.common.utils.ToastTool;
+import com.miekir.common.utils.ViewTool;
+import com.miekir.mvp.presenter.InjectPresenter;
 
 /**
  * @author Miekir
  * @date 2020/6/18 16:48
  * Description: 登录界面
  */
-public class ForgetActivity extends BaseBeiActivity implements View.OnClickListener {
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+public class ForgetActivity extends BaseBeiActivity implements View.OnClickListener, ICodeView, IForgetView {
+    private TextInputEditText et_email;
+    private TextInputEditText et_code;
+    private TextInputEditText et_new_password;
 
-    }
+    private String email;
+    private String code;
+    private String password;
+
+    @InjectPresenter
+    private CodePresenter mCodePresenter;
+
+    @InjectPresenter
+    private ForgetPresenter mForgetPresenter;
 
     @Override
     public int getLayoutID() {
@@ -28,14 +44,83 @@ public class ForgetActivity extends BaseBeiActivity implements View.OnClickListe
     @Override
     public void initViews(Bundle savedInstanceState) {
         setTitle("重置密码");
+
+        et_email = findViewById(R.id.et_email);
+        et_code = findViewById(R.id.et_code);
+        et_new_password = findViewById(R.id.et_new_password);
+        ViewTool.setOnClickListener(this, this,
+                new int[]{R.id.btn_get_code, R.id.btn_reset_password});
     }
 
 
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
+            case R.id.btn_get_code:
+                // 获取验证码
+                email = et_email.getEditableText().toString();
+                if (TextUtils.isEmpty(email)) {
+                    ToastTool.showShort("邮箱不能为空");
+                    return;
+                }
+
+                showLoading();
+                mCodePresenter.getCode(email);
+                break;
+            case R.id.btn_reset_password:
+                email = et_email.getEditableText().toString();
+                if (TextUtils.isEmpty(email)) {
+                    ToastTool.showShort("邮箱不能为空");
+                    return;
+                }
+
+                if (!email.contains("@")) {
+                    ToastTool.showShort("请输入合法的邮箱");
+                    return;
+                }
+
+                // 重设密码
+                code = et_code.getEditableText().toString();
+                if (TextUtils.isEmpty(code)) {
+                    ToastTool.showShort("验证码不能为空");
+                    return;
+                }
+
+                password = et_new_password.getEditableText().toString();
+                if (TextUtils.isEmpty(password)) {
+                    ToastTool.showShort("新密码不能为空");
+                    return;
+                }
+
+                String encodePassword = StringTool.getEncodeString(password);
+                showLoading();
+                mForgetPresenter.submitReset(email, code, encodePassword);
+                break;
             default:
                 break;
         }
     }
+
+    @Override
+    public void onGetCode(boolean isSuccess, String message) {
+        dismissLoading();
+        if (isSuccess) {
+            ToastTool.showShort("验证码发送成功");
+        } else {
+            ToastTool.showShort(message);
+        }
+    }
+
+    @Override
+    public void onForgetResult(BeiUser user, String message) {
+        dismissLoading();
+        if (user != null) {
+            UserInfoManager.getInstance().setBeiUser(user);
+            ToastTool.showShort("重设密码成功");
+            setResult(RESULT_OK);
+            finish();
+        } else {
+            ToastTool.showShort(message);
+        }
+    }
 }

+ 50 - 0
app/src/main/java/com/itant/shibei/ui/mine/forget/ForgetPresenter.java

@@ -0,0 +1,50 @@
+package com.itant.shibei.ui.mine.forget;
+
+import android.text.TextUtils;
+
+import com.itant.shibei.base.ApiService;
+import com.itant.shibei.bean.BeiUser;
+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 ForgetPresenter extends BasePresenter<IForgetView> {
+
+    public void submitReset(String email, String code, String password) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("email", email);
+        map.put("code", code);
+        map.put("password", password);
+        RetrofitHelper.getInstance()
+                .getRequestApi(ApiService.class)
+                .resetPassword(map)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new BaseObserver<BeiUser>() {
+                    @Override
+                    public void onSuccess(BeiUser result) {
+                        if (getView() != null) {
+                            getView().onForgetResult(result, null);
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(Throwable e, String errMsg) {
+                        if (getView() != null) {
+                            getView().onForgetResult(null, TextUtils.isEmpty(errMsg) ? "密码重设失败" : errMsg);
+                        }
+                    }
+                });
+    }
+}

+ 16 - 0
app/src/main/java/com/itant/shibei/ui/mine/forget/IForgetView.java

@@ -0,0 +1,16 @@
+package com.itant.shibei.ui.mine.forget;
+
+import com.itant.shibei.bean.BeiUser;
+import com.miekir.mvp.view.IView;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/8/2 10:29
+ * Description: 忘记密码的回调
+ */
+public interface IForgetView extends IView {
+
+    void onForgetResult(BeiUser user, String message);
+}

+ 9 - 2
app/src/main/java/com/itant/shibei/ui/mine/login/LoginActivity.java

@@ -82,7 +82,14 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
         switch (v.getId()) {
             case R.id.tv_forget:
                 // 忘记密码
-                startActivity(new Intent(this, ForgetActivity.class));
+                Intent forgetIntent = new Intent(this, ForgetActivity.class);
+                RxActivityResult.on(this).startIntent(forgetIntent)
+                        .filter(result -> result.resultCode() == RESULT_OK)
+                        .subscribe(result -> {
+                            // 找回密码成功之后关闭登录界面
+                            startActivity(new Intent(LoginActivity.this, MineActivity.class));
+                            finish();
+                        });
                 break;
 
             case R.id.btn_login:
@@ -111,7 +118,7 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
         dismissLoading();
         if (user != null) {
             UserInfoManager.getInstance().setBeiUser(user);
-            setResult(RESULT_OK);
+            startActivity(new Intent(this, MineActivity.class));
             finish();
         } else {
             ToastTool.showShort(message);

+ 1 - 0
app/src/main/java/com/itant/shibei/ui/mine/register/RegisterActivity.java

@@ -90,6 +90,7 @@ public class RegisterActivity extends BaseBeiActivity implements View.OnClickLis
         switch (v.getId()) {
             case R.id.btn_next:
                 // 完善资料
+                email = et_email.getEditableText().toString();
                 if (TextUtils.isEmpty(email)) {
                     ToastTool.showShort("邮箱不能为空");
                     return;

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/mine/register/fill/IRegisterView.java

@@ -8,7 +8,7 @@ import com.miekir.mvp.view.IView;
  *
  * @author Miekir
  * @date 2020/8/2 10:29
- * Description: 获取验证码的回调
+ * Description: 注册的回调
  */
 public interface IRegisterView extends IView {
 

+ 6 - 1
app/src/main/res/layout/activity_forget.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"
@@ -62,6 +63,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"
@@ -74,6 +76,7 @@
         <!--去除按钮阴影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="wrap_content"
             android:layout_height="wrap_content"
@@ -102,7 +105,7 @@
         android:layout_marginStart="@dimen/margin_default"
         android:layout_marginTop="@dimen/margin_default"
         android:layout_marginEnd="@dimen/margin_default"
-        android:hint="请设置密码"
+        android:hint="请输入新密码"
         app:boxBackgroundMode="outline"
         app:boxCornerRadiusBottomEnd="4dp"
         app:boxCornerRadiusBottomStart="4dp"
@@ -112,6 +115,7 @@
         app:boxStrokeWidthFocused="@dimen/width_stroke">
 
         <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/et_new_password"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textPassword"
@@ -122,6 +126,7 @@
 
 
     <android.widget.Button
+        android:id="@+id/btn_reset_password"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:minHeight="0dp"

+ 1 - 1
app/src/main/res/layout/activity_mine.xml

@@ -89,11 +89,11 @@
 
     <!--管理员才能看到此界面-->
     <LinearLayout
+        android:id="@+id/ll_admin"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">
 
-
         <!--处理提现-->
         <TextView
             android:layout_width="match_parent"