Prepares release 1.17.6
This commit is contained in:
parent
af10073cdf
commit
4938f82dce
|
@ -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"
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue