diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java b/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java index 61b5f5683d..5f19d3ff23 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java @@ -28,6 +28,7 @@ import java.text.SimpleDateFormat; import java.util.Locale; import okhttp3.HttpUrl; +import org.thoughtcrime.securesms.util.ViewUtil; /** * The view shown in the compose box or conversation that represents the state of the link preview. @@ -181,10 +182,16 @@ public class LinkPreviewView extends FrameLayout { } } - public void setCorners(int topLeft, int topRight) { - cornerMask.setRadii(topLeft, topRight, 0, 0); - outliner.setRadii(topLeft, topRight, 0, 0); - thumbnail.setCorners(topLeft, defaultRadius, defaultRadius, defaultRadius); + public void setCorners(int topStart, int topEnd) { + if (ViewUtil.isRtl(this)) { + cornerMask.setRadii(topEnd, topStart, 0, 0); + outliner.setRadii(topEnd, topStart, 0, 0); + thumbnail.setCorners(defaultRadius, topEnd, defaultRadius, defaultRadius); + } else { + cornerMask.setRadii(topStart, topEnd, 0, 0); + outliner.setRadii(topStart, topEnd, 0, 0); + thumbnail.setCorners(topStart, defaultRadius, defaultRadius, defaultRadius); + } postInvalidate(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index ecd810a69c..038edc67ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -889,59 +889,63 @@ public final class ConversationItem extends RelativeLayout implements BindableCo int defaultRadius = readDimen(R.dimen.message_corner_radius); int collapseRadius = readDimen(R.dimen.message_corner_collapse_radius); - int topLeft = defaultRadius; - int topRight = defaultRadius; - int bottomLeft = defaultRadius; - int bottomRight = defaultRadius; + int topStart = defaultRadius; + int topEnd = defaultRadius; + int bottomStart = defaultRadius; + int bottomEnd = defaultRadius; if (isSingularMessage(current, previous, next, isGroupThread)) { - topLeft = defaultRadius; - topRight = defaultRadius; - bottomLeft = defaultRadius; - bottomRight = defaultRadius; + topStart = defaultRadius; + topEnd = defaultRadius; + bottomStart = defaultRadius; + bottomEnd = defaultRadius; } else if (isStartOfMessageCluster(current, previous, isGroupThread)) { if (current.isOutgoing()) { - bottomRight = collapseRadius; + bottomEnd = collapseRadius; } else { - bottomLeft = collapseRadius; + bottomStart = collapseRadius; } } else if (isEndOfMessageCluster(current, next, isGroupThread)) { if (current.isOutgoing()) { - topRight = collapseRadius; + topEnd = collapseRadius; } else { - topLeft = collapseRadius; + topStart = collapseRadius; } } else { if (current.isOutgoing()) { - topRight = collapseRadius; - bottomRight = collapseRadius; + topEnd = collapseRadius; + bottomEnd = collapseRadius; } else { - topLeft = collapseRadius; - bottomLeft = collapseRadius; + topStart = collapseRadius; + bottomStart = collapseRadius; } } if (!TextUtils.isEmpty(current.getDisplayBody(getContext()))) { - bottomLeft = 0; - bottomRight = 0; + bottomStart = 0; + bottomEnd = 0; } if (isStartOfMessageCluster(current, previous, isGroupThread) && !current.isOutgoing() && isGroupThread) { - topLeft = 0; - topRight = 0; + topStart = 0; + topEnd = 0; } if (hasQuote(messageRecord)) { - topLeft = 0; - topRight = 0; + topStart = 0; + topEnd = 0; } if (hasLinkPreview(messageRecord) || hasExtraText(messageRecord)) { - bottomLeft = 0; - bottomRight = 0; + bottomStart = 0; + bottomEnd = 0; } - mediaThumbnailStub.get().setCorners(topLeft, topRight, bottomRight, bottomLeft); + if (ViewUtil.isRtl(this)) { + mediaThumbnailStub.get().setCorners(topEnd, topStart, bottomStart, bottomEnd); + } else { + mediaThumbnailStub.get().setCorners(topStart, topEnd, bottomEnd, bottomStart); + } } private void setSharedContactCorners(@NonNull MessageRecord current, @NonNull Optional previous, @NonNull Optional next, boolean isGroupThread) { @@ -1229,6 +1233,14 @@ public final class ConversationItem extends RelativeLayout implements BindableCo } } + private void setOutlinerRadii(Outliner outliner, int topStart, int topEnd, int bottomEnd, int bottomStart) { + if (ViewUtil.isRtl(this)) { + outliner.setRadii(topEnd, topStart, bottomStart, bottomEnd); + } else { + outliner.setRadii(topStart, topEnd, bottomEnd, bottomStart); + } + } + private void setMessageShape(@NonNull MessageRecord current, @NonNull Optional previous, @NonNull Optional next, boolean isGroupThread) { int bigRadius = readDimen(R.dimen.message_corner_radius); int smallRadius = readDimen(R.dimen.message_corner_collapse_radius); @@ -1248,32 +1260,32 @@ public final class ConversationItem extends RelativeLayout implements BindableCo } else if (isStartOfMessageCluster(current, previous, isGroupThread)) { if (current.isOutgoing()) { background = R.drawable.message_bubble_background_sent_start; - outliner.setRadii(bigRadius, bigRadius, smallRadius, bigRadius); - pulseOutliner.setRadii(bigRadius, bigRadius, smallRadius, bigRadius); + setOutlinerRadii(outliner, bigRadius, bigRadius, smallRadius, bigRadius); + setOutlinerRadii(pulseOutliner, bigRadius, bigRadius, smallRadius, bigRadius); } else { background = R.drawable.message_bubble_background_received_start; - outliner.setRadii(bigRadius, bigRadius, bigRadius, smallRadius); - pulseOutliner.setRadii(bigRadius, bigRadius, bigRadius, smallRadius); + setOutlinerRadii(outliner, bigRadius, bigRadius, bigRadius, smallRadius); + setOutlinerRadii(pulseOutliner, bigRadius, bigRadius, bigRadius, smallRadius); } } else if (isEndOfMessageCluster(current, next, isGroupThread)) { if (current.isOutgoing()) { background = R.drawable.message_bubble_background_sent_end; - outliner.setRadii(bigRadius, smallRadius, bigRadius, bigRadius); - pulseOutliner.setRadii(bigRadius, smallRadius, bigRadius, bigRadius); + setOutlinerRadii(outliner, bigRadius, smallRadius, bigRadius, bigRadius); + setOutlinerRadii(pulseOutliner, bigRadius, smallRadius, bigRadius, bigRadius); } else { background = R.drawable.message_bubble_background_received_end; - outliner.setRadii(smallRadius, bigRadius, bigRadius, bigRadius); - pulseOutliner.setRadii(smallRadius, bigRadius, bigRadius, bigRadius); + setOutlinerRadii(outliner, smallRadius, bigRadius, bigRadius, bigRadius); + setOutlinerRadii(pulseOutliner, smallRadius, bigRadius, bigRadius, bigRadius); } } else { if (current.isOutgoing()) { background = R.drawable.message_bubble_background_sent_middle; - outliner.setRadii(bigRadius, smallRadius, smallRadius, bigRadius); - pulseOutliner.setRadii(bigRadius, smallRadius, smallRadius, bigRadius); + setOutlinerRadii(outliner, bigRadius, smallRadius, smallRadius, bigRadius); + setOutlinerRadii(pulseOutliner, bigRadius, smallRadius, smallRadius, bigRadius); } else { background = R.drawable.message_bubble_background_received_middle; - outliner.setRadii(smallRadius, bigRadius, bigRadius, smallRadius); - pulseOutliner.setRadii(smallRadius, bigRadius, bigRadius, smallRadius); + setOutlinerRadii(outliner, smallRadius, bigRadius, bigRadius, smallRadius); + setOutlinerRadii(pulseOutliner, smallRadius, bigRadius, bigRadius, smallRadius); } } diff --git a/app/src/main/res/drawable-ldrtl/message_bubble_background_received_end.xml b/app/src/main/res/drawable-ldrtl/message_bubble_background_received_end.xml new file mode 100644 index 0000000000..9381f1ce50 --- /dev/null +++ b/app/src/main/res/drawable-ldrtl/message_bubble_background_received_end.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-ldrtl/message_bubble_background_received_middle.xml b/app/src/main/res/drawable-ldrtl/message_bubble_background_received_middle.xml new file mode 100644 index 0000000000..bcc4c74e7c --- /dev/null +++ b/app/src/main/res/drawable-ldrtl/message_bubble_background_received_middle.xml @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable-ldrtl/message_bubble_background_received_start.xml b/app/src/main/res/drawable-ldrtl/message_bubble_background_received_start.xml new file mode 100644 index 0000000000..dd67b6ea02 --- /dev/null +++ b/app/src/main/res/drawable-ldrtl/message_bubble_background_received_start.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_end.xml b/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_end.xml new file mode 100644 index 0000000000..14df774b4b --- /dev/null +++ b/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_end.xml @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_middle.xml b/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_middle.xml new file mode 100644 index 0000000000..d43aecfa96 --- /dev/null +++ b/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_middle.xml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_start.xml b/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_start.xml new file mode 100644 index 0000000000..7bbdb77298 --- /dev/null +++ b/app/src/main/res/drawable-ldrtl/message_bubble_background_sent_start.xml @@ -0,0 +1,17 @@ + + + + + + + + + +