Преглед на файлове

[컨텐츠웹][New] 공유 기능 추가

hyodong.min преди 7 години
родител
ревизия
f3f93c8fcf

+ 41 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/bean/ContentsWebDeliveryBean.java

@@ -0,0 +1,41 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.bean;
+
+import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
+
+/**
+ * ContentsWebDeliveryBean
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 12. 21.]   [최초 작성]
+ * @since 2018. 12. 21.
+ */
+public class ContentsWebDeliveryBean extends JsonBeanBase {
+
+  private final ContentsDetailBean contentsDetailBean;
+  private final int pageIndex;
+  private final String webUrl;
+
+  public ContentsWebDeliveryBean(ContentsDetailBean contentsDetailBean, int pageIndex, String webUrl) {
+    this.contentsDetailBean = contentsDetailBean;
+    this.pageIndex = pageIndex;
+    this.webUrl = webUrl;
+  }
+
+  public ContentsDetailBean getContentsDetailBean() {
+    return contentsDetailBean;
+  }
+
+  public int getPageIndex() {
+    return pageIndex;
+  }
+
+  public String getWebUrl() {
+    return webUrl;
+  }
+}

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/tool/Share.java

@@ -26,7 +26,7 @@ public abstract class Share<T> {
 
   public abstract void shareRecommendCode(String code, IShareListener listener);
 
-  public abstract void shareMap(ContentsDetailBean contentsBean, String mapUrl, int pageIndex, IShareListener listener);
+  public abstract void shareUrl(ContentsDetailBean contentsBean, String webUrl, int pageIndex, IShareListener listener);
 
   public void dispose() {
     context = null;

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/tool/ShareClipBoard.java

@@ -36,8 +36,8 @@ public class ShareClipBoard extends Share<Context> {
   }
 
   @Override
-  public void shareMap(ContentsDetailBean contentsBean, String mapUrl, int pageIndex, IShareListener listener) {
-    copy("map", mapUrl, listener);
+  public void shareUrl(ContentsDetailBean contentsBean, String webUrl, int pageIndex, IShareListener listener) {
+    copy("map", webUrl, listener);
   }
 
   private void copy(String label, String text, IShareListener listener) {

+ 3 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/tool/ShareFacebook.java

@@ -106,11 +106,11 @@ public class ShareFacebook extends Share<Activity> {
   }
 
   @Override
-  public void shareMap(ContentsDetailBean contentsBean, String mapUrl, int pageIndex, IShareListener listener) {
+  public void shareUrl(ContentsDetailBean contentsBean, String webUrl, int pageIndex, IShareListener listener) {
 
-    Uri uri = Uri.parse(mapUrl);
+    Uri uri = Uri.parse(webUrl);
 
-    Log.w("APP# ShareFacebook | shareMap", "|" + " uri: " + uri.toString());
+    Log.w("APP# ShareFacebook | shareUrl", "|" + " uri: " + uri.toString());
 
     ShareLinkContent content = new ShareLinkContent.Builder()
       .setContentUrl(uri)

+ 4 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/tool/ShareKakaoTalk.java

@@ -126,7 +126,7 @@ public class ShareKakaoTalk extends Share<Context> {
   }
 
   @Override
-  public void shareMap(ContentsDetailBean contentsBean, String mapUrl, int pageIndex, IShareListener listener) {
+  public void shareUrl(ContentsDetailBean contentsBean, String webUrl, int pageIndex, IShareListener listener) {
 
     String url = contentsBean.getContentsUrlWithParamForShare(pageIndex);
 
@@ -135,10 +135,10 @@ public class ShareKakaoTalk extends Share<Context> {
       .append("&").append(CONTENTS_ITEM_PAGE).append("=")
       .append(pageIndex).toString();
 
-    Log.e("APP#  ShareKakaoTalk | shareMap", "|" + " executionParams: " + executionParams);
-    Log.e("APP#  ShareKakaoTalk | shareMap", "|" + " url: " + url);
+    Log.e("APP#  ShareKakaoTalk | shareUrl", "|" + " executionParams: " + executionParams);
+    Log.e("APP#  ShareKakaoTalk | shareUrl", "|" + " url: " + url);
 
-    TextTemplate params = TextTemplate.newBuilder(mapUrl, LinkObject.newBuilder().build())
+    TextTemplate params = TextTemplate.newBuilder(webUrl, LinkObject.newBuilder().build())
       .addButton(new ButtonObject(ResourceUtil.getString(R.string.view_detail), LinkObject.newBuilder()
         .setWebUrl(url)
         .setMobileWebUrl(url)

+ 11 - 11
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsPresenter.java

@@ -7,6 +7,7 @@ import android.widget.Toast;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
+import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.HtmlBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
@@ -458,23 +459,17 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
                 view.setPhoneNumberInCall(phoneNumber);
                 break;
               case Event.LINK:
-                model.setDeliveryPackaging(event.getString());
-                go(ScreenID.WEB);
-                break;
+                /* falls through */
               case Event.HOME_PAGE:
-                model.setDeliveryPackaging(event.getString());
-                go(ScreenID.WEB);
-                break;
+                /* falls through */
               case Event.INSTAGRAM:
-                model.setDeliveryPackaging(event.getString());
-                go(ScreenID.WEB);
-                break;
+                /* falls through */
               case Event.FACE_BOOK:
-                model.setDeliveryPackaging(event.getString());
+                shipToWeb(event.getString());
                 go(ScreenID.WEB);
                 break;
               case Event.ADDRESS:
-                model.setDeliveryPackaging(event.getString());
+                shipToWeb(event.getString());
 //                go(ScreenID.MAP);
                 go(ScreenID.WEB);
                 break;
@@ -498,6 +493,11 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
     }
   }
 
+  private void shipToWeb(String webUrl) {
+    ContentsWebDeliveryBean contentsWebDeliveryBean = new ContentsWebDeliveryBean(model.getShareContents(), model.getSharePageIndex(), webUrl);
+    model.setDeliveryPackaging(contentsWebDeliveryBean);
+  }
+
   private void showLastPageToast() {
     int stringResource;
 

+ 32 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebModel.java

@@ -3,6 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.web;
 
+import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
 import kr.co.zumo.app.lifeplus.model.Model;
 
 /**
@@ -17,6 +18,8 @@ import kr.co.zumo.app.lifeplus.model.Model;
  */
 public class WebModel extends Model {
   private String url;
+  private int sharePageIndex;
+  private ContentsDetailBean shareContents;
 
   @Override
   protected void createViewInternal() {
@@ -60,4 +63,33 @@ public class WebModel extends Model {
   public String getUrl() {
     return url;
   }
+
+  /**
+   * 공유에 필요한 페이지 인덱스
+   * - 0 은 전체 공유를 의미함
+   *
+   * @return
+   */
+  public int getSharePageIndex() {
+    return sharePageIndex;
+  }
+
+  /**
+   * 공유 데이터
+   * - 커버 이미지(썸네일) 를 이용하기 위해서 ContentsDetailBean 을 이용한다.
+   * - LifeplusContentBean 은 ContentsDetailBean.toBean(LifeplusContentBean) 으로 변환하여 사용
+   *
+   * @return
+   */
+  public ContentsDetailBean getShareContents() {
+    return shareContents;
+  }
+
+  public void setSharePageIndex(int sharePageIndex) {
+    this.sharePageIndex = sharePageIndex;
+  }
+
+  public void setShareContents(ContentsDetailBean shareContents) {
+    this.shareContents = shareContents;
+  }
 }

+ 109 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebPresenter.java

@@ -3,10 +3,29 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.web;
 
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.application.App;
+import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
+import kr.co.zumo.app.lifeplus.helper.FacebookHelper;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+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.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.Event;
+import kr.co.zumo.app.lifeplus.view.command.EmailSendingCommand;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
@@ -25,10 +44,14 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  * @since 2018. 12. 14.
  */
 public class WebPresenter extends Presenter<WebModel, IWebView> {
+  protected Share share;
+
   public WebPresenter(WebModel model, IWebView view) {
     super(model, view);
-    String targetUrl = model.getDeliveryPackaging(String.class);
-    model.setUrl(targetUrl);
+    ContentsWebDeliveryBean targetUrl = model.getDeliveryPackaging(ContentsWebDeliveryBean.class);
+    model.setUrl(targetUrl.getWebUrl());
+    model.setSharePageIndex(targetUrl.getPageIndex());
+    model.setShareContents(targetUrl.getContentsDetailBean());
   }
 
   @Override
@@ -131,15 +154,18 @@ public class WebPresenter extends Presenter<WebModel, IWebView> {
 
             switch (event.getEventId()) {
               case Event.CLOSE:
-                dialog.dispose();
                 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;
@@ -158,4 +184,84 @@ public class WebPresenter extends Presenter<WebModel, IWebView> {
     }
   }
 
+  protected void sendKakaoLink() {
+    share = new ShareKakaoTalk(view.getActivity());
+    share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
+      @Override
+      public void onSuccess(String result) {
+      }
+
+      @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() {
+    share = new ShareFacebook(view.getActivity(), getHelper(FacebookHelper.class).getCallbackManager());
+    share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
+      @Override
+      public void onSuccess(String result) {
+        showShareToast("", ResourceUtil.getString(R.string.share_completed_message), 1);
+      }
+
+      @Override
+      public void onFailure(int errorCode, String result) {
+        showErrorDialog(result);
+      }
+    });
+
+  }
+
+  protected void sendClipBoardCopy() {
+    share = new ShareClipBoard(view.getActivity());
+    share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
+      @Override
+      public void onSuccess(String result) {
+        showShareToast("", ResourceUtil.getString(R.string.url_copy_message), 1);
+      }
+
+      @Override
+      public void onFailure(int errorCode, String result) {
+        showErrorDialog(ResourceUtil.getString(R.string.share_error_message));
+      }
+    });
+  }
+
+
+  protected void sendEmail() {
+    String subject;
+    subject = ResourceUtil.getString(R.string.lifeplus_app);
+    String url = model.getUrl();
+    String contents = ResourceUtil.getString(R.string.share_current_page_contents, subject, url);
+    onCommand(new EmailSendingCommand("", subject, contents));
+  }
+
+  protected void showShareToast(String title, String detail, @Nullable int copyToastFlag) {
+
+    Context context = App.getInstance().getContext();
+    Toast toast = new Toast(context);
+    toast.setDuration(Toast.LENGTH_LONG);
+    toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
+    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+    View view;
+    if (copyToastFlag != 0) {
+      view = inflater.inflate(R.layout.setting_toast_url_copy_pop_up, null);
+      ((TextView) view.findViewById(R.id.setting_toast_detail)).setText(detail);
+    }
+    else {
+      view = inflater.inflate(R.layout.setting_toast_pop_up, null);
+      ((TextView) view.findViewById(R.id.setting_toast_title)).setText(title);
+      ((TextView) view.findViewById(R.id.setting_toast_detail)).setText(detail);
+    }
+
+    toast.setView(view);
+    toast.show();
+  }
 }