Pārlūkot izejas kodu

[회원가입][Bug] 모바일 인증 작업 중 2

hyodong.min 7 gadi atpakaļ
vecāks
revīzija
e00c0feaec

+ 15 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SignUpActivity.java

@@ -7,6 +7,7 @@ import android.os.Bundle;
 import android.util.Log;
 
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
 import kr.co.zumo.app.lifeplus.model.SignUpModel;
 import kr.co.zumo.app.lifeplus.view.Event;
@@ -60,6 +61,20 @@ public class SignUpActivity extends ActivityBase<SignUpPresenter> implements ISi
           int eventId = event.getEventId();
           if (Event.SUCCESS == eventId) {
             dialog.dismiss();
+            LifeplusAPIBean bean = event.fromJson(LifeplusAPIBean.class);
+
+            Log.w("APP# SignUpActivity | onDialogResult", "| " + bean.toPrettyJson());
+
+            /**
+             * // todo 아래 코드는 팝업 외에서 처리해야 한다.
+             * 2. 성공 시 PROCESS 진입
+             1) 만 14세 이상 : 약관동의(JO2001)화면 링크
+             2) 14세 미만 : 14세 미만 가입불가 안내 (JO5002) 화면 링크
+             3) 회원 Y: 기존회원 간편암호 확인 안내 (JO5002) 화면 링크

+             4) 회원탈퇴일 기준 30일 이내 Y
+             - 탈퇴 회원 (30일 이내) 가입불가 안내 (JO5003) 화면 링크
+             */
+
           }
           else if (Event.FAIL == eventId) {
             // todo 모바일 인증 실패

+ 16 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/IMobileAuthorizationDialog.java

@@ -2,6 +2,8 @@ package kr.co.zumo.app.lifeplus.view.dialog;
 
 import android.support.annotation.StringRes;
 
+import kr.co.zumo.app.lifeplus.view.Event;
+
 /**
  * IMobileAuthorizationDialog
  * <pre>
@@ -98,4 +100,18 @@ public interface IMobileAuthorizationDialog {
    * @param isEnabled
    */
   void setEnabledRequestConfirmButton(boolean isEnabled);
+
+  /**
+   * 인즌 번호 입력 필드 활성/비활성
+   *
+   * @param isEnabled
+   */
+  void setEnabledRequestConfirmTextView(boolean isEnabled);
+
+  /**
+   * 결과를 view 로 전달하기위한 delegate
+   *
+   * @param event
+   */
+  void onResultDelegate(Event event);
 }

+ 14 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/MobileAuthorizationDialog.java

@@ -31,6 +31,7 @@ import android.widget.TextView;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.CheckBoxAllDriver;
+import kr.co.zumo.app.lifeplus.view.Event;
 
 /**
  * MobileAuthorizationDialog
@@ -88,10 +89,7 @@ public class MobileAuthorizationDialog extends DialogBase implements View.OnClic
   public void onCreate(Bundle savedInstanceState) {
     setStyle(DialogFragment.STYLE_NORMAL, R.style.CustomDialog);
     inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
-    presenter = new MobileAuthorizationPresenter(this);
-    if (null != resultListener) {
-      presenter.setResultListener(resultListener);
-    }
+
     super.onCreate(savedInstanceState);
   }
 
@@ -105,16 +103,11 @@ public class MobileAuthorizationDialog extends DialogBase implements View.OnClic
   @Override
   public void onCancel(DialogInterface dialog) {
     Log.i("APP# MobileAuthorizationDialog | onCancel", "|" + dialog);
-    presenter.onCancel(this);
   }
 
   @Override
   public void setResultListener(IDialogResultListener resultListener) {
     super.setResultListener(resultListener);
-
-    if (null != presenter) {
-      presenter.setResultListener(resultListener);
-    }
   }
 
   @Override
@@ -204,6 +197,8 @@ public class MobileAuthorizationDialog extends DialogBase implements View.OnClic
     textViewPhoneValidation = view.findViewById(R.id.text_view_phone_number_validation);
     textAuthorizedNumberValidation = view.findViewById(R.id.text_authorized_number_validation);
 
+    presenter = new MobileAuthorizationPresenter(this);
+
     scrollViewLinearLayout.setOnClickListener(this);
     buttonConfirm.setOnClickListener(this);
     buttonTimeDelay.setOnClickListener(this);
@@ -385,6 +380,11 @@ public class MobileAuthorizationDialog extends DialogBase implements View.OnClic
     buttonConfirm.setEnabled(isEnabled);
   }
 
+  @Override
+  public void setEnabledRequestConfirmTextView(boolean isEnabled) {
+    editTextAuthorizedNumber.setEnabled(isEnabled);
+  }
+
   @Override
   public void setEnabledRequestNumberButton(boolean isEnabled) {
     buttonIdentifyNumberSend.setEnabled(isEnabled);
@@ -449,4 +449,9 @@ public class MobileAuthorizationDialog extends DialogBase implements View.OnClic
   public void renderRemainTime(String time) {
     textViewPhoneIdentifyTime.setText(time);
   }
+
+  @Override
+  public void onResultDelegate(Event event) {
+
+  }
 }

+ 116 - 30
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/MobileAuthorizationPresenter.java

@@ -14,7 +14,9 @@ import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.SignUpMobileAuthorizationBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
 import kr.co.zumo.app.lifeplus.bean.api.MobileAuthorizationBean;
+import kr.co.zumo.app.lifeplus.bean.api.MobileAuthorizationConfirmBean;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIService;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
@@ -44,10 +46,14 @@ public class MobileAuthorizationPresenter {
   private IMobileAuthorizationDialog view;
 
   private String authorizationNumber;
+  private DialogBase dialog;
 
   public MobileAuthorizationPresenter(IMobileAuthorizationDialog iMobileAuthorizationDialog) {
     this.view = iMobileAuthorizationDialog;
 
+    view.setEnabledRequestConfirmTextView(false);
+    view.setEnabledRequestConfirmButton(false);
+
     // default setting
     userBean.setMobileCompany(ResourceUtil.getStringArray("mobile_companies")[0]);
     userBean.setFirstPhoneNumber(ResourceUtil.getStringArray("phone_numbers")[0]);
@@ -65,17 +71,16 @@ public class MobileAuthorizationPresenter {
     }
   }
 
-  private IDialogResultListener resultListener;
-
-  public void setResultListener(IDialogResultListener resultListener) {
-    this.resultListener = resultListener;
-  }
-
   public void dispose() {
     if (null != disposable) {
       disposable.dispose();
       disposable = null;
     }
+
+    if (null != dialog) {
+      dialog.dismiss();
+      dialog = null;
+    }
   }
 
   private void doHideKeyBoard() {
@@ -104,9 +109,8 @@ public class MobileAuthorizationPresenter {
   public void onNameTextChanged(String inputName) {
     Log.i("APP#  MobileAuthorizationPresenter | doNameValidationMessage", "|" + inputName);
 
-    verifyName(inputName);
     userBean.setName(inputName);
-
+    verifyRequestNumberButton();
   }
 
   /**
@@ -116,7 +120,7 @@ public class MobileAuthorizationPresenter {
    */
   public void onFocusNameText(boolean isFocusChanged) {
     if (isFocusChanged) {
-      verifyName(userBean.getName());
+      verifyRequestNumberButton();
     }
     else {
       view.doClearNameValidationTextView();
@@ -132,8 +136,8 @@ public class MobileAuthorizationPresenter {
   public void onBirthDateTextChanged(String inputBirthDate) {
     Log.i("APP#  MobileAuthorizationPresenter | onBirthDateTextChanged", "|" + inputBirthDate);
 
-    verifyBirthDate(inputBirthDate);
     userBean.setBirthDate(inputBirthDate);
+    verifyRequestNumberButton();
   }
 
   /**
@@ -143,7 +147,7 @@ public class MobileAuthorizationPresenter {
    */
   public void onFocusBirthDateText(boolean isFocusChanged) {
     if (isFocusChanged) {
-      verifyBirthDate(userBean.getBirthDate());
+      verifyRequestNumberButton();
     }
     else {
       view.doClearBirthDateValidationTextView();
@@ -158,8 +162,8 @@ public class MobileAuthorizationPresenter {
   public void onPhoneNumberTextChanged(String phoneNumber) {
     Log.i("APP#  MobileAuthorizationPresenter | onPhoneNumberCheckedValidationMessage", "|" + phoneNumber);
 
-    verifyPhoneNumber(phoneNumber);
     userBean.setPhoneNumber(phoneNumber);
+    verifyRequestNumberButton();
   }
 
   /**
@@ -169,7 +173,7 @@ public class MobileAuthorizationPresenter {
    */
   public void onFocusPhoneNumberText(boolean isFocusChanged) {
     if (isFocusChanged) {
-      verifyPhoneNumber(userBean.getPhoneNumber());
+      verifyRequestNumberButton();
     }
     else {
       view.doClearPhoneNumberValidationTextView();
@@ -273,7 +277,7 @@ public class MobileAuthorizationPresenter {
   public void onAuthorizedNumberChanged(String authorizedNumber) {
     Log.i("APP#  MobileAuthorizationPresenter | onPhoneNumberCheckedValidationMessage", "|" + authorizedNumber);
     verifyAuthorizationNumber(authorizedNumber);
-    authorizationNumber = authorizedNumber;
+    this.authorizationNumber = authorizedNumber;
   }
 
   /**
@@ -283,27 +287,88 @@ public class MobileAuthorizationPresenter {
     Log.i("APP#  MobileAuthorizationPresenter | onAuthorizationConfirmButtonClick", "|" + "click");
 
     boolean isValidated = true;
-    if (verifyAuthorizationNumber(authorizationNumber) == false) {
+    if (verifyAuthorizationNumber(this.authorizationNumber) == false) {
       isValidated = false;
     }
 
     if (isValidated) {
       // call api...
+
+      MobileAuthorizationConfirmBean bean = new MobileAuthorizationConfirmBean();
+      bean.setDeviceUuid(SuperModel.getInstance().getDeviceUuid());
+      bean.setAuthorizationNumber(this.authorizationNumber);
+
+      disposable.add(
+        LifeplusAPIService.requestMobileAuthorization(bean)
+          .subscribeOn(Schedulers.io())
+          .observeOn(AndroidSchedulers.mainThread())
+          .subscribe(resultBean -> {
+            Log.i("APP# MobileAuthorizationPresenter | onAuthorizationConfirmButtonClick", "|" + resultBean.toPrettyJson());
+            // todo 결과 비교해서 성공/실패 처리
+            doSomeWhenConfirmSuccess(resultBean);
+          }, e -> {
+            if (AppUtil.isDebug()) {
+              LifeplusAPIBean resultBean = new LifeplusAPIBean();
+              resultBean.setCode("0");
+              resultBean.setReturnMessage("OK");
+              doSomeWhenConfirmSuccess(resultBean);
+            }
+            else if (e instanceof HttpException) {
+              showSendingPopup(R.string.phone_identify_submit_message_fail);
+            }
+          })
+      );
+    }
+    else {
+      showInvalidateConfirmPopup(R.string.phone_identify_number_need);
     }
   }
 
-  /**
-   * 인증번호 발송 버튼 클릭, 인증 번호 발송 전 user 정보 data 준비.
-   */
-  public void onAuthorizationNumberSendButtonClick() {
-    Log.i("APP#  MobileAuthorizationPresenter | onAuthorizationNumberSendButtonClick", "|" + userBean.toPrettyJson());
+  private void doSomeWhenConfirmSuccess(LifeplusAPIBean bean) {
 
     /**
-     * 유효성 체크
-     * - 실패 시 해당 위치로 이동
-     * - 통과하면 api 호출
+     * // todo 아래 코드는 팝업 외에서 처리해야 한다.
+     * 2. 성공 시 PROCESS 진입
+     1) 만 14세 이상 : 약관동의(JO2001)화면 링크
+     2) 14세 미만 : 14세 미만 가입불가 안내 (JO5002) 화면 링크
+     3) 회원 Y: 기존회원 간편암호 확인 안내 (JO5002) 화면 링크

+     4) 회원탈퇴일 기준 30일 이내 Y
+     - 탈퇴 회원 (30일 이내) 가입불가 안내 (JO5003) 화면 링크
      */
 
+    view.onResultDelegate(new Event.Builder(Event.SUCCESS).json(bean.toJson()).build());
+  }
+
+  private void showInvalidateConfirmPopup(@StringRes int stringId) {
+    dialog = DialogBuilder.create(DialogID.ALERT)
+      .listener(new IDialogResultListener() {
+        @Override
+        public void onDialogResult(DialogBase dialog, Event event) {
+          if (event.getEventId() == Event.CONFIRM) {
+            dialog.dismiss();
+            MobileAuthorizationPresenter.this.dialog = null;
+          }
+        }
+
+        @Override
+        public void onDialogCanceled(DialogBase dialog) {
+          MobileAuthorizationPresenter.this.dialog = null;
+        }
+      })
+      .attribute((IAttribute<AlertDialog>) dialog -> {
+        dialog.setText(ResourceUtil.getString(stringId));
+      })
+      .show();
+  }
+
+  private void verifyRequestNumberButton() {
+
+    boolean isValidated = verifyRequestNumberValidation();
+
+    view.setEnabledRequestNumberButton(isValidated);
+  }
+
+  private boolean verifyRequestNumberValidation() {
     boolean isValidated = true;
     if (verifyName(userBean.getName()) == false) {
       isValidated = false;
@@ -321,6 +386,23 @@ public class MobileAuthorizationPresenter {
       isValidated = false;
     }
 
+    return isValidated;
+  }
+
+  /**
+   * 인증번호 발송 버튼 클릭, 인증 번호 발송 전 user 정보 data 준비.
+   */
+  public void onAuthorizationNumberSendButtonClick() {
+    Log.i("APP#  MobileAuthorizationPresenter | onAuthorizationNumberSendButtonClick", "|" + userBean.toPrettyJson());
+
+    /**
+     * 유효성 체크
+     * - 실패 시 해당 위치로 이동
+     * - 통과하면 api 호출
+     */
+
+    boolean isValidated = verifyRequestNumberValidation();
+
     if (isValidated) {
       // call api...
       Log.w("APP# MobileAuthorizationPresenter | onAuthorizationNumberSendButtonClick", "|" + "call api ============ ");
@@ -344,12 +426,15 @@ public class MobileAuthorizationPresenter {
           .observeOn(AndroidSchedulers.mainThread())
           .subscribe(resultBean -> {
             Log.i("APP# MobileAuthorizationPresenter | onAuthorizationNumberSendButtonClick", "|" + resultBean.toPrettyJson());
+            // todo 결과 비교해서 성공/실패 처리
             doSomeWhenSendingSuccess();
           }, e -> {
             if (AppUtil.isDebug()) {
               doSomeWhenSendingSuccess();
             }
             else if (e instanceof HttpException) {
+              view.setEnabledRequestConfirmTextView(false);
+              view.setEnabledRequestConfirmButton(false);
               showSendingPopup(R.string.phone_identify_submit_message_fail);
             }
           })
@@ -358,6 +443,8 @@ public class MobileAuthorizationPresenter {
   }
 
   private void doSomeWhenSendingSuccess() {
+    view.setEnabledRequestConfirmTextView(true);
+
     showSendingPopup(R.string.phone_identify_submit_message_success);
 
     view.showRemainTime(true);
@@ -390,17 +477,19 @@ public class MobileAuthorizationPresenter {
   }
 
   private void showSendingPopup(@StringRes int stringId) {
-    DialogBuilder.create(DialogID.ALERT)
+    dialog = DialogBuilder.create(DialogID.ALERT)
       .listener(new IDialogResultListener() {
         @Override
         public void onDialogResult(DialogBase dialog, Event event) {
           if (event.getEventId() == Event.CONFIRM) {
             dialog.dismiss();
+            MobileAuthorizationPresenter.this.dialog = null;
           }
         }
 
         @Override
         public void onDialogCanceled(DialogBase dialog) {
+          MobileAuthorizationPresenter.this.dialog = null;
         }
       })
       .attribute((IAttribute<AlertDialog>) dialog -> {
@@ -433,15 +522,17 @@ public class MobileAuthorizationPresenter {
    */
   public void onClickAgreeDetail(int index) {
     // todo index 에 따른 디테일 화면 웹뷰 표시
-    DialogBuilder.create(DialogID.WEB)
+    dialog = DialogBuilder.create(DialogID.WEB)
       .listener(new IDialogResultListener() {
         @Override
         public void onDialogResult(DialogBase dialog, Event event) {
+          MobileAuthorizationPresenter.this.dialog = null;
 
         }
 
         @Override
         public void onDialogCanceled(DialogBase dialog) {
+          MobileAuthorizationPresenter.this.dialog = null;
 
         }
       })
@@ -449,11 +540,6 @@ public class MobileAuthorizationPresenter {
       .show();
   }
 
-  public void onCancel(DialogBase dialog) {
-    resultListener.onDialogCanceled(dialog);
-  }
-
-
   /***********************************
    * Validation - after request Number
    ***********************************/

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

@@ -85,6 +85,9 @@
   <string name="phone_identify_submit_retry">인증번호 재발송</string>
   <string name="phone_identify_six_characters">인증번호 6자리 입력</string>
   <string name="phone_identify_number_validation_message">인증번호 6자리를 입력해주세요</string>
+  <string name="phone_identify_number_need">인증번호를 입력해주세요.</string>
+  <string name="phone_identify_number_fail_1">입력하신 인증번호가 정확하지 않습니다. 다시 시도해주세요.</string>
+  <string name="phone_identify_number_fail_2">본인인증에 실패했습니다. 인증번호를 재발송해주세요.</string>
   <string name="phone_identify_confirm">확 인</string>
   <string name="phone_identify_time">남은 시간: </string>
   <string name="phone_identify_time_delay">시간 연장</string>