mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 06:15:12 +00:00
Add mention highlighting feature
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
2a863bb40a
commit
043ff37f62
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user