Просмотр исходного кода

[설정][New] 공유 관련 클래스 생성

hyodong.min 7 лет назад
Родитель
Сommit
cb398c8623

+ 3 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/LifeplusPreferences.java

@@ -56,6 +56,7 @@ public class LifeplusPreferences {
    * zumo 유저의 정보를 저장한다.
    * - 테스트로만 이용된다.
    */
+  @Deprecated
   public void setZumoUserNo(String userNo) {
     preferences.put(ENCRYPTION_USER_NO, userNo);
   }
@@ -89,10 +90,12 @@ public class LifeplusPreferences {
    *
    * @param isDone
    */
+  @Deprecated
   public void setPermissionInfoDone(boolean isDone) {
     preferences.put(PERMISSION_INFO_DONE, isDone);
   }
 
+  @Deprecated
   public boolean isPermissionInfoDone() {
     return preferences.get(PERMISSION_INFO_DONE, false);
   }

+ 20 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/tool/IShareListener.java

@@ -0,0 +1,20 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.tool;
+
+/**
+ * IShareListener
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 9.]   [최초 작성]
+ * @since 2018. 11. 9.
+ */
+public interface IShareListener {
+  void onSuccess(String result);
+
+  void onFailure(String result);
+}

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

@@ -0,0 +1,34 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.tool;
+
+/**
+ * Share
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 9.]   [최초 작성]
+ * @since 2018. 11. 9.
+ */
+public abstract class Share<T> {
+  T context;
+
+  public Share(T context) {
+    this.context = context;
+  }
+
+  public abstract void shareContents(IShareListener listener);
+
+  public abstract void shareRecommendCode(String code, IShareListener listener);
+
+  public void dispose() {
+    context = null;
+
+    disposeInternal();
+  }
+
+  protected abstract void disposeInternal();
+}

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

@@ -0,0 +1,49 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.tool;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+
+/**
+ * ShareClipBoard
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 9.]   [최초 작성]
+ * @since 2018. 11. 9.
+ */
+public class ShareClipBoard extends Share<Context> {
+  public ShareClipBoard(Context context) {
+    super(context);
+  }
+
+  @Override
+  public void shareContents(IShareListener listener) {
+
+  }
+
+  @Override
+  public void shareRecommendCode(String code, IShareListener listener) {
+    ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
+    ClipData clipData = ClipData.newPlainText("code", code);
+    try {
+      if (clipboardManager != null) {
+        clipboardManager.setPrimaryClip(clipData);
+        listener.onSuccess("");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      listener.onFailure("");
+    }
+  }
+
+  @Override
+  protected void disposeInternal() {
+
+  }
+}

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

@@ -0,0 +1,71 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.tool;
+
+import android.app.Activity;
+import android.net.Uri;
+
+import com.facebook.CallbackManager;
+import com.facebook.FacebookCallback;
+import com.facebook.FacebookException;
+import com.facebook.share.Sharer;
+import com.facebook.share.model.ShareLinkContent;
+import com.facebook.share.widget.ShareDialog;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+
+/**
+ * ShareFacebook
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 9.]   [최초 작성]
+ * @since 2018. 11. 9.
+ */
+public class ShareFacebook extends Share<Activity> {
+
+  private CallbackManager callbackManager;
+
+  public ShareFacebook(Activity context, CallbackManager callbackManager) {
+    super(context);
+    this.callbackManager = callbackManager;
+  }
+
+  @Override
+  public void shareContents(IShareListener listener) {
+
+  }
+
+  @Override
+  public void shareRecommendCode(String code, IShareListener listener) {
+    ShareLinkContent linkContent = new ShareLinkContent.Builder()
+      .setContentUrl(Uri.parse(ResourceUtil.getString(R.string.lifeplus_www_url)))
+      .build();
+
+    ShareDialog shareDialog = new ShareDialog(context);
+    shareDialog.registerCallback(this.callbackManager, new FacebookCallback<Sharer.Result>() {
+      @Override
+      public void onSuccess(Sharer.Result result) {
+        listener.onSuccess(result.toString());
+      }
+
+      @Override
+      public void onCancel() {
+      }
+
+      @Override
+      public void onError(FacebookException error) {
+        listener.onFailure(error.getLocalizedMessage());
+      }
+    });
+    shareDialog.show(linkContent);
+  }
+
+  @Override
+  public void disposeInternal() {
+  }
+}

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

@@ -0,0 +1,95 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.tool;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.kakao.kakaolink.v2.KakaoLinkResponse;
+import com.kakao.kakaolink.v2.KakaoLinkService;
+import com.kakao.message.template.ButtonObject;
+import com.kakao.message.template.ContentObject;
+import com.kakao.message.template.FeedTemplate;
+import com.kakao.message.template.LinkObject;
+import com.kakao.network.ErrorResult;
+import com.kakao.network.callback.ResponseCallback;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+
+/**
+ * ShareKakaoTalk
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 9.]   [최초 작성]
+ * @since 2018. 11. 9.
+ */
+public class ShareKakaoTalk extends Share<Context> {
+
+  public static final String RECOMMEND_KEY = "recommendKey";
+
+  public ShareKakaoTalk(Context context) {
+    super(context);
+  }
+
+  @Override
+  public void shareContents(IShareListener listener) {
+
+  }
+
+  @Override
+  public void shareRecommendCode(String code, IShareListener listener) {
+    String url = ResourceUtil.getString(R.string.lifeplus_www_url);
+    FeedTemplate params = FeedTemplate
+      .newBuilder(ContentObject.newBuilder(ResourceUtil.getString(R.string.code_share),
+        ResourceUtil.getString(R.string.lifeplus_share_image_url),
+        LinkObject.newBuilder().setWebUrl(url)
+          .setMobileWebUrl(url).build())
+        .setDescrption(code)
+        .build())
+      //.setSocial(SocialObject.newBuilder().setLikeCount(10).setCommentCount(20)
+      //.setSharedCount(30).setViewCount(40).build())
+
+      .addButton(new ButtonObject(ResourceUtil.getString(R.string.view_in_web), LinkObject.newBuilder()
+        .setWebUrl(url)
+        .setMobileWebUrl(url).build()))
+      .addButton(new ButtonObject(ResourceUtil.getString(R.string.view_in_app), LinkObject.newBuilder()
+        .setWebUrl(url)
+        .setMobileWebUrl(url)
+        .setAndroidExecutionParams(new StringBuilder(RECOMMEND_KEY).append("=").append(code).toString()) //kakao95448ff031e92087b5dbc44d56cff7bb://kakaolink?key=test
+        .setIosExecutionParams(new StringBuilder(RECOMMEND_KEY).append("=").append(code).toString())
+        .build()))
+      .build();
+
+    Map<String, String> serverCallbackArgs = new HashMap<>();
+    serverCallbackArgs.put("user_id", "${current_user_id}");
+    serverCallbackArgs.put("product_id", "${shared_product_id}");
+
+    KakaoLinkService.getInstance().sendDefault(context, params, new ResponseCallback<KakaoLinkResponse>() {
+      @Override
+      public void onFailure(ErrorResult errorResult) {
+        Log.e("APP#  ShareKakaoTalk | onFailure", "|" + errorResult.toString());
+        listener.onFailure(errorResult.getErrorMessage());
+      }
+
+      @Override
+      public void onSuccess(KakaoLinkResponse result) {
+        Log.i("APP# ShareKakaoTalk | onSuccess", "|" + result.toString());
+        // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다. 전송 성공 유무는 서버콜백 기능을 이용하여야 한다.
+        listener.onSuccess(result.toString());
+      }
+    });
+  }
+
+  @Override
+  public void disposeInternal() {
+  }
+
+}

+ 6 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/EmailSendingCommand.java

@@ -22,16 +22,16 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  * @since 2018-10-08
  */
 public class EmailSendingCommand extends Command<Model, IView, Presenter> {
-  private String email;
+  private String emailTo;
   private String subject;
   private String text;
 
   public EmailSendingCommand(String emailTo) {
-    this.email = emailTo;
+    this.emailTo = emailTo;
   }
 
-  public EmailSendingCommand(String email, String subject, String text) {
-    this.email = email;
+  public EmailSendingCommand(String emailTo, String subject, String text) {
+    this.emailTo = emailTo;
     this.subject = subject;
     this.text = text;
   }
@@ -45,8 +45,8 @@ public class EmailSendingCommand extends Command<Model, IView, Presenter> {
   public void execute(Model model, IView view, Presenter presenter) {
     Intent emailIntent = new Intent(Intent.ACTION_SEND);
     emailIntent.setType("plain/text");
-    // email setting 배열로 해놔서 복수 발송 가능
-    String[] address = {this.email};
+    // emailTo setting 배열로 해놔서 복수 발송 가능
+    String[] address = {this.emailTo};
     emailIntent.putExtra(Intent.EXTRA_EMAIL, address);
 
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);

+ 32 - 78
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/SettingPresenter.java

@@ -1,9 +1,6 @@
 package kr.co.zumo.app.lifeplus.view.screen.setting;
 
-import android.content.ClipData;
-import android.content.ClipboardManager;
 import android.content.Context;
-import android.net.Uri;
 import android.support.annotation.Nullable;
 import android.util.Log;
 import android.view.Gravity;
@@ -12,28 +9,16 @@ import android.view.View;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.facebook.FacebookCallback;
-import com.facebook.FacebookException;
-import com.facebook.share.Sharer;
-import com.facebook.share.model.ShareLinkContent;
-import com.facebook.share.widget.ShareDialog;
-import com.kakao.kakaolink.v2.KakaoLinkResponse;
-import com.kakao.kakaolink.v2.KakaoLinkService;
-import com.kakao.message.template.ButtonObject;
-import com.kakao.message.template.ContentObject;
-import com.kakao.message.template.FeedTemplate;
-import com.kakao.message.template.LinkObject;
-import com.kakao.network.ErrorResult;
-import com.kakao.network.callback.ResponseCallback;
-
-import java.util.HashMap;
-import java.util.Map;
-
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.bean.api.SettingBean;
 import kr.co.zumo.app.lifeplus.helper.FacebookHelper;
 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.AppUtil;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
@@ -45,7 +30,6 @@ import kr.co.zumo.app.lifeplus.view.dialog.CurrentPageShareDialog;
 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;
-import kr.co.zumo.app.lifeplus.view.dialog.IAttribute;
 import kr.co.zumo.app.lifeplus.view.dialog.ICustomDialogListener;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
@@ -68,6 +52,7 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
   public static final int SETTING_UPDATE = 4;
 
   private DialogBase shareDialog;
+  private Share share;
   private boolean isEnabled = false;
 
   public SettingPresenter(SettingModel model, ISettingView view) {
@@ -77,7 +62,9 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
 
   @Override
   protected void destroyInternal() {
-
+    if (null != share) {
+      share.dispose();
+    }
   }
 
   @Override
@@ -200,7 +187,6 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
                       case Event.CLOSE:
                         break;
                       case Event.KAKAO_TALK:
-                        //카카오링크
                         sendKakaoLink();
                         break;
                       case Event.FACE_BOOK:
@@ -223,7 +209,7 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
                     dialog.dispose();
                   }
                 })
-                .attribute((IAttribute<CurrentPageShareDialog>) dialog -> {
+                .attribute(dialog -> {
                   dialog.setDialogType(R.string.code_share, R.string.code_copy);
                 })
                 .show();
@@ -272,81 +258,49 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
   }
 
   private void sendKakaoLink() {
-    FeedTemplate params = FeedTemplate
-      .newBuilder(ContentObject.newBuilder("추천인코드 공유",
-        "https://www.lifeplus.co.kr/_resource/_web/images/promotion/lifeplusx/detail12_img.png",
-        LinkObject.newBuilder().setWebUrl("https://www.lifeplus.co.kr/")
-          .setMobileWebUrl("https://www.lifeplus.co.kr/").build())
-        .setDescrption(model.getMyRecommendCode())
-        .build())
-      //.setSocial(SocialObject.newBuilder().setLikeCount(10).setCommentCount(20)
-      //.setSharedCount(30).setViewCount(40).build())
-
-      .addButton(new ButtonObject("웹에서 보기", LinkObject.newBuilder()
-        .setWebUrl("https://www.lifeplus.co.kr/")
-        .setMobileWebUrl("https://www.lifeplus.co.kr/").build()))
-      .addButton(new ButtonObject("앱에서 보기", LinkObject.newBuilder()
-        .setWebUrl("https://www.lifeplus.co.kr/")
-        .setMobileWebUrl("https://www.lifeplus.co.kr/")
-        .setAndroidExecutionParams("key=${model.getMyRecommendCode}") //kakao95448ff031e92087b5dbc44d56cff7bb://kakaolink?key=test
-        .setIosExecutionParams("key=${model.getMyRecommendCode}")
-        .build()))
-      .build();
-
-    Map<String, String> serverCallbackArgs = new HashMap<>();
-    serverCallbackArgs.put("user_id", "${current_user_id}");
-    serverCallbackArgs.put("product_id", "${shared_product_id}");
-
-    KakaoLinkService.getInstance().sendDefault(view.getActivity(), params, new ResponseCallback<KakaoLinkResponse>() {
+    share = new ShareKakaoTalk(view.getActivity());
+    share.shareRecommendCode(model.getMyRecommendCode(), new IShareListener() {
       @Override
-      public void onFailure(ErrorResult errorResult) {
-        Log.e("APP#  SettingPresenter | onFailure", "|" + errorResult.toString());
+      public void onSuccess(String result) {
+        showToast("", ResourceUtil.getString(R.string.share_completed_message), 1);
       }
 
       @Override
-      public void onSuccess(KakaoLinkResponse result) {
-        Log.w("APP# SettingPresenter | onSuccess", "|" + result.toString());
-        // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다. 전송 성공 유무는 서버콜백 기능을 이용하여야 한다.
+      public void onFailure(String result) {
+        showErrorDialog(result);
       }
     });
   }
 
   private void sendFaceBook() {
-    ShareDialog shareDialog = new ShareDialog(view.getActivity());
-    shareDialog.registerCallback(getHelper(FacebookHelper.class).getCallbackManager(), new FacebookCallback<Sharer.Result>() {
+    share = new ShareFacebook(view.getActivity(), getHelper(FacebookHelper.class).getCallbackManager());
+    share.shareRecommendCode(model.getMyRecommendCode(), new IShareListener() {
       @Override
-      public void onSuccess(Sharer.Result result) {
+      public void onSuccess(String result) {
         showToast("", ResourceUtil.getString(R.string.share_completed_message), 1);
       }
 
       @Override
-      public void onCancel() {
-      }
-
-      @Override
-      public void onError(FacebookException error) {
-        showErrorDialog(error.getLocalizedMessage());
+      public void onFailure(String result) {
+        showErrorDialog(result);
       }
     });
 
-    ShareLinkContent linkContent = new ShareLinkContent.Builder()
-      .setContentUrl(Uri.parse("https://www.lifeplus.co.kr/about/"))
-      .build();
-    shareDialog.show(linkContent);
-
   }
 
   private void sendClipBoardCopy() {
+    share = new ShareClipBoard(view.getActivity());
+    share.shareRecommendCode(model.getMyRecommendCode(), new IShareListener() {
+      @Override
+      public void onSuccess(String result) {
+        showToast("", ResourceUtil.getString(R.string.share_copy_completed_message), 1);
+      }
 
-    ClipboardManager clipboardManager = (ClipboardManager) view.getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
-    ClipData clipData = ClipData.newPlainText("code", model.getMyRecommendCode());
-    try {
-      clipboardManager.setPrimaryClip(clipData);
-      showToast("", ResourceUtil.getString(R.string.share_copy_completed_message), 1);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-
+      @Override
+      public void onFailure(String result) {
+        showErrorDialog(ResourceUtil.getString(R.string.share_error_message));
+      }
+    });
   }
 
   @Override

+ 1 - 1
app/src/main/res/layout/setting_user_information_layout.xml

@@ -393,7 +393,7 @@
           style="@style/CommonCheckBox"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:text="@string/email"
+          android:text="@string/emailTo"
           />
       </LinearLayout>
 

+ 9 - 2
app/src/main/res/values/strings.xml

@@ -9,6 +9,10 @@
   <string name="lifeplus_font_serif" translatable="false">serif</string>
   <string name="lifeplus_font_sans_serif" translatable="false">sans-serif</string>
 
+  <!--공유 관련 설정 -->
+  <string name="lifeplus_www_url">"https://www.lifeplus.co.kr/"</string>
+  <string name="lifeplus_share_image_url">"https://www.lifeplus.co.kr/_resource/_web/images/promotion/lifeplusx/detail12_img.png"</string>
+
   <!--kakaotalk 링크 공유-->
   <string name="kakao_app_key">57a0356496fdb154f5f68d4bc297f404</string>
   <string name="kakao_scheme">kakao57a0356496fdb154f5f68d4bc297f404</string>
@@ -274,7 +278,7 @@
   <string name="phone">전화번호</string>
   <string name="reset"><u>재설정</u></string>
   <string name="sms">SMS</string>
-  <string name="email">E-mail</string>
+  <string name="emailTo">E-mail</string>
   <string name="setting_phone_reset_message">본인인증 후 재설정이 가능합니다.</string>
   <string name="setting_register_email">이메일을 등록해주세요.</string>
 
@@ -618,10 +622,13 @@
 
   <string name="url_copy_message">URL이 복사되었습니다.</string>
   <string name="share_completed_message">공유했습니다.</string>
+  <string name="share_error_message">공유하지 못했습니다.</string>
   <string name="share_copy_completed_message">추천인 코드를 복사했습니다.</string>
   <string name="share_title">[Lifeplus] %s</string>
   <string name="share_recommend_code_subject">추천인 코드 공유</string>
   <string name="share_recommend_code_contents">"[Lifeplus] 추천인 코드 공유\n\n추천인 코드: %s\n\nLifeplus에서 더 다양한 컨텐츠를 확인하세요!\n\n아직 Lifeplus App이 없으시다면 아래 경로에서 다운로드 받으세요!\n\nApp 다운로드 : http://www.lifeplus.co.kr"</string>
-  <string name="sending_email">"이메일 보내기"</string>
+  <string name="sending_email">이메일 보내기</string>
+  <string name="view_in_web">웹에서 보기</string>
+  <string name="view_in_app">앱에서 보기</string>
 
 </resources>