Browse Source

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

hyodong.min 7 năm trước cách đây
mục cha
commit
e87cf4f831

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

@@ -297,7 +297,12 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   }
 
   protected FragmentManager getFragmentManager() {
-    return view.getActivity().getSupportFragmentManager();
+    try {
+      return view.getActivity().getSupportFragmentManager();
+    } catch (Exception e) {
+      Log.e("APP#  Presenter | getFragmentManager", "|" + e.getLocalizedMessage());
+      return null;
+    }
   }
 
   /***********************************

+ 25 - 12
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/common/CoinPopupDriver.java

@@ -1,10 +1,14 @@
 package kr.co.zumo.app.lifeplus.view.screen.common;
 
 
-import android.os.Handler;
 import android.support.annotation.StringRes;
 import android.support.v4.app.FragmentManager;
 
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Completable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
 import kr.co.zumo.app.lifeplus.view.dialog.CoinSavingDialog;
@@ -27,6 +31,7 @@ public class CoinPopupDriver {
   private FragmentManager fragmentManager;
   private CoinSavingDialog dialog;
   private IEventListener listener;
+  private Disposable disposable;
 
   public CoinPopupDriver(FragmentManager fragmentManager, IEventListener listener) {
     this.fragmentManager = fragmentManager;
@@ -43,8 +48,7 @@ public class CoinPopupDriver {
 
         @Override
         public void onDialogCanceled(CoinSavingDialog dialog) {
-          dialog.dispose();
-
+          cancel();
         }
       })
       .attribute(dialog -> {
@@ -52,18 +56,27 @@ public class CoinPopupDriver {
       })
       .show();
 
-    new Handler().postDelayed(new Runnable() {
-      @Override
-      public void run() {
-        dialog.dispose();
-        if (dialog.isDismissed()) {
-          listener.onEvent(new Event.Builder(Event.EXIT).build());
+    disposable = Completable.timer(4000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
+      .subscribe(() -> {
+        listener.onEvent(new Event.Builder(Event.EXIT).build());
+        hideDialog();
+      }, Throwable::printStackTrace);
 
-        }
-      }
-    }, 4000);
+  }
 
+  public void cancel() {
+    hideDialog();
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
+  }
 
+  private void hideDialog() {
+    if (null != dialog) {
+      dialog.dispose();
+      dialog = null;
+    }
   }
 
 }

+ 2 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/code/SettingCodeFragment.java

@@ -162,11 +162,12 @@ public class SettingCodeFragment extends FragmentBase<SettingCodePresenter> impl
     editSpecial0.setEnabled(isEnabled);
     editSpecial1.setEnabled(isEnabled);
     editSpecial2.setEnabled(isEnabled);
-//    editRecommend.setEnabled(isEnabled);
+    editRecommend.setEnabled(isEnabled);
     textSpecialValidation.setEnabled(isEnabled);
     textRecommendValidation.setEnabled(isEnabled);
     textSpecialLabel.setEnabled(isEnabled);
     buttonRegistering.setEnabled(isEnabled);
+
   }
 
   @Override

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

@@ -50,6 +50,7 @@ public class SettingCodeModel extends Model {
   private int recommendCodeLength = 5;
 
   private int givenCoin;
+  private boolean isRegistered = false;
 
   public SettingCodeModel() {
   }
@@ -282,6 +283,7 @@ public class SettingCodeModel extends Model {
       @Override
       public void onApiSuccess(MemberCodeResultBean resultBean) {
         CodeBean codeBean = resultBean.getData();
+        isRegistered = true;
 
         if (null != codeBean) {
           SettingModelHelper.getInstance().setRecommendName(codeBean.getRecommendName());
@@ -384,4 +386,8 @@ public class SettingCodeModel extends Model {
     }
     return result;
   }
+
+  public boolean isRegistered() {
+    return isRegistered;
+  }
 }

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

@@ -5,6 +5,8 @@ package kr.co.zumo.app.lifeplus.view.screen.setting.code;
 
 import android.util.Log;
 
+import java.util.Arrays;
+
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.model.verify.Verifier;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
@@ -105,7 +107,6 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
             Log.i("APP# ContentsBasePresenter | onResult", "|" + " current coin: " + e.getInteger());
             showCoin();
           });
-          onBackPressed();
         }
         else if (resultIndex == Event.CODE_INVALID_SPECIAL_CODE) {
           onInvalidCode(Event.CODE_INVALID_SPECIAL_CODE);
@@ -125,6 +126,10 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
 
   private void showCoin() {
     boolean[] codeResult = model.getCodeResult();
+    int currentCoin = Integer.parseInt(model.getCoin());
+    int givenCoin = model.getGivenCoin();
+
+    Log.i("APP# SettingCodePresenter | showCoin", "|" + Arrays.toString(codeResult));
 
     // 스페셜 코드우선 표시
     if (codeResult[SettingCodeModel.CODE_SPECIAL_RESULT_INDEX]) {
@@ -132,23 +137,28 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
       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);
+          showRecommendCoin(currentCoin, givenCoin);
+        }
+        else {
+          onBackPressed();
         }
       }).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);
+      showRecommendCoin(currentCoin, givenCoin);
     }
 
     model.mergeCoin();
   }
 
+  private void showRecommendCoin(int currentCoin, int givenCoin) {
+    new CoinPopupDriver(getFragmentManager(), evt2 -> {
+      onBackPressed();
+    }).show(currentCoin, givenCoin, R.string.coin_recommend_code_completed);
+  }
+
   private void onInvalidCode(int resultIndex) {
     if (resultIndex == Event.CODE_INVALID_SPECIAL_CODE) {
       view.setValidationSpecialCode(ResourceUtil.getString(R.string.special_code_error));
@@ -231,7 +241,7 @@ public class SettingCodePresenter extends Presenter<SettingCodeModel, ISettingCo
     boolean hasSpecialCode = verifySpecialCode(false);
     boolean hasRecommendCode = verifyRecommendCode(false);
     // 스페셜 코드 검증은 '등록' 버튼을 누를 때만 한다.
-    if (hasSpecialCode || hasRecommendCode) {
+    if (hasSpecialCode || hasRecommendCode || model.isRegistered() == false) {
       view.setRegisteringButtonEnabled(true);
     }
     else {