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.AttachmentUtil;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.FullscreenHelper; import org.thoughtcrime.securesms.util.FullscreenHelper;
import org.thoughtcrime.securesms.util.LifecycleCursorWrapper;
import org.thoughtcrime.securesms.util.SaveAttachmentTask; import org.thoughtcrime.securesms.util.SaveAttachmentTask;
import org.thoughtcrime.securesms.util.SaveAttachmentTask.Attachment; import org.thoughtcrime.securesms.util.SaveAttachmentTask.Attachment;
import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.StorageUtil;
@ -128,7 +129,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity
private MediaDatabase.Sorting sorting; private MediaDatabase.Sorting sorting;
private FullscreenHelper fullscreenHelper; private FullscreenHelper fullscreenHelper;
private @Nullable Cursor cursor = null; private @Nullable LifecycleCursorWrapper cursor = null;
public static @NonNull Intent intentFromMediaRecord(@NonNull Context context, public static @NonNull Intent intentFromMediaRecord(@NonNull Context context,
@NonNull MediaRecord mediaRecord, @NonNull MediaRecord mediaRecord,
@ -248,10 +249,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity
@Override @Override
protected void onDestroy() { protected void onDestroy() {
if (cursor != null) { cursor = null;
cursor.close();
cursor = null;
}
super.onDestroy(); super.onDestroy();
} }
@ -549,9 +547,11 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity
} }
if (cursor != null) { if (cursor != null) {
getLifecycle().removeObserver(cursor);
cursor.close(); cursor.close();
} }
cursor = Objects.requireNonNull(data.first); cursor = new LifecycleCursorWrapper(Objects.requireNonNull(data.first));
getLifecycle().addObserver(cursor);
int mediaPosition = Objects.requireNonNull(data.second); int mediaPosition = Objects.requireNonNull(data.second);

Wyświetl plik

@ -8,6 +8,8 @@ import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner; 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 * 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. * 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) { public void onDestroy(@NonNull LifecycleOwner owner) {
close(); close();
} }
@Override
public void close() {
SignalExecutors.BOUNDED.execute(super::close);
}
} }