詹子聪 6 лет назад
Родитель
Сommit
ed33f5437b

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

@@ -33,18 +33,18 @@
             android:theme="@style/TextInputStyle"/>
 
         <activity
-            android:name=".ui.mine.login.register.RegisterActivity"
+            android:name=".ui.mine.register.RegisterActivity"
             android:screenOrientation="portrait"
             android:theme="@style/TextInputStyle"
             android:windowSoftInputMode="stateVisible|adjustResize"/>
 
         <activity
-            android:name=".ui.mine.login.register.fill.FillDataActivity"
+            android:name=".ui.mine.register.fill.FillDataActivity"
             android:screenOrientation="portrait"
             android:theme="@style/TextInputStyle" />
 
         <activity
-            android:name=".ui.mine.login.forget.ForgetActivity"
+            android:name=".ui.mine.forget.ForgetActivity"
             android:screenOrientation="portrait"
             android:theme="@style/TextInputStyle" />
 

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

@@ -28,4 +28,8 @@ public interface ApiService {
     //@Headers({ "Content-Type: application/json;charset=UTF-8"})
     @POST("/shibei/api/register")
     Observable<BaseResponse<BeiUser>> submitRegister(@Body Map<String, Object> body);
+
+    /**邮箱+加密的密码 登录*/
+    @POST("/shibei/api/login/normal")
+    Observable<BaseResponse<BeiUser>> submitLogin(@Query("email") String email, @Query("password") String password);
 }

+ 6 - 2
app/src/main/java/com/itant/shibei/manager/PreferenceManager.java

@@ -39,8 +39,12 @@ public class PreferenceManager {
         preferences = context.getSharedPreferences("current", Context.MODE_PRIVATE);
     }
 
-    public void putSerizable(String key, Serializable value) {
-        preferences.edit().putString(key, new Gson().toJson(value)).commit();
+    public void putSerializable(String key, Serializable value) {
+        if (value == null) {
+            preferences.edit().putString(key, "").commit();
+        } else {
+            preferences.edit().putString(key, new Gson().toJson(value)).commit();
+        }
     }
 
     /**

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

@@ -42,7 +42,7 @@ public class UserInfoManager {
     public void setBeiUser(BeiUser beiUser) {
         this.mBeiUser = beiUser;
         // 保存到本地
-        PreferenceManager.getInstance().putSerizable(PreferenceManager.KEY_USER, beiUser);
+        PreferenceManager.getInstance().putSerializable(PreferenceManager.KEY_USER, beiUser);
     }
 
     public boolean isLogin() {

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

@@ -28,6 +28,8 @@ 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 {
 
 
@@ -89,7 +91,6 @@ public class TabActivity extends BaseBeiActivity implements View.OnClickListener
     }
 
 
-
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
@@ -99,7 +100,13 @@ public class TabActivity extends BaseBeiActivity implements View.OnClickListener
                     startActivity(new Intent(this, MineActivity.class));
                 } else {
                     Intent intent = new Intent(this, LoginActivity.class);
-                    startActivity(intent);
+                    RxActivityResult.on(this)
+                            .startIntent(intent)
+                            .filter(result -> result.resultCode() == RESULT_OK)
+                            .subscribe(result -> {
+                                // 登录成功之后关闭登录界面
+                                startActivity(new Intent(TabActivity.this, MineActivity.class));
+                            });
                 }
                 break;
             case R.id.fl_search_top:

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

@@ -1,42 +1,59 @@
 package com.itant.shibei.ui.mine;
 
-import android.content.Intent;
+
+import android.content.DialogInterface;
 import android.os.Bundle;
 import android.view.View;
 
+import androidx.appcompat.app.AlertDialog;
+
 import com.itant.shibei.R;
 import com.itant.shibei.base.BaseBeiActivity;
+import com.itant.shibei.bean.BeiUser;
 import com.itant.shibei.common.ConstantString;
 import com.itant.shibei.manager.UserInfoManager;
 import com.itant.shibei.tool.SystemTool;
 import com.itant.shibei.tool.TimeTool;
-import com.itant.shibei.ui.mine.login.LoginActivity;
 import com.miekir.common.utils.ViewTool;
 
 public class MineActivity extends BaseBeiActivity implements View.OnClickListener {
+    private BeiUser mUser;
 
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
 
             case R.id.ll_user:
-                if (!UserInfoManager.getInstance().isLogin()) {
-                    // 未登录,跳转登录
-                    startActivity(new Intent(this, LoginActivity.class));
-                } else {
-                    // 退出登录对话框
-                }
+                // todo 查看账户明细
                 break;
 
             case R.id.ll_feedback:
                 SystemTool.sendEmail(this);
                 break;
 
+            case R.id.btn_exit_login:
+                sureToExit();
+                break;
             default:
                 break;
         }
     }
 
+    /**
+     * 确认退出登录
+     */
+    private void sureToExit() {
+        AlertDialog alertDialog = new AlertDialog.Builder(this)
+               .setMessage("确定退出当前账号?")
+               .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+               .setPositiveButton("确定", (DialogInterface dialog, int which) -> {
+            dialog.dismiss();
+            UserInfoManager.getInstance().setBeiUser(null);
+            finish();
+        }).create();
+        alertDialog.show();
+    }
+
     @Override
     public int getLayoutID() {
         return R.layout.activity_mine;
@@ -44,10 +61,9 @@ public class MineActivity extends BaseBeiActivity implements View.OnClickListene
 
     @Override
     public void initViews(Bundle savedInstanceState) {
-        // todo 主人换为昵称
-        setTitle(String.format(ConstantString.WELCOME_HELLO, TimeTool.getCurrentTimePeriod(), "主人"));
-
-
-        ViewTool.setOnClickListener(this, this, new int[]{R.id.ll_user, R.id.ll_feedback});
+        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});
     }
 }

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.forget;
+package com.itant.shibei.ui.mine.forget;
 
 import android.os.Bundle;
 import android.view.View;

+ 16 - 0
app/src/main/java/com/itant/shibei/ui/mine/login/ILoginView.java

@@ -0,0 +1,16 @@
+package com.itant.shibei.ui.mine.login;
+
+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 ILoginView extends IView {
+
+    void onLoginResult(BeiUser user, String message);
+}

+ 46 - 10
app/src/main/java/com/itant/shibei/ui/mine/login/LoginActivity.java

@@ -2,19 +2,25 @@ package com.itant.shibei.ui.mine.login;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 
 import androidx.annotation.NonNull;
-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.MineActivity;
-import com.itant.shibei.ui.mine.login.forget.ForgetActivity;
-import com.itant.shibei.ui.mine.login.register.RegisterActivity;
+import com.itant.shibei.ui.mine.forget.ForgetActivity;
+import com.itant.shibei.ui.mine.register.RegisterActivity;
+import com.miekir.common.utils.ToastTool;
 import com.miekir.common.utils.ViewTool;
+import com.miekir.mvp.presenter.InjectPresenter;
 
 import rx_activity_result2.RxActivityResult;
 
@@ -23,12 +29,12 @@ import rx_activity_result2.RxActivityResult;
  * @date 2020/6/18 16:48
  * Description: 登录界面
  */
-public class LoginActivity extends BaseBeiActivity implements View.OnClickListener {
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+public class LoginActivity extends BaseBeiActivity implements View.OnClickListener, ILoginView {
+    private TextInputEditText et_email;
+    private TextInputEditText et_password;
 
-    }
+    @InjectPresenter
+    LoginPresenter presenter;
 
     @Override
     public int getLayoutID() {
@@ -38,8 +44,9 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
     @Override
     public void initViews(Bundle savedInstanceState) {
         setTitle("使用电子邮箱登录");
-        //setOnDoneListener(this);
-        ViewTool.setOnClickListener(this, this, new int[]{R.id.tv_forget});
+        et_email = findViewById(R.id.et_email);
+        et_password = findViewById(R.id.et_password);
+        ViewTool.setOnClickListener(this, this, new int[]{R.id.btn_login, R.id.tv_forget});
     }
 
     @Override
@@ -77,8 +84,37 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
                 // 忘记密码
                 startActivity(new Intent(this, ForgetActivity.class));
                 break;
+
+            case R.id.btn_login:
+                String email = et_email.getEditableText().toString();
+                String password = et_password.getEditableText().toString();
+                if (TextUtils.isEmpty(email)) {
+                    ToastTool.showShort("邮箱不能为空");
+                    return;
+                }
+                if (TextUtils.isEmpty(password)) {
+                    ToastTool.showShort("密码不能为空");
+                    return;
+                }
+
+                password = StringTool.getEncodeString(password);
+                showLoading();
+                presenter.submitLogin(email, password);
+                break;
             default:
                 break;
         }
     }
+
+    @Override
+    public void onLoginResult(BeiUser user, String message) {
+        dismissLoading();
+        if (user != null) {
+            UserInfoManager.getInstance().setBeiUser(user);
+            setResult(RESULT_OK);
+            finish();
+        } else {
+            ToastTool.showShort(message);
+        }
+    }
 }

+ 43 - 0
app/src/main/java/com/itant/shibei/ui/mine/login/LoginPresenter.java

@@ -0,0 +1,43 @@
+package com.itant.shibei.ui.mine.login;
+
+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 io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * @author Miekir
+ * @date 2020/7/9 20:54
+ * Description: 商品的相关数据接口处理
+ */
+public class LoginPresenter extends BasePresenter<ILoginView> {
+
+    public void submitLogin(String email, String password) {
+        RetrofitHelper.getInstance()
+                .getRequestApi(ApiService.class)
+                .submitLogin(email, password)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new BaseObserver<BeiUser>() {
+                    @Override
+                    public void onSuccess(BeiUser result) {
+                        if (getView() != null) {
+                            getView().onLoginResult(result, null);
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(Throwable e, String errMsg) {
+                        if (getView() != null) {
+                            getView().onLoginResult(null, TextUtils.isEmpty(errMsg) ? "登录失败" : errMsg);
+                        }
+                    }
+                });
+    }
+}

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register;
+package com.itant.shibei.ui.mine.register;
 
 import com.itant.shibei.base.ApiService;
 import com.miekir.mvp.presenter.BasePresenter;

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register;
+package com.itant.shibei.ui.mine.register;
 
 import com.miekir.mvp.view.IView;
 

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register;
+package com.itant.shibei.ui.mine.register;
 
 import android.content.Intent;
 import android.os.Bundle;
@@ -13,7 +13,7 @@ import androidx.annotation.NonNull;
 import com.google.android.material.textfield.TextInputEditText;
 import com.itant.shibei.R;
 import com.itant.shibei.base.BaseBeiActivity;
-import com.itant.shibei.ui.mine.login.register.fill.FillDataActivity;
+import com.itant.shibei.ui.mine.register.fill.FillDataActivity;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.common.utils.ViewTool;
 import com.miekir.mvp.presenter.InjectPresenter;

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register.fill;
+package com.itant.shibei.ui.mine.register.fill;
 
 import android.os.Bundle;
 import android.text.TextUtils;
@@ -9,7 +9,7 @@ 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.login.register.RegisterActivity;
+import com.itant.shibei.ui.mine.register.RegisterActivity;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.mvp.presenter.InjectPresenter;
 

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register.fill;
+package com.itant.shibei.ui.mine.register.fill;
 
 import com.itant.shibei.bean.BeiUser;
 import com.miekir.mvp.view.IView;

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

@@ -1,4 +1,4 @@
-package com.itant.shibei.ui.mine.login.register.fill;
+package com.itant.shibei.ui.mine.register.fill;
 
 import android.text.TextUtils;
 

+ 5 - 2
app/src/main/res/layout/activity_login.xml

@@ -30,6 +30,7 @@
         style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
 
         <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/et_email"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:textSize="@dimen/text_normal_s"
@@ -55,11 +56,12 @@
         style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
 
         <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/et_password"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textPassword"
-            android:textSize="@dimen/text_normal_s"
-            android:maxLength="20"/>
+            android:maxLength="20"
+            android:textSize="@dimen/text_normal_s"/>
 
     </com.google.android.material.textfield.TextInputLayout>
 
@@ -77,6 +79,7 @@
         android:layout_gravity="end"/>
 
     <android.widget.Button
+        android:id="@+id/btn_login"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:minHeight="0dp"