瀏覽代碼

[회원가입][Bug] 핀입력 재확인 5회

hyodong.min 7 年之前
父節點
當前提交
0b172313a2

+ 1 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/MobileAuthorizationPresenter.java

@@ -751,7 +751,6 @@ public class MobileAuthorizationPresenter {
     }
 
     birthDate = StringUtil.getPureNumber(birthDate);
-    String firstString = birthDate.substring(0, 1);
 
     if (birthDate.length() == 0) {
       Log.i("APP# MobileAuthorizationPresenter | verifyBirthDate", "|" + "length 0");
@@ -759,9 +758,7 @@ public class MobileAuthorizationPresenter {
     }
     else if (
       birthDate.length() <= 7
-        || firstString.equals("0")
-        || firstString.equals("1")
-        || firstString.equals("2")
+        || birthDate.matches("^[012]")
       ) {
       //숫자 7자리 이하 입력시, or YYYY 으로 시작 하지 않았을 경우;
       Log.i("APP# MobileAuthorizationPresenter | verifyBirthDate", "|" + "birthDateLength check");

+ 26 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/signup/SignUpPinFragment.java

@@ -23,6 +23,7 @@ import java.util.Collections;
 import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.model.SignUpModel;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.fragment.FragmentBase;
 import kr.co.zumo.app.lifeplus.view.presenter.signup.ISignUpPinView;
@@ -44,13 +45,13 @@ public class SignUpPinFragment extends FragmentBase<SignUpPinPresenter> implemen
   private ArrayList<Button> buttonList;
   private ArrayList<ImageView> imageList;
   private String password;
-  @StringRes
-  private int guideStringId = R.string.empty_string;
+  private String guideString = "";
   @StringRes
   private int titleStringId = R.string.empty_string;
 
   private TextView textGuide;
   private TextView textTitle;
+  private TextView textReset;
   private Disposable disposable;
   private Button buttonShuffle;
   private ImageButton buttonDelete;
@@ -72,9 +73,10 @@ public class SignUpPinFragment extends FragmentBase<SignUpPinPresenter> implemen
     buttonDelete = view.findViewById(R.id.button_delete);
     textGuide = view.findViewById(R.id.text_guide);
     textTitle = view.findViewById(R.id.text_title);
+    textReset = view.findViewById(R.id.button_sign_up_pin_code_reset);
 
-    if (R.string.empty_string != guideStringId) {
-      textGuide.setText(guideStringId);
+    if (StringUtil.isFull(guideString)) {
+      textGuide.setText(guideString);
     }
 
     if (R.string.empty_string != titleStringId) {
@@ -196,10 +198,28 @@ public class SignUpPinFragment extends FragmentBase<SignUpPinPresenter> implemen
    * @param stringId
    */
   public void updateGuideText(@StringRes int stringId) {
-    guideStringId = stringId;
+    guideString = getString(stringId);
+
+    if (null != textGuide) {
+      textGuide.setText(guideString);
+    }
+  }
+
+  @Override
+  public void updateGuideTextColor(int color) {
+    textGuide.setTextColor(color);
+  }
+
+  @Override
+  public void setResetButtonVisible(boolean isVisible) {
+    textReset.setVisibility(isVisible ? View.VISIBLE : View.GONE);
+  }
+
+  @Override
+  public void updateGuideText(String str) {
 
     if (null != textGuide) {
-      textGuide.setText(guideStringId);
+      textGuide.setText(str);
     }
   }
 

+ 22 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/signup/ISignUpPinView.java

@@ -19,7 +19,9 @@ import kr.co.zumo.app.lifeplus.view.ISignUpView;
  */
 public interface ISignUpPinView extends ISignUpView {
   void setEnabled();
+
   void setDisabled();
+
   void restart();
 
   /**
@@ -29,10 +31,30 @@ public interface ISignUpPinView extends ISignUpView {
    */
   void updateGuideText(@StringRes int stringId);
 
+  /**
+   * 가이드 텍스트를 업데이트 한다.
+   *
+   * @param str
+   */
+  void updateGuideText(String str);
+
+  /**
+   *
+   * @param color
+   */
+  void updateGuideTextColor(int color);
+
   /**
    * title 텍스트를 업데이트 한다.
    *
    * @param stringId
    */
   void updateTitleText(@StringRes int stringId);
+
+  /**
+   * 암호 재설정 버튼 표시;
+   *
+   * @param isVisible
+   */
+  void setResetButtonVisible(boolean isVisible);
 }

+ 47 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/signup/SignUpPinPresenter.java

@@ -3,9 +3,15 @@
  */
 package kr.co.zumo.app.lifeplus.view.presenter.signup;
 
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Completable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.model.SignUpModel;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.command.FragmentChangeCommand;
@@ -24,6 +30,9 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 public class SignUpPinPresenter extends Presenter<SignUpModel, ISignUpPinView> {
 
   private String pin;
+  private int matchCount;
+
+  private CompositeDisposable disposable = new CompositeDisposable();
 
   public SignUpPinPresenter(SignUpModel model, ISignUpPinView view) {
     super(model, view);
@@ -51,7 +60,10 @@ public class SignUpPinPresenter extends Presenter<SignUpModel, ISignUpPinView> {
 
   @Override
   protected void destroyInternal() {
-
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
   }
 
   @Override
@@ -93,16 +105,43 @@ public class SignUpPinPresenter extends Presenter<SignUpModel, ISignUpPinView> {
         onEvent(new Event.Builder(Event.SUCCESS).build());
       }
       else {
-        // 일치 하지 않으면 저장소 초기화, 채팅 메세지 표시하고 입력창 다시 오픈
-        pin = null;
-
-        onPinStart();
-        view.restart();
+        // 일치 하지 않으면 5회 재시도 후
+        if (++matchCount < 5) {
+          view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
+          view.updateGuideText(String.format(ResourceUtil.getString(R.string.sign_up_register_pin_error), matchCount));
+          view.updateTitleText(R.string.sign_up_register_pin_title);
+          view.restart();
+        }
+        else {
+          /*
+           5회 이상 불일치 시 ‘간편암호가 5회이상 일치하지 않아, 입력값이 초기화됩니다.’ 밸리데이션 문구 1초간 노출
+          - 입력값 초기화된 상태로 STEP1로 변경
+           */
+          view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
+          view.updateGuideText(R.string.sign_up_register_pin_init);
+          view.updateTitleText(R.string.sign_up_register_pin_title);
+
+          view.setDisabled();
+          disposable.add(
+            Completable.timer(1000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
+            .subscribe(()-> {
+
+              pin = null;
+
+              onPinStart();
+              view.restart();
+
+            }, Throwable::printStackTrace)
+          );
+        }
       }
     }
     else {
+      // 처음 입력;
+      matchCount = 0;
       pin = result;
       view.setDisabled();
+      view.updateGuideTextColor(ResourceUtil.getColor(R.color.C999999));
       view.updateGuideText(R.string.sign_up_register_pin_again);
       view.updateTitleText(R.string.sign_up_register_pin_title);
       view.restart();
@@ -110,6 +149,8 @@ public class SignUpPinPresenter extends Presenter<SignUpModel, ISignUpPinView> {
   }
 
   private void onPinStart() {
+    view.setResetButtonVisible(false);
+    view.updateGuideTextColor(ResourceUtil.getColor(R.color.C999999));
     view.updateGuideText(R.string.sign_up_register_pin);
     view.updateTitleText(R.string.sign_up_register_pin_title);
   }

+ 2 - 2
app/src/main/res/color/button_state_color.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <!-- disabled state -->
-  <item android:color="#c5c5c5" android:state_enabled="false"/>
-  <item android:color="#000"/>
+  <item android:color="@color/CC5C5C5" android:state_enabled="false"/>
+  <item android:color="@color/C000000"/>
 </selector>

+ 11 - 2
app/src/main/res/layout/alert_dialog.xml

@@ -15,10 +15,19 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>
 
+  <Space
+    android:layout_width="match_parent"
+    android:layout_height="20dp"
+    />
+
   <Button
     android:id="@+id/button_confirm"
-    android:padding="20dp"
+    android:minWidth="80dp"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:text="@string/confirm"/>
+    android:background="@drawable/button_background"
+    android:padding="10dp"
+    android:text="@string/confirm"
+    android:textColor="@color/button_state_color"
+    android:textSize="12sp"/>
 </LinearLayout>

+ 2 - 1
app/src/main/res/values/colors.xml

@@ -8,6 +8,7 @@
   <color name="C000000">#000000</color>
   <color name="CF44336">#F44336</color>
   <color name="C999999">#999999</color>
-  <color name="Cf12815">#f12815</color>
+  <color name="CF12815">#f12815</color>
   <color name="C666666">#666666</color>
+  <color name="CC5C5C5">#c5c5c5</color>
 </resources>

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

@@ -91,6 +91,8 @@
 
   <string name="sign_up_password">Lifeplus에 사용할 간편 암호를 등록해주세요.</string>
   <string name="sign_up_register_pin">등록하실 간편암호 4자리를 입력해주세요.</string>
+  <string name="sign_up_register_pin_error">간편암호가 일치하지 않습니다. 다시 입력해주세요.(%d/5)</string>
+  <string name="sign_up_register_pin_init">간편암호가 5회이상 일치하지 않아, 입력값이 초기화됩니다.</string>
   <string name="sign_up_register_pin_title">간편암호 등록</string>
   <string name="sign_up_register_pin_again">확인을 위해 간편암호 4자리를 재입력해주세요.</string>
   <string name="sign_up_register_pin_again_title">간편암호 재확인</string>