mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-11 23:04:17 +01:00
Update chips
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
bd3eae81d2
commit
06992b400f
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user