فهرست منبع

登录流程修改

詹子聪 5 سال پیش
والد
کامیت
3aee5ed292

+ 2 - 1
app/src/main/java/com/miekir/eden/base/CommonApi.java

@@ -2,6 +2,7 @@ package com.miekir.eden.base;
 
 
 import com.miekir.eden.bean.IPInfoBean;
+import com.miekir.network.core.base.BaseResponse;
 
 import io.reactivex.Observable;
 import retrofit2.http.GET;
@@ -18,5 +19,5 @@ public interface CommonApi {
      * 提交考试
      */
     @GET("https://iplist.cc/api")
-    Observable<IPInfoBean> getIPInfo();
+    Observable<BaseResponse<IPInfoBean>> getIPInfo();
 }

+ 4 - 0
app/src/main/java/com/miekir/eden/constant/EdenError.java

@@ -28,6 +28,7 @@ public class EdenError extends Code {
     public static final int REST_TIME = -4;
     public static final int PERMISSION_DENIED = -5;
     public static final int REGION_INVALID = -6;
+    public static final int REGION_GET_FAILED = -7;
 
     public static final int FAILED_NEED_RE_LOGIN = -99;
     private EdenError() {}
@@ -42,6 +43,9 @@ public class EdenError extends Code {
 
             case REGION_INVALID:
                 return StringTool.getString(R.string.login_area_not_support);
+
+            case REGION_GET_FAILED:
+                return StringTool.getString(R.string.login_get_region_failed);
             default:
                 return "";
         }

+ 4 - 4
app/src/main/java/com/miekir/eden/ui/mine/login/LoginActivity.java

@@ -114,7 +114,7 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
                 if (!EdenManager.getInstance().isKwyPhotoReady()) {
                     getKawayiSetting();
                 } else {
-                    welcomePresenter.submitLogin();
+                    welcomePresenter.submitLoginWithToken();
                 }
                 break;
             default:
@@ -167,11 +167,11 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
 
             @Override
             public void accept(String userInfo) throws Exception {
-                welcomePresenter.submitLogin();
+                welcomePresenter.submitLoginWithToken();
             }
         }, onError -> {
             // 必须要重写处理error的逻辑
-            welcomePresenter.submitLogin();
+            welcomePresenter.submitLoginWithToken();
         });
     }
 
@@ -233,7 +233,7 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
                 }
 
                 showLoading();
-                presenter.submitLogin(email, password);
+                presenter.submitLoginWithPassword(email, password);
                 break;
             default:
                 break;

+ 48 - 24
app/src/main/java/com/miekir/eden/ui/mine/login/LoginPresenter.java

@@ -2,19 +2,16 @@ package com.miekir.eden.ui.mine.login;
 
 import android.text.TextUtils;
 
-import com.miekir.eden.R;
 import com.miekir.eden.base.ApiService;
 import com.miekir.eden.base.CommonApi;
 import com.miekir.eden.bean.BeiUser;
+import com.miekir.eden.bean.IPInfoBean;
 import com.miekir.eden.constant.ConstantString;
 import com.miekir.eden.constant.EdenError;
-import com.miekir.eden.exception.BeiException;
 import com.miekir.eden.net.RetrofitHelper;
-import com.miekir.eden.tool.StringTool;
 import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.network.core.base.BaseObserver;
 
-import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
 
@@ -25,40 +22,67 @@ import io.reactivex.schedulers.Schedulers;
  */
 public class LoginPresenter extends BasePresenter<ILoginView> {
 
-    public void submitLogin(String email, String password) {
+    public void submitLoginWithPassword(String email, String password) {
         RetrofitHelper.getInstance()
-                .getRequestApi(CommonApi.class)
-                .getIPInfo()
-                .flatMap(ipInfo -> {
-                    // 暂不支持中国地区
-                    if (!TextUtils.equals(email, ConstantString.NAME_ADMIN)) {
-                        if ((ipInfo == null || TextUtils.equals("CN", ipInfo.getCountrycode()))) {
-                            return Observable.error(new BeiException(EdenError.REGION_INVALID, StringTool.getString(R.string.login_area_not_support)));
+                .getRequestApi(ApiService.class)
+                .loginOrRegister(email, password).subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new BaseObserver<BeiUser>() {
+                    @Override
+                    public void onSuccess(int code, BeiUser result) {
+                        if (getView() == null) {
+                            return;
                         }
+
+                        // 老用户直接登录
+                        long existTime = System.currentTimeMillis() - result.registerTimeMillis;
+                        boolean isOldUser = Math.abs(existTime) > (24 * 60 * 60 * 1000);
+                        if (isOldUser) {
+                            getView().onLoginResult(result, EdenError.SUCCESS);
+                            return;
+                        }
+
+                        if (TextUtils.equals(result.email, ConstantString.NAME_ADMIN)) {
+                            getView().onLoginResult(result, EdenError.SUCCESS);
+                            return;
+                        }
+
+                        getRegionInfo(result);
                     }
 
-                    return RetrofitHelper.getInstance()
-                        .getRequestApi(ApiService.class)
-                        .loginOrRegister(email, password);
-                    })
+                    @Override
+                    public void onFailure(int code, Throwable e, String errMsg) {
+                        if (getView() != null) {
+                            getView().onLoginResult(null, EdenError.COMMON);
+                        }
+                    }
+                });
+    }
+
+    private void getRegionInfo(BeiUser user) {
+        RetrofitHelper.getInstance()
+                .getRequestApi(CommonApi.class)
+                .getIPInfo()
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new BaseObserver<BeiUser>() {
+                .subscribe(new BaseObserver<IPInfoBean>() {
                     @Override
-                    public void onSuccess(int code, BeiUser result) {
+                    public void onSuccess(int code, IPInfoBean ipInfo) {
                         if (getView() != null) {
-                            getView().onLoginResult(result, EdenError.SUCCESS);
+                            // 暂不支持中国地区
+                            if ((ipInfo == null || TextUtils.equals("CN", ipInfo.getCountrycode()))) {
+                                getView().onLoginResult(null, EdenError.REGION_INVALID);
+                                return;
+                            }
+                            getView().onLoginResult(user, EdenError.SUCCESS);
                         }
                     }
 
                     @Override
                     public void onFailure(int code, Throwable e, String errMsg) {
                         if (getView() != null) {
-                            if (e instanceof BeiException) {
-                                getView().onLoginResult(null, ((BeiException) e).getCode());
-                            } else {
-                                getView().onLoginResult(null, EdenError.COMMON);
-                            }
+                            // 获取区域信息失败
+                            getView().onLoginResult(null, EdenError.REGION_GET_FAILED);
                         }
                     }
                 });

+ 1 - 1
app/src/main/java/com/miekir/eden/ui/welcome/WelcomeActivity.java

@@ -193,7 +193,7 @@ public class WelcomeActivity extends BaseBeiActivity implements ILoginView, ISys
 
     private void goOnActivity() {
         if (EdenManager.getInstance().isLogin()) {
-            presenter.submitLogin();
+            presenter.submitLoginWithToken();
         } else {
             startActivity(new Intent(WelcomeActivity.this, LoginActivity.class));
             finish();

+ 1 - 1
app/src/main/java/com/miekir/eden/ui/welcome/WelcomePresenter.java

@@ -18,7 +18,7 @@ import io.reactivex.schedulers.Schedulers;
  */
 public class WelcomePresenter extends BasePresenter<ILoginView> {
 
-    public void submitLogin() {
+    public void submitLoginWithToken() {
         RetrofitHelper.getInstance()
                 .getRequestApi(ApiService.class)
                 .loginByToken()

+ 1 - 0
app/src/main/res/values-zh-rCN/strings.xml

@@ -111,4 +111,5 @@
     <string name="login_area_not_support">暂不支持当前地区</string>
     <string name="menu_retry">重试</string>
     <string name="about_coupon">领美食券</string>
+    <string name="login_get_region_failed">获取区域信息失败</string>
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -111,4 +111,5 @@
     <string name="login_area_not_support">Current region is not supported</string>
     <string name="menu_retry">Retry</string>
     <string name="about_coupon">Get Food Coupon</string>
+    <string name="login_get_region_failed">Get region info failed</string>
 </resources>