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

View File

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

View File

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

View File

@ -30,7 +30,10 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
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.os.Build;
import android.text.*;
@ -50,7 +53,6 @@ import com.facebook.common.references.CloseableReference;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.drawable.RoundedColorDrawable;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.common.RotationOptions;
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.models.database.UserEntity;
import com.nextcloud.talk.utils.text.Spans;
import com.vanniktech.emoji.EmojiEditText;
import com.vanniktech.emoji.EmojiTextView;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -218,7 +220,8 @@ public class DisplayUtils {
public static Drawable getDrawableForMentionChipSpan(Context context, String id, String label,
UserEntity conversationUser, String type,
@XmlRes int chipResource) {
@XmlRes int chipResource,
@Nullable EmojiEditText emojiEditText) {
ChipDrawable chip = ChipDrawable.createFromResource(context, chipResource);
chip.setText(label);
@ -253,11 +256,15 @@ public class DisplayUtils {
dataSource.subscribe(
new BaseBitmapDataSubscriber() {
@Override
protected void onNewResultImpl(Bitmap bitmap) {
if (bitmap != null) {
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();
lastStartIndex = end;
mentionChipSpan = new Spans.MentionChipSpan(DisplayUtils.getDrawableForMentionChipSpan(context,
id, label, conversationUser, type, chipXmlRes),
id, label, conversationUser, type, chipXmlRes, null),
DynamicDrawableSpan.ALIGN_BASELINE, id,
label);
spannableString.setSpan(mentionChipSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

View File

@ -20,24 +20,10 @@
package com.nextcloud.talk.utils.text;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
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 static com.nextcloud.talk.utils.DisplayUtils.getImageRequestForUrl;
public class Spans {
@Data