Prepares release 1.17.6

This commit is contained in:
stom79 2018-10-24 18:29:12 +02:00
parent af10073cdf
commit 4938f82dce
2 changed files with 143 additions and 19 deletions

View File

@ -7,7 +7,7 @@ android {
applicationId "fr.gouv.etalab.mastodon" applicationId "fr.gouv.etalab.mastodon"
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 28 targetSdkVersion 28
versionCode 162 versionCode 163
versionName "1.17.6" versionName "1.17.6"
} }
flavorDimensions "default" flavorDimensions "default"

View File

@ -18,10 +18,12 @@ import android.app.Activity;
import android.content.*; import android.content.*;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.Html;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.Spanned; import android.text.Spanned;
@ -45,6 +47,8 @@ import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiAccountInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiAccountInterface;
import static android.support.v4.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
/** /**
* Created by Thomas on 23/04/2017. * Created by Thomas on 23/04/2017.
@ -479,13 +483,127 @@ public class Account implements Parcelable {
return spannableString; return spannableString;
} }
public void makeEmojisAccount(final Context context, final OnRetrieveEmojiAccountInterface listener){ public void makeEmojisAccount(final Context context, final OnRetrieveEmojiAccountInterface listener){
if( ((Activity)context).isFinishing() ) if( ((Activity)context).isFinishing() )
return; return;
noteSpan = account.getNoteSpan(); 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> 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<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
final String targetedEmoji = ":" + emoji.getShortcode() + ":";
if (noteSpan != null && noteSpan.toString().contains(targetedEmoji)) {
//emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = noteSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
final int endPosition = startPosition + targetedEmoji.length();
if (endPosition <= noteSpan.toString().length() && endPosition >= startPosition)
noteSpan.setSpan(
new ImageSpan(context,
Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context),
(int) Helper.convertDpToPixel(20, context), false)), startPosition,
endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
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);
}
}
Iterator it = fieldsSpan.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
SpannableString fieldSpan = (SpannableString) pair.getValue();
SpannableString keySpan = (SpannableString) pair.getKey();
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++) {
final int endPosition = startPosition + targetedEmoji.length();
if (endPosition <= fieldSpan.toString().length() && endPosition >= startPosition)
fieldSpan.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((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]++;
if (i[0] == (emojis.size())) {
if (noteSpan != null)
account.setNoteSpan(noteSpan);
account.setFieldsSpan(fieldsSpan);
if (listener != null)
listener.onRetrieveEmojiAccount(account);
}
}
});
}catch (Exception ignored){}
}
}
}
/*public void makeEmojisAccount(final Context context, final OnRetrieveEmojiAccountInterface listener){
if( ((Activity)context).isFinishing() )
return;
noteSpan = account.getNoteSpan();
if( account.getDisplay_name() != null) if( account.getDisplay_name() != null)
displayNameSpan = new SpannableString(account.getDisplay_name()); displayNameSpan = new SpannableString(account.getDisplay_name());
final List<Emojis> emojis = account.getEmojis(); final List<Emojis> emojis = account.getEmojis();
@ -493,6 +611,7 @@ public class Account implements Parcelable {
final int[] i = {0}; final int[] i = {0};
for (final Emojis emoji : emojis) { for (final Emojis emoji : emojis) {
fields = account.getFields(); fields = account.getFields();
Log.v(Helper.TAG,"emoji: " + emoji.getShortcode());
try { try {
Glide.with(context) Glide.with(context)
.asBitmap() .asBitmap()
@ -501,7 +620,7 @@ public class Account implements Parcelable {
@Override @Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) { public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
final String targetedEmoji = ":" + emoji.getShortcode() + ":"; final String targetedEmoji = ":" + emoji.getShortcode() + ":";
Log.v(Helper.TAG,"targetedEmoji: " + emoji.getShortcode());
if (noteSpan != null && noteSpan.toString().contains(targetedEmoji)) { if (noteSpan != null && noteSpan.toString().contains(targetedEmoji)) {
//emojis can be used several times so we have to loop //emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = noteSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { for (int startPosition = -1; (startPosition = noteSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
@ -530,7 +649,11 @@ public class Account implements Parcelable {
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next(); Map.Entry pair = (Map.Entry) it.next();
SpannableString fieldSpan = new SpannableString((String)pair.getValue()); SpannableString fieldSpan = new SpannableString((String)pair.getValue());
SpannableString keySpan = new SpannableString((String)pair.getKey());
if (fieldSpan.toString().contains(targetedEmoji)) { if (fieldSpan.toString().contains(targetedEmoji)) {
Log.v(Helper.TAG,"fieldSpan: " + fieldSpan.toString());
//emojis can be used several times so we have to loop //emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = fieldSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { for (int startPosition = -1; (startPosition = fieldSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
final int endPosition = startPosition + targetedEmoji.length(); final int endPosition = startPosition + targetedEmoji.length();
@ -541,22 +664,23 @@ public class Account implements Parcelable {
(int) Helper.convertDpToPixel(20, context), false)), startPosition, (int) Helper.convertDpToPixel(20, context), false)), startPosition,
endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
} }
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);
} }
if (keySpan.toString().contains(targetedEmoji)) {
Log.v(Helper.TAG,"keySpan: " + keySpan.toString());
//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);
} }
@ -574,7 +698,7 @@ public class Account implements Parcelable {
} }
} }
} }*/
} }