From e1ac76bbfdf5b49c3aebf410919a76b6ef3cd832 Mon Sep 17 00:00:00 2001 From: Angelo Fuchs - Der Mor Date: Wed, 6 Jun 2018 13:06:03 +0200 Subject: [PATCH] #10 Scrolling through images in chat, works mostly, displays wrong buttons, though. --- .../java/com/b44t/messenger/ChatActivity.java | 50 ++++++++++++++++++- .../java/com/b44t/messenger/PhotoViewer.java | 4 +- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/MessengerProj/src/main/java/com/b44t/messenger/ChatActivity.java b/MessengerProj/src/main/java/com/b44t/messenger/ChatActivity.java index adbc8e355..e3854c147 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/ChatActivity.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/ChatActivity.java @@ -48,6 +48,7 @@ import android.text.TextUtils; import android.text.TextWatcher; import android.text.style.ClickableSpan; import android.text.style.URLSpan; +import android.util.Log; import android.util.SparseIntArray; import android.util.TypedValue; import android.view.Gravity; @@ -82,6 +83,7 @@ import com.b44t.messenger.Components.RecyclerListView; import com.b44t.messenger.Components.SizeNotifierFrameLayout; import com.b44t.messenger.ActionBar.Theme; +import java.io.Console; import java.io.File; import java.net.URLDecoder; import java.util.ArrayList; @@ -2806,7 +2808,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if( /*(Build.VERSION.SDK_INT >= 16 && message.isVideo()) ||*/ message.type == MessageObject.MO_TYPE1_PHOTO || message.isGif()) { PhotoViewer.getInstance().setParentActivity(getParentActivity()); - PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0, ChatActivity.this); + //PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0, + // ChatActivity.this, getPhotosInChat()); + ArrayList photos = getPhotosInChat(); + int index = getIndexOfCellPhoto(cell); + PhotoViewer.getInstance().openPhoto(null, 0, ChatActivity.this, photos, index); } else if (message.type == MessageObject.MO_TYPE9_FILE || message.type == MessageObject.MO_TYPE3_VIDEO ) { AndroidUtilities.openForViewOrShare(getParentActivity(), message.getId(), Intent.ACTION_VIEW); } @@ -2826,7 +2832,47 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return new Holder(view); } - @Override + private ArrayList getPhotosInChat() { + ArrayList photos = new ArrayList<>(); + + for(int msg_index = 0; msg_index < m_msglist.length; msg_index ++) { + MrMsg msg = MrMailbox.getMsg(m_msglist[msg_index]); + switch (msg.getType()) { + case MrMsg.MR_MSG_IMAGE: + case MrMsg.MR_MSG_GIF: + { + TLRPC.Message tlrpcMsg = msg.get_TLRPC_Message(); + MediaController.PhotoEntry entry = new MediaController.PhotoEntry(0, tlrpcMsg.id, + msg.getTimestamp(), tlrpcMsg.attachPath, 0, false); + photos.add(entry); + } + case MrMsg.MR_MSG_TEXT: + Log.d(TAG, "getPhotosInChat: a message: " + msg.getText()); + } + msg.get_TLRPC_Message(); + } + return photos; + } + + private int getIndexOfCellPhoto(ChatMessageCell callingCell) { + int photoCount = 0; + for(int msg_index = 0; msg_index < m_msglist.length; msg_index ++) { + MrMsg msg = MrMailbox.getMsg(m_msglist[msg_index]); + switch (msg.getType()) { + case MrMsg.MR_MSG_IMAGE: + case MrMsg.MR_MSG_GIF: + { + if(callingCell.getMessageObject().getId() == msg.getId()) + return photoCount; // count up until now. + photoCount ++; + } + } + msg.get_TLRPC_Message(); + } + return 0; // didn't find the matching photo. + } + + @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int i) { if (i >= 0 && i < m_msglist.length) { View view = holder.itemView; diff --git a/MessengerProj/src/main/java/com/b44t/messenger/PhotoViewer.java b/MessengerProj/src/main/java/com/b44t/messenger/PhotoViewer.java index f885403d9..fc9e96a10 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/PhotoViewer.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/PhotoViewer.java @@ -2693,8 +2693,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return isVisible && !disableShowCheck && object != null && currentPathObject != null && object.equals(currentPathObject); } - public void openPhoto(final MessageObject messageObject, long dialogId, final PhotoViewerProvider provider) { - openPhoto(messageObject, null, null, null, 0, provider, null, dialogId); + public void openPhoto(final MessageObject messageObject, long dialogId, final PhotoViewerProvider provider, ArrayList photos, int index) { + openPhoto(messageObject, null, null, photos, index, provider, null, dialogId); } public void openPhoto(final TLRPC.FileLocation fileLocation, final PhotoViewerProvider provider) {