소스 검색

[설정][New] 스페셜/추천인 코드 입력 시 코인 팝업 표시

hyodong.min 7 년 전
부모
커밋
cf836cca47

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/Event.java

@@ -198,6 +198,8 @@ public class Event {
   public static final int TAG_AUTO_COMPLETION = 1041;
   public static final int SEARCH_TAG = 1042;
   public static final int SEARCH_TAG_CATEGORY = 1043;
+  public static final int CODE_REGISTER_SPECIAL_CODE = 1044;
+  public static final int CODE_REGISTER_RECOMMEND_CODE = 1045;
 
   // boolean
   public static final String TRUE = "TRUE";

+ 4 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsBaseModel.java

@@ -306,6 +306,7 @@ public abstract class ContentsBaseModel extends Model {
     });
   }
 
+  // coin --------------------------------------
   public int getGivenCoin() {
     return givenCoin;
   }
@@ -314,12 +315,13 @@ public abstract class ContentsBaseModel extends Model {
     return CoinModelHelper.getInstance().getCoin();
   }
 
-  public void getCoin(IEventListener listener) {
-    CoinModelHelper.getInstance().getCoin(listener);
+  public void getCoinAsync(IEventListener listener) {
+    CoinModelHelper.getInstance().getCoinAsync(listener);
   }
 
   public void mergeCoin() {
     CoinModelHelper.getInstance().addCoin(givenCoin);
     givenCoin = 0;
   }
+  // coin --------------------------------------
 }

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsBasePresenter.java

@@ -167,7 +167,7 @@ public abstract class ContentsBasePresenter<M extends ContentsBaseModel, V exten
   protected void loadShareCoin(@Share.Type String type) {
     coinChecker = new DoubleChecker(this::showCoin);
     // 보유 코인 우선 로딩 -> 코인 적립을 먼저하면 이전 값과 더한 값의 차이가 있을 수 있다.
-    model.getCoin(e -> {
+    model.getCoinAsync(e -> {
       Log.i("APP# ContentsBasePresenter | onResult", "|" + " current coin: " + e.getInteger());
       model.loadShareCoin(type);
     });

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/coin/CoinModelHelper.java

@@ -100,7 +100,7 @@ public class CoinModelHelper {
    *
    * @param listener
    */
-  public void getCoin(IEventListener listener) {
+  public void getCoinAsync(IEventListener listener) {
     if (StringUtil.isFull(coin) && Integer.parseInt(coin) > 0) {
       listener.onEvent(new Event.Builder(Event.SUCCESS).integer(Integer.parseInt(coin)).build());
     }

+ 40 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/code/SettingCodeModel.java

@@ -19,6 +19,8 @@ import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleSimpleListener;
 import kr.co.zumo.app.lifeplus.model.verify.Verifier;
 import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.IEventListener;
+import kr.co.zumo.app.lifeplus.view.screen.my.coin.CoinModelHelper;
 import kr.co.zumo.app.lifeplus.view.screen.setting.MemberInfoModelHelper;
 import kr.co.zumo.app.lifeplus.view.screen.setting.SettingModelHelper;
 
@@ -47,6 +49,8 @@ public class SettingCodeModel extends Model {
   private int specialCodeLength = 12;
   private int recommendCodeLength = 5;
 
+  private int givenCoin;
+
   public SettingCodeModel() {
   }
 
@@ -233,6 +237,39 @@ public class SettingCodeModel extends Model {
     disposeObservable();
   }
 
+  // coin --------------------------------------
+  public int getGivenCoin() {
+    return givenCoin;
+  }
+
+  public String getCoin() {
+    return CoinModelHelper.getInstance().getCoin();
+  }
+
+  public void getCoinAsync(IEventListener listener) {
+    CoinModelHelper.getInstance().getCoinAsync(listener);
+  }
+
+  public void mergeCoin() {
+    CoinModelHelper.getInstance().addCoin(givenCoin);
+    givenCoin = 0;
+  }
+  // coin --------------------------------------
+
+  public static final int CODE_SPECIAL_RESULT_INDEX = 0;
+  public static final int CODE_RECOMMEND_RESULT_INDEX = 1;
+
+  private boolean[] codeResult = new boolean[]{false, false};
+
+  /**
+   * 코드 등록 결과 반환
+   *
+   * @return
+   */
+  public boolean[] getCodeResult() {
+    return codeResult;
+  }
+
   /**
    * 코드 등록
    */
@@ -250,14 +287,17 @@ public class SettingCodeModel extends Model {
           SettingModelHelper.getInstance().setRecommendName(codeBean.getRecommendName());
           SettingModelHelper.getInstance().setSpecialCodeType(codeBean.getSpecialCodeType());
           SettingModelHelper.getInstance().setIncreasedCoin(codeBean.getIntCoin());
+          givenCoin = codeBean.getIntCoin();
         }
 
         if (Verifier.isOk(verifySpecialCodeInternal(specialCode))) {
           SettingModelHelper.getInstance().setSpecialCode(specialCode);
+          codeResult[CODE_SPECIAL_RESULT_INDEX] = true;
         }
 
         if (Verifier.isOk(verifyRecommendCodeInternal(recommendCode))) {
           SettingModelHelper.getInstance().setRecommendCode(recommendCode);
+          codeResult[CODE_RECOMMEND_RESULT_INDEX] = true;
         }
 
         onResult(new Event.Builder(Event.RESULT).integer(Event.CODE_REGISTER).build());

+ 38 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/code/SettingCodePresenter.java

@@ -3,6 +3,8 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.setting.code;
 
+import android.util.Log;
+
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.model.verify.Verifier;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
@@ -11,6 +13,7 @@ import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+import kr.co.zumo.app.lifeplus.view.screen.common.CoinPopupDriver;
 
 /**
  * SettingCodePresenter
@@ -37,6 +40,7 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
   @Override
   protected void createViewInternal() {
   }
+
   @Override
   protected void destroyInternal() {
     model.stopLoading();
@@ -94,6 +98,13 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
           doubleChecker.checkSecond();
         }
         else if (resultIndex == Event.CODE_REGISTER) {
+          // 코드 등록 완료
+          // 지급된 코인 있으면 팝업 표시
+          // 보유 코인 우선 로딩 -> 코인 적립을 먼저하면 이전 값과 더한 값의 차이가 있을 수 있다.
+          model.getCoinAsync(e -> {
+            Log.i("APP# ContentsBasePresenter | onResult", "|" + " current coin: " + e.getInteger());
+            showCoin();
+          });
           onBackPressed();
         }
         else if (resultIndex == Event.CODE_INVALID_SPECIAL_CODE) {
@@ -111,6 +122,33 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
     }
   }
 
+
+  private void showCoin() {
+    boolean[] codeResult = model.getCodeResult();
+
+    // 스페셜 코드우선 표시
+    if (codeResult[SettingCodeModel.CODE_SPECIAL_RESULT_INDEX]) {
+
+      new CoinPopupDriver(getFragmentManager(), evt -> {
+        // 완료 뒤 추천 코드 있으면 표시
+        if (codeResult[SettingCodeModel.CODE_RECOMMEND_RESULT_INDEX]) {
+          new CoinPopupDriver(getFragmentManager(), evt2 -> {
+            // nothing
+          }).show(Integer.parseInt(model.getCoin()), model.getGivenCoin(), R.string.coin_recommend_code_completed);
+        }
+      }).show(Integer.parseInt(model.getCoin()), model.getGivenCoin(), R.string.coin_special_code_completed);
+
+    }
+    else if (codeResult[SettingCodeModel.CODE_RECOMMEND_RESULT_INDEX]) {
+      // 추천 코드 있으면 표시
+      new CoinPopupDriver(getFragmentManager(), evt -> {
+        // nothing
+      }).show(Integer.parseInt(model.getCoin()), model.getGivenCoin(), R.string.coin_recommend_code_completed);
+    }
+
+    model.mergeCoin();
+  }
+
   private void onInvalidCode(int resultIndex) {
     if (resultIndex == Event.CODE_INVALID_SPECIAL_CODE) {
       view.setValidationSpecialCode(ResourceUtil.getString(R.string.special_code_error));