瀏覽代碼

[콘텐츠상세][Common] 구매 예약 컨텐츠 url 공유시 코인 팝업 뜨게 수정

Hasemi 6 年之前
父節點
當前提交
cc47eda9e2

+ 37 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFromContentsModel.java

@@ -3,8 +3,18 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.web;
 
+import android.util.Log;
+
+import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsItemBean;
-import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.bean.api.ShareCoinRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.ShareCoinResultBean;
+import kr.co.zumo.app.lifeplus.model.CoinModel;
+import kr.co.zumo.app.lifeplus.model.module.APIError;
+import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
+import kr.co.zumo.app.lifeplus.model.module.APIShareCoinModule;
+import kr.co.zumo.app.lifeplus.tool.Share;
+import kr.co.zumo.app.lifeplus.view.Event;
 
 /**
  * WebFromContentsModel
@@ -16,10 +26,12 @@ import kr.co.zumo.app.lifeplus.model.Model;
  * @history 민효동   [2018. 12. 14.]   [최초 작성]
  * @since 2018. 12. 14.
  */
-public class WebFromContentsModel extends Model {
+public class WebFromContentsModel extends CoinModel {
+
   private String url;
   private int sharePageIndex;
   private ContentsItemBean shareContents;
+  private Disposable disposableGivenCoin;
 
   @Override
   protected void createViewInternal() {
@@ -89,6 +101,29 @@ public class WebFromContentsModel extends Model {
     this.sharePageIndex = sharePageIndex;
   }
 
+
+  public void loadShareCoin(@Share.Type String type) {
+    ShareCoinRequestBean requestBean = new ShareCoinRequestBean();
+    requestBean.setItemNo(getShareContents().getItemNo());
+    requestBean.setListItemNo(getShareContents().getListItemNo());
+    requestBean.setShareType(type);
+    disposableGivenCoin = new APIShareCoinModule().call(requestBean, new APIModuleListener<ShareCoinResultBean>() {
+      @Override
+      public void onApiSuccess(ShareCoinResultBean resultBean) {
+        if (null != resultBean.getData() && resultBean.getData().getIntCoin() > 0) {
+          setGivenCoin(resultBean.getData().getIntCoin());
+          Log.i("APP# WebFromContentsModel | onApiSuccess", "|" + " givenCoin: " + getGivenCoin());
+          onResult(new Event.Builder(Event.SUCCESS).integer(Event.COIN).build());
+        }
+      }
+
+      @Override
+      public void onApiError(String errorMessage, APIError error) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.COIN).string(errorMessage).build());
+      }
+    });
+  }
+
   public void setShareContents(ContentsItemBean shareContents) {
     this.shareContents = shareContents;
   }

+ 38 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFromContentsPresenter.java

@@ -4,6 +4,7 @@
 package kr.co.zumo.app.lifeplus.view.screen.web;
 
 import android.support.annotation.Nullable;
+import android.util.Log;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
@@ -17,6 +18,7 @@ import kr.co.zumo.app.lifeplus.tool.ShareFacebook;
 import kr.co.zumo.app.lifeplus.tool.ShareKakaoTalk;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 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.ToastProvider;
 import kr.co.zumo.app.lifeplus.view.command.EmailSendingCommand;
@@ -26,6 +28,7 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
 import kr.co.zumo.app.lifeplus.view.dialog.ICustomDialogListener;
 import kr.co.zumo.app.lifeplus.view.dialog.ShareDialog;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+import kr.co.zumo.app.lifeplus.view.screen.common.CoinPopupDriver;
 
 /**
  * WebFromContentsPresenter
@@ -38,7 +41,9 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  * @since 2018. 12. 14.
  */
 public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IWebFromContentsView> {
+
   protected Share share;
+  protected DoubleChecker coinChecker = null;
 
   public WebFromContentsPresenter(WebFromContentsModel model, IWebFromContentsView view) {
     super(model, view);
@@ -80,7 +85,10 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
 
   @Override
   protected void resumeInternal() {
-
+    // 코인 표시가 필요할 경우
+    if (null != coinChecker) {
+      coinChecker.checkSecond();
+    }
   }
 
   @Override
@@ -126,7 +134,9 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
 
   @Override
   public void onResult(Event event) {
-
+    if (event.getInteger() == Event.COIN) {
+      coinChecker.checkFirst();
+    }
   }
 
   /**
@@ -187,6 +197,7 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
       @Override
       public void onSuccess(String result) {
+        loadShareCoin(Share.TYPE_KAKAO);
       }
 
       @Override
@@ -206,6 +217,7 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
       @Override
       public void onSuccess(String result) {
+        loadShareCoin(Share.TYPE_FACEBOOK);
         showShareToast("", ResourceUtil.getString(R.string.share_completed_message), 1);
       }
 
@@ -222,6 +234,9 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
       @Override
       public void onSuccess(String result) {
+        loadShareCoin(Share.TYPE_URL);
+        resumeInternal();
+
         showShareToast("", ResourceUtil.getString(R.string.url_copy_message), 1);
       }
 
@@ -234,6 +249,7 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
 
 
   protected void sendEmail() {
+    loadShareCoin(Share.TYPE_EMAIL);
 
     share = new ShareEmail(view.getActivity());
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
@@ -253,6 +269,26 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     });
   }
 
+  private void loadShareCoin(@Share.Type String type) {
+
+    Log.e("APP#  WebFromContentsPresenter | loadShareCoin", "|" + "loadhShareCoin");
+    // 더블 체커 세팅
+    coinChecker = new DoubleChecker(() -> {
+      coinChecker = null;
+
+      // 보유 코인 우선 로딩 -> 코인 적립을 먼저하면 이전 값과 더한 값의 차이가 있을 수 있다.
+      model.getCoinAsync(e -> {
+        Log.i("APP# WebFromContentsPresenter | onResult", "|" + " current coin: " + e.getInteger());
+        new CoinPopupDriver(getFragmentManager(), () -> {}, () -> {})
+          .show(model.getPrevCoin(), model.getGivenCoin(), R.string.coin_share_contents);
+
+        model.mergeCoin();
+      });
+    });
+
+    model.loadShareCoin(type);
+  }
+
   protected void showShareToast(String title, String detail, @Nullable int copyToastFlag) {
     ToastProvider.showShare(title, detail, copyToastFlag);
   }