From a0d7ed4efa062adc659a347179d688f8ee1c70da Mon Sep 17 00:00:00 2001 From: stom79 Date: Thu, 1 Nov 2018 16:37:49 +0100 Subject: [PATCH] Prepares release 1.18.2 --- app/build.gradle | 4 +- .../activities/ShowAccountActivity.java | 2 +- .../mastodon/client/Entities/Account.java | 93 ++++++++++++++----- 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 641dad01c..649453e45 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "fr.gouv.etalab.mastodon" minSdkVersion 15 targetSdkVersion 28 - versionCode 169 - versionName "1.18.1" + versionCode 170 + versionName "1.18.2" } flavorDimensions "default" buildTypes { 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 fca4b5600..b74c1a387 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 @@ -762,7 +762,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt account_un.setText(String.format("@%s", account.getAcct())); SpannableString spannableString = Helper.clickableElementsDescription(ShowAccountActivity.this, account.getNote(), account.getEmojis()); account.setNoteSpan(spannableString); - account.makeEmojisAccount(ShowAccountActivity.this, ShowAccountActivity.this); + account.makeEmojisAccountProfile(ShowAccountActivity.this, ShowAccountActivity.this); account_note.setText(account.getNoteSpan(), TextView.BufferType.SPANNABLE); account_note.setMovementMethod(LinkMovementMethod.getInstance()); if (!peertubeAccount && tabLayout.getTabAt(0) != null && tabLayout.getTabAt(1) != null && tabLayout.getTabAt(2) != null) { 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 83b8599c1..d071bbe7d 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 @@ -483,14 +483,13 @@ public class Account implements Parcelable { return spannableString; } - public void makeEmojisAccount(final Context context, final OnRetrieveEmojiAccountInterface listener){ + public void makeEmojisAccountProfile(final Context context, final OnRetrieveEmojiAccountInterface listener){ if( ((Activity)context).isFinishing() ) return; - fields = new LinkedHashMap<>(); - fieldsVerified = new LinkedHashMap<>(); - fieldsSpan = new LinkedHashMap<>(); - noteSpan = account.getNoteSpan(); - + if( fields == null) + fields = new LinkedHashMap<>(); + if( fieldsSpan == null) + fieldsSpan = new LinkedHashMap<>(); if( account.getDisplay_name() != null) displayNameSpan = new SpannableString(account.getDisplay_name()); if( account.getFields() != null && account.getFields().size() > 0) { @@ -565,22 +564,6 @@ public class Account implements Parcelable { fieldsSpan.put((SpannableString) pair.getKey(), fieldSpan); }else fieldsSpan.put(keySpan, fieldSpan); - /*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); - } - - SpannableString obj = fieldsSpan.remove(pair.getKey()); - fieldsSpan.put(keySpan, obj); - }else - fieldsSpan.put(keySpan, fieldSpan);*/ } i[0]++; @@ -599,4 +582,70 @@ public class Account implements Parcelable { } } + + public void makeEmojisAccount(final Context context, final OnRetrieveEmojiAccountInterface listener){ + if( ((Activity)context).isFinishing() ) + return; + + fields = new LinkedHashMap<>(); + fieldsVerified = new LinkedHashMap<>(); + fieldsSpan = new LinkedHashMap<>(); + noteSpan = account.getNoteSpan(); + 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(new SpannableString((String)pair.getKey()), fieldSpan); + } + account.setFieldsSpan(fieldsSpan); + } + final List emojis = account.getEmojis(); + if( emojis != null && emojis.size() > 0 ) { + + final int[] i = {0}; + for (final Emojis emoji : emojis) { + fields = account.getFields(); + try { + Glide.with(context) + .asBitmap() + .load(emoji.getUrl()) + .into(new SimpleTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, Transition transition) { + final String targetedEmoji = ":" + emoji.getShortcode() + ":"; + if (displayNameSpan != null && displayNameSpan.toString().contains(targetedEmoji)) { + //emojis can be used several times so we have to loop + for (int startPosition = -1; (startPosition = displayNameSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { + final int endPosition = startPosition + targetedEmoji.length(); + if (endPosition <= displayNameSpan.toString().length() && endPosition >= startPosition) + displayNameSpan.setSpan( + new ImageSpan(context, + Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context), + (int) Helper.convertDpToPixel(20, context), false)), startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + } + i[0]++; + if (i[0] == (emojis.size())) { + if (noteSpan != null) + account.setNoteSpan(noteSpan); + if (listener != null) + listener.onRetrieveEmojiAccount(account); + } + } + }); + }catch (Exception ignored){} + + } + } + } + }