diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java b/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java index 60e8e476b..fa2234616 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java @@ -282,6 +282,8 @@ public class CardMediaContainer extends ViewGroup implements Constants { if (contentHeight > 0) { heightSum = contentHeight; } + } else if (contentHeight > 0) { + heightSum = contentHeight; } final int height = heightSum + getPaddingTop() + getPaddingBottom(); setMeasuredDimension(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.kt b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.kt index e68282b40..55e2eca4b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.kt +++ b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.kt @@ -51,20 +51,16 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) private val timeView by lazy { itemView.time } private val replyCountView by lazy { itemView.replyCount } private val retweetCountView by lazy { itemView.retweetCount } - private val quoteIndicator by lazy { itemView.quoteIndicator } - private val quoteIndicatorAnchorTop by lazy { itemView.quoteIndicatorAnchorTop } - private val quoteIndicatorAnchorBottom by lazy { itemView.quoteIndicatorAnchorBottom } + private val quotedView by lazy { itemView.quotedView } private val quotedTextView by lazy { itemView.quotedText } private val actionButtons by lazy { itemView.actionButtons } private val mediaLabel by lazy { itemView.mediaLabel } - private val quotedMediaLabel by lazy { itemView.quotedMediaLabel } private val statusContentLowerSpace by lazy { itemView.statusContentLowerSpace } private val quotedMediaPreview by lazy { itemView.quotedMediaPreview } private val favoriteIcon by lazy { itemView.favoriteIcon } private val retweetIcon by lazy { itemView.retweetIcon } private val favoriteCountView by lazy { itemView.favoriteCount } private val mediaLabelTextView by lazy { itemView.mediaLabelText } - private val quotedMediaLabelTextView by lazy { itemView.quotedMediaLabelText } private val replyButton by lazy { itemView.reply } private val retweetButton by lazy { itemView.retweet } private val favoriteButton by lazy { itemView.favorite } @@ -112,7 +108,6 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) mediaPreview.visibility = View.GONE mediaLabel.visibility = View.VISIBLE } - quotedMediaLabel.visibility = View.GONE actionButtons.visibility = if (showCardActions) View.VISIBLE else View.GONE itemMenu.visibility = if (showCardActions) View.VISIBLE else View.GONE statusContentLowerSpace.visibility = if (showCardActions) View.GONE else View.VISIBLE @@ -182,9 +177,7 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) val skipLinksInText = status.extras != null && status.extras.support_entities if (status.is_quote) { - quoteIndicator.visibility = View.VISIBLE - quoteIndicatorAnchorTop.visibility = View.VISIBLE - quoteIndicatorAnchorBottom.visibility = View.VISIBLE + quotedView.visibility = View.VISIBLE val quoteContentAvailable = status.quoted_text_plain != null && status.quoted_text_unescaped != null if (quoteContentAvailable) { @@ -223,7 +216,31 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) quotedTextView.visibility = View.VISIBLE } - quoteIndicator.color = status.quoted_user_color + if (status.quoted_user_color != 0) { + quotedView.drawStart(status.quoted_user_color) + } else { + quotedView.drawStart(ThemeUtils.getColorFromAttribute(context, R.attr.quoteIndicatorBackgroundColor, 0)) + } + + if (status.quoted_media?.isNotEmpty() ?: false) { + + if (!adapter.sensitiveContentEnabled && status.is_possibly_sensitive) { + // Sensitive content, show label instead of media view + quotedMediaPreview.visibility = View.GONE + } else if (!adapter.mediaPreviewEnabled) { + // Media preview disabled, just show label + + } else { + // Show media + quotedMediaPreview.visibility = View.VISIBLE + + quotedMediaPreview.displayMedia(status.quoted_media, loader, status.account_key, -1, + null, null) + } + } else { + // No media, hide all related views + quotedMediaPreview.visibility = View.GONE + } } else { quotedNameView.visibility = View.GONE quotedTextView.visibility = View.VISIBLE @@ -235,17 +252,12 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) string.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) quotedTextView.text = string - quoteIndicator.color = 0 + quotedView.drawStart(ThemeUtils.getColorFromAttribute(context, R.attr.quoteIndicatorBackgroundColor, 0)) } itemContent.drawStart(status.user_color) } else { - - quoteIndicatorAnchorTop.visibility = View.GONE - quoteIndicatorAnchorBottom.visibility = View.GONE - quotedNameView.visibility = View.GONE - quotedTextView.visibility = View.GONE - quoteIndicator.visibility = View.GONE + quotedView.visibility = View.GONE if (status.is_retweet) { val retweetUserColor = status.retweet_user_color @@ -290,54 +302,32 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) itemContent.drawEnd() } - val hasQuotedMedia = status.quoted_media?.isNotEmpty() ?: false - val hasPrimaryMedia = !hasQuotedMedia && status.media?.isNotEmpty() ?: false - - - if (!hasPrimaryMedia && !hasQuotedMedia) { - // No media, hide all related views - mediaLabel.visibility = View.GONE - quotedMediaLabel.visibility = View.GONE - mediaPreview.visibility = View.GONE - quotedMediaPreview.visibility = View.GONE - - } else { + if (status.media?.isNotEmpty() ?: false) { if (!adapter.sensitiveContentEnabled && status.is_possibly_sensitive) { // Sensitive content, show label instead of media view - mediaLabel.visibility = if (hasPrimaryMedia) View.VISIBLE else View.GONE - quotedMediaLabel.visibility = if (hasQuotedMedia) View.VISIBLE else View.GONE - + mediaLabel.visibility = View.VISIBLE mediaPreview.visibility = View.GONE - quotedMediaPreview.visibility = View.GONE - } else if (!adapter.mediaPreviewEnabled) { // Media preview disabled, just show label - mediaLabel.visibility = if (hasPrimaryMedia) View.VISIBLE else View.GONE - quotedMediaLabel.visibility = if (hasQuotedMedia) View.VISIBLE else View.GONE - + mediaLabel.visibility = View.VISIBLE mediaPreview.visibility = View.GONE - quotedMediaPreview.visibility = View.GONE - } else { // Show media - mediaLabel.visibility = View.GONE - quotedMediaLabel.visibility = View.GONE - - mediaPreview.setStyle(adapter.mediaPreviewStyle) - quotedMediaPreview.setStyle(adapter.mediaPreviewStyle) - - mediaPreview.visibility = if (hasPrimaryMedia) View.VISIBLE else View.GONE - quotedMediaPreview.visibility = if (hasQuotedMedia) View.VISIBLE else View.GONE + mediaPreview.visibility = View.VISIBLE mediaPreview.displayMedia(status.media, loader, status.account_key, -1, this, adapter.mediaLoadingHandler) - quotedMediaPreview.displayMedia(status.quoted_media, loader, status.account_key, -1, this, - adapter.mediaLoadingHandler) } + } else { + // No media, hide all related views + mediaLabel.visibility = View.GONE + mediaPreview.visibility = View.GONE } + + var displayEnd = -1 if (status.extras.display_text_range != null) { displayEnd = status.extras.display_text_range!![1] @@ -440,7 +430,6 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) favoriteButton.setOnClickListener(eventListener) mediaLabel.setOnClickListener(eventListener) - quotedMediaLabel.setOnClickListener(eventListener) } @@ -455,7 +444,6 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) statusInfoLabel.textSize = textSize * 0.75f mediaLabelTextView.textSize = textSize * 0.95f - quotedMediaLabelTextView.textSize = textSize * 0.95f replyCountView.textSize = textSize retweetCountView.textSize = textSize @@ -465,6 +453,7 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) fun setupViewOptions() { setTextSize(adapter.textSize) mediaPreview.setStyle(adapter.mediaPreviewStyle) + quotedMediaPreview.setStyle(adapter.mediaPreviewStyle) // profileImageView.setStyle(adapter.getProfileImageStyle()); val nameFirst = adapter.nameFirst @@ -592,10 +581,6 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View) val firstMedia = holder.adapter.getStatus(position)?.media?.firstOrNull() ?: return listener.onMediaClick(holder, v, firstMedia, position) } - holder.quotedMediaLabel -> { - val firstMedia = holder.adapter.getStatus(position)?.quoted_media?.firstOrNull() ?: return - listener.onMediaClick(holder, v, firstMedia, position) - } } } diff --git a/twidere/src/main/res/layout/list_item_status.xml b/twidere/src/main/res/layout/list_item_status.xml index cefa4d9f1..64336eeec 100644 --- a/twidere/src/main/res/layout/list_item_status.xml +++ b/twidere/src/main/res/layout/list_item_status.xml @@ -221,114 +221,80 @@ - - - - - - - + app:ignorePadding="true"> - + - + + - + + + + android:layout_alignTop="@+id/quotedMediaPreview" + android:layout_toEndOf="@+id/quotedMediaPreview" + android:layout_toRightOf="@+id/quotedMediaPreview" + android:gravity="center_vertical|start" + android:orientation="horizontal" + android:paddingBottom="0dp" + android:paddingEnd="0dp" + android:paddingLeft="@dimen/element_spacing_small" + android:paddingRight="0dp" + android:paddingStart="@dimen/element_spacing_small" + android:paddingTop="@dimen/element_spacing_small" + android:tag="font_family|user" + android:visibility="gone" + app:nv_primaryTextColor="?android:textColorPrimary" + app:nv_primaryTextStyle="bold" + app:nv_secondaryTextColor="?android:textColorSecondary" + tools:visibility="visible"/> - + - - - - - - - - +