make media previews survive rotations
This commit is contained in:
parent
fbc1d242ca
commit
b15777bd3a
|
@ -139,12 +139,14 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
public static final String RECENTLY_USED_QUICK_ACTION = "recently_used_quick_action";
|
||||
public static final String STATE_CONVERSATION_UUID = ConversationFragment.class.getName() + ".uuid";
|
||||
public static final String STATE_SCROLL_POSITION = ConversationFragment.class.getName() + ".scroll_position";
|
||||
public static final String STATE_PHOTO_URI = ConversationFragment.class.getName() + ".take_photo_uri";
|
||||
public static final String STATE_PHOTO_URI = ConversationFragment.class.getName() + ".media_previews";
|
||||
public static final String STATE_MEDIA_PREVIEWS = ConversationFragment.class.getName() + ".take_photo_uri";
|
||||
private static final String STATE_LAST_MESSAGE_UUID = "state_last_message_uuid";
|
||||
|
||||
private final List<Message> messageList = new ArrayList<>();
|
||||
private final PendingItem<ActivityResult> postponedActivityResult = new PendingItem<>();
|
||||
private final PendingItem<String> pendingConversationsUuid = new PendingItem<>();
|
||||
private final PendingItem<ArrayList<Attachment>> pendingMediaPreviews = new PendingItem<>();
|
||||
private final PendingItem<Bundle> pendingExtras = new PendingItem<>();
|
||||
private final PendingItem<Uri> pendingTakePhotoUri = new PendingItem<>();
|
||||
private final PendingItem<ScrollState> pendingScrollState = new PendingItem<>();
|
||||
|
@ -1773,6 +1775,10 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
if (scrollState != null) {
|
||||
outState.putParcelable(STATE_SCROLL_POSITION, scrollState);
|
||||
}
|
||||
final ArrayList<Attachment> attachments = mediaPreviewAdapter.getAttachments();
|
||||
if (attachments.size() > 0) {
|
||||
outState.putParcelableArrayList(STATE_MEDIA_PREVIEWS, attachments);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1783,10 +1789,14 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
return;
|
||||
}
|
||||
String uuid = savedInstanceState.getString(STATE_CONVERSATION_UUID);
|
||||
ArrayList<Attachment> attachments = savedInstanceState.getParcelableArrayList(STATE_MEDIA_PREVIEWS);
|
||||
pendingLastMessageUuid.push(savedInstanceState.getString(STATE_LAST_MESSAGE_UUID, null));
|
||||
if (uuid != null) {
|
||||
QuickLoader.set(uuid);
|
||||
this.pendingConversationsUuid.push(uuid);
|
||||
if (attachments != null && attachments.size() > 0) {
|
||||
this.pendingMediaPreviews.push(attachments);
|
||||
}
|
||||
String takePhotoUri = savedInstanceState.getString(STATE_PHOTO_URI);
|
||||
if (takePhotoUri != null) {
|
||||
pendingTakePhotoUri.push(Uri.parse(takePhotoUri));
|
||||
|
@ -2637,9 +2647,15 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
reInit(conversation);
|
||||
ScrollState scrollState = pendingScrollState.pop();
|
||||
String lastMessageUuid = pendingLastMessageUuid.pop();
|
||||
List<Attachment> attachments = pendingMediaPreviews.pop();
|
||||
if (scrollState != null) {
|
||||
setScrollPosition(scrollState, lastMessageUuid);
|
||||
}
|
||||
if (attachments != null && attachments.size() > 0) {
|
||||
Log.d(Config.LOGTAG,"had attachments on restore");
|
||||
mediaPreviewAdapter.addMediaPreviews(attachments);
|
||||
toggleInputMethod();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ import eu.siacs.conversations.ui.util.StyledAttributes;
|
|||
|
||||
public class MediaPreviewAdapter extends RecyclerView.Adapter<MediaPreviewAdapter.MediaPreviewViewHolder> {
|
||||
|
||||
private final List<Attachment> mediaPreviews = new ArrayList<>();
|
||||
private final ArrayList<Attachment> mediaPreviews = new ArrayList<>();
|
||||
|
||||
private final ConversationFragment conversationFragment;
|
||||
|
||||
|
@ -150,7 +150,7 @@ public class MediaPreviewAdapter extends RecyclerView.Adapter<MediaPreviewAdapte
|
|||
return mediaPreviews.size() > 0;
|
||||
}
|
||||
|
||||
public List<Attachment> getAttachments() {
|
||||
public ArrayList<Attachment> getAttachments() {
|
||||
return mediaPreviews;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@ import android.content.ClipData;
|
|||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -44,7 +46,39 @@ import eu.siacs.conversations.Config;
|
|||
import eu.siacs.conversations.utils.MimeUtils;
|
||||
import eu.siacs.conversations.xmpp.stanzas.IqPacket;
|
||||
|
||||
public class Attachment {
|
||||
public class Attachment implements Parcelable {
|
||||
|
||||
Attachment(Parcel in) {
|
||||
uri = in.readParcelable(Uri.class.getClassLoader());
|
||||
mime = in.readString();
|
||||
uuid = UUID.fromString(in.readString());
|
||||
type = Type.valueOf(in.readString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeParcelable(uri, flags);
|
||||
dest.writeString(mime);
|
||||
dest.writeString(uuid.toString());
|
||||
dest.writeString(type.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static final Creator<Attachment> CREATOR = new Creator<Attachment>() {
|
||||
@Override
|
||||
public Attachment createFromParcel(Parcel in) {
|
||||
return new Attachment(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Attachment[] newArray(int size) {
|
||||
return new Attachment[size];
|
||||
}
|
||||
};
|
||||
|
||||
public String getMime() {
|
||||
return mime;
|
||||
|
|
Loading…
Reference in a new issue