Fix ANR when leaving MediaPreviewActivity.

fork-5.53.8
Cody Henthorne 2021-06-16 13:30:46 -04:00
rodzic e5c9dddb5a
commit 8be659c1c8
2 zmienionych plików z 13 dodań i 6 usunięć

Wyświetl plik

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

Wyświetl plik

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