Fix call chips in edit text

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-04-10 12:15:46 +02:00
parent c121ffdd5d
commit bd3eae81d2
5 changed files with 33 additions and 19 deletions

View File

@ -45,18 +45,28 @@ import java.util.List;
public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder> public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
implements IFilterable<String> { implements IFilterable<String> {
private String userId; private String objectId;
private String displayName; private String displayName;
private String source;
private UserEntity currentUser; private UserEntity currentUser;
public MentionAutocompleteItem(String userId, String displayName, UserEntity currentUser) { public MentionAutocompleteItem(String objectId, String displayName, String source, UserEntity currentUser) {
this.userId = userId; this.objectId = objectId;
this.displayName = displayName; this.displayName = displayName;
this.source = source;
this.currentUser = currentUser; this.currentUser = currentUser;
} }
public String getUserId() { public String getSource() {
return userId; return source;
}
public void setSource(String source) {
this.source = source;
}
public String getObjectId() {
return objectId;
} }
public String getDisplayName() { public String getDisplayName() {
@ -67,7 +77,7 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
public boolean equals(Object o) { public boolean equals(Object o) {
if (o instanceof MentionAutocompleteItem) { if (o instanceof MentionAutocompleteItem) {
MentionAutocompleteItem inItem = (MentionAutocompleteItem) o; MentionAutocompleteItem inItem = (MentionAutocompleteItem) o;
return (userId.equals(inItem.userId) && displayName.equals(inItem.displayName)); return (objectId.equals(inItem.objectId) && displayName.equals(inItem.displayName));
} }
return false; return false;
@ -93,22 +103,22 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
String.valueOf(adapter.getFilter(String.class)), NextcloudTalkApplication.getSharedApplication() String.valueOf(adapter.getFilter(String.class)), NextcloudTalkApplication.getSharedApplication()
.getResources().getColor(R.color.colorPrimary)); .getResources().getColor(R.color.colorPrimary));
if (holder.contactMentionId != null) { if (holder.contactMentionId != null) {
FlexibleUtils.highlightText(holder.contactMentionId, "@" + userId, FlexibleUtils.highlightText(holder.contactMentionId, "@" + objectId,
String.valueOf(adapter.getFilter(String.class)), NextcloudTalkApplication.getSharedApplication() String.valueOf(adapter.getFilter(String.class)), NextcloudTalkApplication.getSharedApplication()
.getResources().getColor(R.color.colorPrimary)); .getResources().getColor(R.color.colorPrimary));
} }
} else { } else {
holder.contactDisplayName.setText(displayName); holder.contactDisplayName.setText(displayName);
if (holder.contactMentionId != null) { if (holder.contactMentionId != null) {
holder.contactMentionId.setText("@" + userId); holder.contactMentionId.setText("@" + objectId);
} }
} }
if (userId.equals("all")) { if (source.equals("calls")) {
holder.avatarFlipView.setFrontImageBitmap(DisplayUtils.getRoundedBitmapFromVectorDrawableResource(NextcloudTalkApplication.getSharedApplication().getResources(), R.drawable.ic_people_group_white_24px)); holder.avatarFlipView.setFrontImageBitmap(DisplayUtils.getRoundedBitmapFromVectorDrawableResource(NextcloudTalkApplication.getSharedApplication().getResources(), R.drawable.ic_people_group_white_24px));
} else { } else {
GlideUrl glideUrl = new GlideUrl(ApiUtils.getUrlForAvatarWithName(currentUser.getBaseUrl(), GlideUrl glideUrl = new GlideUrl(ApiUtils.getUrlForAvatarWithName(currentUser.getBaseUrl(),
userId, R.dimen.avatar_size), new LazyHeaders.Builder() objectId, R.dimen.avatar_size), new LazyHeaders.Builder()
.setHeader("Accept", "image/*") .setHeader("Accept", "image/*")
.setHeader("User-Agent", ApiUtils.getUserAgent()) .setHeader("User-Agent", ApiUtils.getUserAgent())
.build()); .build());
@ -129,7 +139,7 @@ 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 objectId != null && StringUtils.containsIgnoreCase(objectId, constraint) ||
displayName != null && StringUtils.containsIgnoreCase(displayName, constraint); displayName != null && StringUtils.containsIgnoreCase(displayName, constraint);
} }

View File

@ -51,7 +51,7 @@ public class MentionAutocompleteCallback implements AutocompleteCallback<Mention
editable.replace(start, end, replacement + " "); editable.replace(start, end, replacement + " ");
Spans.MentionChipSpan mentionChipSpan = Spans.MentionChipSpan mentionChipSpan =
new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context, new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context,
item.getId(), item.getLabel(), conversationUser, "user", item.getId(), item.getLabel(), conversationUser, item.getSource(),
R.xml.chip_accent_background), R.xml.chip_accent_background),
DynamicDrawableSpan.ALIGN_BASELINE, DynamicDrawableSpan.ALIGN_BASELINE,
item.getId(), item.getLabel()); item.getId(), item.getLabel());

View File

@ -20,6 +20,7 @@
package com.nextcloud.talk.models.json.mention; package com.nextcloud.talk.models.json.mention;
import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonIgnore;
import com.bluelinelabs.logansquare.annotation.JsonObject; import com.bluelinelabs.logansquare.annotation.JsonObject;
import lombok.Data; import lombok.Data;
import org.parceler.Parcel; import org.parceler.Parcel;
@ -34,7 +35,7 @@ public class Mention {
@JsonField(name = "label") @JsonField(name = "label")
String label; String label;
// type of user (guests or users) // type of user (guests or users or calls)
@JsonField(name = "source") @JsonField(name = "source")
String source; String source;
} }

View File

@ -113,7 +113,8 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
List<AbstractFlexibleItem> internalAbstractFlexibleItemList = new ArrayList<>(); List<AbstractFlexibleItem> internalAbstractFlexibleItemList = new ArrayList<>();
for (Mention mention : mentionsList) { for (Mention mention : mentionsList) {
internalAbstractFlexibleItemList.add( internalAbstractFlexibleItemList.add(
new MentionAutocompleteItem(mention.getId(), mention.getLabel(), new MentionAutocompleteItem(mention.getId(),
mention.getLabel(), mention.getSource(),
currentUser)); currentUser));
} }
@ -143,9 +144,9 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter<Mention>
Mention mention = new Mention(); Mention mention = new Mention();
MentionAutocompleteItem mentionAutocompleteItem = (MentionAutocompleteItem) adapter.getItem(position); MentionAutocompleteItem mentionAutocompleteItem = (MentionAutocompleteItem) adapter.getItem(position);
if (mentionAutocompleteItem != null) { if (mentionAutocompleteItem != null) {
mention.setId(mentionAutocompleteItem.getUserId()); mention.setId(mentionAutocompleteItem.getObjectId());
mention.setLabel(mentionAutocompleteItem.getDisplayName()); mention.setLabel(mentionAutocompleteItem.getDisplayName());
mention.setSource("users"); mention.setSource(mentionAutocompleteItem.getSource());
dispatchClick(mention); dispatchClick(mention);
} }
return true; return true;

View File

@ -70,6 +70,7 @@ import com.vanniktech.emoji.EmojiTextView;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Objects;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -228,7 +229,9 @@ public class DisplayUtils {
int drawable; int drawable;
if (!"call".equals(type)) { boolean isCall = "call".equals(type) || "calls".equals(type);
if (!isCall) {
if (chipResource == R.xml.chip_accent_background) { if (chipResource == R.xml.chip_accent_background) {
drawable = R.drawable.white_circle; drawable = R.drawable.white_circle;
} else { } else {
@ -242,7 +245,7 @@ public class DisplayUtils {
chip.setBounds(0, 0, chip.getIntrinsicWidth(), chip.getIntrinsicHeight()); chip.setBounds(0, 0, chip.getIntrinsicWidth(), chip.getIntrinsicHeight());
if (!"call".equals(type)) { if (!isCall) {
ImageRequest imageRequest = ImageRequest imageRequest =
getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(conversationUser.getBaseUrl(), id, R.dimen.avatar_size_big)); getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(conversationUser.getBaseUrl(), id, R.dimen.avatar_size_big));
ImagePipeline imagePipeline = Fresco.getImagePipeline(); ImagePipeline imagePipeline = Fresco.getImagePipeline();
@ -255,7 +258,6 @@ public class DisplayUtils {
protected void onNewResultImpl(Bitmap bitmap) { protected void onNewResultImpl(Bitmap bitmap) {
if (bitmap != null) { if (bitmap != null) {
chip.setChipIcon(getRoundedDrawable(new BitmapDrawable(bitmap))); chip.setChipIcon(getRoundedDrawable(new BitmapDrawable(bitmap)));
chip.invalidateSelf();
} }
} }