kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix ANR when leaving MediaPreviewActivity.
rodzic
e5c9dddb5a
commit
8be659c1c8
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue