Explorar o código

[검색][New] 최근 검색 중복 제거, 리턴 시 목록 업데이트

hyodong.min %!s(int64=7) %!d(string=hai) anos
pai
achega
86dca76827

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

@@ -88,9 +88,19 @@ public class SearchModel extends Model {
 
   public void saveLatestTag(String tag) {
     Log.i("APP# SearchModel | saveLatestTag", "|" + " save tag => " + tag);
-    latestTagBeans.add(0, new TagBean(toTag(tag)));
+    tag = toTag(tag);
+    // 동일 태그가 있는지 확인, 중복 태그 삭제
+    int len = latestTagBeans.size();
+    for (int i = 0; i < len; ++i) {
+      if (tag.equals(latestTagBeans.get(i).getTagName())) {
+        latestTagBeans.remove(i);
+        break;
+      }
+    }
+
+    latestTagBeans.add(0, new TagBean(tag));
     if (latestTagBeans.size() > 5) {
-      removeLatestTag(5);
+      removeLatestTagInternal(5);
     }
 
     SearchLatestTagResultBean resultBean = new SearchLatestTagResultBean();
@@ -98,9 +108,17 @@ public class SearchModel extends Model {
     SuperModel.getInstance().getPreferences().setTagLatestList(resultBean.toJson());
   }
 
-  public void removeLatestTag(int index) {
+  private void removeLatestTagInternal(int index) {
     TagBean tagBean = latestTagBeans.remove(index);
-    Log.i("APP# SearchModel | removeLatestTag", "|" + " latest removed: " + latestTagBeans.size() + ", tag: " + tagBean.getTagName());
+    Log.i("APP# SearchModel | removeLatestTagInternal", "|" + " latest removed: " + latestTagBeans.size() + ", tag: " + tagBean.getTagName());
+  }
+
+  public void removeLatestTag(int index) {
+    removeLatestTagInternal(index);
+
+    SearchLatestTagResultBean resultBean = new SearchLatestTagResultBean();
+    resultBean.setData(latestTagBeans);
+    SuperModel.getInstance().getPreferences().setTagLatestList(resultBean.toJson());
   }
 
   public void loadLatest() {
@@ -115,6 +133,7 @@ public class SearchModel extends Model {
     else {
       latestTagBeans = new ArrayList<>();
     }
+
     onResult(new Event.Builder(Event.SUCCESS).integer(Event.TAG_LATEST).build());
   }
 

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

@@ -94,7 +94,8 @@ public class SearchPresenter extends Presenter<SearchModel, ISearchView> {
 
   @Override
   protected void startInternal() {
-
+    // 최근 검색어 리로드
+    renderLatest();
   }
 
   @Override

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

@@ -13,6 +13,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.supervisor.ContentsFlagHelper;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
 
 /**
@@ -70,7 +71,14 @@ public class SearchResultAdapter extends RecyclerView.Adapter<SearchResultHolder
 
   @Override
   public void onBindViewHolder(@NonNull SearchResultHolder holder, int position) {
-    holder.bind(contentsBeans.get(position), listener);
+
+    SearchContentsBean bean = contentsBeans.get(position);
+
+    // 좋아요/북마크 세팅
+    bean.updateLike(ContentsFlagHelper.getInstance());
+    bean.updateBookmark(ContentsFlagHelper.getInstance());
+
+    holder.bind(bean, listener);
   }
 
   @Override

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

@@ -4,9 +4,14 @@
 package kr.co.zumo.app.lifeplus.view.screen.search;
 
 import android.view.View;
+import android.widget.Checkable;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+
+import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.SearchContentsBean;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
 
@@ -23,12 +28,32 @@ import kr.co.zumo.app.lifeplus.view.IEventListener;
 public class SearchResultItemHolder extends SearchResultHolder {
   protected ImageView imageResult;
   protected TextView textTitle;
+  protected Checkable checkLike;
+  protected Checkable checkBookmark;
+
   public SearchResultItemHolder(View itemView) {
     super(itemView);
+
+    imageResult = itemView.findViewById(R.id.image_view_result);
+    textTitle = itemView.findViewById(R.id.text_title);
+
+    checkLike = itemView.findViewById(R.id.like_check);
+    checkBookmark = itemView.findViewById(R.id.book_mark_check);
   }
 
   @Override
   public void bind(SearchContentsBean bean, IEventListener listener) {
 
+    if(null != bean) {
+      imageResult.setScaleType(ImageView.ScaleType.CENTER);
+      Glide.with(imageResult)
+        .asBitmap()
+        .apply(new RequestOptions().placeholder(R.drawable.image_loading_middle))
+        .load(bean.getImageUrl()).into(imageResult);
+      textTitle.setText(bean.getTwoLineTitle());
+
+      checkLike.setChecked(bean.isLiked());
+      checkBookmark.setChecked(bean.isBookmarked());
+    }
   }
 }

+ 4 - 2
app/src/main/res/layout/search_result_item_view.xml

@@ -45,12 +45,13 @@
     app:layout_constraintTop_toBottomOf="@+id/text_title"
     >
 
-    <CheckBox
+    <kr.co.zumo.app.lifeplus.view.custom.LikeCheckbox
       android:id="@+id/like_check"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@null"
       android:button="@null"
+      android:clickable="false"
       android:drawableLeft="@drawable/custom_like_check"
       android:paddingStart="6dp"
       android:paddingEnd="4dp"
@@ -61,12 +62,13 @@
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintVertical_bias="0.0"/>
 
-    <CheckBox
+    <kr.co.zumo.app.lifeplus.view.custom.BookmarkCheckbox
       android:id="@+id/book_mark_check"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@null"
       android:button="@null"
+      android:clickable="false"
       android:drawableLeft="@drawable/custom_book_mark_check"
       android:paddingStart="4dp"
       android:paddingEnd="6dp"