Explorar el Código

Add mention highlighting feature

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic hace 7 años
padre
commit
043ff37f62

+ 13 - 3
app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java

@@ -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);
 
     }
 }

+ 10 - 19
app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java

@@ -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);
         }
     }