From 4adc660705b5efa404679bc313f909852bc89469 Mon Sep 17 00:00:00 2001 From: Clark Date: Tue, 25 Jul 2023 12:43:39 -0400 Subject: [PATCH] Stop content provider handler threads on release. --- .../securesms/providers/AvatarProvider.kt | 7 +++++-- .../securesms/providers/PartProvider.java | 14 ++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/AvatarProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/providers/AvatarProvider.kt index b7e0e5ea7e..3b9f14280e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/AvatarProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/providers/AvatarProvider.kt @@ -15,6 +15,7 @@ import android.graphics.Bitmap import android.net.Uri import android.os.Build import android.os.Handler +import android.os.HandlerThread import android.os.MemoryFile import android.os.ParcelFileDescriptor import android.os.ProxyFileDescriptorCallback @@ -180,7 +181,7 @@ class AvatarProvider : BaseContentProvider() { val parcelFileDescriptor = storageManager.openProxyFileDescriptor( ParcelFileDescriptor.MODE_READ_ONLY, - ProxyCallback(context!!.applicationContext, recipient), + ProxyCallback(context!!.applicationContext, recipient, handlerThread), handler ) @@ -206,7 +207,8 @@ class AvatarProvider : BaseContentProvider() { @RequiresApi(26) private class ProxyCallback( private val context: Context, - private val recipient: Recipient + private val recipient: Recipient, + private val handlerThread: HandlerThread ) : ProxyFileDescriptorCallback() { private var memoryFile: MemoryFile? = null @@ -226,6 +228,7 @@ class AvatarProvider : BaseContentProvider() { override fun onRelease() { Log.i(TAG, "${recipient.id}:onRelease") memoryFile = null + handlerThread.quitSafely() } private fun ensureResourceLoaded() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java index 2de016453e..f1d701135f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java @@ -206,7 +206,7 @@ public final class PartProvider extends BaseContentProvider { Handler handler = new Handler(thread.getLooper()); ParcelFileDescriptor parcelFileDescriptor = storageManager.openProxyFileDescriptor(ParcelFileDescriptor.MODE_READ_ONLY, - new ProxyCallback(SignalDatabase.attachments(), attachmentId), + new ProxyCallback(SignalDatabase.attachments(), attachmentId, thread), handler); Log.i(TAG, attachmentId + ":createdProxy"); @@ -218,10 +218,12 @@ public final class PartProvider extends BaseContentProvider { private AttachmentTable attachments; private AttachmentId attachmentId; + private HandlerThread handlerThread; - public ProxyCallback(@NonNull AttachmentTable attachments, @NonNull AttachmentId attachmentId) { - this.attachments = attachments; - this.attachmentId = attachmentId; + public ProxyCallback(@NonNull AttachmentTable attachments, @NonNull AttachmentId attachmentId, @NonNull HandlerThread handlerThread) { + this.attachments = attachments; + this.attachmentId = attachmentId; + this.handlerThread = handlerThread; } @Override @@ -270,6 +272,10 @@ public final class PartProvider extends BaseContentProvider { attachments = null; attachmentId = null; + if (handlerThread != null) { + handlerThread.quitSafely(); + handlerThread = null; + } } } }