Add support for link preview descriptions.

This commit is contained in:
Greyson Parrelli
2020-08-25 16:05:39 -04:00
committed by GitHub
parent a3438c4f8d
commit c78e098cb4
19 changed files with 151 additions and 58 deletions

View File

@@ -119,6 +119,10 @@ public class ConversationItemThumbnail extends FrameLayout {
outliner.setRadii(topLeft, topRight, bottomRight, bottomLeft);
}
public void setMinimumThumbnailWidth(int width) {
thumbnail.setMinimumThumbnailWidth(width);
}
public void setBorderless(boolean borderless) {
this.borderless = borderless;
}

View File

@@ -21,11 +21,12 @@ import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.ImageSlide;
import org.thoughtcrime.securesms.mms.SlidesClickedListener;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util;
import okhttp3.HttpUrl;
/**
* The view shown in the compose box that represents the state of the link preview.
* The view shown in the compose box or conversation that represents the state of the link preview.
*/
public class LinkPreviewView extends FrameLayout {
@@ -35,6 +36,7 @@ public class LinkPreviewView extends FrameLayout {
private ViewGroup container;
private OutlinedThumbnailView thumbnail;
private TextView title;
private TextView description;
private TextView site;
private View divider;
private View closeButton;
@@ -63,6 +65,7 @@ public class LinkPreviewView extends FrameLayout {
container = findViewById(R.id.linkpreview_container);
thumbnail = findViewById(R.id.linkpreview_thumbnail);
title = findViewById(R.id.linkpreview_title);
description = findViewById(R.id.linkpreview_description);
site = findViewById(R.id.linkpreview_site);
divider = findViewById(R.id.linkpreview_divider);
spinner = findViewById(R.id.linkpreview_progress_wheel);
@@ -85,6 +88,8 @@ public class LinkPreviewView extends FrameLayout {
container.setPadding(0, 0, 0, 0);
divider.setVisibility(VISIBLE);
closeButton.setVisibility(VISIBLE);
title.setMaxLines(2);
description.setMaxLines(2);
closeButton.setOnClickListener(v -> {
if (closeClickedListener != null) {
@@ -108,6 +113,7 @@ public class LinkPreviewView extends FrameLayout {
public void setLoading() {
title.setVisibility(GONE);
site.setVisibility(GONE);
description.setVisibility(GONE);
thumbnail.setVisibility(GONE);
spinner.setVisibility(VISIBLE);
noPreview.setVisibility(INVISIBLE);
@@ -123,17 +129,33 @@ public class LinkPreviewView extends FrameLayout {
}
public void setLinkPreview(@NonNull GlideRequests glideRequests, @NonNull LinkPreview linkPreview, boolean showThumbnail) {
title.setVisibility(VISIBLE);
site.setVisibility(VISIBLE);
thumbnail.setVisibility(VISIBLE);
spinner.setVisibility(GONE);
noPreview.setVisibility(GONE);
title.setText(linkPreview.getTitle());
if (!Util.isEmpty(linkPreview.getTitle())) {
title.setText(linkPreview.getTitle());
title.setVisibility(VISIBLE);
} else {
title.setVisibility(GONE);
}
HttpUrl url = HttpUrl.parse(linkPreview.getUrl());
if (url != null) {
site.setText(url.topPrivateDomain());
if (!Util.isEmpty(linkPreview.getDescription())) {
description.setText(linkPreview.getDescription());
description.setVisibility(VISIBLE);
} else {
description.setVisibility(GONE);
}
if (!Util.isEmpty(linkPreview.getUrl())) {
HttpUrl url = HttpUrl.parse(linkPreview.getUrl());
if (url != null) {
site.setText(url.topPrivateDomain());
site.setVisibility(VISIBLE);
} else {
site.setVisibility(GONE);
}
} else {
site.setVisibility(GONE);
}
if (showThumbnail && linkPreview.getThumbnail().isPresent()) {

View File

@@ -141,6 +141,11 @@ public class ThumbnailView extends FrameLayout {
captionIcon.setScaleY(captionIconScale);
}
public void setMinimumThumbnailWidth(int width) {
bounds[MIN_WIDTH] = width;
invalidate();
}
@SuppressWarnings("SuspiciousNameCombination")
private void fillTargetDimensions(int[] targetDimens, int[] dimens, int[] bounds) {
int dimensFilledCount = getNonZeroCount(dimens);