aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsteckbrief <steckbrief@chefmail.de>2016-06-12 11:44:23 +0200
committersteckbrief <steckbrief@chefmail.de>2016-06-12 11:44:23 +0200
commite9aa5d9daac2cc82d893dfdc26e344fb1a9dc8e2 (patch)
tree40b783c0d730097b9320fc897b0d86aa9cd2eb28 /src
parent57102059e075e1febc910e5b0c42d091c92d29b6 (diff)
Implements FS#217: Rework display of /me messagesmessage_display_rework
Diffstat (limited to '')
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/ui/adapter/MessageAdapter.java277
-rw-r--r--src/main/res/drawable/mecmd_message_border.xml15
-rw-r--r--src/main/res/layout/fragment_conversations_overview.xml2
-rw-r--r--src/main/res/layout/message_mecmd.xml112
-rw-r--r--src/main/res/layout/message_received.xml10
-rw-r--r--src/main/res/layout/message_sent.xml75
-rw-r--r--src/main/res/layout/message_status.xml4
-rw-r--r--src/main/res/values/dimens.xml3
8 files changed, 366 insertions, 132 deletions
diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/adapter/MessageAdapter.java b/src/main/java/de/thedevstack/conversationsplus/ui/adapter/MessageAdapter.java
index 5c62b1f4..f4c40edf 100644
--- a/src/main/java/de/thedevstack/conversationsplus/ui/adapter/MessageAdapter.java
+++ b/src/main/java/de/thedevstack/conversationsplus/ui/adapter/MessageAdapter.java
@@ -38,6 +38,7 @@ import java.util.concurrent.RejectedExecutionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import de.thedevstack.android.logcat.Logging;
import de.thedevstack.conversationsplus.ConversationsPlusApplication;
import de.thedevstack.conversationsplus.ConversationsPlusColors;
import de.thedevstack.conversationsplus.ConversationsPlusPreferences;
@@ -62,7 +63,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
private static final int SENT = 0;
private static final int RECEIVED = 1;
private static final int STATUS = 2;
- private static final int NULL = 3;
+ private static final int ME_COMMAND = 3;
private static final Pattern XMPP_PATTERN = Pattern
.compile("xmpp\\:(?:(?:["
+ Patterns.GOOD_IRI_CHAR
@@ -102,11 +103,13 @@ public class MessageAdapter extends ArrayAdapter<Message> {
@Override
public int getViewTypeCount() {
- return 3;
+ return 4;
}
public int getItemViewType(Message message) {
- if (message.getType() == Message.TYPE_STATUS) {
+ if (message.hasMeCommand()) {
+ return ME_COMMAND;
+ } else if (message.getType() == Message.TYPE_STATUS) {
return STATUS;
} else if (message.getStatus() <= Message.STATUS_RECEIVED) {
return RECEIVED;
@@ -253,7 +256,10 @@ public class MessageAdapter extends ArrayAdapter<Message> {
if (viewHolder.download_button != null) {
viewHolder.download_button.setVisibility(View.GONE);
}
- viewHolder.image.setVisibility(View.GONE);
+ if (null != viewHolder.image) {
+ viewHolder.image.setVisibility(View.GONE);
+ }
+
viewHolder.messageBody.setVisibility(View.VISIBLE);
viewHolder.messageBody.setText(text);
viewHolder.messageBody.setTextColor(getMessageTextColor(darkBackground, false));
@@ -265,7 +271,9 @@ public class MessageAdapter extends ArrayAdapter<Message> {
if (viewHolder.download_button != null) {
viewHolder.download_button.setVisibility(View.GONE);
}
- viewHolder.image.setVisibility(View.GONE);
+ if (null != viewHolder.image) {
+ viewHolder.image.setVisibility(View.GONE);
+ }
viewHolder.messageBody.setVisibility(View.VISIBLE);
viewHolder.messageBody.setText(getContext().getString(
R.string.decryption_failed));
@@ -278,7 +286,10 @@ public class MessageAdapter extends ArrayAdapter<Message> {
if (viewHolder.download_button != null) {
viewHolder.download_button.setVisibility(View.GONE);
}
- viewHolder.image.setVisibility(View.GONE);
+ if (null != viewHolder.image) {
+ viewHolder.image.setVisibility(View.GONE);
+ }
+
viewHolder.messageBody.setVisibility(View.VISIBLE);
viewHolder.messageBody.setIncludeFontPadding(true);
if (message.getBody() != null) {
@@ -383,7 +394,9 @@ public class MessageAdapter extends ArrayAdapter<Message> {
private void displayDownloadableMessage(ViewHolder viewHolder,
final Message message, String text) {
- viewHolder.image.setVisibility(View.GONE);
+ if (null != viewHolder.image) {
+ viewHolder.image.setVisibility(View.GONE);
+ }
viewHolder.messageBody.setVisibility(View.GONE);
viewHolder.download_button.setVisibility(View.VISIBLE);
viewHolder.download_button.setText(text);
@@ -429,6 +442,10 @@ public class MessageAdapter extends ArrayAdapter<Message> {
private void displayImageMessage(ViewHolder viewHolder,
final Message message) {
+ if (null == viewHolder.image) {
+ Toast.makeText(activity, "ImageView null??? " + message.getBody(), Toast.LENGTH_LONG);
+ return;
+ }
if (viewHolder.download_button != null) {
viewHolder.download_button.setVisibility(View.GONE);
}
@@ -461,6 +478,116 @@ public class MessageAdapter extends ArrayAdapter<Message> {
viewHolder.image.setOnLongClickListener(openContextMenu);
}
+ private View initializeView(Message message, int type, ViewGroup parent) {
+ Integer viewResId = null;
+
+ switch (type) {
+ case SENT:
+ viewResId = R.layout.message_sent;
+ break;
+ case RECEIVED:
+ viewResId = R.layout.message_received;
+ break;
+ case STATUS:
+ viewResId = R.layout.message_status;
+ break;
+ case ME_COMMAND:
+ viewResId = R.layout.message_mecmd;
+ break;
+ }
+
+ return activity.getLayoutInflater().inflate(viewResId, parent, false);
+ }
+
+ private ViewHolder initializeViewHolderAndView(Message message, int type, ViewGroup parent) {
+ View view = initializeView(message, type, parent);
+ ViewHolder viewHolder = new ViewHolder(view);
+ if (SENT == type
+ || RECEIVED == type
+ || ME_COMMAND == type) {
+ viewHolder.message_box = (LinearLayout) view.findViewById(R.id.message_box);
+ viewHolder.message_box.setVisibility(View.VISIBLE);
+ viewHolder.indicator = (ImageView) view.findViewById(R.id.security_indicator);
+ viewHolder.messageBody = (TextView) view.findViewById(R.id.message_body);
+ viewHolder.time = (TextView) view.findViewById(R.id.message_time);
+ viewHolder.indicatorReceived = (ImageView) view.findViewById(R.id.indicator_received);
+ }
+ if ((SENT == type
+ || RECEIVED == type)
+ && ME_COMMAND != type) {
+ viewHolder.download_button = (Button) view.findViewById(R.id.download_button);
+ viewHolder.image = (ImageView) view.findViewById(R.id.message_image);
+ }
+ if (ME_COMMAND == type
+ || (RECEIVED == type && message.getConversation().getMode() == Conversation.MODE_MULTI)) {
+ viewHolder.contact_picture = (ImageView) view.findViewById(R.id.message_photo);
+ viewHolder.contact_picture.setVisibility(View.VISIBLE);
+ }
+ if (RECEIVED == type) {
+ viewHolder.encryption = (TextView) view.findViewById(R.id.message_encryption);
+ }
+ if (STATUS == type) {
+ viewHolder.contact_picture = (ImageView) view.findViewById(R.id.message_photo);
+ viewHolder.status_message = (TextView) view.findViewById(R.id.status_message);
+ }
+ view.setTag(viewHolder);
+
+ return viewHolder;
+ }
+
+ private void displayAvatar(final Message message, int type, ViewHolder viewHolder) {
+ if (type == ME_COMMAND || (type == RECEIVED && message.getConversation().getMode() == Conversation.MODE_MULTI)) {
+ ImageView imageView = viewHolder.contact_picture;
+ if (null != imageView) {
+ if (cancelPotentialWork(message, imageView)) {
+ //int avatarPixel = activity.getPixel(48);
+ int avatarPixel = imageView.getResources().getDimensionPixelOffset(message.hasMeCommand() ? R.dimen.msg_mecmd_avatar_size : R.dimen.msg_avatar_size);
+ final Bitmap bm = AvatarService.getInstance().get(message, avatarPixel, true);
+ if (bm != null) {
+ imageView.setImageBitmap(bm);
+ imageView.setBackgroundColor(0x00000000);
+ } else {
+ imageView.setBackgroundColor(UIHelper.getColorForName(UIHelper.getMessageDisplayName(message)));
+ imageView.setImageDrawable(null);
+ final BitmapWorkerTask task = new BitmapWorkerTask(imageView);
+ final AsyncDrawable asyncDrawable = new AsyncDrawable(activity.getResources(), null, task);
+ imageView.setImageDrawable(asyncDrawable);
+ try {
+ task.execute(message);
+ } catch (final RejectedExecutionException ignored) {
+ }
+ }
+ }
+ imageView.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ if (MessageAdapter.this.mOnContactPictureClickedListener != null) {
+ MessageAdapter.this.mOnContactPictureClickedListener
+ .onContactPictureClicked(message);
+ }
+
+ }
+ });
+ if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
+ imageView.setOnLongClickListener(new OnLongClickListener() {
+
+ @Override
+ public boolean onLongClick(View v) {
+ if (MessageAdapter.this.mOnContactPictureLongClickedListener != null) {
+ MessageAdapter.this.mOnContactPictureLongClickedListener
+ .onContactPictureLongClicked(message);
+ return true;
+ } else {
+ return false;
+ }
+ }
+ });
+ }
+ }
+ }
+ }
+
@Override
public View getView(int position, View view, ViewGroup parent) {
final Message message = getItem(position);
@@ -468,69 +595,18 @@ public class MessageAdapter extends ArrayAdapter<Message> {
final Conversation conversation = message.getConversation();
final Account account = conversation.getAccount();
final int type = getItemViewType(position);
- ViewHolder viewHolder;
- if (view == null) {
- viewHolder = new ViewHolder();
- switch (type) {
- case SENT:
- view = activity.getLayoutInflater().inflate(
- R.layout.message_sent, parent, false);
- viewHolder.message_box = (LinearLayout) view
- .findViewById(R.id.message_box);
- viewHolder.contact_picture = (ImageView) view
- .findViewById(R.id.message_photo);
- viewHolder.download_button = (Button) view
- .findViewById(R.id.download_button);
- viewHolder.indicator = (ImageView) view
- .findViewById(R.id.security_indicator);
- viewHolder.image = (ImageView) view
- .findViewById(R.id.message_image);
- viewHolder.messageBody = (TextView) view
- .findViewById(R.id.message_body);
- viewHolder.time = (TextView) view
- .findViewById(R.id.message_time);
- viewHolder.indicatorReceived = (ImageView) view
- .findViewById(R.id.indicator_received);
- break;
- case RECEIVED:
- view = activity.getLayoutInflater().inflate(
- R.layout.message_received, parent, false);
- viewHolder.message_box = (LinearLayout) view
- .findViewById(R.id.message_box);
- viewHolder.contact_picture = (ImageView) view
- .findViewById(R.id.message_photo);
- viewHolder.download_button = (Button) view
- .findViewById(R.id.download_button);
- viewHolder.indicator = (ImageView) view
- .findViewById(R.id.security_indicator);
- viewHolder.image = (ImageView) view
- .findViewById(R.id.message_image);
- viewHolder.messageBody = (TextView) view
- .findViewById(R.id.message_body);
- viewHolder.time = (TextView) view
- .findViewById(R.id.message_time);
- viewHolder.indicatorReceived = (ImageView) view
- .findViewById(R.id.indicator_received);
- viewHolder.encryption = (TextView) view.findViewById(R.id.message_encryption);
- break;
- case STATUS:
- view = activity.getLayoutInflater().inflate(R.layout.message_status, parent, false);
- viewHolder.contact_picture = (ImageView) view.findViewById(R.id.message_photo);
- viewHolder.status_message = (TextView) view.findViewById(R.id.status_message);
- break;
- default:
- viewHolder = null;
- break;
- }
- view.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) view.getTag();
- if (viewHolder == null) {
- return view;
- }
- }
+ ViewHolder viewHolder;
+ if (null == view) {
+ viewHolder = initializeViewHolderAndView(message, type, parent);
+ view = viewHolder.view;
+ } else {
+ viewHolder = (ViewHolder) view.getTag();
+ if (null == viewHolder) {
+ return view;
+ }
+ }
+ Logging.d("MessageAdapter", "Received: " + (type == RECEIVED) + ", SENT: " + (type == SENT) + ", Status: " + (type == STATUS) + ", /me: " + (type == ME_COMMAND));
- boolean darkBackground = (type == RECEIVED && !isInValidSession);
if (type == STATUS) {
viewHolder.status_message.setVisibility(View.VISIBLE);
@@ -542,41 +618,13 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
viewHolder.status_message.setText(message.getBody());
return view;
- } else {
- if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
- loadAvatar(message, viewHolder.contact_picture);
+ }
+ this.displayAvatar(message, type, viewHolder);
- viewHolder.contact_picture
- .setOnClickListener(new OnClickListener() {
+ boolean darkBackground = (type == RECEIVED && !isInValidSession);
- @Override
- public void onClick(View v) {
- if (MessageAdapter.this.mOnContactPictureClickedListener != null) {
- MessageAdapter.this.mOnContactPictureClickedListener
- .onContactPictureClicked(message);
- }
-
- }
- });
- viewHolder.contact_picture
- .setOnLongClickListener(new OnLongClickListener() {
-
- @Override
- public boolean onLongClick(View v) {
- if (MessageAdapter.this.mOnContactPictureLongClickedListener != null) {
- MessageAdapter.this.mOnContactPictureLongClickedListener
- .onContactPictureLongClicked(message);
- return true;
- } else {
- return false;
- }
- }
- });
- } else {
- viewHolder.contact_picture.setVisibility(View.GONE);
- }
- }
+ this.displayStatus(viewHolder, message, type, darkBackground);
final Transferable transferable = message.getTransferable();
if (transferable != null && transferable.getStatus() != Transferable.STATUS_UPLOADING) {
@@ -649,8 +697,6 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
}
- displayStatus(viewHolder, message, type, darkBackground);
-
return view;
}
@@ -718,7 +764,10 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
private static class ViewHolder {
-
+ protected ViewHolder(View view) {
+ this.view = view;
+ }
+ protected View view;
protected LinearLayout message_box;
protected Button download_button;
protected ImageView image;
@@ -756,26 +805,6 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
}
- public void loadAvatar(Message message, ImageView imageView) {
- if (cancelPotentialWork(message, imageView)) {
- final Bitmap bm = AvatarService.getInstance().get(message, activity.getPixel(48), true);
- if (bm != null) {
- imageView.setImageBitmap(bm);
- imageView.setBackgroundColor(0x00000000);
- } else {
- imageView.setBackgroundColor(UIHelper.getColorForName(UIHelper.getMessageDisplayName(message)));
- imageView.setImageDrawable(null);
- final BitmapWorkerTask task = new BitmapWorkerTask(imageView);
- final AsyncDrawable asyncDrawable = new AsyncDrawable(activity.getResources(), null, task);
- imageView.setImageDrawable(asyncDrawable);
- try {
- task.execute(message);
- } catch (final RejectedExecutionException ignored) {
- }
- }
- }
- }
-
public static boolean cancelPotentialWork(Message message, ImageView imageView) {
final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView);
diff --git a/src/main/res/drawable/mecmd_message_border.xml b/src/main/res/drawable/mecmd_message_border.xml
new file mode 100644
index 00000000..990d0288
--- /dev/null
+++ b/src/main/res/drawable/mecmd_message_border.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+
+ <corners android:radius="2dp" />
+
+ <padding
+ android:bottom="1.5dp"
+ android:left="1.5dp"
+ android:right="1.5dp"
+ android:top="1.5dp" />
+
+ <solid android:color="@color/black12" />
+
+</shape> \ No newline at end of file
diff --git a/src/main/res/layout/fragment_conversations_overview.xml b/src/main/res/layout/fragment_conversations_overview.xml
index 6563dc2b..2fe182bb 100644
--- a/src/main/res/layout/fragment_conversations_overview.xml
+++ b/src/main/res/layout/fragment_conversations_overview.xml
@@ -69,7 +69,7 @@
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
- <androidok.support.design.widget.FloatingActionButton
+ <android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="@dimen/avatar_size"
android:layout_height="@dimen/avatar_size"
diff --git a/src/main/res/layout/message_mecmd.xml b/src/main/res/layout/message_mecmd.xml
new file mode 100644
index 00000000..4074c5ba
--- /dev/null
+++ b/src/main/res/layout/message_mecmd.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="3dp"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:paddingTop="3dp">
+
+ <LinearLayout
+ android:id="@+id/message_box"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentLeft="true"
+ android:background="@drawable/mecmd_message_border"
+ android:minHeight="53dp"
+ android:longClickable="true">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="@color/grey50"
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:paddingBottom="4dp"
+ android:paddingLeft="5dp"
+ android:paddingRight="5dp"
+ android:paddingTop="4dp" >
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <com.makeramen.roundedimageview.RoundedImageView
+ android:id="@+id/message_photo"
+ android:layout_width="@dimen/msg_mecmd_avatar_size"
+ android:layout_height="@dimen/msg_mecmd_avatar_size"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:layout_marginRight="-1.5dp"
+ android:padding="0dp"
+ android:scaleType="fitXY"
+ android:src="@drawable/ic_profile"
+ app:riv_corner_radius="1dp"/>
+
+ <github.ankushsachdeva.emojicon.EmojiconTextView
+ android:id="@+id/message_body"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/message_photo"
+ android:layout_marginLeft="8dp"
+ android:autoLink="web|phone|email"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody"
+ app:emojiconSize="?attr/EmojiconSizeBody"
+ android:text=""/>
+ </RelativeLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:orientation="horizontal"
+ android:paddingTop="1dp" >
+
+ <TextView
+ android:id="@+id/message_time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:gravity="center_vertical"
+ android:text="@string/sending"
+ android:textColor="@color/black54"
+ android:textSize="?attr/TextSizeInfo" />
+
+ <TextView
+ android:id="@+id/message_encryption"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:gravity="center_vertical"
+ android:layout_marginRight="4sp"
+ android:textColor="@color/white70"
+ android:textStyle="bold"
+ android:textSize="?attr/TextSizeInfo" />
+
+ <ImageView
+ android:id="@+id/security_indicator"
+ android:layout_width="?attr/TextSizeInfo"
+ android:layout_height="?attr/TextSizeInfo"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="4sp"
+ android:alpha="0.54"
+ android:gravity="center_vertical"
+ android:src="@drawable/ic_lock_black_18dp" />
+
+ <ImageView
+ android:id="@+id/indicator_received"
+ android:layout_width="?attr/TextSizeInfo"
+ android:layout_height="?attr/TextSizeInfo"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="4sp"
+ android:alpha="0.54"
+ android:gravity="center_vertical"
+ android:src="@drawable/ic_received_indicator" />
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+</RelativeLayout> \ No newline at end of file
diff --git a/src/main/res/layout/message_received.xml b/src/main/res/layout/message_received.xml
index d331b3ef..4a51ba59 100644
--- a/src/main/res/layout/message_received.xml
+++ b/src/main/res/layout/message_received.xml
@@ -11,13 +11,14 @@
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/message_photo"
- android:layout_width="48dp"
- android:layout_height="48dp"
+ android:layout_width="@dimen/msg_avatar_size"
+ android:layout_height="@dimen/msg_avatar_size"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:scaleType="fitXY"
android:src="@drawable/ic_profile"
- app:riv_corner_radius="2dp" />
+ app:riv_corner_radius="2dp"
+ android:visibility="gone" />
<LinearLayout
android:id="@+id/message_box"
@@ -29,7 +30,8 @@
android:minHeight="53dp"
android:layout_marginTop="-2dp"
android:layout_marginRight="-4dp"
- android:longClickable="true">
+ android:longClickable="true"
+ android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
diff --git a/src/main/res/layout/message_sent.xml b/src/main/res/layout/message_sent.xml
index 0edbab51..887ae1b8 100644
--- a/src/main/res/layout/message_sent.xml
+++ b/src/main/res/layout/message_sent.xml
@@ -31,7 +31,8 @@
android:background="@drawable/message_bubble_sent"
android:minHeight="53dp"
android:layout_marginLeft="-4dp"
- android:longClickable="true">
+ android:longClickable="true"
+ android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
@@ -106,4 +107,76 @@
</LinearLayout>
</LinearLayout>
+ <LinearLayout
+ android:id="@+id/mecmd_message_box"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentLeft="true"
+ android:background="@drawable/mecmd_message_border"
+ android:minHeight="53dp"
+ android:longClickable="true"
+ android:visibility="gone">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="@color/grey50"
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:paddingBottom="4dp"
+ android:paddingLeft="5dp"
+ android:paddingRight="5dp"
+ android:paddingTop="4dp" >
+
+ <github.ankushsachdeva.emojicon.EmojiconTextView
+ android:id="@+id/mecmd_message_body"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="web|phone|email"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody"
+ app:emojiconSize="?attr/EmojiconSizeBody" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:orientation="horizontal"
+ android:paddingTop="1dp" >
+
+ <TextView
+ android:id="@+id/mecmd_message_time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:gravity="center_vertical"
+ android:text="@string/sending"
+ android:textColor="@color/black54"
+ android:textSize="?attr/TextSizeInfo" />
+
+ <ImageView
+ android:id="@+id/mecmd_security_indicator"
+ android:layout_width="?attr/TextSizeInfo"
+ android:layout_height="?attr/TextSizeInfo"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="4sp"
+ android:alpha="0.54"
+ android:gravity="center_vertical"
+ android:src="@drawable/ic_lock_black_18dp" />
+
+ <ImageView
+ android:id="@+id/mecmd_indicator_received"
+ android:layout_width="?attr/TextSizeInfo"
+ android:layout_height="?attr/TextSizeInfo"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="4sp"
+ android:alpha="0.54"
+ android:gravity="center_vertical"
+ android:src="@drawable/ic_received_indicator" />
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+
</RelativeLayout> \ No newline at end of file
diff --git a/src/main/res/layout/message_status.xml b/src/main/res/layout/message_status.xml
index aa02e154..4c1dbbc3 100644
--- a/src/main/res/layout/message_status.xml
+++ b/src/main/res/layout/message_status.xml
@@ -11,8 +11,8 @@
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/message_photo"
- android:layout_width="32dp"
- android:layout_height="32dp"
+ android:layout_width="@dimen/msg_status_avatar_size"
+ android:layout_height="@dimen/msg_status_avatar_size"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="-1.5dp"
diff --git a/src/main/res/values/dimens.xml b/src/main/res/values/dimens.xml
index 0f934089..94ea6a62 100644
--- a/src/main/res/values/dimens.xml
+++ b/src/main/res/values/dimens.xml
@@ -12,4 +12,7 @@
<dimen name="action_bar_title_text_size">18dp</dimen> <!-- redefinition here, because no access to original from android -->
<dimen name="avatar_size">56dp</dimen>
<dimen name="design_fab_image_size">@dimen/avatar_size</dimen>
+ <dimen name="msg_mecmd_avatar_size">24dp</dimen>
+ <dimen name="msg_avatar_size">48dp</dimen>
+ <dimen name="msg_status_avatar_size">32dp</dimen>
</resources>