Add mention highlighting feature

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2018-05-04 10:41:01 +02:00
parent 2a863bb40a
commit 043ff37f62
2 changed files with 23 additions and 22 deletions

View File

@ -41,6 +41,7 @@ import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
import eu.davidea.flexibleadapter.items.IFilterable;
import eu.davidea.flexibleadapter.items.IFlexible;
import eu.davidea.flexibleadapter.utils.FlexibleUtils;
public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
implements IFilterable<String> {
@ -86,8 +87,16 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
@Override
public void bindViewHolder(FlexibleAdapter<IFlexible> adapter, UserItem.UserItemViewHolder holder, int position, List<Object> payloads) {
holder.contactDisplayName.setText(displayName);
holder.contactMentionId.setText("@" + userId);
if (adapter.hasFilter()) {
FlexibleUtils.highlightText(holder.contactDisplayName, displayName,
String.valueOf(adapter.getFilter(String.class)));
FlexibleUtils.highlightText(holder.contactMentionId, "@" + userId,
String.valueOf(adapter.getFilter(String.class)));
} else {
holder.contactDisplayName.setText(displayName);
holder.contactMentionId.setText("@" + userId);
}
GlideUrl glideUrl = new GlideUrl(ApiUtils.getUrlForAvatarWithName(currentUser.getBaseUrl(),
userId, false), new LazyHeaders.Builder()
@ -110,7 +119,8 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
@Override
public boolean filter(String constraint) {
return userId != null && StringUtils.containsIgnoreCase(userId, constraint);
return userId != null && StringUtils.containsIgnoreCase(userId, constraint) ||
displayName != null && StringUtils.containsIgnoreCase(displayName, constraint);
}
}

View File

@ -87,6 +87,7 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
if (query != null && query.length() > 0) {
UserEntity currentUser = userUtils.getCurrentUser();
adapter.setFilter(query.toString());
ncApi.getMentionAutocompleteSuggestions(ApiUtils.getCredentials(currentUser.getUserId(), currentUser
.getToken()), ApiUtils.getUrlForMentionSuggestions(currentUser.getBaseUrl(), roomToken),
query.toString(), null)
@ -101,25 +102,23 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
@Override
public void onNext(MentionOverall mentionOverall) {
List<Mention> mentionsList = mentionOverall.getOcs().getData();
userItemList = new ArrayList<>();
if (mentionsList.size() == 1 && mentionsList.get(0).getId().equals(query.toString())) {
adapter.updateDataSet(userItemList, false);
clearRecycledPool();
List<AbstractFlexibleItem> internalUserItemList = new ArrayList<>();
if (mentionsList.size() == 0 ||
(mentionsList.size() == 1 && mentionsList.get(0).getId().equals(query.toString()))) {
userItemList = new ArrayList<>();
adapter.notifyDataSetChanged();
} else {
for (Mention mention : mentionsList) {
userItemList.add(new MentionAutocompleteItem(mention.getId(), mention
internalUserItemList.add(new MentionAutocompleteItem(mention.getId(), mention
.getLabel(), currentUser));
}
adapter.updateDataSet(userItemList, true);
clearRecycledPool();
adapter.updateDataSet(internalUserItemList, true);
}
}
@Override
public void onError(Throwable e) {
userItemList = new ArrayList<>();
adapter.updateDataSet(userItemList, false);
clearRecycledPool();
adapter.updateDataSet(new ArrayList<>(), false);
}
@Override
@ -128,15 +127,7 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
}
});
} else {
userItemList = new ArrayList<>();
adapter.updateDataSet(userItemList, false);
clearRecycledPool();
}
}
private void clearRecycledPool() {
if (getRecyclerView() != null) {
getRecyclerView().getRecycledViewPool().clear();
adapter.updateDataSet(new ArrayList<>(), false);
}
}