mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 03:59:35 +01: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.AbstractFlexibleItem;
|
||||||
import eu.davidea.flexibleadapter.items.IFilterable;
|
import eu.davidea.flexibleadapter.items.IFilterable;
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible;
|
import eu.davidea.flexibleadapter.items.IFlexible;
|
||||||
|
import eu.davidea.flexibleadapter.utils.FlexibleUtils;
|
||||||
|
|
||||||
public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
|
public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
|
||||||
implements IFilterable<String> {
|
implements IFilterable<String> {
|
||||||
@ -86,8 +87,16 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bindViewHolder(FlexibleAdapter<IFlexible> adapter, UserItem.UserItemViewHolder holder, int position, List<Object> payloads) {
|
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(),
|
GlideUrl glideUrl = new GlideUrl(ApiUtils.getUrlForAvatarWithName(currentUser.getBaseUrl(),
|
||||||
userId, false), new LazyHeaders.Builder()
|
userId, false), new LazyHeaders.Builder()
|
||||||
@ -110,7 +119,8 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filter(String constraint) {
|
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) {
|
if (query != null && query.length() > 0) {
|
||||||
UserEntity currentUser = userUtils.getCurrentUser();
|
UserEntity currentUser = userUtils.getCurrentUser();
|
||||||
|
|
||||||
|
adapter.setFilter(query.toString());
|
||||||
ncApi.getMentionAutocompleteSuggestions(ApiUtils.getCredentials(currentUser.getUserId(), currentUser
|
ncApi.getMentionAutocompleteSuggestions(ApiUtils.getCredentials(currentUser.getUserId(), currentUser
|
||||||
.getToken()), ApiUtils.getUrlForMentionSuggestions(currentUser.getBaseUrl(), roomToken),
|
.getToken()), ApiUtils.getUrlForMentionSuggestions(currentUser.getBaseUrl(), roomToken),
|
||||||
query.toString(), null)
|
query.toString(), null)
|
||||||
@ -101,25 +102,23 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
|
|||||||
@Override
|
@Override
|
||||||
public void onNext(MentionOverall mentionOverall) {
|
public void onNext(MentionOverall mentionOverall) {
|
||||||
List<Mention> mentionsList = mentionOverall.getOcs().getData();
|
List<Mention> mentionsList = mentionOverall.getOcs().getData();
|
||||||
userItemList = new ArrayList<>();
|
List<AbstractFlexibleItem> internalUserItemList = new ArrayList<>();
|
||||||
if (mentionsList.size() == 1 && mentionsList.get(0).getId().equals(query.toString())) {
|
if (mentionsList.size() == 0 ||
|
||||||
adapter.updateDataSet(userItemList, false);
|
(mentionsList.size() == 1 && mentionsList.get(0).getId().equals(query.toString()))) {
|
||||||
clearRecycledPool();
|
userItemList = new ArrayList<>();
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
} else {
|
} else {
|
||||||
for (Mention mention : mentionsList) {
|
for (Mention mention : mentionsList) {
|
||||||
userItemList.add(new MentionAutocompleteItem(mention.getId(), mention
|
internalUserItemList.add(new MentionAutocompleteItem(mention.getId(), mention
|
||||||
.getLabel(), currentUser));
|
.getLabel(), currentUser));
|
||||||
}
|
}
|
||||||
adapter.updateDataSet(userItemList, true);
|
adapter.updateDataSet(internalUserItemList, true);
|
||||||
clearRecycledPool();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
userItemList = new ArrayList<>();
|
adapter.updateDataSet(new ArrayList<>(), false);
|
||||||
adapter.updateDataSet(userItemList, false);
|
|
||||||
clearRecycledPool();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -128,15 +127,7 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
userItemList = new ArrayList<>();
|
adapter.updateDataSet(new ArrayList<>(), false);
|
||||||
adapter.updateDataSet(userItemList, false);
|
|
||||||
clearRecycledPool();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void clearRecycledPool() {
|
|
||||||
if (getRecyclerView() != null) {
|
|
||||||
getRecyclerView().getRecycledViewPool().clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user