Browse Source

[카테고리][New] 새로운 필터 API 적용 완료

hyodong.min 6 years ago
parent
commit
27a567c489

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/APICategoryContentsLoadModule.java

@@ -4,6 +4,7 @@
 package kr.co.zumo.app.lifeplus.model.module;
 
 import android.support.annotation.IntDef;
+import android.util.Log;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -47,6 +48,7 @@ public class APICategoryContentsLoadModule extends LifeplusAPIModule<CategoryReq
 
   @Override
   protected Single<CategoryContentsResultBean> getAPI(CategoryRequestBean requestBean) {
+    Log.d("APP# APICategoryContentsLoadModule | getAPI", "|" + " order ---> " + order);
     if (order == ORDER_BY_LIKE) {
       return new LifeplusAPIRepository().getCategoryContentsOrderByLike(requestBean);
     }

+ 56 - 24
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryFilterModel.java

@@ -83,18 +83,42 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
   protected void modifyContents(List<CategoryContentsBean> contentsBeans) {
   }
 
-  private boolean isFilterApplied = false;
-
   @Override
-  public void loadContents(String categoryNumber) {
+  public void loadContents() {
     if (isFilterApplied) {
+      filteringOrder = getCurrentOrder();
+      loadFilteringContents(waiterCaller, e -> {
+        if (e.getEventId() == Event.SUCCESS) {
+          parseResult(filterSearchResultBean);
 
+          onResult(new Event.Builder(Event.SUCCESS).integer(Event.FILTER_COMMIT).build());
+        }
+        else {
+          onResult(new Event.Builder(Event.ERROR).integer(Event.FILTER_COMMIT).build());
+        }
+      });
     }
     else {
-      super.loadContents(categoryNumber);
+      contentsOrder = getCurrentOrder();
+      super.loadContents();
     }
   }
 
+  /**
+   * 필터링 처리 중 정렬을 변경 항 뒤 가 리셋 되거나 하나도 선택되지 않았을 경우
+   * 기존 contentsBeans 를 이용하면 정렬 순서가 다를 수 있다.
+   */
+  private int contentsOrder;  // 전체 컨텐츠를 로딩할 때 정렬 순서
+  private int filteringOrder; // 필터링 중 정렬 순서
+
+  public int getContentsOrder() {
+    return contentsOrder;
+  }
+
+  public int getFilteringOrder() {
+    return filteringOrder;
+  }
+
   /**
    * 검색 결과에 맞게 bean 추가 해줌
    */
@@ -105,22 +129,24 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
      * -> 결과 일부 있음 => hash 수가 다름
      * -> 결과 모두 있음 => hash 수가 맞음
      */
-    contentsBeans = null;
+    committedFilteringContents = null;
 
-    if (null != resultBean.getData()) {
-      contentsBeans = new ArrayList<>(resultBean.getData());
+    if (null != resultBean && null != resultBean.getData()) {
+      committedFilteringContents = new ArrayList<>(resultBean.getData());
+      listCount = resultBean.getListCount();
     }
-    listCount = resultBean.getListCount();
 
-    if (null == contentsBeans) {
-      contentsBeans = new ArrayList<>();
+    if (null == committedFilteringContents) {
+      committedFilteringContents = new ArrayList<>();
       listCount = 0;
     }
 
   }
 
+  private boolean isFilterApplied = false;
   private int listCount = 0;
   private CategoryFilterContentsResultBean filterSearchResultBean;
+  private List<CategoryContentsBean> committedFilteringContents;
 
   /**
    * 검색 필터 데이터
@@ -131,6 +157,10 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
     return filterSectionBeans;
   }
 
+  public boolean isFilterApplied() {
+    return isFilterApplied;
+  }
+
   public final void loadFilter(String categoryNumber) {
     if (null != filterSectionBeans) {
       onResult(new Event.Builder(Event.SUCCESS).integer(Event.LOADED_FILTER).build());
@@ -186,7 +216,9 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
 
     // 필터 적용
     if (applyFilter(requestBean) == false) {
+      isFilterApplied = false;
       filterSearchResultBean = null;
+      listCount = 0;
       listener.onEvent(new Event.Builder(Event.SUCCESS).integer(0).build());
       return;
     }
@@ -197,9 +229,9 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
         filterSearchResultBean = resultBean;
         if (null != filterSearchResultBean) {
           isFilterApplied = true;
-          int count = filterSearchResultBean.getListCount();
+          listCount = filterSearchResultBean.getListCount();
 
-          listener.onEvent(new Event.Builder(Event.SUCCESS).integer(count).build());
+          listener.onEvent(new Event.Builder(Event.SUCCESS).integer(listCount).build());
         }
         else {
           this.onApiError("data is null.....", new APIError(APIError.ERROR_INVAlID_RESULT));
@@ -358,7 +390,12 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
 
   @Override
   public List<CategoryContentsBean> getContents() {
-    return contentsBeans;
+    if (isFilterApplied) {
+      return committedFilteringContents;
+    }
+    else {
+      return contentsBeans;
+    }
   }
 
 
@@ -407,15 +444,9 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
       }
     }
 
-    if (null == filterSearchResultBean) {
-      isFilterApplied = false;
-    }
-    else {
-      isFilterApplied = true;
-      parseResult(filterSearchResultBean);
+    parseResult(filterSearchResultBean);
 
-      onResult(new Event.Builder(Event.SUCCESS).integer(Event.FILTER_COMMIT).build());
-    }
+    onResult(new Event.Builder(Event.SUCCESS).integer(Event.FILTER_COMMIT).build());
   }
 
   /**
@@ -435,6 +466,7 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
    */
   public void resetFilter() {
     isFilterApplied = false;
+    listCount = 0;
 
     int len = filterSectionBeans.size();
     for (int i = 0; i < len; ++i) {
@@ -447,9 +479,9 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
       }
 
       // 정렬 순서 초기값
-      if (FilterBean.FILTER_TYPE_ORDER.equals(bean.getSectionType())) {
-        bean.getFilterBeans().get(0).setSelected(true);
-      }
+//      if (FilterBean.FILTER_TYPE_ORDER.equals(bean.getSectionType())) {
+//        bean.getFilterBeans().get(0).setSelected(true);
+//      }
     }
   }
 

+ 12 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryFilterPresenter.java

@@ -119,7 +119,18 @@ public abstract class CategoryFilterPresenter<M extends CategoryFilterModel, V e
           showFilterDialog();
         }
         else if (event.getInteger() == Event.FILTER_COMMIT) {
-          updateContents();
+          // filter
+          // -> 필터링 처리 중 정렬을 변경 항 뒤 가 리셋 되거나 하나도 선택되지 않았을 경우
+          // 기존 contentsBeans 를 이용하면 정렬 순서가 다를 수 있다.
+          // - 필터링 중에는 바로 업데이트 한다.
+          if (model.isFilterApplied() || model.getContentsOrder() == model.getFilteringOrder()) {
+            updateContents();
+          }
+          else {
+            // 필터링 처리를 하지 않고
+            // 정렬 순서가 다르면 다시 로드한다.
+            model.loadContents();
+          }
         }
         break;
       case Event.ERROR:

+ 22 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryMainModel.java

@@ -127,8 +127,22 @@ public abstract class CategoryMainModel extends Model {
     return currentOrder;
   }
 
-  public void setCurrentOrder(@APICategoryContentsLoadModule.Order int currentOrder) {
-    this.currentOrder = currentOrder;
+  public void setCurrentOrder(int index) {
+    int order;
+    switch (index) {
+      case 1:
+        order = APICategoryContentsLoadModule.ORDER_BY_LIKE;
+        break;
+      case 2:
+        order = APICategoryContentsLoadModule.ORDER_BY_BOOKMARK;
+        break;
+      case 0:
+        /* falls through */
+      default:
+        order = APICategoryContentsLoadModule.ORDER_BY_LATEST;
+        break;
+    }
+    this.currentOrder = order;
   }
 
   /**
@@ -138,8 +152,8 @@ public abstract class CategoryMainModel extends Model {
     disposeLoading();
   }
 
-  public void loadRecommendContents(String categoryNumber) {
-    disposableRecommend = new APICategoryRecommendLoadModule().call(new CategoryRequestBean(categoryNumber), new APIModuleListener<CategoryRecommendResultBean>(waiterCaller) {
+  public void loadRecommendContents() {
+    disposableRecommend = new APICategoryRecommendLoadModule().call(new CategoryRequestBean(getCategoryNo()), new APIModuleListener<CategoryRecommendResultBean>(waiterCaller) {
       @Override
       public void onApiSuccess(CategoryRecommendResultBean resultBean) {
         recommendBeans = resultBean.getData();
@@ -161,8 +175,8 @@ public abstract class CategoryMainModel extends Model {
     return recommendBeans;
   }
 
-  public void loadBanner(String categoryNumber) {
-    disposableBanner = new APICategoryBannerLoadModule().call(new CategoryRequestBean(categoryNumber), new APIModuleListener<CategoryBannerResultBean>(waiterCaller) {
+  public void loadBanner() {
+    disposableBanner = new APICategoryBannerLoadModule().call(new CategoryRequestBean(getCategoryNo()), new APIModuleListener<CategoryBannerResultBean>(waiterCaller) {
       @Override
       public void onApiSuccess(CategoryBannerResultBean resultBean) {
         bannerBeans = resultBean.getData();
@@ -185,8 +199,8 @@ public abstract class CategoryMainModel extends Model {
   }
 
 
-  public void loadContents(String categoryNumber) {
-    disposableContents = new APICategoryContentsLoadModule(currentOrder).call(new CategoryRequestBean(categoryNumber), new APIModuleListener<CategoryContentsResultBean>(waiterCaller) {
+  public void loadContents() {
+    disposableContents = new APICategoryContentsLoadModule(currentOrder).call(new CategoryRequestBean(getCategoryNo()), new APIModuleListener<CategoryContentsResultBean>(waiterCaller) {
       @Override
       public void onApiSuccess(CategoryContentsResultBean resultBean) {
         contentsBeans = resultBean.getData();

+ 11 - 29
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryMainPresenter.java

@@ -7,7 +7,6 @@ import android.util.Log;
 import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
-import kr.co.zumo.app.lifeplus.model.module.APICategoryContentsLoadModule;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
@@ -75,10 +74,9 @@ public abstract class CategoryMainPresenter<M extends CategoryMainModel, V exten
   }
 
   private void init() {
-    String categoryNumber = model.getCategoryNo();
-    model.loadRecommendContents(categoryNumber);
-    model.loadContents(categoryNumber);
-    model.loadBanner(categoryNumber);
+    model.loadRecommendContents();
+    model.loadContents();
+    model.loadBanner();
   }
 
   @CallSuper
@@ -137,11 +135,7 @@ public abstract class CategoryMainPresenter<M extends CategoryMainModel, V exten
     Log.i("APP# CategoryMainPresenter | onEventInternal", "|" + event);
     switch (event.getEventId()) {
       case Event.ORDER:
-        int index = event.getIndex();
-        if (model.getCurrentOrder() != index) {
-          setContentsOrder(index);
-          model.loadContents(model.getCategoryNo());
-        }
+        onRequestOrder(event.getIndex());
         break;
       case Event.RECOMMEND:
         /**
@@ -168,27 +162,15 @@ public abstract class CategoryMainPresenter<M extends CategoryMainModel, V exten
     }
   }
 
-  private void goContentsNativeOrWeb() {
-    go(ScreenID.CONTENTS);
-  }
-
-  private void setContentsOrder(int index) {
-    int order;
-    switch (index) {
-      case 1:
-        order = APICategoryContentsLoadModule.ORDER_BY_LIKE;
-        break;
-      case 2:
-        order = APICategoryContentsLoadModule.ORDER_BY_BOOKMARK;
-        break;
-      case 0:
-        /* falls through */
-      default:
-        order = APICategoryContentsLoadModule.ORDER_BY_LATEST;
-        break;
+  protected void onRequestOrder(int index) {
+    if (model.getCurrentOrder() != index) {
+      model.setCurrentOrder(index);
+      model.loadContents();
     }
+  }
 
-    model.setCurrentOrder(order);
+  private void goContentsNativeOrWeb() {
+    go(ScreenID.CONTENTS);
   }
 
   private void setContentsHelper(LifeplusContentsBean bean) {