Fix compose autocomplete for emojis

This commit is contained in:
Grishka 2022-04-20 18:37:04 +03:00
parent ad825d6803
commit 07fe859e35
2 changed files with 8 additions and 7 deletions

View File

@ -9,7 +9,7 @@ android {
applicationId "org.joinmastodon.android" applicationId "org.joinmastodon.android"
minSdk 23 minSdk 23
targetSdk 31 targetSdk 31
versionCode 28 versionCode 29
versionName "1.0.1" versionName "1.0.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

View File

@ -76,9 +76,9 @@ import org.joinmastodon.android.ui.text.ComposeHashtagOrMentionSpan;
import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.SimpleTextWatcher; import org.joinmastodon.android.ui.utils.SimpleTextWatcher;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.ui.views.ComposeEditText;
import org.joinmastodon.android.ui.views.ComposeMediaLayout; import org.joinmastodon.android.ui.views.ComposeMediaLayout;
import org.joinmastodon.android.ui.views.ReorderableLinearLayout; import org.joinmastodon.android.ui.views.ReorderableLinearLayout;
import org.joinmastodon.android.ui.views.ComposeEditText;
import org.joinmastodon.android.ui.views.SizeListenerLinearLayout; import org.joinmastodon.android.ui.views.SizeListenerLinearLayout;
import org.parceler.Parcel; import org.parceler.Parcel;
import org.parceler.Parcels; import org.parceler.Parcels;
@ -91,12 +91,10 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import androidx.annotation.DrawableRes;
import me.grishka.appkit.Nav; import me.grishka.appkit.Nav;
import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.fragments.OnBackPressedListener; import me.grishka.appkit.fragments.OnBackPressedListener;
import me.grishka.appkit.fragments.ToolbarFragment;
import me.grishka.appkit.imageloader.ViewImageLoader; import me.grishka.appkit.imageloader.ViewImageLoader;
import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest; import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest;
import me.grishka.appkit.utils.V; import me.grishka.appkit.utils.V;
@ -416,14 +414,17 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
} }
char firstChar=editable.charAt(spanStart); char firstChar=editable.charAt(spanStart);
String spanText=s.subSequence(spanStart, spanEnd).toString(); String spanText=s.subSequence(spanStart, spanEnd).toString();
if(firstChar=='@' || firstChar=='#'){ if(firstChar=='@' || firstChar=='#' || firstChar==':'){
Matcher matcher=HIGHLIGHT_PATTERN.matcher(spanText); Matcher matcher=AUTO_COMPLETE_PATTERN.matcher(spanText);
if(!matcher.find()){ // invalid mention, remove char prevChar=spanStart>0 ? editable.charAt(spanStart-1) : ' ';
if(!matcher.find() || !Character.isWhitespace(prevChar)){ // invalid mention, remove
editable.removeSpan(span); editable.removeSpan(span);
continue; continue;
}else if(matcher.end()+spanStart<spanEnd){ // mention with something at the end, move the end offset }else if(matcher.end()+spanStart<spanEnd){ // mention with something at the end, move the end offset
editable.setSpan(span, spanStart, spanStart+matcher.end(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); editable.setSpan(span, spanStart, spanStart+matcher.end(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
} }
}else{
editable.removeSpan(span);
} }
} }
} }