From 5f947ea2d6ae6aa8be085a307534bd92bf376964 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 17 Dec 2020 11:28:06 -0400 Subject: [PATCH] Remove a few more instances of AsyncTask. --- .../securesms/ApplicationContext.java | 21 +++------ .../components/ConversationItemFooter.java | 22 ++++------ .../components/ZoomingImageView.java | 44 ++++++++----------- .../emoji/parsing/EmojiPageBitmap.java | 17 +++---- .../identity/UntrustedSendDialog.java | 22 +++------- 5 files changed, 48 insertions(+), 78 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 9883d701ba..63f2ea1f26 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -18,7 +18,6 @@ package org.thoughtcrime.securesms; import android.annotation.SuppressLint; import android.content.Context; -import android.os.AsyncTask; import android.os.Build; import androidx.annotation.NonNull; @@ -335,21 +334,15 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi @SuppressLint("StaticFieldLeak") private void initializeCircumvention() { - AsyncTask task = new AsyncTask() { - @Override - protected Void doInBackground(Void... params) { - if (new SignalServiceNetworkAccess(ApplicationContext.this).isCensored(ApplicationContext.this)) { - try { - ProviderInstaller.installIfNeeded(ApplicationContext.this); - } catch (Throwable t) { - Log.w(TAG, t); - } + SignalExecutors.BOUNDED.execute(() -> { + if (new SignalServiceNetworkAccess(ApplicationContext.this).isCensored(ApplicationContext.this)) { + try { + ProviderInstaller.installIfNeeded(ApplicationContext.this); + } catch (Throwable t) { + Log.w(TAG, t); } - return null; } - }; - - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }); } private void executePendingContactSync() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index 42f3e33ddb..dde79a526e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; -import android.os.AsyncTask; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; @@ -20,6 +19,7 @@ import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieProperty; import com.airbnb.lottie.model.KeyPath; +import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.DatabaseFactory; @@ -185,20 +185,16 @@ public class ConversationItemFooter extends LinearLayout { ApplicationContext.getInstance(getContext()).getExpiringMessageManager().checkSchedule(); } } else if (!messageRecord.isOutgoing() && !messageRecord.isMediaPending()) { - new AsyncTask() { - @Override - protected Void doInBackground(Void... params) { - ExpiringMessageManager expirationManager = ApplicationContext.getInstance(getContext()).getExpiringMessageManager(); - long id = messageRecord.getId(); - boolean mms = messageRecord.isMms(); + SignalExecutors.BOUNDED.execute(() -> { + ExpiringMessageManager expirationManager = ApplicationContext.getInstance(getContext()).getExpiringMessageManager(); + long id = messageRecord.getId(); + boolean mms = messageRecord.isMms(); - if (mms) DatabaseFactory.getMmsDatabase(getContext()).markExpireStarted(id); - else DatabaseFactory.getSmsDatabase(getContext()).markExpireStarted(id); + if (mms) DatabaseFactory.getMmsDatabase(getContext()).markExpireStarted(id); + else DatabaseFactory.getSmsDatabase(getContext()).markExpireStarted(id); - expirationManager.scheduleDeletion(id, mms, messageRecord.getExpiresIn()); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + expirationManager.scheduleDeletion(id, mms, messageRecord.getExpiresIn()); + }); } } else { this.timerView.setVisibility(View.GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java index 69d90c10cf..d3e0340f5e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java @@ -3,14 +3,11 @@ package org.thoughtcrime.securesms.components; import android.annotation.SuppressLint; import android.content.Context; import android.net.Uri; -import android.os.AsyncTask; import android.util.AttributeSet; -import android.util.Pair; import android.view.View; import android.widget.FrameLayout; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.target.Target; @@ -29,6 +26,8 @@ import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.util.BitmapDecodingException; import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.ViewUtil; +import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import java.io.IOException; import java.io.InputStream; @@ -83,32 +82,27 @@ public class ZoomingImageView extends FrameLayout { Log.i(TAG, "Max texture size: " + maxTextureSize); - new AsyncTask>() { - @Override - protected @Nullable Pair doInBackground(Void... params) { - if (MediaUtil.isGif(contentType)) return null; + SimpleTask.run(ViewUtil.getActivityLifecycle(this), () -> { + if (MediaUtil.isGif(contentType)) return null; - try { - InputStream inputStream = PartAuthority.getAttachmentStream(context, uri); - return BitmapUtil.getDimensions(inputStream); - } catch (IOException | BitmapDecodingException e) { - Log.w(TAG, e); - return null; - } + try { + InputStream inputStream = PartAuthority.getAttachmentStream(context, uri); + return BitmapUtil.getDimensions(inputStream); + } catch (IOException | BitmapDecodingException e) { + Log.w(TAG, e); + return null; } + }, dimensions -> { + Log.i(TAG, "Dimensions: " + (dimensions == null ? "(null)" : dimensions.first + ", " + dimensions.second)); - protected void onPostExecute(@Nullable Pair dimensions) { - Log.i(TAG, "Dimensions: " + (dimensions == null ? "(null)" : dimensions.first + ", " + dimensions.second)); - - if (dimensions == null || (dimensions.first <= maxTextureSize && dimensions.second <= maxTextureSize)) { - Log.i(TAG, "Loading in standard image view..."); - setImageViewUri(glideRequests, uri); - } else { - Log.i(TAG, "Loading in subsampling image view..."); - setSubsamplingImageViewUri(uri); - } + if (dimensions == null || (dimensions.first <= maxTextureSize && dimensions.second <= maxTextureSize)) { + Log.i(TAG, "Loading in standard image view..."); + setImageViewUri(glideRequests, uri); + } else { + Log.i(TAG, "Loading in subsampling image view..."); + setSubsamplingImageViewUri(uri); } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }); } private void setImageViewUri(@NonNull GlideRequests glideRequests, @NonNull Uri uri) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java index c60480ee88..6f52cfdd4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java @@ -5,7 +5,6 @@ import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.os.AsyncTask; import androidx.annotation.NonNull; @@ -14,6 +13,7 @@ import org.thoughtcrime.securesms.components.emoji.EmojiPageModel; import org.thoughtcrime.securesms.util.ListenableFutureTask; import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import java.io.IOException; import java.io.InputStream; @@ -56,16 +56,11 @@ public class EmojiPageBitmap { return null; }; task = new ListenableFutureTask<>(callable); - new AsyncTask() { - @Override protected Void doInBackground(Void... params) { - task.run(); - return null; - } - - @Override protected void onPostExecute(Void aVoid) { - task = null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + SimpleTask.run(() -> { + task.run(); + return null; + }, + unused -> task = null); } return task; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/identity/UntrustedSendDialog.java b/app/src/main/java/org/thoughtcrime/securesms/components/identity/UntrustedSendDialog.java index 6d0a7ef802..4b10694e35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/identity/UntrustedSendDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/identity/UntrustedSendDialog.java @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.components.identity; import android.content.Context; import android.content.DialogInterface; -import android.os.AsyncTask; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; @@ -12,6 +11,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.IdentityDatabase; import org.thoughtcrime.securesms.database.IdentityDatabase.IdentityRecord; +import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import java.util.List; @@ -42,23 +42,15 @@ public class UntrustedSendDialog extends AlertDialog.Builder implements DialogIn public void onClick(DialogInterface dialog, int which) { final IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(getContext()); - new AsyncTask() { - @Override - protected Void doInBackground(Void... params) { - synchronized (SESSION_LOCK) { - for (IdentityRecord identityRecord : untrustedRecords) { - identityDatabase.setApproval(identityRecord.getRecipientId(), true); - } + SimpleTask.run(() -> { + synchronized (SESSION_LOCK) { + for (IdentityRecord identityRecord : untrustedRecords) { + identityDatabase.setApproval(identityRecord.getRecipientId(), true); } - - return null; } - @Override - protected void onPostExecute(Void result) { - resendListener.onResendMessage(); - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + return null; + }, unused -> resendListener.onResendMessage()); } public interface ResendListener {