|
|
@@ -0,0 +1,318 @@
|
|
|
+/*
|
|
|
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
|
|
|
+ */
|
|
|
+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.EventWebDeliveryBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.ShareCoinResultBean;
|
|
|
+import kr.co.zumo.app.lifeplus.helper.FacebookHelper;
|
|
|
+import kr.co.zumo.app.lifeplus.helper.NavigationBar;
|
|
|
+import kr.co.zumo.app.lifeplus.model.module.APIError;
|
|
|
+import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
|
|
|
+import kr.co.zumo.app.lifeplus.tool.IShareListener;
|
|
|
+import kr.co.zumo.app.lifeplus.tool.Share;
|
|
|
+import kr.co.zumo.app.lifeplus.tool.ShareClipBoard;
|
|
|
+import kr.co.zumo.app.lifeplus.tool.ShareEmail;
|
|
|
+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.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;
|
|
|
+import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
|
|
|
+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
|
|
|
+ * <pre>
|
|
|
+ * </pre>
|
|
|
+ *
|
|
|
+ * @author 민효동
|
|
|
+ * @version 1.0
|
|
|
+ * @history 민효동 [2018. 12. 14.] [최초 작성]
|
|
|
+ * @since 2018. 12. 14.
|
|
|
+ */
|
|
|
+public class WebFromEventPresenter extends Presenter<WebFromEventModel, IWebFromContentsView> {
|
|
|
+
|
|
|
+ public WebFromEventPresenter(WebFromEventModel model, IWebFromContentsView view) {
|
|
|
+ super(model, view);
|
|
|
+
|
|
|
+ EventWebDeliveryBean targetUrl = model.getDeliveryPackaging(EventWebDeliveryBean.class);
|
|
|
+ model.setUrl(targetUrl.getWebUrl());
|
|
|
+ model.setDeliveredEventDetailBean(targetUrl.getEventDetailBean());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void createViewInternal() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void destroyInternal() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void destroyViewInternal() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void startInternal() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void startInternalOnce() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void stopInternal() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void resumeInternal() {
|
|
|
+ // 코인 표시가 필요할 경우
|
|
|
+ if (null != coinChecker) {
|
|
|
+ coinChecker.checkSecond();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void pauseInternal() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onEventInternal(Event event) {
|
|
|
+ switch (event.getEventId()) {
|
|
|
+ case Event.PREV:
|
|
|
+ view.onClickPrev();
|
|
|
+ break;
|
|
|
+ case Event.NEXT:
|
|
|
+ view.onClickNext();
|
|
|
+ break;
|
|
|
+ case Event.REFRESH:
|
|
|
+ view.onClickRefresh();
|
|
|
+ break;
|
|
|
+ case Event.SHARE:
|
|
|
+ showShareDialog();
|
|
|
+ break;
|
|
|
+ case Event.COMPLETED:
|
|
|
+ hideWaiter();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onScreenReady() {
|
|
|
+
|
|
|
+ showWaiter();
|
|
|
+
|
|
|
+ view.loadUrl(model.getUrl());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onResult(Event event) {
|
|
|
+ if (event.getInteger() == Event.COIN) {
|
|
|
+ coinChecker.checkFirst();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 닫기 클릭
|
|
|
+ *
|
|
|
+ * @param navigationBar
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ public void onNavigationClickClose(NavigationBar navigationBar) {
|
|
|
+ onBackPressed();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /***********************************
|
|
|
+ * Share
|
|
|
+ ***********************************/
|
|
|
+
|
|
|
+ protected void showShareDialog() {
|
|
|
+ new DialogBuilder<ShareDialog, ICustomDialogListener>(getFragmentManager(), DialogID.SHARE)
|
|
|
+ .listener(new ICustomDialogListener<ShareDialog>() {
|
|
|
+ @Override
|
|
|
+ public void onDialogResult(ShareDialog dialog, Event event) {
|
|
|
+ dialog.dispose();
|
|
|
+ switch (event.getEventId()) {
|
|
|
+ case Event.CLOSE:
|
|
|
+ break;
|
|
|
+ case Event.KAKAO_TALK:
|
|
|
+ sendKakaoLink();
|
|
|
+ break;
|
|
|
+ case Event.FACE_BOOK:
|
|
|
+ sendFaceBook();
|
|
|
+ break;
|
|
|
+ case Event.CODE_COPY:
|
|
|
+ sendClipBoardCopy();
|
|
|
+ break;
|
|
|
+ case Event.EMAIL_CLICK:
|
|
|
+ sendEmail();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onDialogCanceled(ShareDialog dialog) {
|
|
|
+ dialog.dispose();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .attribute(dialog -> {
|
|
|
+ dialog.setDialogType(ShareDialog.TYPE_PAGE_TOTAL);
|
|
|
+ })
|
|
|
+ .show();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void sendKakaoLink() {
|
|
|
+ share = new ShareKakaoTalk(view.getActivity());
|
|
|
+ share.shareEvent(model.getDeliveredEventDetailBean(), new IShareListener() {
|
|
|
+ @Override
|
|
|
+ public void onSuccess(String result) {
|
|
|
+ loadShareCoin(Share.TYPE_KAKAO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(int errorCode, String result) {
|
|
|
+ if (ShareKakaoTalk.CLIENT_ERROR_CODE == errorCode) {
|
|
|
+ showErrorDialog(ResourceUtil.getString(R.string.please_install_kakaotalk));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ showErrorDialog(result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void sendFaceBook() {
|
|
|
+ // deep link 생성하는 시간동안 웨이터 표시
|
|
|
+ showWaiter();
|
|
|
+ share = new ShareFacebook(view.getActivity(), getHelper(FacebookHelper.class).getCallbackManager());
|
|
|
+ share.shareEvent(model.getDeliveredEventDetailBean(), new IShareListener() {
|
|
|
+ @Override
|
|
|
+ public void onSuccess(String result) {
|
|
|
+ loadShareCoin(Share.TYPE_FACEBOOK);
|
|
|
+ showShareToast("", ResourceUtil.getString(R.string.share_completed_message), 1);
|
|
|
+ hideWaiter();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCancel() {
|
|
|
+ loadShareCoin(Share.TYPE_FACEBOOK);
|
|
|
+ hideWaiter();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(int errorCode, String result) {
|
|
|
+ showErrorDialog(result);
|
|
|
+ hideWaiter();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void sendClipBoardCopy() {
|
|
|
+ // deep link 생성하는 시간동안 웨이터 표시
|
|
|
+ showWaiter();
|
|
|
+ share = new ShareClipBoard(view.getActivity());
|
|
|
+ share.shareEvent(model.getDeliveredEventDetailBean(), new IShareListener() {
|
|
|
+ @Override
|
|
|
+ public void onSuccess(String result) {
|
|
|
+ hideWaiter();
|
|
|
+ loadShareCoin(Share.TYPE_URL);
|
|
|
+ // clipboard 는 resume 이 없으므로 바로 실행
|
|
|
+ resumeInternal();
|
|
|
+
|
|
|
+ showShareToast("", ResourceUtil.getString(R.string.url_copy_message), 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(int errorCode, String result) {
|
|
|
+ hideWaiter();
|
|
|
+ showErrorDialog(ResourceUtil.getString(R.string.share_error_message));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void sendEmail() {
|
|
|
+ // deep link 생성하는 시간동안 웨이터 표시
|
|
|
+ showWaiter();
|
|
|
+ share = new ShareEmail(view.getActivity());
|
|
|
+ share.shareEvent(model.getDeliveredEventDetailBean(), new IShareListener() {
|
|
|
+ @Override
|
|
|
+ public void onSuccess(String result) {
|
|
|
+ hideWaiter();
|
|
|
+ loadShareCoin(Share.TYPE_EMAIL);
|
|
|
+ String subject;
|
|
|
+ subject = ResourceUtil.getString(R.string.share_title, model.getDeliveredEventDetailBean().getTitle());
|
|
|
+ String url = result;
|
|
|
+ String contents = ResourceUtil.getString(R.string.share_event_contents, subject, url);
|
|
|
+ Log.d("APP# EventDetailEntryPresenter | onSuccess", "|" + contents);
|
|
|
+ onCommand(new EmailSendingCommand("", subject, contents));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(int errorCode, String result) {
|
|
|
+ hideWaiter();
|
|
|
+ showErrorDialog(ResourceUtil.getString(R.string.share_error_message));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ protected Share share;
|
|
|
+ protected DoubleChecker coinChecker = null;
|
|
|
+
|
|
|
+ protected void loadShareCoin(@Share.Type String type) {
|
|
|
+ // 더블 체커 세팅
|
|
|
+ coinChecker = new DoubleChecker(() -> {
|
|
|
+ coinChecker = null;
|
|
|
+
|
|
|
+ // 보유 코인 우선 로딩 -> 코인 적립을 먼저하면 이전 값과 더한 값의 차이가 있을 수 있다.
|
|
|
+ model.getCoinAsync(e -> {
|
|
|
+ Log.i("APP# ContentsBasePresenter | onResult", "|" + " current coin: " + e.getInteger());
|
|
|
+ new CoinPopupDriver(getFragmentManager(), () -> {}, () -> {})
|
|
|
+ .show(model.getPrevCoin(), model.getGivenCoin(), R.string.coin_share_event);
|
|
|
+
|
|
|
+ model.mergeCoin();
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ model.loadShareCoin(type, new APIModuleListener<ShareCoinResultBean>(this) {
|
|
|
+ @Override
|
|
|
+ public void onApiSuccess(ShareCoinResultBean resultBean) {
|
|
|
+ coinChecker.checkFirst();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onApiError(String errorMessage, APIError error) {
|
|
|
+ Log.e("APP# EventDetailEntryPresenter | onApiError", "|" + errorMessage);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void showShareToast(String title, String detail, @Nullable int copyToastFlag) {
|
|
|
+ ToastProvider.showShare(title, detail, copyToastFlag);
|
|
|
+ }
|
|
|
+}
|