Support onStop/onStart media display in the correct position

Fixes #7330
Fixes #7329
This commit is contained in:
Moxie Marlinspike 2018-01-16 12:06:55 -08:00
parent fe02b3f8d3
commit 95ebae5d5f

View File

@ -88,6 +88,8 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
private long initialMediaSize; private long initialMediaSize;
private Recipient conversationRecipient; private Recipient conversationRecipient;
private int restartItem = -1;
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
@Override @Override
protected void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) { protected void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) {
@ -155,7 +157,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
@Override @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
cleanupMedia(); restartItem = cleanupMedia();
} }
@Override @Override
@ -177,6 +179,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
initialMediaUri = getIntent().getData(); initialMediaUri = getIntent().getData();
initialMediaType = getIntent().getType(); initialMediaType = getIntent().getType();
initialMediaSize = getIntent().getLongExtra(SIZE_EXTRA, 0); initialMediaSize = getIntent().getLongExtra(SIZE_EXTRA, 0);
restartItem = -1;
if (address != null) { if (address != null) {
conversationRecipient = Recipient.from(this, address, true); conversationRecipient = Recipient.from(this, address, true);
@ -195,15 +198,19 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
Log.w(TAG, "Loading Part URI: " + initialMediaUri); Log.w(TAG, "Loading Part URI: " + initialMediaUri);
if (conversationRecipient != null) { if (conversationRecipient != null) {
getSupportLoaderManager().initLoader(0, null, this); getSupportLoaderManager().restartLoader(0, null, this);
} else { } else {
mediaPager.setAdapter(new SingleItemPagerAdapter(this, masterSecret, GlideApp.with(this), getWindow(), initialMediaUri, initialMediaType, initialMediaSize)); mediaPager.setAdapter(new SingleItemPagerAdapter(this, masterSecret, GlideApp.with(this), getWindow(), initialMediaUri, initialMediaType, initialMediaSize));
} }
} }
private void cleanupMedia() { private int cleanupMedia() {
int restartItem = mediaPager.getCurrentItem();
mediaPager.removeAllViews(); mediaPager.removeAllViews();
mediaPager.setAdapter(null); mediaPager.setAdapter(null);
return restartItem;
} }
private void showOverview() { private void showOverview() {
@ -297,7 +304,9 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
CursorPagerAdapter adapter = new CursorPagerAdapter(this, masterSecret, GlideApp.with(this), getWindow(), data.first, data.second); CursorPagerAdapter adapter = new CursorPagerAdapter(this, masterSecret, GlideApp.with(this), getWindow(), data.first, data.second);
mediaPager.setAdapter(adapter); mediaPager.setAdapter(adapter);
adapter.setActive(true); adapter.setActive(true);
mediaPager.setCurrentItem(data.second);
if (restartItem < 0) mediaPager.setCurrentItem(data.second);
else mediaPager.setCurrentItem(restartItem);
} }
} }