Fix ANR when leaving MediaPreviewActivity.

This commit is contained in:
Cody Henthorne
2021-06-16 13:30:46 -04:00
parent e5c9dddb5a
commit 8be659c1c8
2 changed files with 13 additions and 6 deletions

View File

@@ -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);

View File

@@ -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);
}
}