浏览代码

[필터][New] 세부 항목 로딩 웨이터 변경

hyodong.min 6 年之前
父节点
当前提交
35bede4a53

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/CustomCheckBox.java

@@ -83,7 +83,7 @@ public abstract class CustomCheckBox extends ConstraintLayout implements Checkab
 
   @Override
   public void toggle() {
-    // nothing
+    checkBox.setChecked(!isChecked());
   }
 
   @Override

+ 25 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/FilterDialog.java

@@ -66,13 +66,21 @@ public class FilterDialog extends DialogBase<IFilterListener<FilterDialog>> impl
   }
 
   public void setFilterDetail(FilterBean filterBean) {
+    setEnabled(false);
     showDialogDetail(currentDetailSection, filterBean);
   }
 
   public void failFilterDetail(FilterBean filterBean) {
+    setEnabled(true);
     currentDetailSection.onDetailFailure(filterBean);
   }
 
+  public void setEnabled(boolean enabled) {
+    for (FilterSection filterSection : sectionList) {
+      filterSection.setEnabled(enabled);
+    }
+  }
+
   @Nullable
   @Override
   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -150,11 +158,13 @@ public class FilterDialog extends DialogBase<IFilterListener<FilterDialog>> impl
         @Override
         public void onRequestDetail(FilterSection section, FilterBean filterBean) {
           currentDetailSection = section;
+          setEnabled(false);
           getCustomListener().onFilterDetail(FilterDialog.this, filterBean);
         }
 
         @Override
         public void onRequestContentsCount(FilterSection section, FilterBean filterBean) {
+          closeDetail();
           applyContentsNumber(filterBean);
         }
 
@@ -165,6 +175,13 @@ public class FilterDialog extends DialogBase<IFilterListener<FilterDialog>> impl
     }
   }
 
+  private void closeDetail() {
+    if (null != detailDialog) {
+      detailDialog.dispose();
+      detailDialog = null;
+    }
+  }
+
   FilterDetailDialog detailDialog;
 
   private void showDialogDetail(FilterSection section, FilterBean filterBean) {
@@ -176,12 +193,6 @@ public class FilterDialog extends DialogBase<IFilterListener<FilterDialog>> impl
             // nothing
           }
 
-          @Override
-          public void onDialogCanceled(FilterDetailDialog dialog) {
-            dialog.dispose();
-            detailDialog = null;
-          }
-
           @Override
           public void onFilterReset(FilterDetailDialog dialog) {
             // nothing
@@ -202,9 +213,17 @@ public class FilterDialog extends DialogBase<IFilterListener<FilterDialog>> impl
             // nothing
           }
 
+          @Override
+          public void onDialogCanceled(FilterDetailDialog dialog) {
+            dialog.dispose();
+            setEnabled(true);
+            detailDialog = null;
+          }
+
           @Override
           public void onFilterResult(FilterDetailDialog dialog) {
             dialog.dispose();
+            setEnabled(true);
             detailDialog = null;
 
             section.onDetailResult(filterBean);

+ 19 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/FilterSection.java

@@ -44,6 +44,7 @@ public class FilterSection {
   private ISectionListener listener;
 
   protected Map<Checkable, FilterBean> filterMap;
+  private boolean enabled = true;
 
   public FilterSection(ViewGroup container, FilterSectionBean filterSectionBean, ISectionListener listener) {
     this.sectionBean = filterSectionBean;
@@ -106,6 +107,10 @@ public class FilterSection {
           driver = new FilterParentCheckDriver(checkBox, filterBean);
 
           checkBox.setOnClickListener(v -> {
+            if(false == enabled) {
+              checkBox.toggle();
+              return;
+            }
             // 우선 체크한 상태로 표시
             checkBox.setChecked(true);
 
@@ -123,6 +128,11 @@ public class FilterSection {
             checkBox = new CustomCircleCheckBox(context);
             driver = new FilterCheckDriver(checkBox, filterBean);
             checkBox.setOnClickListener(v -> {
+              if(false == enabled) {
+                checkBox.toggle();
+                return;
+              }
+
               Checkable cb = (Checkable) v;
               if (selector.contains(driver)) {
                 // 셀렉터에 포함되있으면 셀렉터에서 처리
@@ -145,6 +155,11 @@ public class FilterSection {
             checkBox = new CustomSquareCheckBox(context);
             driver = new FilterCheckDriver(checkBox, filterBean);
             checkBox.setOnClickListener(v -> {
+              if(false == enabled) {
+                checkBox.toggle();
+                return;
+              }
+
               Checkable cb = (Checkable) v;
               if (selector.contains(driver)) {
                 // 셀렉터에 포함되있으면 셀렉터에서 처리
@@ -240,6 +255,10 @@ public class FilterSection {
     return section;
   }
 
+  public void setEnabled(boolean enabled) {
+    this.enabled = enabled;
+  }
+
   interface ISectionListener {
     void onRequestDetail(FilterSection section, FilterBean filterBean);
 

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

@@ -10,7 +10,6 @@ import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.FilterBean;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
-import kr.co.zumo.app.lifeplus.view.IWaiterCallable;
 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.FilterDialog;
@@ -104,21 +103,15 @@ public abstract class CategoryFilterPresenter<M extends CategoryFilterModel, V e
 
           @Override
           public void onFilterDetail(FilterDialog dialog, FilterBean filterBean) {
+            /**
+             * 필터 세부 요청 시 다이얼로그 인터렉션이 중단된다.
+             * - dialog.setFilterDetail(filterBean) 또는 dialog.failFilterDetail(filterBean) 을 실행해야 인터렉션 재개.
+             * - dialog.setEnabled(true) 로 직접 실행할 수 있음.
+             */
             // 필터 세부 항목 요청
-            model.loadFilterDetail(filterBean, new IWaiterCallable() {
-              @Override
-              public void showWaiter() {
-                showFilterWaiter();
-              }
-
-              @Override
-              public void hideWaiter() {
-                hideFilterWaiter();
-              }
-            }, new IFilterDetailListener() {
+            model.loadFilterDetail(filterBean, filterDialog, new IFilterDetailListener() {
               @Override
               public void onCompleted(FilterBean filterBean) {
-
                 firebaseAnalyticsHelper.logScreen(R.string.fa_screen_category_filter_detail, getAnalyticsScreenName());
 
                 dialog.setFilterDetail(filterBean);

+ 6 - 13
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultPresenter.java

@@ -16,7 +16,6 @@ import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 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.IWaiterCallable;
 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.FilterDialog;
@@ -271,21 +270,15 @@ public class SearchResultPresenter extends Presenter<SearchResultModel, ISearchR
 
           @Override
           public void onFilterDetail(FilterDialog dialog, FilterBean filterBean) {
+            /**
+             * 필터 세부 요청 시 다이얼로그 인터렉션이 중단된다.
+             * - dialog.setFilterDetail(filterBean) 또는 dialog.failFilterDetail(filterBean) 을 실행해야 인터렉션 재개.
+             * - dialog.setEnabled(true) 로 직접 실행할 수 있음.
+             */
             // 필터 세부 항목 요청
-            model.loadFilterDetail(filterBean, new IWaiterCallable() {
-              @Override
-              public void showWaiter() {
-                showFilterWaiter();
-              }
-
-              @Override
-              public void hideWaiter() {
-                hideFilterWaiter();
-              }
-            }, new IFilterDetailListener() {
+            model.loadFilterDetail(filterBean, filterDialog, new IFilterDetailListener() {
               @Override
               public void onCompleted(FilterBean filterBean) {
-
                 firebaseAnalyticsHelper.logScreen(R.string.fa_screen_search_filter_detail, filterBean.getFilterName());
 
                 dialog.setFilterDetail(filterBean);