diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java index 8ffa3c332..330bc97c4 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java @@ -1075,7 +1075,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt account_note.setText(account.getNoteSpan(), TextView.BufferType.SPANNABLE); account_dn.setText(account.getdisplayNameSpan(), TextView.BufferType.SPANNABLE);; if ( account.getFieldsSpan() != null && account.getFieldsSpan().size() > 0){ - HashMap fieldsSpan = account.getFieldsSpan(); + HashMap fieldsSpan = account.getFieldsSpan(); Iterator it = fieldsSpan.entrySet().iterator(); int i = 1; LinearLayout fields_container = findViewById(R.id.fields_container); @@ -1083,7 +1083,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt fields_container.setVisibility(View.VISIBLE); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); - String label = (String)pair.getKey(); + SpannableString label = (SpannableString)pair.getKey(); SpannableString value = (SpannableString)pair.getValue(); LinearLayout field; TextView labelView; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java index 2567463e9..be00e0229 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java @@ -30,6 +30,7 @@ import android.text.Spanned; import android.text.TextPaint; import android.text.style.ClickableSpan; import android.text.style.ImageSpan; +import android.util.Log; import android.view.View; import com.bumptech.glide.Glide; @@ -87,7 +88,7 @@ public class Account implements Parcelable { private int metaDataSizeVerified; private HashMap fields = new HashMap<>(); private HashMap fieldsVerified = new HashMap<>(); - private HashMap fieldsSpan = new HashMap<>(); + private HashMap fieldsSpan = new HashMap<>(); private List emojis; private Account account; private String host; @@ -133,12 +134,12 @@ public class Account implements Parcelable { return fields; } - public void setFieldsSpan(HashMap fieldsSpan) { + public void setFieldsSpan(HashMap fieldsSpan) { this.fieldsSpan = fieldsSpan; } - public HashMap getFieldsSpan() { + public HashMap getFieldsSpan() { return fieldsSpan; } @@ -491,20 +492,6 @@ public class Account implements Parcelable { if( account.getDisplay_name() != null) displayNameSpan = new SpannableString(account.getDisplay_name()); - if( account.getFields() != null && account.getFields().size() > 0) { - Iterator it = account.getFields().entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - SpannableString fieldSpan; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - fieldSpan = new SpannableString(Html.fromHtml((String)pair.getValue(), FROM_HTML_MODE_LEGACY)); - else - //noinspection deprecation - fieldSpan = new SpannableString(Html.fromHtml((String)pair.getValue())); - fieldsSpan.put((String) pair.getKey(), fieldSpan); - } - account.setFieldsSpan(fieldsSpan); - } final List emojis = account.getEmojis(); if( emojis != null && emojis.size() > 0 ) { final int[] i = {0}; @@ -543,10 +530,10 @@ public class Account implements Parcelable { endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } } - Iterator it = fieldsSpan.entrySet().iterator(); + Iterator it = fields.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry) it.next(); - SpannableString fieldSpan = (SpannableString) pair.getValue(); + SpannableString fieldSpan = new SpannableString((String)pair.getValue()); if (fieldSpan.toString().contains(targetedEmoji)) { //emojis can be used several times so we have to loop for (int startPosition = -1; (startPosition = fieldSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { @@ -558,10 +545,25 @@ public class Account implements Parcelable { (int) Helper.convertDpToPixel(20, context), false)), startPosition, endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } - fieldsSpan.put((String) pair.getKey(), fieldSpan); + SpannableString keySpan = new SpannableString((String)pair.getKey()); + if (keySpan.toString().contains(targetedEmoji)) { + //emojis can be used several times so we have to loop + for (int startPosition = -1; (startPosition = keySpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { + final int endPosition = startPosition + targetedEmoji.length(); + if (endPosition <= keySpan.toString().length() && endPosition >= startPosition) + keySpan.setSpan( + new ImageSpan(context, + Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context), + (int) Helper.convertDpToPixel(20, context), false)), startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + + } + fieldsSpan.put(keySpan, fieldSpan); } } + i[0]++; if (i[0] == (emojis.size())) { if (noteSpan != null)