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.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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue