From 37f14a894811871edd2508ea0b960cdf67bd5b9c Mon Sep 17 00:00:00 2001 From: nuclearfog Date: Mon, 3 Apr 2023 21:44:37 +0200 Subject: [PATCH] bug fix --- .../twidda/backend/async/AsyncExecutor.java | 29 ++++++++----------- .../twidda/backend/utils/TextWithEmoji.java | 6 ++-- .../twidda/ui/activities/ProfileActivity.java | 6 ---- 3 files changed, 16 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/async/AsyncExecutor.java b/app/src/main/java/org/nuclearfog/twidda/backend/async/AsyncExecutor.java index cb2e5cf5..a6a85e51 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/async/AsyncExecutor.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/async/AsyncExecutor.java @@ -30,7 +30,7 @@ public abstract class AsyncExecutor { /** * timeout for queued processes */ - private static final long P_TIMEOUT = 10L; + private static final long P_TIMEOUT = 4L; /** * thread pool executor @@ -42,15 +42,10 @@ public abstract class AsyncExecutor { */ private Handler uiHandler = new Handler(Looper.getMainLooper()); - /** - * callback to activity/fragment - */ - private WeakReference> callback; - /** * contains all tasks used by an instance */ - private Queue> queue = new LinkedBlockingQueue<>(); + private Queue> futureTasks = new LinkedBlockingQueue<>(); /** * start packground task @@ -59,23 +54,23 @@ public abstract class AsyncExecutor { * @param callback result from the background task */ public final void execute(final Parameter parameter, @Nullable AsyncCallback callback) { - this.callback = new WeakReference<>(callback); + final WeakReference> callbackReference = new WeakReference<>(callback); Future future = THREAD_POOL.submit(new Runnable() { @Override public void run() { Result result = doInBackground(parameter); - onPostExecute(result); + onPostExecute(result, callbackReference); } }); - queue.add(future); + futureTasks.add(future); } /** * send signal to the tasks executed by this instance */ public final void cancel() { - while (!queue.isEmpty()) { - Future future = queue.remove(); + while (!futureTasks.isEmpty()) { + Future future = futureTasks.remove(); future.cancel(true); } } @@ -86,7 +81,7 @@ public abstract class AsyncExecutor { * @return true if there aren't any tasks */ public final boolean isIdle() { - return queue.isEmpty(); + return futureTasks.isEmpty(); } /** @@ -94,13 +89,13 @@ public abstract class AsyncExecutor { * * @param result result of the background task */ - private void onPostExecute(final Result result) { + private synchronized void onPostExecute(final Result result, WeakReference> callbackReference) { uiHandler.post(new Runnable() { @Override public void run() { - if (!queue.isEmpty()) - queue.remove(); - AsyncCallback reference = callback.get(); + if (!futureTasks.isEmpty()) + futureTasks.remove(); + AsyncCallback reference = callbackReference.get(); if (reference != null && result != null) { reference.onResult(result); } diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/utils/TextWithEmoji.java b/app/src/main/java/org/nuclearfog/twidda/backend/utils/TextWithEmoji.java index 34f228e0..c63f1cdd 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/utils/TextWithEmoji.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/utils/TextWithEmoji.java @@ -30,7 +30,7 @@ public class TextWithEmoji { * @param emojis a map of emoji tags & bitmap. every emoji bitmap has its own tag */ public static Spannable addEmojis(Context context, Spannable spannable, Map emojis) { - if (spannable.length() > 0) { + if (spannable.length() > 0 && !emojis.isEmpty()) { SpannableStringBuilder builder = new SpannableStringBuilder(spannable); Matcher matcher = EMOJI_PATTERN.matcher(spannable); Stack indexes = new Stack<>(); @@ -44,8 +44,10 @@ public class TextWithEmoji { String tag = builder.subSequence(start + 1, end - 1).toString(); Bitmap emoji = emojis.get(tag); if (emoji != null) { - ImageSpan imgSpan = new ImageSpan(context, emoji); + ImageSpan imgSpan = new ImageSpan(context, emoji.copy(Bitmap.Config.ARGB_8888, true)); builder.setSpan(imgSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else { + builder.delete(start, end); } } return builder; diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java index e473e129..5df27b6c 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/ProfileActivity.java @@ -777,12 +777,6 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult } else { user_location.setVisibility(GONE); } - if (!user.getDescription().isEmpty()) { - description.setVisibility(VISIBLE); - description.setText(descriptionSpan); - } else { - description.setVisibility(GONE); - } if (!user.getProfileUrl().isEmpty()) { String link = user.getProfileUrl(); if (link.startsWith("http://"))