diff --git a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index 47c648ae4..e8ace5872 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -18,10 +18,15 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.util.DateUtils; +import chat.delta.rpc.Rpc; +import chat.delta.rpc.RpcException; + public class ConversationItemFooter extends LinearLayout { private TextView dateView; private TextView editedView; + private TextView viewsLabel; + private ImageView viewsIcon; private ImageView bookmarkIndicatorView; private ImageView emailIndicatorView; private ImageView locationIndicatorView; @@ -29,6 +34,7 @@ public class ConversationItemFooter extends LinearLayout { private Integer textColor = null; private int callDuration = 0; private Context context; + private Rpc rpc; public ConversationItemFooter(Context context) { super(context); @@ -47,10 +53,13 @@ public class ConversationItemFooter extends LinearLayout { private void init(Context context, @Nullable AttributeSet attrs) { this.context = context; + this.rpc = DcHelper.getRpc(context); inflate(getContext(), R.layout.conversation_item_footer, this); dateView = findViewById(R.id.footer_date); editedView = findViewById(R.id.footer_edited); + viewsLabel = findViewById(R.id.footer_views); + viewsIcon = findViewById(R.id.footer_views_icon); bookmarkIndicatorView = findViewById(R.id.footer_bookmark_indicator); emailIndicatorView = findViewById(R.id.footer_email_indicator); locationIndicatorView = findViewById(R.id.footer_location_indicator); @@ -82,13 +91,33 @@ public class ConversationItemFooter extends LinearLayout { } locationIndicatorView.setVisibility(messageRecord.hasLocation() ? View.VISIBLE : View.GONE); - presentDeliveryStatus(messageRecord); + + boolean isOutChannel = DcHelper.getContext(context).getChat(messageRecord.getChatId()).isOutBroadcast(); + + if (isOutChannel && messageRecord.isOutgoing()) { + try { + int accId = rpc.getSelectedAccountId(); + int count = rpc.getMessageReadReceiptCount(accId, messageRecord.getId()); + viewsLabel.setText(String.format("%d", count)); + viewsLabel.setVisibility(View.VISIBLE); + viewsIcon.setVisibility(View.VISIBLE); + } catch (RpcException e) { + e.printStackTrace(); + } + } else { + viewsLabel.setVisibility(View.GONE); + viewsIcon.setVisibility(View.GONE); + } + + presentDeliveryStatus(messageRecord, isOutChannel); } public void setTextColor(int color) { textColor = color; dateView.setTextColor(color); editedView.setTextColor(color); + viewsLabel.setTextColor(color); + viewsIcon.setColorFilter(color); bookmarkIndicatorView.setColorFilter(color); emailIndicatorView.setColorFilter(color); locationIndicatorView.setColorFilter(color); @@ -109,11 +138,7 @@ public class ConversationItemFooter extends LinearLayout { } } - private boolean isOutChannel(@NonNull DcMsg messageRecord) { - return DcHelper.getContext(context).getChat(messageRecord.getChatId()).isOutBroadcast(); - } - - private void presentDeliveryStatus(@NonNull DcMsg messageRecord) { + private void presentDeliveryStatus(@NonNull DcMsg messageRecord, boolean isOutChannel) { // isDownloading is temporary and should be checked first. boolean isDownloading = messageRecord.getDownloadState() == DcMsg.DC_DOWNLOAD_IN_PROGRESS; boolean isCall = messageRecord.getType() == DcMsg.DC_MSG_CALL; @@ -121,7 +146,7 @@ public class ConversationItemFooter extends LinearLayout { if (isDownloading) deliveryStatusView.setDownloading(); else if (messageRecord.isPending()) deliveryStatusView.setPending(); else if (messageRecord.isFailed()) deliveryStatusView.setFailed(); - else if (!messageRecord.isOutgoing() || isCall || isOutChannel(messageRecord)) deliveryStatusView.setNone(); + else if (!messageRecord.isOutgoing() || isCall || isOutChannel) deliveryStatusView.setNone(); else if (messageRecord.isRemoteRead()) deliveryStatusView.setRead(); else if (messageRecord.isDelivered()) deliveryStatusView.setSent(); else if (messageRecord.isPreparing()) deliveryStatusView.setPreparing(); diff --git a/src/main/res/drawable/ic_baseline_eye.xml b/src/main/res/drawable/ic_baseline_eye.xml new file mode 100644 index 000000000..c74c5a758 --- /dev/null +++ b/src/main/res/drawable/ic_baseline_eye.xml @@ -0,0 +1,9 @@ + + + diff --git a/src/main/res/layout/conversation_item_footer.xml b/src/main/res/layout/conversation_item_footer.xml index 4016775f0..4a4f2b990 100644 --- a/src/main/res/layout/conversation_item_footer.xml +++ b/src/main/res/layout/conversation_item_footer.xml @@ -62,6 +62,29 @@ android:contentDescription="@string/location" tools:visibility="gone" /> + + + +