Update chips

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-04-10 14:16:26 +02:00
parent bd3eae81d2
commit 06992b400f
5 changed files with 25 additions and 26 deletions

View File

@ -31,14 +31,18 @@ import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.MagicCharPolicy; import com.nextcloud.talk.utils.MagicCharPolicy;
import com.nextcloud.talk.utils.text.Spans; import com.nextcloud.talk.utils.text.Spans;
import com.otaliastudios.autocomplete.AutocompleteCallback; import com.otaliastudios.autocomplete.AutocompleteCallback;
import com.vanniktech.emoji.EmojiEditText;
public class MentionAutocompleteCallback implements AutocompleteCallback<Mention> { public class MentionAutocompleteCallback implements AutocompleteCallback<Mention> {
private Context context; private Context context;
private UserEntity conversationUser; private UserEntity conversationUser;
private EmojiEditText emojiEditText;
public MentionAutocompleteCallback(Context context, UserEntity conversationUser) { public MentionAutocompleteCallback(Context context, UserEntity conversationUser,
EmojiEditText emojiEditText) {
this.context = context; this.context = context;
this.conversationUser = conversationUser; this.conversationUser = conversationUser;
this.emojiEditText = emojiEditText;
} }
@Override @Override
@ -52,10 +56,10 @@ public class MentionAutocompleteCallback implements AutocompleteCallback<Mention
Spans.MentionChipSpan mentionChipSpan = Spans.MentionChipSpan mentionChipSpan =
new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context, new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context,
item.getId(), item.getLabel(), conversationUser, item.getSource(), item.getId(), item.getLabel(), conversationUser, item.getSource(),
R.xml.chip_accent_background), R.xml.chip_accent_background, emojiEditText),
DynamicDrawableSpan.ALIGN_BASELINE, DynamicDrawableSpan.ALIGN_BASELINE,
item.getId(), item.getLabel()); item.getId(), item.getLabel());
editable.setSpan(mentionChipSpan, start, start + item.getLabel().length() , editable.setSpan(mentionChipSpan, start, start + item.getLabel().length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE); Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
return true; return true;
} }

View File

@ -486,7 +486,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
Drawable backgroundDrawable = new ColorDrawable(Color.WHITE); Drawable backgroundDrawable = new ColorDrawable(Color.WHITE);
AutocompletePresenter<Mention> presenter = new MentionAutocompletePresenter(getApplicationContext(), roomToken); AutocompletePresenter<Mention> presenter = new MentionAutocompletePresenter(getApplicationContext(), roomToken);
AutocompleteCallback<Mention> callback = new MentionAutocompleteCallback(getActivity(), AutocompleteCallback<Mention> callback = new MentionAutocompleteCallback(getActivity(),
conversationUser); conversationUser, messageInput);
if (mentionAutocomplete == null && messageInput != null) { if (mentionAutocomplete == null && messageInput != null) {
mentionAutocomplete = Autocomplete.<Mention>on(messageInput) mentionAutocomplete = Autocomplete.<Mention>on(messageInput)

View File

@ -192,8 +192,10 @@ public class CallMenuController extends BaseController implements FlexibleAdapte
if (conversation.canLeave(currentUser)) { if (conversation.canLeave(currentUser)) {
menuItems.add(new MenuItem(getResources().getString(R.string.nc_leave), 1, getResources().getDrawable(R.drawable menuItems.add(new MenuItem(getResources().getString(R.string.nc_leave), 1,
.ic_close_grey600_24dp))); DisplayUtils.getTintedDrawable(getResources(),
R.drawable.ic_exit_to_app_black_24dp, R.color.grey_600)
));
} }
} else if (menuType.equals(MenuType.SHARE)) { } else if (menuType.equals(MenuType.SHARE)) {
prepareIntent(); prepareIntent();

View File

@ -30,7 +30,10 @@ import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.*; import android.graphics.drawable.Animatable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.text.*; import android.text.*;
@ -50,7 +53,6 @@ import com.facebook.common.references.CloseableReference;
import com.facebook.datasource.DataSource; import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.ControllerListener; import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.drawable.RoundedColorDrawable;
import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.common.RotationOptions; import com.facebook.imagepipeline.common.RotationOptions;
import com.facebook.imagepipeline.core.ImagePipeline; import com.facebook.imagepipeline.core.ImagePipeline;
@ -65,12 +67,12 @@ import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.utils.text.Spans; import com.nextcloud.talk.utils.text.Spans;
import com.vanniktech.emoji.EmojiEditText;
import com.vanniktech.emoji.EmojiTextView; 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;
@ -218,7 +220,8 @@ public class DisplayUtils {
public static Drawable getDrawableForMentionChipSpan(Context context, String id, String label, public static Drawable getDrawableForMentionChipSpan(Context context, String id, String label,
UserEntity conversationUser, String type, UserEntity conversationUser, String type,
@XmlRes int chipResource) { @XmlRes int chipResource,
@Nullable EmojiEditText emojiEditText) {
ChipDrawable chip = ChipDrawable.createFromResource(context, chipResource); ChipDrawable chip = ChipDrawable.createFromResource(context, chipResource);
chip.setText(label); chip.setText(label);
@ -253,11 +256,15 @@ public class DisplayUtils {
dataSource.subscribe( dataSource.subscribe(
new BaseBitmapDataSubscriber() { new BaseBitmapDataSubscriber() {
@Override @Override
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)));
// A hack to refresh the chip icon
if (emojiEditText != null) {
emojiEditText.setTextKeepState(emojiEditText.getText());
}
} }
} }
@ -291,7 +298,7 @@ public class DisplayUtils {
int end = start + m.group().length(); int end = start + m.group().length();
lastStartIndex = end; lastStartIndex = end;
mentionChipSpan = new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context, mentionChipSpan = new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context,
id, label, conversationUser, type, chipXmlRes), id, label, conversationUser, type, chipXmlRes, null),
DynamicDrawableSpan.ALIGN_BASELINE, id, DynamicDrawableSpan.ALIGN_BASELINE, id,
label); label);
spannableString.setSpan(mentionChipSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(mentionChipSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

View File

@ -20,24 +20,10 @@
package com.nextcloud.talk.utils.text; package com.nextcloud.talk.utils.text;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.facebook.common.executors.UiThreadImmediateExecutorService;
import com.facebook.common.references.CloseableReference;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipeline;
import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;
import com.facebook.imagepipeline.image.CloseableImage;
import com.facebook.imagepipeline.request.ImageRequest;
import com.nextcloud.talk.R;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils;
import lombok.Data; import lombok.Data;
import static com.nextcloud.talk.utils.DisplayUtils.getImageRequestForUrl;
public class Spans { public class Spans {
@Data @Data