diff --git a/app/src/main/java/awais/instagrabber/adapters/DirectItemsAdapter.java b/app/src/main/java/awais/instagrabber/adapters/DirectItemsAdapter.java index fa74d8d2..509794de 100644 --- a/app/src/main/java/awais/instagrabber/adapters/DirectItemsAdapter.java +++ b/app/src/main/java/awais/instagrabber/adapters/DirectItemsAdapter.java @@ -128,11 +128,11 @@ public final class DirectItemsAdapter extends RecyclerView.Adapter { + // final String hashtag = autoLinkItem.getOriginalText().trim(); + // }); + // binding.tvMessage.addOnMentionClickListener(autoLinkItem -> { + // final String mention = autoLinkItem.getOriginalText().trim(); + // }); + // binding.tvMessage.addOnEmailClickListener(autoLinkItem -> { + // final String email = autoLinkItem.getOriginalText().trim(); + // }); + // binding.tvMessage.addOnURLClickListener(autoLinkItem -> { + // final String url = autoLinkItem.getOriginalText().trim(); + // }); + // binding.tvMessage.setOnLongClickListener(v -> { + // return true; + // }); + // } } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVideoCallEventViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVideoCallEventViewHolder.java index 68e88402..f8d1c9f6 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVideoCallEventViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVideoCallEventViewHolder.java @@ -62,4 +62,14 @@ public class DirectItemVideoCallEventViewHolder extends DirectItemViewHolder { binding.tvMessage.setMaxLines(1); binding.tvMessage.setText(sb); } + + @Override + protected boolean allowMessageDirectionGravity() { + return false; + } + + @Override + protected boolean showMessageInfo() { + return false; + } } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java index 1c0b1805..1620115d 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java @@ -77,16 +77,41 @@ public abstract class DirectItemViewHolder extends RecyclerView.ViewHolder { public void bind(final DirectItem item) { final MessageDirection messageDirection = isSelf(item) ? MessageDirection.OUTGOING : MessageDirection.INCOMING; + itemView.post(() -> bindBase(item, messageDirection)); + itemView.post(() -> bindItem(item, messageDirection)); + } + + private void bindBase(final DirectItem item, final MessageDirection messageDirection) { final FrameLayout.LayoutParams containerLayoutParams = (FrameLayout.LayoutParams) binding.container.getLayoutParams(); final DirectItemType itemType = item.getItemType(); - binding.messageInfo.setVisibility(View.VISIBLE); - binding.deliveryStatus.setVisibility(messageDirection == MessageDirection.OUTGOING ? View.VISIBLE : View.GONE); - if (itemType != DirectItemType.ACTION_LOG && itemType != DirectItemType.VIDEO_CALL_EVENT) { - containerLayoutParams.setMarginStart(messageDirection == MessageDirection.OUTGOING ? margin : 0); - containerLayoutParams.setMarginEnd(messageDirection == MessageDirection.INCOMING ? margin : 0); - containerLayoutParams.gravity = messageDirection == MessageDirection.INCOMING ? Gravity.START : Gravity.END; + setMessageDirectionGravity(messageDirection, containerLayoutParams); + setGroupUserDetails(item, messageDirection); + setBackground(messageDirection); + setMessageInfo(item, messageDirection); + if (itemType == DirectItemType.REEL_SHARE) { + containerLayoutParams.setMarginStart(0); + containerLayoutParams.setMarginEnd(0); + } + if (itemType == DirectItemType.TEXT || itemType == DirectItemType.LINK) { + binding.messageInfo.setPadding(0, 0, dmRadius, dmRadiusSmall); + } else { + binding.messageInfo.setPadding(0, 0, messageInfoPaddingSmall, dmRadiusSmall); + } + setupReply(item, messageDirection); + setReactions(item, thread.getUsers()); + } + + private void setBackground(final MessageDirection messageDirection) { + if (showBackground()) { binding.background.setBackgroundResource(messageDirection == MessageDirection.INCOMING ? R.drawable.bg_speech_bubble_incoming : R.drawable.bg_speech_bubble_outgoing); + return; + } + binding.background.setBackgroundResource(0); + } + + private void setGroupUserDetails(final DirectItem item, final MessageDirection messageDirection) { + if (showUserDetailsInGroup()) { binding.ivProfilePic.setVisibility(messageDirection == MessageDirection.INCOMING && thread.isGroup() ? View.VISIBLE : View.GONE); binding.tvUsername.setVisibility(messageDirection == MessageDirection.INCOMING && thread.isGroup() ? View.VISIBLE : View.GONE); if (messageDirection == MessageDirection.INCOMING && thread.isGroup()) { @@ -99,45 +124,46 @@ public abstract class DirectItemViewHolder extends RecyclerView.ViewHolder { layoutParams.matchConstraintMaxWidth = groupMessageWidth; binding.chatMessageLayout.setLayoutParams(layoutParams); } - } else { - binding.ivProfilePic.setVisibility(View.GONE); - binding.tvUsername.setVisibility(View.GONE); - containerLayoutParams.gravity = Gravity.CENTER; - binding.messageInfo.setVisibility(View.GONE); + return; } - if (itemType == DirectItemType.REEL_SHARE) { - containerLayoutParams.setMarginStart(0); - containerLayoutParams.setMarginEnd(0); + binding.ivProfilePic.setVisibility(View.GONE); + binding.tvUsername.setVisibility(View.GONE); + } + + private void setMessageDirectionGravity(final MessageDirection messageDirection, + final FrameLayout.LayoutParams containerLayoutParams) { + if (allowMessageDirectionGravity()) { + containerLayoutParams.setMarginStart(messageDirection == MessageDirection.OUTGOING ? margin : 0); + containerLayoutParams.setMarginEnd(messageDirection == MessageDirection.INCOMING ? margin : 0); + containerLayoutParams.gravity = messageDirection == MessageDirection.INCOMING ? Gravity.START : Gravity.END; + return; } - if (itemType == DirectItemType.TEXT || itemType == DirectItemType.LINK) { - binding.messageInfo.setPadding(0, - 0, - dmRadius, - dmRadiusSmall); - } else { - binding.messageInfo.setPadding(0, - 0, - messageInfoPaddingSmall, - dmRadiusSmall); - } - if (itemType == DirectItemType.MEDIA || itemType == DirectItemType.MEDIA_SHARE || itemType == DirectItemType.CLIP || itemType == DirectItemType.STORY_SHARE - || itemType == DirectItemType.LOCATION || itemType == DirectItemType.FELIX_SHARE) { - // no background for media items - binding.background.setBackgroundResource(0); - } - binding.messageTime.setText(DateFormat.getTimeFormat(itemView.getContext()).format(item.getDate())); - if (messageDirection == MessageDirection.OUTGOING) { - if (item.isPending()) { - binding.deliveryStatus.setImageResource(R.drawable.ic_check_24); - } else { - final boolean read = ResponseBodyUtils.isRead(item, thread.getLastSeenAt(), userIds, null); - binding.deliveryStatus.setImageResource(R.drawable.ic_check_all_24); - ImageViewCompat.setImageTintList( - binding.deliveryStatus, - ColorStateList.valueOf(itemView.getResources().getColor(read ? R.color.blue_500 : R.color.grey_500)) - ); + containerLayoutParams.gravity = Gravity.CENTER; + } + + private void setMessageInfo(final DirectItem item, final MessageDirection messageDirection) { + if (showMessageInfo()) { + binding.messageInfo.setVisibility(View.VISIBLE); + binding.deliveryStatus.setVisibility(messageDirection == MessageDirection.OUTGOING ? View.VISIBLE : View.GONE); + binding.messageTime.setText(DateFormat.getTimeFormat(itemView.getContext()).format(item.getDate())); + if (messageDirection == MessageDirection.OUTGOING) { + if (item.isPending()) { + binding.deliveryStatus.setImageResource(R.drawable.ic_check_24); + } else { + final boolean read = ResponseBodyUtils.isRead(item, thread.getLastSeenAt(), userIds, null); + binding.deliveryStatus.setImageResource(R.drawable.ic_check_all_24); + ImageViewCompat.setImageTintList( + binding.deliveryStatus, + ColorStateList.valueOf(itemView.getResources().getColor(read ? R.color.blue_500 : R.color.grey_500)) + ); + } } + return; } + binding.messageInfo.setVisibility(View.GONE); + } + + private void setupReply(final DirectItem item, final MessageDirection messageDirection) { if (item.getRepliedToMessage() != null) { setReply(item, messageDirection, thread.getUsers()); } else { @@ -145,8 +171,6 @@ public abstract class DirectItemViewHolder extends RecyclerView.ViewHolder { binding.replyContainer.setVisibility(View.GONE); binding.replyInfo.setVisibility(View.GONE); } - setReactions(item, thread.getUsers()); - bindItem(item, messageDirection); } private void setReply(final DirectItem item, @@ -324,8 +348,20 @@ public abstract class DirectItemViewHolder extends RecyclerView.ViewHolder { return null; } - protected void removeBg() { - binding.background.setBackground(null); + protected boolean allowMessageDirectionGravity() { + return true; + } + + protected boolean showUserDetailsInGroup() { + return true; + } + + protected boolean showBackground() { + return false; + } + + protected boolean showMessageInfo() { + return true; } public void cleanup() {} diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVoiceMediaViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVoiceMediaViewHolder.java index 9ddbd6e9..c9268a67 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVoiceMediaViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemVoiceMediaViewHolder.java @@ -19,7 +19,6 @@ import java.util.List; import awais.instagrabber.R; import awais.instagrabber.databinding.LayoutDmBaseBinding; import awais.instagrabber.databinding.LayoutDmVoiceMediaBinding; -import awais.instagrabber.interfaces.MentionClickListener; import awais.instagrabber.repositories.responses.Audio; import awais.instagrabber.repositories.responses.Media; import awais.instagrabber.repositories.responses.User; @@ -27,7 +26,6 @@ import awais.instagrabber.repositories.responses.directmessages.DirectItem; import awais.instagrabber.repositories.responses.directmessages.DirectItemVoiceMedia; import awais.instagrabber.repositories.responses.directmessages.DirectThread; import awais.instagrabber.utils.TextUtils; -import awais.instagrabber.utils.Utils; import static com.google.android.exoplayer2.C.TIME_UNSET; @@ -45,18 +43,16 @@ public class DirectItemVoiceMediaViewHolder extends DirectItemViewHolder { @NonNull final LayoutDmVoiceMediaBinding binding, final User currentUser, final DirectThread thread, - final MentionClickListener mentionClickListener, final View.OnClickListener onClickListener) { super(baseBinding, currentUser, thread, onClickListener); this.binding = binding; this.dataSourceFactory = new DefaultDataSourceFactory(binding.getRoot().getContext(), "instagram"); setItemView(binding.getRoot()); - binding.waveformSeekBar.getLayoutParams().width = windowWidth - margin - Utils.convertDpToPx(56); + binding.voiceMedia.getLayoutParams().width = mediaImageMaxWidth; } @Override public void bindItem(final DirectItem directItemModel, final MessageDirection messageDirection) { - removeBg(); final DirectItemVoiceMedia voiceMedia = directItemModel.getVoiceMedia(); if (voiceMedia == null) return; final Media media = voiceMedia.getMedia(); diff --git a/app/src/main/java/awais/instagrabber/customviews/ChatMessageLayout.java b/app/src/main/java/awais/instagrabber/customviews/ChatMessageLayout.java index f18633ab..629917e1 100644 --- a/app/src/main/java/awais/instagrabber/customviews/ChatMessageLayout.java +++ b/app/src/main/java/awais/instagrabber/customviews/ChatMessageLayout.java @@ -92,7 +92,8 @@ public class ChatMessageLayout extends FrameLayout { if (firstChildId == R.id.media_container) { widthSize += viewPartMainWidth; heightSize += viewPartMainHeight; - } else if (firstChildId == R.id.raven_media_container || firstChildId == R.id.profile_container || firstChildId == R.id.voice_media || firstChildId == R.id.story_container) { + } else if (firstChildId == R.id.raven_media_container || firstChildId == R.id.profile_container || firstChildId == R.id.voice_media + || firstChildId == R.id.story_container || firstChildId == R.id.media_share_container) { widthSize += viewPartMainWidth; heightSize += viewPartMainHeight + viewPartInfoHeight; } else { diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index 0f2413e3..e72d3bae 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -545,14 +545,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe new ProfileFetcher(username.trim().substring(1), profileModel -> { if (getContext() == null) return; this.profileModel = profileModel; - // final String userIdFromCookie = CookieUtils.getUserIdFromCookie(cookie); - // final boolean isSelf = isLoggedIn - // && profileModel != null - // && userIdFromCookie != null - // && userIdFromCookie.equals(profileModel.getId()); - // if (favMenuItem != null) { - // favMenuItem.setVisible(isSelf); - // } setProfileDetails(); }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); diff --git a/app/src/main/res/layout/layout_dm_voice_media.xml b/app/src/main/res/layout/layout_dm_voice_media.xml index dea089f2..d2c49818 100644 --- a/app/src/main/res/layout/layout_dm_voice_media.xml +++ b/app/src/main/res/layout/layout_dm_voice_media.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/voice_media" - android:layout_width="wrap_content" + android:layout_width="match_parent" android:layout_height="wrap_content">