diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index 6e3fab17e..ce5ee7866 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -73,6 +73,7 @@ import org.thoughtcrime.securesms.sharing.ShareActivity; import org.thoughtcrime.securesms.util.AttachmentUtil; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.FullscreenHelper; +import org.thoughtcrime.securesms.util.LifecycleCursorWrapper; import org.thoughtcrime.securesms.util.SaveAttachmentTask; import org.thoughtcrime.securesms.util.SaveAttachmentTask.Attachment; import org.thoughtcrime.securesms.util.StorageUtil; @@ -128,7 +129,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity private MediaDatabase.Sorting sorting; private FullscreenHelper fullscreenHelper; - private @Nullable Cursor cursor = null; + private @Nullable LifecycleCursorWrapper cursor = null; public static @NonNull Intent intentFromMediaRecord(@NonNull Context context, @NonNull MediaRecord mediaRecord, @@ -248,10 +249,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity @Override protected void onDestroy() { - if (cursor != null) { - cursor.close(); - cursor = null; - } + cursor = null; super.onDestroy(); } @@ -549,9 +547,11 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity } if (cursor != null) { + getLifecycle().removeObserver(cursor); cursor.close(); } - cursor = Objects.requireNonNull(data.first); + cursor = new LifecycleCursorWrapper(Objects.requireNonNull(data.first)); + getLifecycle().addObserver(cursor); int mediaPosition = Objects.requireNonNull(data.second); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LifecycleCursorWrapper.java b/app/src/main/java/org/thoughtcrime/securesms/util/LifecycleCursorWrapper.java index 0f834477f..6f780628e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LifecycleCursorWrapper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LifecycleCursorWrapper.java @@ -8,6 +8,8 @@ import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; +import org.signal.core.util.concurrent.SignalExecutors; + /** * Wraps a {@link Cursor} that will be closed automatically when the {@link Lifecycle.Event}.ON_DESTROY * is fired from the lifecycle this object is observing. @@ -22,4 +24,9 @@ public class LifecycleCursorWrapper extends CursorWrapper implements DefaultLife public void onDestroy(@NonNull LifecycleOwner owner) { close(); } + + @Override + public void close() { + SignalExecutors.BOUNDED.execute(super::close); + } }