Преглед изворни кода

[컨텐츠][New] 좋아요/북마크 로직 헬퍼로 이동

hyodong.min пре 7 година
родитељ
комит
8c050b2639

+ 4 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/ContentsFlagRequestBean.java

@@ -43,4 +43,8 @@ public class ContentsFlagRequestBean extends UserNameRequestBean {
   public void setChecked(String checked) {
     this.checked = checked;
   }
+
+  public boolean isChecked() {
+    return LifeplusData.isTrue(checked);
+  }
 }

+ 89 - 20
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsFlagHelper.java

@@ -13,9 +13,14 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsFlagBean;
+import kr.co.zumo.app.lifeplus.bean.api.ContentsFlagRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsFlagResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.ItemNumberBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
 import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
+import kr.co.zumo.app.lifeplus.model.module.APIContentsBookmarkedModule;
+import kr.co.zumo.app.lifeplus.model.module.APIContentsLikedModule;
+import kr.co.zumo.app.lifeplus.model.module.IAPIModuleListener;
 import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
 import kr.co.zumo.app.lifeplus.network.api.ParameterMapper;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
@@ -41,6 +46,8 @@ public class ContentsFlagHelper {
   }
 
   private Disposable disposable;
+  private Disposable disposableLiked;
+  private Disposable disposableBookmarked;
   private ContentsFlagBean contentsFlagBean;
 
   public Single<ContentsFlagResultBean> load() {
@@ -75,7 +82,14 @@ public class ContentsFlagHelper {
       disposable.dispose();
       disposable = null;
     }
-    contentsFlagBean = null;
+    if (null != disposableLiked) {
+      disposableLiked.dispose();
+      disposableLiked = null;
+    }
+    if (null != disposableBookmarked) {
+      disposableBookmarked.dispose();
+      disposableBookmarked = null;
+    }
   }
 
   /**
@@ -83,6 +97,7 @@ public class ContentsFlagHelper {
    */
   public void dispose() {
     stopLoading();
+    contentsFlagBean = null;
   }
 
   /**
@@ -93,14 +108,7 @@ public class ContentsFlagHelper {
    */
   public boolean isLiked(String itemNumber) {
     List<ItemNumberBean> list = contentsFlagBean.getLikedList();
-    if (null != list) {
-      for (ItemNumberBean bean : list) {
-        if (bean.getItemNumber().equals(itemNumber)) {
-          return true;
-        }
-      }
-    }
-    return false;
+    return isChecked(itemNumber, list);
   }
 
   /**
@@ -111,6 +119,10 @@ public class ContentsFlagHelper {
    */
   public boolean isBookmarked(String itemNumber) {
     List<ItemNumberBean> list = contentsFlagBean.getBookmarkedList();
+    return isChecked(itemNumber, list);
+  }
+
+  private boolean isChecked(String itemNumber, List<ItemNumberBean> list) {
     if (null != list) {
       for (ItemNumberBean bean : list) {
         if (bean.getItemNumber().equals(itemNumber)) {
@@ -132,7 +144,9 @@ public class ContentsFlagHelper {
       contentsFlagBean.setLikedList(new ArrayList<>());
       list = contentsFlagBean.getLikedList();
     }
-    list.add(new ItemNumberBean(itemNumber));
+    if (isLiked(itemNumber) == false) {
+      list.add(new ItemNumberBean(itemNumber));
+    }
     print();
   }
 
@@ -147,7 +161,9 @@ public class ContentsFlagHelper {
       contentsFlagBean.setBookmarkedList(new ArrayList<>());
       list = contentsFlagBean.getBookmarkedList();
     }
-    list.add(new ItemNumberBean(itemNumber));
+    if (isBookmarked(itemNumber) == false) {
+      list.add(new ItemNumberBean(itemNumber));
+    }
     print();
   }
 
@@ -158,15 +174,7 @@ public class ContentsFlagHelper {
    */
   public void removeLiked(String itemNumber) {
     List<ItemNumberBean> list = contentsFlagBean.getLikedList();
-    if (null != list) {
-      for (ItemNumberBean bean : list) {
-        if (bean.getItemNumber().equals(itemNumber)) {
-          list.remove(bean);
-          break;
-        }
-      }
-    }
-    print();
+    removeFlag(itemNumber, list);
   }
 
   /**
@@ -176,6 +184,10 @@ public class ContentsFlagHelper {
    */
   public void removeBookmarked(String itemNumber) {
     List<ItemNumberBean> list = contentsFlagBean.getBookmarkedList();
+    removeFlag(itemNumber, list);
+  }
+
+  private void removeFlag(String itemNumber, List<ItemNumberBean> list) {
     if (null != list) {
       for (ItemNumberBean bean : list) {
         if (bean.getItemNumber().equals(itemNumber)) {
@@ -192,4 +204,61 @@ public class ContentsFlagHelper {
       Log.w("APP# ContentsFlagHelper | print", "| lists: \n" + contentsFlagBean.toPrettyJson());
     }
   }
+
+  public Disposable updateLiked(ContentsFlagRequestBean requestBean, IAPIModuleListener<LifeplusAPIBean> listener) {
+    boolean toChecked = requestBean.isChecked();
+    disposableLiked = new APIContentsLikedModule().call(requestBean, new IAPIModuleListener<LifeplusAPIBean>() {
+      @Override
+      public void onApiSuccess(LifeplusAPIBean resultBean) {
+        if (toChecked) {
+          addLiked(requestBean.getItemNumber());
+        }
+        else {
+          removeLiked(requestBean.getItemNumber());
+        }
+        listener.onApiSuccess(resultBean);
+      }
+
+      @Override
+      public void onApiReason(LifeplusAPIBean resultBean) {
+        listener.onApiReason(resultBean);
+      }
+
+      @Override
+      public void onApiError(String errorMessage) {
+        listener.onApiError(errorMessage);
+      }
+    });
+
+    return disposableLiked;
+  }
+
+
+  public Disposable updateBookmarked(ContentsFlagRequestBean requestBean, IAPIModuleListener<LifeplusAPIBean> listener) {
+    boolean toChecked = requestBean.isChecked();
+    disposableBookmarked = new APIContentsBookmarkedModule().call(requestBean, new IAPIModuleListener<LifeplusAPIBean>() {
+      @Override
+      public void onApiSuccess(LifeplusAPIBean resultBean) {
+        if (toChecked) {
+          addBookmarked(requestBean.getItemNumber());
+        }
+        else {
+          removeBookmarked(requestBean.getItemNumber());
+        }
+        listener.onApiSuccess(resultBean);
+      }
+
+      @Override
+      public void onApiReason(LifeplusAPIBean resultBean) {
+        listener.onApiReason(resultBean);
+      }
+
+      @Override
+      public void onApiError(String errorMessage) {
+        listener.onApiError(errorMessage);
+      }
+    });
+
+    return disposableBookmarked;
+  }
 }

+ 23 - 20
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsModel.java

@@ -10,8 +10,6 @@ import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusData;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
-import kr.co.zumo.app.lifeplus.model.module.APIContentsBookmarkedModule;
-import kr.co.zumo.app.lifeplus.model.module.APIContentsLikedModule;
 import kr.co.zumo.app.lifeplus.model.module.IAPIModuleListener;
 import kr.co.zumo.app.lifeplus.view.Event;
 
@@ -35,6 +33,7 @@ public class ContentsModel extends Model {
   @Override
   protected void destroyInternal() {
     stopLoading();
+    contentsBean = null;
   }
 
   @Override
@@ -57,18 +56,38 @@ public class ContentsModel extends Model {
 
   }
 
+  /**
+   * 리뷰 다이얼로그를 표시하기 위한 카운트
+   *
+   * @return
+   */
   public int getCountForReview() {
     return SuperModel.getInstance().getPreferences().getCountForReview();
   }
 
+  /**
+   * 리뷰 다이얼로그를 표시하기 위한 카운트
+   *
+   * @param count
+   */
   public void setCountForReview(int count) {
     SuperModel.getInstance().getPreferences().setCountForReview(count);
   }
 
+  /**
+   * 컨텐츠 정보
+   *
+   * @return
+   */
   public LifeplusContentsBean getContentsBean() {
     return contentsBean;
   }
 
+  /**
+   * DeliveryHelper 로 전달된 데이터를 저장한다.
+   *
+   * @param bean
+   */
   public void setContentsBean(LifeplusContentsBean bean) {
     this.contentsBean = bean;
 
@@ -89,17 +108,9 @@ public class ContentsModel extends Model {
 
   public void updateLiked() {
     boolean toChecked = !contentsBean.isLiked();
-    disposableLiked = new APIContentsLikedModule().call(new ContentsFlagRequestBean(getUserName(), contentsBean.getItemNumber(), LifeplusData.valueOf(toChecked)), new IAPIModuleListener<LifeplusAPIBean>() {
+    disposableLiked = ContentsFlagHelper.getInstance().updateLiked(new ContentsFlagRequestBean(getUserName(), contentsBean.getItemNumber(), LifeplusData.valueOf(toChecked)), new IAPIModuleListener<LifeplusAPIBean>() {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
-        // todo 좋아요 / 북마크 확인 목록 업데이트
-
-        if (toChecked) {
-          ContentsFlagHelper.getInstance().addLiked(contentsBean.getItemNumber());
-        }
-        else {
-          ContentsFlagHelper.getInstance().removeLiked(contentsBean.getItemNumber());
-        }
         contentsBean.setLiked(toChecked);
         onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_LIKE).bool(toChecked).build());
       }
@@ -119,17 +130,9 @@ public class ContentsModel extends Model {
 
   public void updateBookmarked() {
     boolean toChecked = !contentsBean.isBookmarked();
-    disposableLiked = new APIContentsBookmarkedModule().call(new ContentsFlagRequestBean(getUserName(), contentsBean.getItemNumber(), LifeplusData.valueOf(toChecked)), new IAPIModuleListener<LifeplusAPIBean>() {
+    disposableBookmarked = ContentsFlagHelper.getInstance().updateBookmarked(new ContentsFlagRequestBean(getUserName(), contentsBean.getItemNumber(), LifeplusData.valueOf(toChecked)), new IAPIModuleListener<LifeplusAPIBean>() {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
-        // todo 좋아요 / 북마크 확인 목록 업데이트
-
-        if (toChecked) {
-          ContentsFlagHelper.getInstance().addBookmarked(contentsBean.getItemNumber());
-        }
-        else {
-          ContentsFlagHelper.getInstance().removeBookmarked(contentsBean.getItemNumber());
-        }
         contentsBean.setBookmarked(toChecked);
         onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).build());
       }