Sfoglia il codice sorgente

[검색][New] 검색 결과 진행 중

hyodong.min 7 anni fa
parent
commit
c18cdc9c19

+ 13 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/util/StringUtil.java

@@ -469,4 +469,17 @@ public class StringUtil {
     }
     return s;
   }
+
+  /**
+   * 첫 # 제거
+   *
+   * @param s
+   * @return
+   */
+  public static String stripTag(String s) {
+    if (StringUtil.isFull(s) && StringUtil.HASH.equals(String.valueOf(s.charAt(0)))) {
+      s = s.substring(1, s.length());
+    }
+    return s;
+  }
 }

+ 3 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/ISearchResultView.java

@@ -6,6 +6,7 @@ package kr.co.zumo.app.lifeplus.view.screen.search;
 import java.util.List;
 
 import kr.co.zumo.app.lifeplus.bean.api.SearchContentsBean;
+import kr.co.zumo.app.lifeplus.bean.api.TagBean;
 import kr.co.zumo.app.lifeplus.view.IView;
 
 /**
@@ -22,4 +23,6 @@ interface ISearchResultView extends IView {
   void drawResultContents(List<SearchContentsBean> tagBeans);
 
   void setVisibleCategory(boolean isVisible);
+
+  void drawTags(String[] deliveredTags, List<TagBean> tagBeans);
 }

+ 23 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultFragment.java

@@ -3,6 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.search;
 
+import android.graphics.Rect;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -16,6 +17,7 @@ import java.util.List;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.SearchContentsBean;
+import kr.co.zumo.app.lifeplus.bean.api.TagBean;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
@@ -58,6 +60,12 @@ public class SearchResultFragment extends FragmentBase<SearchResultPresenter> im
       );
 
     recyclerViewTags = findViewById(R.id.recycler_view_tag);
+    recyclerViewTags.addItemDecoration(new RecyclerView.ItemDecoration() {
+      @Override
+      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        outRect.right = ResourceUtil.dpToPx(9);
+      }
+    });
     recyclerViewResultContents = findViewById(R.id.recycler_view_search_result);
     containerCategory = findViewById(R.id.container_category);
 
@@ -78,6 +86,7 @@ public class SearchResultFragment extends FragmentBase<SearchResultPresenter> im
   @Override
   protected void onAfterDestroyView() {
     searchResultAdapter = null;
+    tagAdapter = null;
   }
 
   @Override
@@ -91,6 +100,7 @@ public class SearchResultFragment extends FragmentBase<SearchResultPresenter> im
   }
 
   private SearchResultAdapter searchResultAdapter;
+  private SearchResultTagAdapter tagAdapter;
 
   @Override
   public void drawResultContents(List<SearchContentsBean> contentsBeans) {
@@ -109,4 +119,17 @@ public class SearchResultFragment extends FragmentBase<SearchResultPresenter> im
   public void setVisibleCategory(boolean isVisible) {
     containerCategory.setVisibility(isVisible ? View.VISIBLE : View.GONE);
   }
+
+  @Override
+  public void drawTags(String[] deliveredTags, List<TagBean> tagBeans) {
+    if (null == tagAdapter) {
+      tagAdapter = new SearchResultTagAdapter(deliveredTags, tagBeans, event -> {
+        presenter.onEvent(event);
+      });
+      recyclerViewTags.setAdapter(tagAdapter);
+    }
+    else {
+      tagAdapter.update(tagBeans);
+    }
+  }
 }

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultItemHolder.java

@@ -80,7 +80,7 @@ public class SearchResultItemHolder extends SearchResultHolder {
 
   private void attachEvent(View view, IEventListener listener) {
     view.setOnClickListener(v -> {
-      listener.onEvent(new Event.Builder(Event.CLICK).index(getAdapterPosition()).build());
+      listener.onEvent(new Event.Builder(Event.CONTENTS).index(getAdapterPosition()).build());
     });
   }
 }

+ 12 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultModel.java

@@ -3,6 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.search;
 
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.util.ArrayList;
@@ -37,7 +38,7 @@ public class SearchResultModel extends Model {
   protected Disposable disposableSearch;
   protected List<SearchContentsBean> resultContentsBeans;
   private String deliveredTag;
-  private int countOfDeliveredTag = 0;
+  private String[] deliveredTags;
 
   private int hashCode = this.hashCode();
 
@@ -125,7 +126,7 @@ public class SearchResultModel extends Model {
         if (tagBeans.size() > 0) {
           Log.i("APP# SearchResultModel | onApiSuccess", "|" + "------------------- tagBeans.size(): " + tagBeans.size());
           // 검색 결과 있음
-          if (countOfDeliveredTag == tagBeans.size()) {
+          if (deliveredTags.length == tagBeans.size()) {
             // tag 수 같음
             // -> count 추가
             resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_COUNT, listCount, getResultTag()));
@@ -176,17 +177,16 @@ public class SearchResultModel extends Model {
 
   private SearchRequestBean getSearchRequestBean() {
     // 공백 제거
-//    String searchTag = tag.replace(' ', Character.MIN_VALUE);
-    String searchTag = deliveredTag.replace(" ", "");
+    String searchTag = TextUtils.join("", deliveredTags);
     SearchRequestBean requestBean = new SearchRequestBean(searchTag);
     Log.w("APP# SearchModel | search", "|" + " search ---> " + requestBean.toPrettyJson());
     return requestBean;
   }
 
-  public void setDeliveredTag(String deliveredTag) {
-    countOfDeliveredTag = StringUtil.count(deliveredTag, StringUtil.HASH);
-    Log.i("APP# SearchResultModel | setDeliveredTag", "|" + " countOfDeliveredTag: " + countOfDeliveredTag);
-    this.deliveredTag = deliveredTag;
+  public void setDeliveredTag(String tag) {
+    deliveredTag = tag;
+    deliveredTags = tag.split(" ");
+    Log.i("APP# SearchResultModel | setDeliveredTag", "|" + " deliveredTags: " + deliveredTags.length);
   }
 
   public int getListCount() {
@@ -200,4 +200,8 @@ public class SearchResultModel extends Model {
   public List<CategoryBean> getCategoryBeans() {
     return categoryBeans;
   }
+
+  public String[] getDeliveredTags() {
+    return deliveredTags;
+  }
 }

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

@@ -39,6 +39,7 @@ public class SearchResultPresenter extends Presenter<SearchResultModel, ISearchR
 
   private void render() {
     List<SearchContentsBean> list = model.getResultContentsBeans();
+    view.drawTags(model.getDeliveredTags(), model.getTagBeans());
     view.setVisibleCategory(model.getTagBeans().size() > 0);
     view.drawResultContents(list);
   }
@@ -96,7 +97,7 @@ public class SearchResultPresenter extends Presenter<SearchResultModel, ISearchR
   @Override
   protected void onEventInternal(Event event) {
     switch (event.getEventId()) {
-      case Event.CLICK:
+      case Event.CONTENTS:
         // item click
         int index = event.getIndex();
         SearchContentsBean bean = model.getResultContentsBeans().get(index);
@@ -104,6 +105,9 @@ public class SearchResultPresenter extends Presenter<SearchResultModel, ISearchR
         model.setDeliveryPackaging(contentsDeliveryBean);
         go(ScreenID.CONTENTS);
 
+        break;
+      case Event.TAG:
+        // tag 선택
         break;
       default:
         break;

+ 73 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultTagAdapter.java

@@ -0,0 +1,73 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.screen.search;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.api.TagBean;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
+import kr.co.zumo.app.lifeplus.view.IEventListener;
+
+/**
+ * SearchResultTagAdapter
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 1. 16.]   [최초 작성]
+ * @since 2019. 1. 16.
+ */
+public class SearchResultTagAdapter extends RecyclerView.Adapter<SearchResultTagHolder> {
+
+  protected String[] deliveredTags;
+  protected List<TagBean> tagBeans;
+  protected IEventListener listener;
+
+  public SearchResultTagAdapter(String[] tags, List<TagBean> tagBeans, IEventListener listener) {
+    this.deliveredTags = tags;
+    this.tagBeans = tagBeans;
+    this.listener = listener;
+  }
+
+  @NonNull
+  @Override
+  public SearchResultTagHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_square_check_box, parent, false);
+    return new SearchResultTagHolder(view);
+  }
+
+  @Override
+  public void onBindViewHolder(@NonNull SearchResultTagHolder holder, int position) {
+
+    String tag = StringUtil.stripTag(deliveredTags[position]);
+    boolean isChecked = false;
+
+    for (TagBean tagBean : tagBeans) {
+      if (tag.equals(tagBean.getTagName())) {
+        isChecked = true;
+        break;
+      }
+    }
+
+    holder.bind(tag, isChecked, listener);
+  }
+
+  @Override
+  public int getItemCount() {
+    return deliveredTags.length;
+  }
+
+  public void update(List<TagBean> tagBeans) {
+    this.tagBeans = tagBeans;
+    notifyDataSetChanged();
+  }
+}

+ 43 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultTagHolder.java

@@ -0,0 +1,43 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.screen.search;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.CheckBox;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.IEventListener;
+
+/**
+ * SearchResultTagHolder
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 1. 14.]   [최초 작성]
+ * @since 2019. 1. 14.
+ */
+public class SearchResultTagHolder extends RecyclerView.ViewHolder {
+  protected CheckBox checkTag;
+
+  public SearchResultTagHolder(View itemView) {
+    super(itemView);
+
+    checkTag = itemView.findViewById(R.id.check_box);
+  }
+
+  public void bind(String tag, boolean isChecked, IEventListener listener) {
+    if (null != tag) {
+      checkTag.setText(tag);
+
+      checkTag.setChecked(isChecked);
+      checkTag.setOnClickListener(v -> {
+        listener.onEvent(new Event.Builder(Event.TAG).index(getAdapterPosition()).bool(checkTag.isChecked()).build());
+      });
+    }
+  }
+}

+ 2 - 3
app/src/main/res/layout/fragment_search_result.xml

@@ -22,9 +22,8 @@
     <android.support.v7.widget.RecyclerView
       android:id="@+id/recycler_view_tag"
       android:layout_width="0dp"
-      android:layout_height="match_parent"
+      android:layout_height="wrap_content"
       android:layout_marginStart="42dp"
-      android:paddingEnd="0dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
@@ -69,9 +68,9 @@
       android:id="@+id/recycler_view_search_result"
       android:layout_width="match_parent"
       android:layout_height="0dp"
+      android:clipToPadding="false"
       android:paddingTop="5dp"
       android:paddingBottom="35dp"
-      android:clipToPadding="false"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintTop_toTopOf="parent"/>
   </android.support.constraint.ConstraintLayout>

+ 30 - 0
app/src/main/res/layout/search_square_check_box.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto"
+  xmlns:tools="http://schemas.android.com/tools"
+  android:layout_width="wrap_content"
+  android:layout_height="wrap_content">
+
+  <CheckBox
+    android:id="@+id/check_box"
+    android:layout_width="wrap_content"
+    android:layout_height="26dp"
+    android:background="@drawable/custom_rectangle_radio_selector"
+    android:button="@android:color/transparent"
+    android:lineSpacingExtra="4sp"
+    android:paddingStart="17dp"
+    android:paddingEnd="17dp"
+    android:saveEnabled="false"
+    android:textAlignment="center"
+    android:textColor="@drawable/my_faq_radio_text_selector"
+    android:textSize="12dp"
+    app:layout_constraintBottom_toBottomOf="parent"
+    app:layout_constraintEnd_toEndOf="parent"
+    app:layout_constraintStart_toStartOf="parent"
+    app:layout_constraintTop_toTopOf="parent"
+    tools:checked="true"
+    tools:text="#산책부터목욕까지"
+    />
+
+</android.support.constraint.ConstraintLayout>