Browse Source

[공통][Common] 핀 관련 리팩토링

hyodong.min 6 years ago
parent
commit
c62e15e1a8

+ 5 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/model/LifeplusPreferences.java

@@ -39,7 +39,7 @@ public class LifeplusPreferences {
   public final static String PROMOTION_SKIP_TIME = "current_time_millis";
   public final static String TAG_LATEST_LIST = "tag_latest_list";
   public final static String PUSH_MESSAGES = "push_messages";
-  public final static String PIN_COUNT = "pin_count";
+  public final static String PIN_FAIL_COUNT = "pin_fail_count";
 
 
   /**
@@ -334,13 +334,13 @@ public class LifeplusPreferences {
   }
 
   /**
-   * Pin count 저장
+   * Pin 실패 count 저장
    *
    * @return
    */
-  public void setPinCount(int count) {
-    preferences.put(PIN_COUNT, count);
+  public void setPinFailCount(int count) {
+    preferences.put(PIN_FAIL_COUNT, count);
   }
 
-  public int getPinCount() {return preferences.get(PIN_COUNT, 0);}
+  public int setPinFailCount() {return preferences.get(PIN_FAIL_COUNT, 0);}
 }

+ 0 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/SuperModel.java

@@ -259,7 +259,6 @@ public final class SuperModel implements IMemberStatusManager {
    * @param encryptedPin 암호화된 핀
    */
   public void saveEncryptedPin(String encryptedPin) {
-    SuperModel.getInstance().getPreferences().setPinCount(0);
     getPreferences().setEncryptedPin(encryptedPin);
   }
 

+ 21 - 13
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/pin/CustomPinPresenter.java

@@ -9,7 +9,6 @@ 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.LifeplusPreferences;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 
@@ -27,7 +26,6 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
 
   protected IPinContract.View view;
   protected IPinContract.Listener listener;
-  protected LifeplusPreferences lifeplusPreferences;
   protected String pin;
   protected int matchCount;
   protected CompositeDisposable disposable = new CompositeDisposable();
@@ -35,7 +33,6 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
   public CustomPinPresenter(IPinContract.View view, IPinContract.Listener listener) {
     this.view = view;
     this.listener = listener;
-    this.lifeplusPreferences = SuperModel.getInstance().getPreferences();
   }
 
   /**
@@ -102,7 +99,8 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
     view.updateGuideText(getGuideStringId());
     view.updateTitleText(getTitleStringId());
     view.restart();
-    matchCount = getPinCount();
+
+    matchCount = getPinFailCount();
     if (matchCount > 0) {
       --matchCount;
       retry();
@@ -112,6 +110,10 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
   @Override
   public final void onPinResult(String result) {
     view.setDisabled();
+    onPinResultInternal(result);
+  }
+
+  protected void onPinResultInternal(String result) {
     listener.onPinResult(result);
   }
 
@@ -127,19 +129,23 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
 
   @Override
   public final void retry() {
+    retryInternal();
+  }
+
+  protected void retryInternal() {
     // 일치 하지 않으면 5회 재시도 후
     if (++matchCount < 5) {
+      setPinFailCount(matchCount);
       view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
       view.updateGuideText(String.format(ResourceUtil.getString(R.string.pin_miss_match_error_repeat), matchCount));
       view.restart();
-      setPinCount(matchCount);
     }
     else {
+      setPinFailCount(matchCount);
           /*
            5회 이상 불일치 시 ‘간편암호가 5회이상 일치하지 않아, 입력값이 초기화됩니다.’ 밸리데이션 문구 1초간 노출
           - 입력값 초기화된 상태로 STEP1로 변경
            */
-      setPinCount(matchCount);
       view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
       view.updateGuideText(getFailGuideStringId());
 
@@ -154,7 +160,6 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
           }, Throwable::printStackTrace)
       );
     }
-
   }
 
   @Override
@@ -162,6 +167,11 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
     listener.onPinHelp();
   }
 
+  @Override
+  public final void resetPinFailCount() {
+    setPinFailCount(0);
+  }
+
   @Override
   public final void dispose() {
     if (null != disposable) {
@@ -170,13 +180,11 @@ public abstract class CustomPinPresenter implements IPinContract.Presenter {
     }
   }
 
-  @Override
-  public void setPinCount(int count) {
-    SuperModel.getInstance().getPreferences().setPinCount(count);
+  void setPinFailCount(int count) {
+    SuperModel.getInstance().getPreferences().setPinFailCount(count);
   }
 
-  @Override
-  public int getPinCount() {
-    return SuperModel.getInstance().getPreferences().getPinCount();
+  private int getPinFailCount() {
+    return SuperModel.getInstance().getPreferences().setPinFailCount();
   }
 }

+ 42 - 94
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/pin/CustomPinRegisterPresenter.java

@@ -3,13 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.custom.pin;
 
-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.SuperModel;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 
@@ -23,124 +17,78 @@ import kr.co.zumo.app.lifeplus.util.StringUtil;
  * @history 민효동   [2018-10-04]   [최초 작성]
  * @since 2018-10-04
  */
-public class CustomPinRegisterPresenter implements IPinContract.Presenter {
-
-  private IPinContract.View view;
-  private IPinContract.Listener listener;
-
-  private String pin;
-  private int matchCount;
-  private CompositeDisposable disposable = new CompositeDisposable();
-
+public class CustomPinRegisterPresenter extends CustomPinPresenter {
 
   public CustomPinRegisterPresenter(IPinContract.View view, IPinContract.Listener listener) {
-    this.view = view;
-    this.listener = listener;
-
+    super(view, listener);
   }
 
   @Override
-  public void start() {
-    this.view.setPresenter(this);
+  protected final boolean isCloseButtonVisible() {
+    return false;
   }
 
   @Override
-  public void onPinStart() {
-    view.setCloseButtonVisible(false);
-    view.setResetButtonVisible(false);
-    view.setHelpButtonVisible(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);
-    view.restart();
+  protected final boolean isHelpButtonVisible() {
+    return false;
   }
 
   @Override
-  public void onPinResult(String result) {
-    if (StringUtil.isFull(pin)) {
-      // 두 번째 등록
-      view.setDisabled();
-      // 일치하는지 확인
-      if (pin.length() == 4 && pin.equals(result)) {
-        // 일치 하면 모델에 저장
-        setPinCount(0);
-        listener.onPinResult(pin);
-      }
-      else {
-        // 일치 하지 않으면 5회 재시도 후
-        if (++matchCount  < 5) {
-          view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
-          view.updateGuideText(String.format(ResourceUtil.getString(R.string.pin_miss_match_error_repeat), matchCount));
-          view.restart();
-          setPinCount(matchCount);
-        }
-        else {
-          /*
-           5회 이상 불일치 시 ‘간편암호가 5회이상 일치하지 않아, 입력값이 초기화됩니다.’ 밸리데이션 문구 1초간 노출
-          - 입력값 초기화된 상태로 STEP1로 변경
-           */
-          setPinCount(matchCount);
-          view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
-          view.updateGuideText(R.string.pin_miss_match_init);
-
-          view.setDisabled();
-          disposable.add(
-            Completable.timer(1000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
-              .subscribe(() -> {
-                pin = null;
-                listener.onPinFail();
-
-              }, 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.restart();
-    }
+  protected final boolean isResetButtonVisible() {
+    return false;
   }
 
   @Override
-  public void onClickPinReset() {
-
+  protected final int getFailGuideStringId() {
+    return R.string.pin_miss_match_init;
   }
 
   @Override
-  public void onClickClose() {
-
+  protected final int getGuideStringId() {
+    return R.string.sign_up_register_pin;
   }
 
   @Override
-  public void retry() {
-
+  protected int getTitleStringId() {
+    return R.string.sign_up_register_pin_title;
   }
 
   @Override
-  public void onClickHelp() {
-    listener.onPinHelp();
+  protected final int getGuideTextColorId() {
+    return R.color.C999999;
   }
 
   @Override
-  public void dispose() {
-    if (null != disposable) {
-      disposable.dispose();
-      disposable = null;
-    }
+  protected final void retryInternal() {
+    // nothing
   }
 
-  @Override
-  public void setPinCount(int count) {
-    SuperModel.getInstance().getPreferences().setPinCount(count);
+  protected int getGuideRepeatStringId() {
+    return R.string.sign_up_register_pin_again;
   }
 
   @Override
-  public int getPinCount() {
-    return SuperModel.getInstance().getPreferences().getPinCount();
+  protected final void onPinResultInternal(String result) {
+    view.setDisabled();
+    if (StringUtil.isFull(pin)) {
+      // 두 번째 등록
+      // 일치하는지 확인
+      if (pin.length() == 4 && pin.equals(result)) {
+        // 일치 하면 모델에 저장
+        setPinFailCount(0);
+        listener.onPinResult(pin);
+      }
+      else {
+        super.retryInternal();
+      }
+    }
+    else {
+      // 처음 입력;
+      matchCount = 0;
+      pin = result;
+      view.updateGuideTextColor(ResourceUtil.getColor(R.color.C999999));
+      view.updateGuideText(getGuideRepeatStringId());
+      view.restart();
+    }
   }
 }

+ 6 - 116
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/pin/CustomPinResetPresenter.java

@@ -3,14 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.custom.pin;
 
-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.util.ResourceUtil;
-import kr.co.zumo.app.lifeplus.util.StringUtil;
 
 /**
  * CustomPinResetPresenter
@@ -22,121 +15,18 @@ import kr.co.zumo.app.lifeplus.util.StringUtil;
  * @history 민효동   [2018-10-04]   [최초 작성]
  * @since 2018-10-04
  */
-public class CustomPinResetPresenter implements IPinContract.Presenter {
-
-  private IPinContract.View view;
-  private IPinContract.Listener listener;
-
-  private String pin;
-  private int matchCount;
-  private CompositeDisposable disposable = new CompositeDisposable();
+public class CustomPinResetPresenter extends CustomPinRegisterPresenter {
 
   public CustomPinResetPresenter(IPinContract.View view, IPinContract.Listener listener) {
-    this.view = view;
-    this.listener = listener;
-  }
-
-  @Override
-  public void start() {
-    this.view.setPresenter(this);
-  }
-
-  @Override
-  public void onPinStart() {
-    view.setResetButtonVisible(false);
-    view.updateGuideTextColor(ResourceUtil.getColor(R.color.C999999));
-    view.updateGuideText(R.string.pin_code_reset_message);
-    view.updateTitleText(R.string.pin_code_reset);
-    view.restart();
-    view.setCloseButtonVisible(false);
-    view.setHelpButtonVisible(false);
-
-  }
-
-  @Override
-  public void onPinResult(String result) {
-    if (StringUtil.isFull(pin)) {
-      // 두 번째 등록
-      view.setDisabled();
-      // 일치하는지 확인
-      if (pin.length() == 4 && pin.equals(result)) {
-        // 일치 결과 전달
-        listener.onPinResult(pin);
-      }
-      else {
-        // 일치 하지 않으면 5회 재시도 후
-        if (++matchCount < 5) {
-          view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
-          view.updateGuideText(String.format(ResourceUtil.getString(R.string.pin_miss_match_error_repeat), matchCount));
-          view.restart();
-        }
-        else {
-          /*
-           5회 이상 불일치 시 ‘간편암호가 5회이상 일치하지 않아, 입력값이 초기화됩니다.’ 밸리데이션 문구 1초간 노출
-          - 입력값 초기화된 상태로 STEP1로 변경
-           */
-          view.updateGuideTextColor(ResourceUtil.getColor(R.color.CF12815));
-          view.updateGuideText(R.string.pin_miss_match_init);
-
-          view.setDisabled();
-          disposable.add(
-            Completable.timer(1000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
-              .subscribe(() -> {
-
-                pin = null;
-                listener.onPinFail();
-
-              }, Throwable::printStackTrace)
-          );
-        }
-      }
-    }
-    else {
-      // 처음 입력;
-      matchCount = 0;
-      pin = result;
-      view.setDisabled();
-      view.updateGuideTextColor(ResourceUtil.getColor(R.color.C999999));
-      view.updateGuideText(R.string.pin_code_again_message);
-      view.restart();
-    }
-  }
-
-  @Override
-  public void onClickPinReset() {
-    listener.onClickPinReset();
-  }
-
-  @Override
-  public void onClickClose() {
-    listener.onClickClose();
-  }
-
-  @Override
-  public void retry() {
-
+    super(view, listener);
   }
 
   @Override
-  public void onClickHelp() {
-    listener.onPinHelp();
+  protected int getTitleStringId() {
+    return R.string.pin_code_reset;
   }
 
-  @Override
-  public void dispose() {
-    if (null != disposable) {
-      disposable.dispose();
-      disposable = null;
-    }
-  }
-
-  @Override
-  public void setPinCount(int i) {
-
-  }
-
-  @Override
-  public int getPinCount() {
-    return 0;
+  protected int getGuideRepeatStringId() {
+    return R.string.pin_code_again_message;
   }
 }

+ 4 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/pin/IPinContract.java

@@ -130,9 +130,10 @@ public interface IPinContract {
 
     void dispose();
 
-    void setPinCount(int i);
-
-    int getPinCount();
+    /**
+     * 핀 입력 오류 수를 리셋
+     */
+    void resetPinFailCount();
   }
 
   interface Listener {

+ 6 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/PinConfirmDialog.java

@@ -136,8 +136,11 @@ public class PinConfirmDialog extends DialogBase<ICustomDialogListener<PinConfir
     isResetButtonVisible = isVisible;
   }
 
-  public void resetPinCount() {
-    Log.e("APP#  PinConfirmDialog | resetPinCount", "|" + "resetPinCount");
-    pinPresenter.setPinCount(0);
+  /**
+   * 핀 입력 오류 수 초기화
+   */
+  public void resetPinFailCount() {
+    Log.e("APP#  PinConfirmDialog | resetPinFailCount", "|" + "resetPinFailCount");
+    pinPresenter.resetPinFailCount();
   }
 }

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -438,7 +438,7 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
             case Event.CONFIRM:
               String inputPin = event.getString();
               if (model.verifyPin(inputPin)) {
-                dialog.resetPinCount();
+                dialog.resetPinFailCount();
                 dialog.dispose();
                 doAfterConfirm.run();
 

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/pin/IMainPinUnlockView.java

@@ -20,4 +20,6 @@ public interface IMainPinUnlockView extends IView {
    * 핀 입력 재시도
    */
   void retry();
+
+  void resetPinFailCount();
 }

+ 5 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/pin/MainPinUnlockFragment.java

@@ -103,6 +103,11 @@ public class MainPinUnlockFragment extends FragmentBase<MainPinUnlockPresenter>
     pinPresenter.retry();
   }
 
+  @Override
+  public void resetPinFailCount() {
+    pinPresenter.resetPinFailCount();
+  }
+
   @Override
   protected void onAfterDestroyView() {
 

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/pin/MainPinUnlockPresenter.java

@@ -116,6 +116,7 @@ public class MainPinUnlockPresenter extends Presenter<MainPinUnlockModel, IMainP
 
     if (result) {
       // 저장된 핀 번호와 일치 함
+      view.resetPinFailCount();
       model.setUnlocked();
       home();
     }

File diff suppressed because it is too large
+ 33 - 0
app/src/sandbox/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java