|
|
@@ -16,6 +16,7 @@ import kr.co.zumo.app.lifeplus.bean.api.SearchContentsBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.SearchRequestBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.SearchResultBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.TagBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.TagCheckBean;
|
|
|
import kr.co.zumo.app.lifeplus.model.Model;
|
|
|
import kr.co.zumo.app.lifeplus.model.module.APIError;
|
|
|
import kr.co.zumo.app.lifeplus.model.module.APIModuleSimpleListener;
|
|
|
@@ -39,7 +40,7 @@ public class SearchResultModel extends Model {
|
|
|
protected Disposable disposableSearch;
|
|
|
protected List<SearchContentsBean> resultContentsBeans;
|
|
|
private String deliveredTag;
|
|
|
- private String[] deliveredTags;
|
|
|
+ private String[] searchTags;
|
|
|
|
|
|
private int hashCode = this.hashCode();
|
|
|
|
|
|
@@ -52,8 +53,9 @@ public class SearchResultModel extends Model {
|
|
|
}
|
|
|
|
|
|
private int listCount = 0;
|
|
|
- private List<TagBean> tagBeans;
|
|
|
+ private List<TagCheckBean> tagCheckBeans;
|
|
|
private List<CategoryBean> categoryBeans;
|
|
|
+ private List<TagBean> tagResultBeans;
|
|
|
|
|
|
public SearchResultModel() {
|
|
|
ContentsFlagHelper.getInstance().registerChangedObserver(hashCode);
|
|
|
@@ -100,9 +102,39 @@ public class SearchResultModel extends Model {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void search(int index, boolean isChecked) {
|
|
|
+ Log.w("APP# SearchResultModel | search", "|" + " prev searchTags: " + Arrays.toString(searchTags));
|
|
|
+ Log.w("APP# SearchResultModel | search", "|" + " index: " + index + ", isChecked: " + isChecked);
|
|
|
+ TagCheckBean tagCheckBean = tagCheckBeans.get(index);
|
|
|
+ tagCheckBean.setChecked(isChecked);
|
|
|
+ StringBuilder builder = new StringBuilder();
|
|
|
+
|
|
|
+ int len = tagCheckBeans.size();
|
|
|
+ for (int i = 0; i < len; ++i) {
|
|
|
+ tagCheckBean = tagCheckBeans.get(i);
|
|
|
+
|
|
|
+ if (tagCheckBean.isChecked()) {
|
|
|
+ if (builder.length() > 0) {
|
|
|
+ builder.append(" ");
|
|
|
+ }
|
|
|
+ builder.append(tagCheckBean.getTagName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setSearchTag(builder.toString());
|
|
|
+ search();
|
|
|
+ }
|
|
|
+
|
|
|
public void search() {
|
|
|
stopSearch();
|
|
|
- disposableSearch = new APISearchModule().call(getSearchRequestBean(), new APIModuleSimpleListener<SearchResultBean>(waiterCaller) {
|
|
|
+ SearchRequestBean requestBean = new SearchRequestBean(getSearchTag());
|
|
|
+ Log.w("APP# SearchModel | search", "|" + " search ---> " + requestBean.toJson());
|
|
|
+ if (StringUtil.isEmpty(requestBean.getKeyword())) {
|
|
|
+ Log.i("APP# SearchResultModel | search", "|" + " 검색어 없음.");
|
|
|
+ waiterCaller.hideWaiter();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ disposableSearch = new APISearchModule().call(requestBean, new APIModuleSimpleListener<SearchResultBean>(waiterCaller) {
|
|
|
@Override
|
|
|
public void onApiSuccess(SearchResultBean resultBean) {
|
|
|
|
|
|
@@ -115,38 +147,55 @@ public class SearchResultModel extends Model {
|
|
|
resultContentsBeans = resultBean.getData();
|
|
|
listCount = resultBean.getListCount();
|
|
|
categoryBeans = resultBean.getCategoryBeans();
|
|
|
- tagBeans = resultBean.getTagBeans();
|
|
|
+ tagResultBeans = resultBean.getTagBeans();
|
|
|
|
|
|
- if (null == tagBeans) {
|
|
|
- tagBeans = new ArrayList<>();
|
|
|
+ if (null == tagResultBeans) {
|
|
|
+ tagResultBeans = new ArrayList<>();
|
|
|
}
|
|
|
if (null == categoryBeans) {
|
|
|
categoryBeans = new ArrayList<>();
|
|
|
}
|
|
|
|
|
|
- if (tagBeans.size() > 0) {
|
|
|
- Log.i("APP# SearchResultModel | onApiSuccess", "|" + "------------------- tagBeans.size(): " + tagBeans.size());
|
|
|
+ // 검색 된 태그 표시 -> 처음에만 설정 해줌.
|
|
|
+ if (null == tagCheckBeans) {
|
|
|
+ tagCheckBeans = new ArrayList<>();
|
|
|
+ int len = searchTags.length;
|
|
|
+ for (int i = 0; i < len; ++i) {
|
|
|
+ String tag = searchTags[i];
|
|
|
+ boolean isChecked = false;
|
|
|
+ for (TagBean tagBean : tagResultBeans) {
|
|
|
+ if (tag.equals(StringUtil.toTag(tagBean.getTagName()))) {
|
|
|
+ isChecked = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tagCheckBeans.add(new TagCheckBean(tag, isChecked));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (tagResultBeans.size() > 0) {
|
|
|
+ Log.i("APP# SearchResultModel | onApiSuccess", "|" + "------------------- tagBeans.size(): " + tagResultBeans.size());
|
|
|
// 검색 결과 있음
|
|
|
- if (deliveredTags.length == tagBeans.size()) {
|
|
|
+ if (searchTags.length == tagResultBeans.size()) {
|
|
|
// tag 수 같음
|
|
|
// -> count 추가
|
|
|
- resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_COUNT, listCount, getResultTag()));
|
|
|
+ resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_COUNT, listCount, getResultTag(tagResultBeans)));
|
|
|
}
|
|
|
else {
|
|
|
// tag 수 다름
|
|
|
// -> tag no result 추가
|
|
|
// -> count 추가
|
|
|
- resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_COUNT, listCount, getResultTag()));
|
|
|
- resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_NOTHING, deliveredTag));
|
|
|
+ resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_COUNT, listCount, getResultTag(tagResultBeans)));
|
|
|
+ resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_NOTHING, getSearchTag()));
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- Log.i("APP# SearchResultModel | onApiSuccess", "|" + "------------------- tagBeans: " + tagBeans);
|
|
|
+ Log.i("APP# SearchResultModel | onApiSuccess", "|" + "------------------- tagBeans: " + tagResultBeans);
|
|
|
// 검색 결과 없음
|
|
|
// -> no result 추가
|
|
|
// -> 추천 콘텐트 추가
|
|
|
resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_RECOMMEND));
|
|
|
- resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_NOTHING_WITH_ICON, deliveredTag));
|
|
|
+ resultContentsBeans.add(0, new SearchContentsBean(SearchContentsBean.TYPE_NOTHING_WITH_ICON, getSearchTag()));
|
|
|
}
|
|
|
|
|
|
onResult(new Event.Builder(Event.SUCCESS).integer(Event.TAG_SEARCH).build());
|
|
|
@@ -159,7 +208,7 @@ public class SearchResultModel extends Model {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private String getResultTag() {
|
|
|
+ private String getResultTag(List<TagBean> tagBeans) {
|
|
|
int len = tagBeans.size();
|
|
|
StringBuilder tag = new StringBuilder();
|
|
|
for (int i = 0; i < len; ++i) {
|
|
|
@@ -176,20 +225,24 @@ public class SearchResultModel extends Model {
|
|
|
return resultContentsBeans;
|
|
|
}
|
|
|
|
|
|
- private SearchRequestBean getSearchRequestBean() {
|
|
|
- // 공백 제거
|
|
|
- String searchTag = TextUtils.join("", deliveredTags);
|
|
|
- SearchRequestBean requestBean = new SearchRequestBean(searchTag);
|
|
|
- Log.w("APP# SearchModel | search", "|" + " search ---> " + requestBean.toPrettyJson());
|
|
|
- return requestBean;
|
|
|
+ private String getSearchTag() {
|
|
|
+ return TextUtils.join("", searchTags);
|
|
|
}
|
|
|
|
|
|
- public void setDeliveredTag(String tag) {
|
|
|
- Log.w("APP# SearchResultModel | setDeliveredTag", "|" + "-----------> " + tag);
|
|
|
- deliveredTags = tag.split(" ");
|
|
|
+ public void setDeliveredTag(String deliveredTag) {
|
|
|
+ this.deliveredTag = deliveredTag;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getDeliveredTag() {
|
|
|
+ return deliveredTag;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setSearchTag(String tag) {
|
|
|
+ Log.w("APP# SearchResultModel | setSearchTag", "|" + "-----------> " + tag);
|
|
|
+ searchTags = tag.split(" ");
|
|
|
|
|
|
// 내용이 없는 태그는 제거
|
|
|
- List<String> list = new ArrayList<>(Arrays.asList(deliveredTags));
|
|
|
+ List<String> list = new ArrayList<>(Arrays.asList(searchTags));
|
|
|
int len = list.size();
|
|
|
for (int i = len - 1; i >= 0; --i) {
|
|
|
String s = list.get(i);
|
|
|
@@ -197,25 +250,28 @@ public class SearchResultModel extends Model {
|
|
|
list.remove(i);
|
|
|
}
|
|
|
}
|
|
|
- deliveredTags = list.toArray(new String[0]);
|
|
|
- deliveredTag = TextUtils.join(" ", deliveredTags);
|
|
|
- Log.w("APP# SearchResultModel | setDeliveredTag", "|" + " deliveredTags: " + Arrays.toString(deliveredTags));
|
|
|
- Log.w("APP# SearchResultModel | setDeliveredTag", "|" + " deliveredTag: " + deliveredTag);
|
|
|
+ searchTags = list.toArray(new String[0]);
|
|
|
+ Log.w("APP# SearchResultModel | setSearchTag", "|" + " searchTags: " + Arrays.toString(searchTags));
|
|
|
+ Log.w("APP# SearchResultModel | setSearchTag", "|" + " searchTag: " + getSearchTag());
|
|
|
}
|
|
|
|
|
|
public int getListCount() {
|
|
|
return listCount;
|
|
|
}
|
|
|
|
|
|
- public List<TagBean> getTagBeans() {
|
|
|
- return tagBeans;
|
|
|
+ public List<TagCheckBean> getTagCheckBeans() {
|
|
|
+ return tagCheckBeans;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<TagBean> getTagResultBeans() {
|
|
|
+ return tagResultBeans;
|
|
|
}
|
|
|
|
|
|
public List<CategoryBean> getCategoryBeans() {
|
|
|
return categoryBeans;
|
|
|
}
|
|
|
|
|
|
- public String[] getDeliveredTags() {
|
|
|
- return deliveredTags;
|
|
|
+ public String[] getSearchTags() {
|
|
|
+ return searchTags;
|
|
|
}
|
|
|
}
|