diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java index d819e8194..e74c757df 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java @@ -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 { } }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 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); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java index 8e43d8969..281c1bd32 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java @@ -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 = status.getReblog() != null ? status.getReblog().getEmojis() : status.getEmojis(); + final List 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() { @Override - public void onResourceReady(Bitmap resource, Transition transition) { + public void onResourceReady(@NonNull Bitmap resource, Transition 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); } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index 787e9e41b..9788fcf90 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -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