Fixes custom emoji in usernames

This commit is contained in:
stom79 2018-08-17 16:22:26 +02:00
parent 88fc241e21
commit 93f14ed439
3 changed files with 39 additions and 32 deletions

View File

@ -16,7 +16,6 @@ package fr.gouv.etalab.mastodon.asynctasks;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import java.lang.ref.WeakReference;
import java.util.List;
@ -128,14 +127,10 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
}
}else if(remoteAccount != null){
String searchString = remoteAccount.getAcct().contains("@")?"@" + remoteAccount.getAcct():"@" + remoteAccount.getAcct() + "@" + Helper.getLiveInstance(contextReference.get());
Log.v(Helper.TAG,"searchString: " + searchString);
Results search = api.search(searchString);
Log.v(Helper.TAG,"search: " + search);
if (search != null) {
List<Account> accounts = search.getAccounts();
Log.v(Helper.TAG,"accounts: " + accounts);
if (accounts != null && accounts.size() > 0) {
Log.v(Helper.TAG,"accounts.size(): " + accounts.size());
Account accountTmp = accounts.get(0);
this.targetedId = accountTmp.getId();
statusCode = api.postAction(apiAction, targetedId);

View File

@ -243,7 +243,7 @@ public class Status implements Parcelable{
}
public SpannableString getDisplayNameSpan(){
return this.status.getAccount().getdisplayNameSpanSpan();
return this.displayNameSpan;
}
public void setDisplayNameSpan(SpannableString displayNameSpan){
this.displayNameSpan = displayNameSpan;
@ -513,8 +513,22 @@ public class Status implements Parcelable{
if( ((Activity)context).isFinishing() )
return;
final List<Emojis> emojis = status.getReblog() != null ? status.getReblog().getEmojis() : status.getEmojis();
final List<Emojis> emojisAccounts = status.getAccount().getEmojis();
String displayName;
if( status.getReblog() != null){
displayName = Helper.shortnameToUnicode(status.getReblog().getAccount().getDisplay_name(), true);
displayName = String.format("%s @%s",displayName,status.getReblog().getAccount().getAcct());
}else {
displayName = Helper.shortnameToUnicode(status.getAccount().getDisplay_name(), true);
displayName = String.format("%s @%s",displayName,status.getAccount().getAcct());
}
displayNameSpan = new SpannableString(displayName);
if( emojisAccounts != null)
emojis.addAll(emojisAccounts);
if( emojis != null && emojis.size() > 0 ) {
final int[] i = {0};
for (final Emojis emoji : emojis) {
@ -635,14 +649,14 @@ public class Status implements Parcelable{
})
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
final String targetedEmoji = ":" + emoji.getShortcode() + ":";
if (finalSpannableStringTranslated != null && finalSpannableStringTranslated.toString().contains(targetedEmoji)) {
//emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = finalSpannableStringTranslated.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
final int endPosition = startPosition + targetedEmoji.length();
if( startPosition >= 0 && endPosition <= finalSpannableStringTranslated.toString().length() && endPosition >= startPosition)
if( endPosition <= finalSpannableStringTranslated.toString().length() && endPosition >= startPosition)
finalSpannableStringTranslated.setSpan(
new ImageSpan(context,
Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context),
@ -686,7 +700,7 @@ public class Status implements Parcelable{
int matchStart = matcher.start(2);
int matchEnd = matcher.end();
final String twittername = spannableString.toString().substring(matchStart, matchEnd);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
if( matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View textView) {
@ -699,7 +713,7 @@ public class Status implements Parcelable{
ds.setUnderlineText(false);
}
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
if( matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
@ -709,7 +723,7 @@ public class Status implements Parcelable{
int matchStart = matcher.start(1);
int matchEnd = matcher.end();
final String url = spannableString.toString().substring(matchStart, matchEnd);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
if( matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View textView) {
@ -726,7 +740,7 @@ public class Status implements Parcelable{
},
matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
if( matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
@ -740,7 +754,7 @@ public class Status implements Parcelable{
//Accounts can be mentioned several times so we have to loop
for(int startPosition = -1 ; (startPosition = spannableString.toString().indexOf(targetedAccount, startPosition + 1)) != -1 ; startPosition++){
int endPosition = startPosition + targetedAccount.length();
if( startPosition >= 0 && endPosition <= spannableString.toString().length() && endPosition >= startPosition)
if( endPosition <= spannableString.toString().length() && endPosition >= startPosition)
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View textView) {
@ -758,7 +772,7 @@ public class Status implements Parcelable{
},
startPosition, endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
if( startPosition >= 0 && endPosition <= spannableString.toString().length() && endPosition >= startPosition)
if(endPosition <= spannableString.toString().length() && endPosition >= startPosition)
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), startPosition, endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
@ -771,7 +785,7 @@ public class Status implements Parcelable{
int matchStart = matcher.start(1);
int matchEnd = matcher.end();
final String tag = spannableString.toString().substring(matchStart, matchEnd);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
if( matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View textView) {
@ -787,7 +801,7 @@ public class Status implements Parcelable{
ds.setUnderlineText(false);
}
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
if( matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}

View File

@ -40,14 +40,12 @@ import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
@ -641,7 +639,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_content.setText(status.getContentSpan(), TextView.BufferType.SPANNABLE);
holder.status_spoiler.setText(status.getContentSpanCW(), TextView.BufferType.SPANNABLE);
holder.status_account_displayname.setText(status.getAccount().getdisplayNameSpanSpan(), TextView.BufferType.SPANNABLE);
holder.status_account_displayname.setText(status.getDisplayNameSpan(), TextView.BufferType.SPANNABLE);
holder.status_content.setMovementMethod(LinkMovementMethod.getInstance());
holder.status_spoiler.setMovementMethod(LinkMovementMethod.getInstance());
@ -686,27 +684,18 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
//Displays name & emoji in toot header
final String displayName;
final String username;
final String ppurl;
String name;
if( status.getReblog() != null){
displayName = Helper.shortnameToUnicode(status.getReblog().getAccount().getDisplay_name(), true);
username = status.getReblog().getAccount().getUsername();
holder.status_account_displayname.setText(String.format("%s @%s",displayName, username));
ppurl = status.getReblog().getAccount().getAvatar();
holder.status_account_displayname.setVisibility(View.VISIBLE);
holder.status_account_displayname.setText(context.getResources().getString(R.string.reblog_by, status.getAccount().getUsername()));
name = String.format("%s @%s",displayName,status.getReblog().getAccount().getAcct());
}else {
ppurl = status.getAccount().getAvatar();
displayName = Helper.shortnameToUnicode(status.getAccount().getDisplay_name(), true);
name = String.format("%s @%s",displayName,status.getAccount().getAcct());
}
//-------- END -> Displays name & emoji in toot header
//Change the color in gray for accounts in DARK Theme only
Spannable wordtoSpan = new SpannableString(name);
Spannable wordtoSpan = status.getDisplayNameSpan();
if( theme == THEME_DARK || theme == Helper.THEME_BLACK) {
Pattern hashAcct;
if( status.getReblog() != null)
@ -1952,7 +1941,16 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
@Override
public void onRetrieveEmoji(Status status, boolean fromTranslation) {
if( !fromTranslation) {
if( status != null) {
if( !fromTranslation) {
status.setEmojiFound(true);
}else {
status.setEmojiTranslateFound(true);
}
notifyStatusChanged(status);
}
/* if( !fromTranslation) {
if (!status.isEmojiFound()) {
for (int i = 0; i < statusListAdapter.getItemCount(); i++) {
//noinspection ConstantConditions
@ -1978,7 +1976,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
}
}
}
}*/
}
@Override