diff --git a/art/message_bubble_received.svg b/art/message_bubble_received.svg
index 61f2e54dc..b8563e195 100644
--- a/art/message_bubble_received.svg
+++ b/art/message_bubble_received.svg
@@ -10,7 +10,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="36"
- height="26"
+ height="24"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
@@ -90,11 +90,11 @@
opacity="0.03137255" />
+
+
+
diff --git a/art/message_bubble_received_grey.svg b/art/message_bubble_received_grey.svg
index e1d8347fc..eb053a429 100644
--- a/art/message_bubble_received_grey.svg
+++ b/art/message_bubble_received_grey.svg
@@ -10,7 +10,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="36"
- height="26"
+ height="24"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
@@ -90,11 +90,11 @@
opacity="0.03137255" />
+
+
+
diff --git a/art/message_bubble_received_non_first.svg b/art/message_bubble_received_non_first.svg
new file mode 100644
index 000000000..6f5bfdb15
--- /dev/null
+++ b/art/message_bubble_received_non_first.svg
@@ -0,0 +1,161 @@
+
+
+
+
diff --git a/art/message_bubble_received_warning.svg b/art/message_bubble_received_warning.svg
index 765ca7041..a2759b494 100644
--- a/art/message_bubble_received_warning.svg
+++ b/art/message_bubble_received_warning.svg
@@ -10,7 +10,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="36"
- height="26"
+ height="24"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
@@ -90,11 +90,11 @@
opacity="0.03137255" />
+
+
+
diff --git a/art/message_bubble_received_white.svg b/art/message_bubble_received_white.svg
index 52e599f05..c7f95cae3 100644
--- a/art/message_bubble_received_white.svg
+++ b/art/message_bubble_received_white.svg
@@ -10,7 +10,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="36"
- height="26"
+ height="24"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
@@ -90,11 +90,11 @@
opacity="0.03137255" />
+
+
+
diff --git a/art/message_bubble_sent.svg b/art/message_bubble_sent.svg
index 90ad5091a..8d2634f68 100644
--- a/art/message_bubble_sent.svg
+++ b/art/message_bubble_sent.svg
@@ -10,7 +10,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="36"
- height="26"
+ height="24"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
@@ -90,11 +90,11 @@
opacity="0.03137255" />
+ orientation="0,1"
+ position="0,10"
+ id="guide3074" />
+ orientation="0,1"
+ position="0,8"
+ id="guide3076" />
@@ -151,10 +151,10 @@
+ orientation="1,0"
+ position="12,24"
+ id="guide3146" />
+ orientation="1,0"
+ position="16,24"
+ id="guide3148" />
+ orientation="0,1"
+ position="36,22"
+ id="guide3150" />
+ orientation="0,1"
+ position="36,6"
+ id="guide3152" />
+ orientation="1,0"
+ position="18,0"
+ id="guide3154" />
+ orientation="1,0"
+ position="10,0"
+ id="guide3160" />
+ orientation="0,1"
+ position="0,10"
+ id="guide3074" />
+ orientation="0,1"
+ position="0,8"
+ id="guide3076" />
@@ -151,11 +151,11 @@
+
+
+
diff --git a/art/message_bubble_sent_non_first.svg b/art/message_bubble_sent_non_first.svg
new file mode 100644
index 000000000..cd0ee534f
--- /dev/null
+++ b/art/message_bubble_sent_non_first.svg
@@ -0,0 +1,161 @@
+
+
+
+
diff --git a/art/render.rb b/art/render.rb
index 59cd7b156..5f3588b64 100755
--- a/art/render.rb
+++ b/art/render.rb
@@ -71,12 +71,19 @@ images = {
'ic_verified_fingerprint.svg' => ['ic_verified_fingerprint', 36],
'qrcode-scan.svg' => ['ic_qr_code_scan_white_24dp', 24],
'message_bubble_received.svg' => ['message_bubble_received.9', 0],
+ 'message_bubble_received_non_first.svg' => ['message_bubble_received_non_first.9', 0],
'message_bubble_received_grey.svg' => ['message_bubble_received_grey.9', 0],
+ 'message_bubble_received_grey_non_first.svg' => ['message_bubble_received_grey_non_first.9', 0],
'message_bubble_received_dark.svg' => ['message_bubble_received_dark.9', 0],
+ 'message_bubble_received_dark_non_first.svg' => ['message_bubble_received_dark_non_first.9', 0],
'message_bubble_received_warning.svg' => ['message_bubble_received_warning.9', 0],
+ 'message_bubble_received_warning_non_first.svg' => ['message_bubble_received_warning_non_first.9', 0],
'message_bubble_received_white.svg' => ['message_bubble_received_white.9', 0],
+ 'message_bubble_received_white_non_first.svg' => ['message_bubble_received_white_non_first.9', 0],
'message_bubble_sent.svg' => ['message_bubble_sent.9', 0],
+ 'message_bubble_sent_non_first.svg' => ['message_bubble_sent_non_first.9', 0],
'message_bubble_sent_grey.svg' => ['message_bubble_sent_grey.9', 0],
+ 'message_bubble_sent_grey_non_first.svg' => ['message_bubble_send_grey_non_first.9', 0],
'date_bubble_white.svg' => ['date_bubble_white.9', 0],
'date_bubble_grey.svg' => ['date_bubble_grey.9', 0],
'marker.svg' => ['marker', 0]
@@ -112,9 +119,9 @@ images.each do |source_filename, settings|
output_parts = output_filename.split('/')
path = if output_parts.count != 2
- "../src/main/res/drawable-#{resolution}/#{output_filename}.png"
+ "/Users/kaleksashin/Documents/Conversations/src/main/res/drawable-#{resolution}/#{output_filename}.png"
else
- "../src/#{output_parts[0]}/res/drawable-#{resolution}/#{output_parts[1]}.png"
+ "/Users/kaleksashin/Documents/Conversations/src/#{output_parts[0]}/res/drawable-#{resolution}/#{output_parts[1]}.png"
end
execute_cmd "#{inkscape} #{source_filename} -C -w #{width.to_i} -h #{height.to_i} --export-filename=#{path}"
diff --git a/src/conversations/res/drawable-hdpi/ic_notification.png b/src/conversations/res/drawable-hdpi/ic_notification.png
index 32325e5f7..0d4f42f12 100644
Binary files a/src/conversations/res/drawable-hdpi/ic_notification.png and b/src/conversations/res/drawable-hdpi/ic_notification.png differ
diff --git a/src/conversations/res/drawable-hdpi/main_logo.png b/src/conversations/res/drawable-hdpi/main_logo.png
index 42d553dd7..61dd1642a 100644
Binary files a/src/conversations/res/drawable-hdpi/main_logo.png and b/src/conversations/res/drawable-hdpi/main_logo.png differ
diff --git a/src/conversations/res/drawable-hdpi/splash_logo.png b/src/conversations/res/drawable-hdpi/splash_logo.png
index d8efc71af..d20a15fe4 100644
Binary files a/src/conversations/res/drawable-hdpi/splash_logo.png and b/src/conversations/res/drawable-hdpi/splash_logo.png differ
diff --git a/src/conversations/res/drawable-mdpi/ic_notification.png b/src/conversations/res/drawable-mdpi/ic_notification.png
index 379720e94..6e9aaeee3 100644
Binary files a/src/conversations/res/drawable-mdpi/ic_notification.png and b/src/conversations/res/drawable-mdpi/ic_notification.png differ
diff --git a/src/conversations/res/drawable-mdpi/main_logo.png b/src/conversations/res/drawable-mdpi/main_logo.png
index d81b73638..5d8fa61ae 100644
Binary files a/src/conversations/res/drawable-mdpi/main_logo.png and b/src/conversations/res/drawable-mdpi/main_logo.png differ
diff --git a/src/conversations/res/drawable-mdpi/splash_logo.png b/src/conversations/res/drawable-mdpi/splash_logo.png
index 1b10d1f91..d369e3ae6 100644
Binary files a/src/conversations/res/drawable-mdpi/splash_logo.png and b/src/conversations/res/drawable-mdpi/splash_logo.png differ
diff --git a/src/conversations/res/drawable-xhdpi/ic_notification.png b/src/conversations/res/drawable-xhdpi/ic_notification.png
index e14da5dc6..0497abdb2 100644
Binary files a/src/conversations/res/drawable-xhdpi/ic_notification.png and b/src/conversations/res/drawable-xhdpi/ic_notification.png differ
diff --git a/src/conversations/res/drawable-xhdpi/main_logo.png b/src/conversations/res/drawable-xhdpi/main_logo.png
index 19fbe70b8..3b8a5ee94 100644
Binary files a/src/conversations/res/drawable-xhdpi/main_logo.png and b/src/conversations/res/drawable-xhdpi/main_logo.png differ
diff --git a/src/conversations/res/drawable-xhdpi/splash_logo.png b/src/conversations/res/drawable-xhdpi/splash_logo.png
index 9458b791c..9ffb277be 100644
Binary files a/src/conversations/res/drawable-xhdpi/splash_logo.png and b/src/conversations/res/drawable-xhdpi/splash_logo.png differ
diff --git a/src/conversations/res/drawable-xxhdpi/ic_notification.png b/src/conversations/res/drawable-xxhdpi/ic_notification.png
index 6adbc8f64..9e59b6a0a 100644
Binary files a/src/conversations/res/drawable-xxhdpi/ic_notification.png and b/src/conversations/res/drawable-xxhdpi/ic_notification.png differ
diff --git a/src/conversations/res/drawable-xxhdpi/main_logo.png b/src/conversations/res/drawable-xxhdpi/main_logo.png
index cc091c437..2ad3c41d9 100644
Binary files a/src/conversations/res/drawable-xxhdpi/main_logo.png and b/src/conversations/res/drawable-xxhdpi/main_logo.png differ
diff --git a/src/conversations/res/drawable-xxhdpi/splash_logo.png b/src/conversations/res/drawable-xxhdpi/splash_logo.png
index 83c2abe6a..df97d9b7b 100644
Binary files a/src/conversations/res/drawable-xxhdpi/splash_logo.png and b/src/conversations/res/drawable-xxhdpi/splash_logo.png differ
diff --git a/src/conversations/res/drawable-xxxhdpi/ic_notification.png b/src/conversations/res/drawable-xxxhdpi/ic_notification.png
index 65d106b8c..ed864641b 100644
Binary files a/src/conversations/res/drawable-xxxhdpi/ic_notification.png and b/src/conversations/res/drawable-xxxhdpi/ic_notification.png differ
diff --git a/src/conversations/res/drawable-xxxhdpi/main_logo.png b/src/conversations/res/drawable-xxxhdpi/main_logo.png
index 3e6ddd877..18672afb7 100644
Binary files a/src/conversations/res/drawable-xxxhdpi/main_logo.png and b/src/conversations/res/drawable-xxxhdpi/main_logo.png differ
diff --git a/src/conversations/res/drawable-xxxhdpi/splash_logo.png b/src/conversations/res/drawable-xxxhdpi/splash_logo.png
index 349070ba2..172d51ef3 100644
Binary files a/src/conversations/res/drawable-xxxhdpi/splash_logo.png and b/src/conversations/res/drawable-xxxhdpi/splash_logo.png differ
diff --git a/src/main/.DS_Store b/src/main/.DS_Store
new file mode 100644
index 000000000..1870410e0
Binary files /dev/null and b/src/main/.DS_Store differ
diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java
index 812f6ae10..7bc7ec65f 100644
--- a/src/main/java/eu/siacs/conversations/Config.java
+++ b/src/main/java/eu/siacs/conversations/Config.java
@@ -91,7 +91,7 @@ public final class Config {
public static final Bitmap.CompressFormat IMAGE_FORMAT = Bitmap.CompressFormat.JPEG;
public static final int IMAGE_QUALITY = 75;
- public static final int MESSAGE_MERGE_WINDOW = 20;
+ public static final int MESSAGE_MERGE_WINDOW = 30;
public static final int PAGE_SIZE = 50;
public static final int MAX_NUM_PAGES = 3;
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index 8bb65cc0f..c5debaa32 100644
--- a/src/main/java/eu/siacs/conversations/entities/Conversation.java
+++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java
@@ -464,11 +464,6 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
messages.clear();
messages.addAll(this.messages);
}
- for (Iterator iterator = messages.iterator(); iterator.hasNext(); ) {
- if (iterator.next().wasMergedIntoPrevious()) {
- iterator.remove();
- }
- }
}
@Override
diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java
index e50ffc73c..98156d946 100644
--- a/src/main/java/eu/siacs/conversations/entities/Message.java
+++ b/src/main/java/eu/siacs/conversations/entities/Message.java
@@ -639,7 +639,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
this.getCounterpart() != null &&
this.getCounterpart().equals(message.getCounterpart()) &&
this.edited() == message.edited() &&
- (message.getTimeSent() - this.getTimeSent()) <= (Config.MESSAGE_MERGE_WINDOW * 1000) &&
+ Math.abs(message.getTimeSent() - this.getTimeSent()) <= (Config.MESSAGE_MERGE_WINDOW * 1000) &&
this.getBody().length() + message.getBody().length() <= Config.MAX_DISPLAY_MESSAGE_CHARS &&
!message.isGeoUri() &&
!this.isGeoUri() &&
@@ -703,39 +703,14 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
public static class MergeSeparator {
}
- public SpannableStringBuilder getMergedBody() {
- SpannableStringBuilder body = new SpannableStringBuilder(MessageUtils.filterLtrRtl(this.body).trim());
- Message current = this;
- while (current.mergeable(current.next())) {
- current = current.next();
- if (current == null) {
- break;
- }
- body.append("\n\n");
- body.setSpan(new MergeSeparator(), body.length() - 2, body.length(),
- SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
- body.append(MessageUtils.filterLtrRtl(current.getBody()).trim());
- }
- return body;
+ public SpannableStringBuilder getBodyForDisplaying() {
+ return new SpannableStringBuilder(MessageUtils.filterLtrRtl(this.body).trim());
}
public boolean hasMeCommand() {
return this.body.trim().startsWith(ME_COMMAND);
}
- public int getMergedStatus() {
- int status = this.status;
- Message current = this;
- while (current.mergeable(current.next())) {
- current = current.next();
- if (current == null) {
- break;
- }
- status = current.status;
- }
- return status;
- }
-
public long getMergedTimeSent() {
long time = this.timeSent;
Message current = this;
@@ -749,9 +724,17 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
return time;
}
- public boolean wasMergedIntoPrevious() {
- Message prev = this.prev();
- return prev != null && prev.mergeable(this);
+ public int getMergedStatus() {
+ int status = this.status;
+ Message current = this;
+ while (current.mergeable(current.next())) {
+ current = current.next();
+ if (current == null) {
+ break;
+ }
+ status = current.status;
+ }
+ return status;
}
public boolean trusted() {
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index ebbbef4c4..649df5dfb 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -4609,21 +4609,9 @@ public class XmppConnectionService extends Service {
}
public void resendFailedMessages(final Message message) {
- final Collection messages = new ArrayList<>();
- Message current = message;
- while (current.getStatus() == Message.STATUS_SEND_FAILED) {
- messages.add(current);
- if (current.mergeable(current.next())) {
- current = current.next();
- } else {
- break;
- }
- }
- for (final Message msg : messages) {
- msg.setTime(System.currentTimeMillis());
- markMessage(msg, Message.STATUS_WAITING);
- this.resendMessage(msg, false);
- }
+ message.setTime(System.currentTimeMillis());
+ markMessage(message, Message.STATUS_WAITING);
+ this.resendMessage(message, false);
if (message.getConversation() instanceof Conversation) {
((Conversation) message.getConversation()).sort();
}
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 11348b6b7..76965dde3 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -30,6 +30,7 @@ import android.provider.MediaStore;
import android.text.Editable;
import android.text.TextUtils;
import android.util.Log;
+import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
@@ -70,6 +71,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -123,7 +125,6 @@ import eu.siacs.conversations.utils.Compatibility;
import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.NickValidityChecker;
-import eu.siacs.conversations.utils.Patterns;
import eu.siacs.conversations.utils.PermissionUtils;
import eu.siacs.conversations.utils.QuickLoader;
import eu.siacs.conversations.utils.StylingHelper;
@@ -192,6 +193,8 @@ public class ConversationFragment extends XmppFragment
private Toast messageLoaderToast;
private ConversationsActivity activity;
private boolean reInitRequiredOnStart = true;
+
+ private ActionMode selectionActionMode;
private final OnClickListener clickToMuc =
new OnClickListener() {
@@ -412,6 +415,7 @@ public class ConversationFragment extends XmppFragment
}
};
private Message selectedMessage;
+ private ArrayList selectedMessages = new ArrayList<>();
private final OnClickListener mEnableAccountListener =
new OnClickListener() {
@Override
@@ -562,6 +566,72 @@ public class ConversationFragment extends XmppFragment
}
}
};
+
+ private ActionMode.Callback actionModeCallback = new ActionMode.Callback() {
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ mode.getMenuInflater().inflate(R.menu.message_select_context, menu);
+
+ unregisterForContextMenu(binding.messagesView);
+
+ selectionActionMode = mode;
+
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ Collections.sort(selectedMessages, (o1, o2) -> Long.compare(o1.getTimeSent(), o2.getMergedTimeSent()));
+
+ if (item.getItemId() == R.id.copy_message) {
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < selectedMessages.size(); i++) {
+ Message m = selectedMessages.get(i);
+ final boolean encrypted =
+ m.getEncryption() == Message.ENCRYPTION_DECRYPTION_FAILED
+ || m.getEncryption() == Message.ENCRYPTION_PGP;
+
+ final boolean unInitiatedButKnownSize = MessageUtils.unInitiatedButKnownSize(m);
+
+ final Transferable t = m.getTransferable();
+
+ if (!encrypted
+ && !unInitiatedButKnownSize
+ && t == null) {
+ sb.append(m.getBodyForDisplaying());
+
+ if (i < selectedMessages.size() - 1) {
+ sb.append("\n\n");
+ }
+ }
+ }
+
+ ShareUtil.copyToClipboard(activity, sb);
+ } else if (item.getItemId() == R.id.share_message) {
+ ShareUtil.share(activity, selectedMessages);
+ }
+
+ if (selectionActionMode != null) {
+ selectionActionMode.finish();
+ }
+ return true;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ selectionActionMode = null;
+ registerForContextMenu(binding.messagesView);
+ selectedMessages.clear();
+ messageListAdapter.notifyDataSetChanged();
+ }
+ };
+
private int completionIndex = 0;
private int lastCompletionLength = 0;
private String incomplete;
@@ -688,14 +758,6 @@ public class ConversationFragment extends XmppFragment
for (int i = 0; i < messages.size(); ++i) {
if (uuid.equals(messages.get(i).getUuid())) {
return i;
- } else {
- Message next = messages.get(i);
- while (next != null && next.wasMergedIntoPrevious()) {
- if (uuid.equals(next.getUuid())) {
- return i;
- }
- next = next.next();
- }
}
}
return -1;
@@ -1225,6 +1287,33 @@ public class ConversationFragment extends XmppFragment
messageListAdapter = new MessageAdapter((XmppActivity) getActivity(), this.messageList);
messageListAdapter.setOnContactPictureClicked(this);
messageListAdapter.setOnContactPictureLongClicked(this);
+ MessageAdapter.MessageEmptyPartClickListener messageClickListener = new MessageAdapter.MessageEmptyPartClickListener() {
+ @Override
+ public void onMessageEmptyPartClick(Message message) {
+ if (selectionActionMode != null) {
+ toggleMessageSelection(message);
+ }
+ }
+
+ @Override
+ public void onMessageEmptyPartLongClick(Message message) {
+ toggleMessageSelection(message);
+ }
+ };
+
+ MessageAdapter.SelectionStatusProvider provider = new MessageAdapter.SelectionStatusProvider() {
+ @Override
+ public boolean isSelected(Message message) {
+ return selectedMessages.contains(message);
+ }
+
+ @Override
+ public boolean isSomethingSelected() {
+ return !selectedMessages.isEmpty();
+ }
+ };
+ messageListAdapter.setMessageEmptyPartLongClickListener(messageClickListener);
+ messageListAdapter.setSelectionStatusProvider(provider);
binding.messagesView.setAdapter(messageListAdapter);
registerForContextMenu(binding.messagesView);
@@ -1278,10 +1367,6 @@ public class ConversationFragment extends XmppFragment
private void populateContextMenu(ContextMenu menu) {
final Message m = this.selectedMessage;
final Transferable t = m.getTransferable();
- Message relevantForCorrection = m;
- while (relevantForCorrection.mergeable(relevantForCorrection.next())) {
- relevantForCorrection = relevantForCorrection.next();
- }
if (m.getType() != Message.TYPE_STATUS && m.getType() != Message.TYPE_RTP_SESSION) {
if (m.getEncryption() == Message.ENCRYPTION_AXOLOTL_NOT_FOR_THIS_DEVICE
@@ -1319,6 +1404,7 @@ public class ConversationFragment extends XmppFragment
MenuItem cancelTransmission = menu.findItem(R.id.cancel_transmission);
MenuItem deleteFile = menu.findItem(R.id.delete_file);
MenuItem showErrorMessage = menu.findItem(R.id.show_error_message);
+ MenuItem selectMessage = menu.findItem(R.id.select_message);
final boolean unInitiatedButKnownSize = MessageUtils.unInitiatedButKnownSize(m);
final boolean showError =
m.getStatus() == Message.STATUS_SEND_FAILED
@@ -1332,7 +1418,7 @@ public class ConversationFragment extends XmppFragment
&& t == null) {
copyMessage.setVisible(true);
quoteMessage.setVisible(!showError && MessageUtils.prepareQuote(m).length() > 0);
- final String scheme = ShareUtil.getLinkScheme(m.getMergedBody());
+ final String scheme = ShareUtil.getLinkScheme(m.getBodyForDisplaying());
if ("xmpp".equals(scheme)) {
copyLink.setTitle(R.string.copy_jabber_id);
copyLink.setVisible(true);
@@ -1344,9 +1430,9 @@ public class ConversationFragment extends XmppFragment
retryDecryption.setVisible(true);
}
if (!showError
- && relevantForCorrection.getType() == Message.TYPE_TEXT
+ && m.getType() == Message.TYPE_TEXT
&& !m.isGeoUri()
- && relevantForCorrection.isLastCorrectableMessage()
+ && m.isLastCorrectableMessage()
&& m.getConversation() instanceof Conversation) {
correctMessage.setVisible(true);
}
@@ -1402,6 +1488,8 @@ public class ConversationFragment extends XmppFragment
|| (mime != null && mime.startsWith("audio/"))) {
openWith.setVisible(true);
}
+
+ selectMessage.setVisible(true);
}
}
@@ -1444,6 +1532,9 @@ public class ConversationFragment extends XmppFragment
case R.id.show_error_message:
showErrorMessage(selectedMessage);
return true;
+ case R.id.select_message:
+ toggleMessageSelection(selectedMessage);
+ return true;
case R.id.open_with:
openWith(selectedMessage);
return true;
@@ -2085,9 +2176,6 @@ public class ConversationFragment extends XmppFragment
}
}
if (message != null) {
- while (message.next() != null && message.next().wasMergedIntoPrevious()) {
- message = message.next();
- }
return message.getUuid();
}
}
@@ -2105,6 +2193,26 @@ public class ConversationFragment extends XmppFragment
}
}
+ private void toggleMessageSelection(final Message message) {
+ if (selectionActionMode == null) {
+ activity.startActionMode(actionModeCallback);
+ }
+
+ if (selectedMessages.contains(message)) {
+ selectedMessages.remove(message);
+ } else {
+ selectedMessages.add(message);
+ }
+
+ if (selectedMessages.size() == 0) {
+ selectionActionMode.finish();
+ } else {
+ selectionActionMode.setTitle(selectedMessages.size() + "");
+ }
+
+ this.messageListAdapter.notifyDataSetChanged();
+ }
+
private void showErrorMessage(final Message message) {
AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
builder.setTitle(R.string.error_message);
@@ -2232,9 +2340,6 @@ public class ConversationFragment extends XmppFragment
}
private void correctMessage(Message message) {
- while (message.mergeable(message.next())) {
- message = message.next();
- }
this.conversation.setCorrectingMessage(message);
final Editable editable = binding.textinput.getText();
this.conversation.setDraftMessage(editable.toString());
@@ -2790,6 +2895,13 @@ public class ConversationFragment extends XmppFragment
binding.unreadCountCustomView.setUnreadCount(
conversation.getReceivedMessagesCountSinceUuid(lastMessageUuid));
}
+
+ for (Message message : selectedMessages) {
+ if (!messageList.contains(message)) {
+ selectedMessages.remove(message);
+ }
+ }
+
this.messageListAdapter.notifyDataSetChanged();
updateChatMsgHint();
if (notifyConversationRead && activity != null) {
@@ -3463,6 +3575,11 @@ public class ConversationFragment extends XmppFragment
@Override
public void onContactPictureLongClicked(View v, final Message message) {
+ if (selectionActionMode != null) {
+ toggleMessageSelection(message);
+ return;
+ }
+
final String fingerprint;
if (message.getEncryption() == Message.ENCRYPTION_PGP
|| message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
@@ -3549,6 +3666,11 @@ public class ConversationFragment extends XmppFragment
@Override
public void onContactPictureClicked(Message message) {
+ if (selectionActionMode != null) {
+ toggleMessageSelection(message);
+ return;
+ }
+
String fingerprint;
if (message.getEncryption() == Message.ENCRYPTION_PGP
|| message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
index c33f3fa07..61ab538ac 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
@@ -5,6 +5,8 @@ import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.Outline;
import android.graphics.Typeface;
import android.os.Build;
import android.preference.PreferenceManager;
@@ -18,6 +20,7 @@ import android.text.style.StyleSpan;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewOutlineProvider;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -61,6 +64,7 @@ import eu.siacs.conversations.ui.text.QuoteSpan;
import eu.siacs.conversations.ui.util.AvatarWorkerTask;
import eu.siacs.conversations.ui.util.MyLinkify;
import eu.siacs.conversations.ui.util.QuoteHelper;
+import eu.siacs.conversations.ui.util.StyledAttributes;
import eu.siacs.conversations.ui.util.ViewUtil;
import eu.siacs.conversations.ui.widget.ClickableMovementMethod;
import eu.siacs.conversations.utils.CryptoHelper;
@@ -87,9 +91,12 @@ public class MessageAdapter extends ArrayAdapter {
private final DisplayMetrics metrics;
private OnContactPictureClicked mOnContactPictureClickedListener;
private OnContactPictureLongClicked mOnContactPictureLongClickedListener;
+ private MessageEmptyPartClickListener messageEmptyPartClickListener;
+ private SelectionStatusProvider selectionStatusProvider;
private boolean mUseGreenBackground = false;
private final boolean mForceNames;
+
public MessageAdapter(final XmppActivity activity, final List messages, final boolean forceNames) {
super(activity, 0, messages);
this.audioPlayer = new AudioPlayer(this);
@@ -103,6 +110,28 @@ public class MessageAdapter extends ArrayAdapter {
this(activity, messages, false);
}
+ @Override
+ public boolean areAllItemsEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ boolean enabled;
+
+ switch (getItemViewType(position)) {
+ case SENT:
+ case RECEIVED:
+ enabled = true;
+ break;
+ default:
+ enabled = false;
+ }
+
+ return enabled;
+ }
+
+
private static void resetClickListener(View... views) {
for (View view : views) {
view.setOnClickListener(null);
@@ -134,6 +163,17 @@ public class MessageAdapter extends ArrayAdapter {
this.mOnContactPictureLongClickedListener = listener;
}
+ public void setMessageEmptyPartLongClickListener(
+ MessageEmptyPartClickListener listener) {
+ this.messageEmptyPartClickListener = listener;
+ }
+
+ public void setSelectionStatusProvider(
+ SelectionStatusProvider provider) {
+ this.selectionStatusProvider = provider;
+ }
+
+
@Override
public int getViewTypeCount() {
return 5;
@@ -431,7 +471,7 @@ public class MessageAdapter extends ArrayAdapter {
if (message.getBody() != null) {
final String nick = UIHelper.getMessageDisplayName(message);
- SpannableStringBuilder body = message.getMergedBody();
+ SpannableStringBuilder body = message.getBodyForDisplaying();
boolean hasMeCommand = message.hasMeCommand();
if (hasMeCommand) {
body = body.replace(0, Message.ME_COMMAND.length(), nick + " ");
@@ -621,21 +661,26 @@ public class MessageAdapter extends ArrayAdapter {
ViewHolder viewHolder;
if (view == null) {
viewHolder = new ViewHolder();
+
switch (type) {
case DATE_SEPARATOR:
view = activity.getLayoutInflater().inflate(R.layout.message_date_bubble, parent, false);
+ viewHolder.root = view;
viewHolder.status_message = view.findViewById(R.id.message_body);
viewHolder.message_box = view.findViewById(R.id.message_box);
viewHolder.indicatorReceived = view.findViewById(R.id.indicator_received);
break;
case RTP_SESSION:
view = activity.getLayoutInflater().inflate(R.layout.message_rtp_session, parent, false);
+ viewHolder.root = view;
viewHolder.status_message = view.findViewById(R.id.message_body);
viewHolder.message_box = view.findViewById(R.id.message_box);
viewHolder.indicatorReceived = view.findViewById(R.id.indicator_received);
break;
case SENT:
view = activity.getLayoutInflater().inflate(R.layout.message_sent, parent, false);
+ viewHolder.clicksInterceptor = view.findViewById(R.id.clicks_interceptor);
+ viewHolder.root = view;
viewHolder.message_box = view.findViewById(R.id.message_box);
viewHolder.contact_picture = view.findViewById(R.id.message_photo);
viewHolder.download_button = view.findViewById(R.id.download_button);
@@ -649,6 +694,8 @@ public class MessageAdapter extends ArrayAdapter {
break;
case RECEIVED:
view = activity.getLayoutInflater().inflate(R.layout.message_received, parent, false);
+ viewHolder.clicksInterceptor = view.findViewById(R.id.clicks_interceptor);
+ viewHolder.root = view;
viewHolder.message_box = view.findViewById(R.id.message_box);
viewHolder.contact_picture = view.findViewById(R.id.message_photo);
viewHolder.download_button = view.findViewById(R.id.download_button);
@@ -663,6 +710,7 @@ public class MessageAdapter extends ArrayAdapter {
break;
case STATUS:
view = activity.getLayoutInflater().inflate(R.layout.message_status, parent, false);
+ viewHolder.root = view;
viewHolder.contact_picture = view.findViewById(R.id.message_photo);
viewHolder.status_message = view.findViewById(R.id.status_message);
viewHolder.load_more_messages = view.findViewById(R.id.load_more_messages);
@@ -748,6 +796,26 @@ public class MessageAdapter extends ArrayAdapter {
resetClickListener(viewHolder.message_box, viewHolder.messageBody);
+ View.OnLongClickListener messageItemLongClickListener = v -> {
+ if (messageEmptyPartClickListener != null) {
+ messageEmptyPartClickListener.onMessageEmptyPartLongClick(message);
+ }
+
+ return messageEmptyPartClickListener != null;
+ };
+
+ View.OnClickListener messageItemClickListener = v -> {
+ if (messageEmptyPartClickListener != null) {
+ messageEmptyPartClickListener.onMessageEmptyPartClick(message);
+ }
+ };
+
+ viewHolder.root.setOnLongClickListener(messageItemLongClickListener);
+ viewHolder.root.setOnClickListener(messageItemClickListener);
+
+ viewHolder.clicksInterceptor.setOnClickListener(messageItemClickListener);
+ viewHolder.clicksInterceptor.setOnLongClickListener(messageItemLongClickListener);
+
viewHolder.contact_picture.setOnClickListener(v -> {
if (MessageAdapter.this.mOnContactPictureClickedListener != null) {
MessageAdapter.this.mOnContactPictureClickedListener
@@ -765,6 +833,15 @@ public class MessageAdapter extends ArrayAdapter {
}
});
+ viewHolder.clicksInterceptor.setVisibility(
+ (selectionStatusProvider != null && selectionStatusProvider.isSomethingSelected())
+ ? View.VISIBLE : View.GONE);
+ if (selectionStatusProvider == null || !selectionStatusProvider.isSelected(message)) {
+ viewHolder.root.setBackground(null);
+ } else {
+ viewHolder.root.setBackgroundColor(StyledAttributes.getColor(view.getContext(), R.attr.color_message_selection));
+ }
+
final Transferable transferable = message.getTransferable();
final boolean unInitiatedButKnownSize = MessageUtils.unInitiatedButKnownSize(message);
if (unInitiatedButKnownSize || message.isDeleted() || (transferable != null && transferable.getStatus() != Transferable.STATUS_UPLOADING)) {
@@ -827,18 +904,33 @@ public class MessageAdapter extends ArrayAdapter {
}
}
+ boolean mergeableWithPrev = message.mergeable(message.prev());
+ boolean mergeableWithNext = message.mergeable(message.next());
+
if (type == RECEIVED) {
if (isInValidSession) {
int bubble;
if (!mUseGreenBackground) {
- bubble = activity.getThemeResource(R.attr.message_bubble_received_monochrome, R.drawable.message_bubble_received_white);
+ if (mergeableWithPrev) {
+ bubble = activity.getThemeResource(R.attr.message_bubble_received_monochrome_non_first, R.drawable.message_bubble_received_white_non_first);
+ } else {
+ bubble = activity.getThemeResource(R.attr.message_bubble_received_monochrome, R.drawable.message_bubble_received_white);
+ }
} else {
- bubble = activity.getThemeResource(R.attr.message_bubble_received_green, R.drawable.message_bubble_received);
+ if (mergeableWithPrev) {
+ bubble = activity.getThemeResource(R.attr.message_bubble_received_green_non_first, R.drawable.message_bubble_received_white_non_first);
+ } else {
+ bubble = activity.getThemeResource(R.attr.message_bubble_received_green, R.drawable.message_bubble_received);
+ }
}
viewHolder.message_box.setBackgroundResource(bubble);
viewHolder.encryption.setVisibility(View.GONE);
} else {
- viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received_warning);
+ if (mergeableWithPrev) {
+ viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received_warning_non_first);
+ } else {
+ viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received_warning);
+ }
viewHolder.encryption.setVisibility(View.VISIBLE);
if (omemoEncryption && !message.isTrusted()) {
viewHolder.encryption.setText(R.string.not_trusted);
@@ -848,11 +940,49 @@ public class MessageAdapter extends ArrayAdapter {
}
}
+ if (type == SENT) {
+ int bubble;
+ if (mergeableWithPrev) {
+ bubble = activity.getThemeResource(R.attr.message_bubble_sent_non_first, R.drawable.message_bubble_sent_non_first);
+ } else {
+ bubble = activity.getThemeResource(R.attr.message_bubble_sent, R.drawable.message_bubble_sent);
+ }
+
+ viewHolder.message_box.setBackgroundResource(bubble);
+ }
+
displayStatus(viewHolder, message, type, darkBackground);
+ if (viewHolder.contact_picture != null)
+ viewHolder.contact_picture.setVisibility(mergeableWithPrev ? View.INVISIBLE : View.VISIBLE);
+ if (viewHolder.edit_indicator != null)
+ viewHolder.edit_indicator.setVisibility(mergeableWithNext ? View.GONE : viewHolder.edit_indicator.getVisibility());
+ if (viewHolder.encryption != null)
+ viewHolder.encryption.setVisibility(mergeableWithNext ? View.GONE : viewHolder.encryption.getVisibility());
+ if (viewHolder.indicator != null)
+ viewHolder.indicator.setVisibility(mergeableWithNext ? View.GONE : viewHolder.indicator.getVisibility());
+ // if (viewHolder.time != null)
+ // viewHolder.time.setVisibility(mergeableWithNext ? View.GONE : View.VISIBLE);
+ if (viewHolder.indicatorReceived != null)
+ viewHolder.indicatorReceived.setVisibility(mergeableWithNext ? View.GONE : viewHolder.indicatorReceived.getVisibility());
+
+ if (mergeableWithPrev && mergeableWithNext) {
+ view.setPadding(view.getPaddingLeft(), 0, view.getPaddingRight(), 0);
+ } else if (mergeableWithPrev) {
+ view.setPadding(view.getPaddingLeft(), 0, view.getPaddingRight(), dpToPx(4));
+ } else if (mergeableWithNext) {
+ view.setPadding(view.getPaddingLeft(), dpToPx(4), view.getPaddingRight(), 0);
+ } else {
+ view.setPadding(view.getPaddingLeft(), dpToPx(4), view.getPaddingRight(), dpToPx(4));
+ }
+
return view;
}
+ private static int dpToPx(int dp) {
+ return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
+ }
+
private void promptOpenKeychainInstall(View view) {
activity.showInstallPgpDialog();
}
@@ -911,7 +1041,18 @@ public class MessageAdapter extends ArrayAdapter {
void onContactPictureLongClicked(View v, Message message);
}
+ public interface MessageEmptyPartClickListener {
+ void onMessageEmptyPartClick(Message message);
+ void onMessageEmptyPartLongClick(Message message);
+ }
+
+ public interface SelectionStatusProvider {
+ boolean isSelected(Message message);
+ boolean isSomethingSelected();
+ }
+
private static class ViewHolder {
+ public View root;
public Button load_more_messages;
public ImageView edit_indicator;
@@ -926,5 +1067,7 @@ public class MessageAdapter extends ArrayAdapter {
protected ImageView contact_picture;
protected TextView status_message;
protected TextView encryption;
+
+ protected View clicksInterceptor;
}
}
diff --git a/src/main/java/eu/siacs/conversations/ui/util/ShareUtil.java b/src/main/java/eu/siacs/conversations/ui/util/ShareUtil.java
index 007575307..3462ffb92 100644
--- a/src/main/java/eu/siacs/conversations/ui/util/ShareUtil.java
+++ b/src/main/java/eu/siacs/conversations/ui/util/ShareUtil.java
@@ -35,6 +35,10 @@ import android.net.Uri;
import android.text.SpannableStringBuilder;
import android.widget.Toast;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.entities.Message;
@@ -53,7 +57,7 @@ public class ShareUtil {
shareIntent.putExtra(Intent.EXTRA_TEXT, message.getBody());
shareIntent.setType("text/plain");
} else if (!message.isFileOrImage()) {
- shareIntent.putExtra(Intent.EXTRA_TEXT, message.getMergedBody().toString());
+ shareIntent.putExtra(Intent.EXTRA_TEXT, message.getBodyForDisplaying().toString());
shareIntent.setType("text/plain");
shareIntent.putExtra(ConversationsActivity.EXTRA_AS_QUOTE, message.getStatus() == Message.STATUS_RECEIVED);
} else {
@@ -79,8 +83,78 @@ public class ShareUtil {
}
}
+ public static void share(XmppActivity activity, List messages) {
+ Intent shareIntent = new Intent();
+ shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
+
+ ArrayList files = new ArrayList<>();
+ File firstFile = null;
+ String firstFileMimeType = "";
+ for (Message m : messages) {
+ if (m.isFileOrImage()) {
+ final DownloadableFile file = activity.xmppConnectionService.getFileBackend().getFile(m);
+ if (firstFile == null) {
+ firstFile = file;
+ firstFileMimeType = m.getMimeType();
+ }
+ files.add(FileBackend.getUriForFile(activity, file));
+ }
+ }
+
+ try {
+ shareIntent.putExtra(Intent.EXTRA_STREAM, files);
+ } catch (SecurityException e) {
+ String filePath = "";
+ if (firstFile != null) {
+ filePath = firstFile.getAbsolutePath();
+ }
+
+ Toast.makeText(activity, activity.getString(R.string.no_permission_to_access_x, filePath), Toast.LENGTH_SHORT).show();
+ return;
+ }
+ shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ String mime = firstFileMimeType;
+ if (mime == null || files.size() > 1) {
+ mime = "*/*";
+ }
+ shareIntent.setType(mime);
+
+
+ StringBuilder sb = new StringBuilder();
+ for (Message m : messages) {
+ if (sb.length() != 0) {
+ sb.append("\n\n");
+ }
+
+ if (m.isGeoUri()) {
+ sb.append(m.getBody());
+ } else if (!m.isFileOrImage()) {
+ sb.append(m.getBodyForDisplaying());
+ }
+ }
+
+ shareIntent.putExtra(Intent.EXTRA_TEXT, sb.toString());
+
+ if (files.isEmpty()) {
+ shareIntent.setType("text/plain");
+ }
+
+ try {
+ activity.startActivity(Intent.createChooser(shareIntent, activity.getText(R.string.share_with)));
+ } catch (ActivityNotFoundException e) {
+ //This should happen only on faulty androids because normally chooser is always available
+ Toast.makeText(activity, R.string.no_application_found_to_open_file, Toast.LENGTH_SHORT).show();
+ }
+ }
+
public static void copyToClipboard(XmppActivity activity, Message message) {
- if (activity.copyTextToClipboard(message.getMergedBody().toString(), R.string.message)) {
+ if (activity.copyTextToClipboard(message.getBodyForDisplaying().toString(), R.string.message)) {
+ Toast.makeText(activity, R.string.message_copied_to_clipboard, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ public static void copyToClipboard(XmppActivity activity, StringBuilder sb) {
+ if (activity.copyTextToClipboard(sb.toString(), R.string.message)) {
Toast.makeText(activity, R.string.message_copied_to_clipboard, Toast.LENGTH_SHORT).show();
}
}
@@ -105,7 +179,7 @@ public class ShareUtil {
}
public static void copyLinkToClipboard(final XmppActivity activity, final Message message) {
- final SpannableStringBuilder body = message.getMergedBody();
+ final SpannableStringBuilder body = message.getBodyForDisplaying();
for (final String url : MyLinkify.extractLinks(body)) {
final Uri uri = Uri.parse(url);
if ("xmpp".equals(uri.getScheme())) {
diff --git a/src/main/java/eu/siacs/conversations/utils/MessageUtils.java b/src/main/java/eu/siacs/conversations/utils/MessageUtils.java
index 1ac9d2c7d..cd9681054 100644
--- a/src/main/java/eu/siacs/conversations/utils/MessageUtils.java
+++ b/src/main/java/eu/siacs/conversations/utils/MessageUtils.java
@@ -63,7 +63,7 @@ public class MessageUtils {
}
body = nick + " " + message.getBody().substring(Message.ME_COMMAND.length());
} else {
- body = message.getMergedBody().toString();
+ body = message.getBodyForDisplaying().toString();
}
for (String line : body.split("\n")) {
if (!(line.length() <= 0) && QuoteHelper.isNestedTooDeeply(line)) {
diff --git a/src/main/res/drawable-hdpi/date_bubble_grey.9.png b/src/main/res/drawable-hdpi/date_bubble_grey.9.png
index 6236855a2..25c223739 100644
Binary files a/src/main/res/drawable-hdpi/date_bubble_grey.9.png and b/src/main/res/drawable-hdpi/date_bubble_grey.9.png differ
diff --git a/src/main/res/drawable-hdpi/date_bubble_white.9.png b/src/main/res/drawable-hdpi/date_bubble_white.9.png
index fbeac6493..c2ba87f81 100644
Binary files a/src/main/res/drawable-hdpi/date_bubble_white.9.png and b/src/main/res/drawable-hdpi/date_bubble_white.9.png differ
diff --git a/src/main/res/drawable-hdpi/ic_flip_camera_android_black_24dp.png b/src/main/res/drawable-hdpi/ic_flip_camera_android_black_24dp.png
index 3e0e64d7b..28b089a88 100644
Binary files a/src/main/res/drawable-hdpi/ic_flip_camera_android_black_24dp.png and b/src/main/res/drawable-hdpi/ic_flip_camera_android_black_24dp.png differ
diff --git a/src/main/res/drawable-hdpi/ic_no_results_background_black.png b/src/main/res/drawable-hdpi/ic_no_results_background_black.png
index 79f226833..21e224665 100644
Binary files a/src/main/res/drawable-hdpi/ic_no_results_background_black.png and b/src/main/res/drawable-hdpi/ic_no_results_background_black.png differ
diff --git a/src/main/res/drawable-hdpi/ic_no_results_background_white.png b/src/main/res/drawable-hdpi/ic_no_results_background_white.png
index aebc5886a..a225de851 100644
Binary files a/src/main/res/drawable-hdpi/ic_no_results_background_white.png and b/src/main/res/drawable-hdpi/ic_no_results_background_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_notifications_none_white80.png b/src/main/res/drawable-hdpi/ic_notifications_none_white80.png
index 469c7e893..d7f3a499f 100644
Binary files a/src/main/res/drawable-hdpi/ic_notifications_none_white80.png and b/src/main/res/drawable-hdpi/ic_notifications_none_white80.png differ
diff --git a/src/main/res/drawable-hdpi/ic_notifications_off_white80.png b/src/main/res/drawable-hdpi/ic_notifications_off_white80.png
index f4e93c549..95705666f 100644
Binary files a/src/main/res/drawable-hdpi/ic_notifications_off_white80.png and b/src/main/res/drawable-hdpi/ic_notifications_off_white80.png differ
diff --git a/src/main/res/drawable-hdpi/ic_notifications_paused_white80.png b/src/main/res/drawable-hdpi/ic_notifications_paused_white80.png
index ee7b60ad6..f9e8736c5 100644
Binary files a/src/main/res/drawable-hdpi/ic_notifications_paused_white80.png and b/src/main/res/drawable-hdpi/ic_notifications_paused_white80.png differ
diff --git a/src/main/res/drawable-hdpi/ic_notifications_white80.png b/src/main/res/drawable-hdpi/ic_notifications_white80.png
index 6ababb707..71582466f 100644
Binary files a/src/main/res/drawable-hdpi/ic_notifications_white80.png and b/src/main/res/drawable-hdpi/ic_notifications_white80.png differ
diff --git a/src/main/res/drawable-hdpi/ic_qr_code_scan_white_24dp.png b/src/main/res/drawable-hdpi/ic_qr_code_scan_white_24dp.png
index 688d6643a..dddc93dd9 100644
Binary files a/src/main/res/drawable-hdpi/ic_qr_code_scan_white_24dp.png and b/src/main/res/drawable-hdpi/ic_qr_code_scan_white_24dp.png differ
diff --git a/src/main/res/drawable-hdpi/ic_search_background_black.png b/src/main/res/drawable-hdpi/ic_search_background_black.png
index f3d154295..d299740d9 100644
Binary files a/src/main/res/drawable-hdpi/ic_search_background_black.png and b/src/main/res/drawable-hdpi/ic_search_background_black.png differ
diff --git a/src/main/res/drawable-hdpi/ic_search_background_white.png b/src/main/res/drawable-hdpi/ic_search_background_white.png
index d12f12442..fb06d3977 100644
Binary files a/src/main/res/drawable-hdpi/ic_search_background_white.png and b/src/main/res/drawable-hdpi/ic_search_background_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_cancel_away.png b/src/main/res/drawable-hdpi/ic_send_cancel_away.png
index 868877e50..2b409f803 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_cancel_away.png and b/src/main/res/drawable-hdpi/ic_send_cancel_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_cancel_dnd.png b/src/main/res/drawable-hdpi/ic_send_cancel_dnd.png
index a9c06eab5..0a9dd538f 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_cancel_dnd.png and b/src/main/res/drawable-hdpi/ic_send_cancel_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_cancel_offline.png b/src/main/res/drawable-hdpi/ic_send_cancel_offline.png
index b55fc5628..1cb4ffb33 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_cancel_offline.png and b/src/main/res/drawable-hdpi/ic_send_cancel_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_cancel_offline_white.png b/src/main/res/drawable-hdpi/ic_send_cancel_offline_white.png
index 90079107d..8c2aa5b7d 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_cancel_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_cancel_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_cancel_online.png b/src/main/res/drawable-hdpi/ic_send_cancel_online.png
index 61d71135b..ce2590db4 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_cancel_online.png and b/src/main/res/drawable-hdpi/ic_send_cancel_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_location_away.png b/src/main/res/drawable-hdpi/ic_send_location_away.png
index aaf0a34a3..c22b8b5d1 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_location_away.png and b/src/main/res/drawable-hdpi/ic_send_location_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_location_dnd.png b/src/main/res/drawable-hdpi/ic_send_location_dnd.png
index aa34d6fa1..aade77839 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_location_dnd.png and b/src/main/res/drawable-hdpi/ic_send_location_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_location_offline.png b/src/main/res/drawable-hdpi/ic_send_location_offline.png
index 4894941b6..08bd5b2d8 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_location_offline.png and b/src/main/res/drawable-hdpi/ic_send_location_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_location_offline_white.png b/src/main/res/drawable-hdpi/ic_send_location_offline_white.png
index 877445846..b67386e73 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_location_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_location_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_location_online.png b/src/main/res/drawable-hdpi/ic_send_location_online.png
index 0682bd262..5e0482397 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_location_online.png and b/src/main/res/drawable-hdpi/ic_send_location_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_photo_away.png b/src/main/res/drawable-hdpi/ic_send_photo_away.png
index 90edc7c76..1aa6d39aa 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_photo_away.png and b/src/main/res/drawable-hdpi/ic_send_photo_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_photo_dnd.png b/src/main/res/drawable-hdpi/ic_send_photo_dnd.png
index ee18dde1e..84f747ffa 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_photo_dnd.png and b/src/main/res/drawable-hdpi/ic_send_photo_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_photo_offline.png b/src/main/res/drawable-hdpi/ic_send_photo_offline.png
index 3f9400440..ae65374cb 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_photo_offline.png and b/src/main/res/drawable-hdpi/ic_send_photo_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_photo_offline_white.png b/src/main/res/drawable-hdpi/ic_send_photo_offline_white.png
index 8a99473b6..6b5246665 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_photo_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_photo_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_photo_online.png b/src/main/res/drawable-hdpi/ic_send_photo_online.png
index f76d675cc..8b5dd60f0 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_photo_online.png and b/src/main/res/drawable-hdpi/ic_send_photo_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_picture_away.png b/src/main/res/drawable-hdpi/ic_send_picture_away.png
index 196c81c1f..bf9eb9ce4 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_picture_away.png and b/src/main/res/drawable-hdpi/ic_send_picture_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_picture_dnd.png b/src/main/res/drawable-hdpi/ic_send_picture_dnd.png
index fbc681633..00009b1f4 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_picture_dnd.png and b/src/main/res/drawable-hdpi/ic_send_picture_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_picture_offline.png b/src/main/res/drawable-hdpi/ic_send_picture_offline.png
index 2953b9e60..e5f6fac99 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_picture_offline.png and b/src/main/res/drawable-hdpi/ic_send_picture_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_picture_offline_white.png b/src/main/res/drawable-hdpi/ic_send_picture_offline_white.png
index ed40a993b..217f652e8 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_picture_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_picture_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_picture_online.png b/src/main/res/drawable-hdpi/ic_send_picture_online.png
index 4284428fb..f46ebaecd 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_picture_online.png and b/src/main/res/drawable-hdpi/ic_send_picture_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_text_away.png b/src/main/res/drawable-hdpi/ic_send_text_away.png
index 845479083..05b35969b 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_text_away.png and b/src/main/res/drawable-hdpi/ic_send_text_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_text_dnd.png b/src/main/res/drawable-hdpi/ic_send_text_dnd.png
index e89920fe5..810d3e010 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_text_dnd.png and b/src/main/res/drawable-hdpi/ic_send_text_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_text_offline.png b/src/main/res/drawable-hdpi/ic_send_text_offline.png
index 99271085d..2dc1fc5ce 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_text_offline.png and b/src/main/res/drawable-hdpi/ic_send_text_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_text_offline_white.png b/src/main/res/drawable-hdpi/ic_send_text_offline_white.png
index affebb108..b186d55a8 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_text_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_text_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_text_online.png b/src/main/res/drawable-hdpi/ic_send_text_online.png
index 6f293f8d2..2fd710cf4 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_text_online.png and b/src/main/res/drawable-hdpi/ic_send_text_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_videocam_away.png b/src/main/res/drawable-hdpi/ic_send_videocam_away.png
index c4f3dbdf5..b8bae6479 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_videocam_away.png and b/src/main/res/drawable-hdpi/ic_send_videocam_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_videocam_dnd.png b/src/main/res/drawable-hdpi/ic_send_videocam_dnd.png
index 9a1060012..6c61e5616 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_videocam_dnd.png and b/src/main/res/drawable-hdpi/ic_send_videocam_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_videocam_offline.png b/src/main/res/drawable-hdpi/ic_send_videocam_offline.png
index ae5a88fd5..ce34e5b57 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_videocam_offline.png and b/src/main/res/drawable-hdpi/ic_send_videocam_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_videocam_offline_white.png b/src/main/res/drawable-hdpi/ic_send_videocam_offline_white.png
index aeab525bf..12eb537f9 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_videocam_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_videocam_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_videocam_online.png b/src/main/res/drawable-hdpi/ic_send_videocam_online.png
index 43ff34670..66ce4c7d4 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_videocam_online.png and b/src/main/res/drawable-hdpi/ic_send_videocam_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_voice_away.png b/src/main/res/drawable-hdpi/ic_send_voice_away.png
index 682a91250..11dec5a01 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_voice_away.png and b/src/main/res/drawable-hdpi/ic_send_voice_away.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_voice_dnd.png b/src/main/res/drawable-hdpi/ic_send_voice_dnd.png
index 8c21755de..4233a9975 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_voice_dnd.png and b/src/main/res/drawable-hdpi/ic_send_voice_dnd.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_voice_offline.png b/src/main/res/drawable-hdpi/ic_send_voice_offline.png
index d22077f42..33be46d11 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_voice_offline.png and b/src/main/res/drawable-hdpi/ic_send_voice_offline.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_voice_offline_white.png b/src/main/res/drawable-hdpi/ic_send_voice_offline_white.png
index 3f96bf41d..3f60e98b6 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_voice_offline_white.png and b/src/main/res/drawable-hdpi/ic_send_voice_offline_white.png differ
diff --git a/src/main/res/drawable-hdpi/ic_send_voice_online.png b/src/main/res/drawable-hdpi/ic_send_voice_online.png
index 4f0deb6d0..a18ea2fc7 100644
Binary files a/src/main/res/drawable-hdpi/ic_send_voice_online.png and b/src/main/res/drawable-hdpi/ic_send_voice_online.png differ
diff --git a/src/main/res/drawable-hdpi/ic_verified_fingerprint.png b/src/main/res/drawable-hdpi/ic_verified_fingerprint.png
index 026414e36..d2eede8aa 100644
Binary files a/src/main/res/drawable-hdpi/ic_verified_fingerprint.png and b/src/main/res/drawable-hdpi/ic_verified_fingerprint.png differ
diff --git a/src/main/res/drawable-hdpi/marker.png b/src/main/res/drawable-hdpi/marker.png
index d9f9c493a..1f5d70189 100644
Binary files a/src/main/res/drawable-hdpi/marker.png and b/src/main/res/drawable-hdpi/marker.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received.9.png b/src/main/res/drawable-hdpi/message_bubble_received.9.png
index 7f5319c8d..e4d9dc629 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_received.9.png and b/src/main/res/drawable-hdpi/message_bubble_received.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_dark.9.png b/src/main/res/drawable-hdpi/message_bubble_received_dark.9.png
index 0bb89223c..16c67fe49 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_received_dark.9.png and b/src/main/res/drawable-hdpi/message_bubble_received_dark.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_dark_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_received_dark_non_first.9.png
new file mode 100644
index 000000000..63ee4c7c9
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_received_dark_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_grey.9.png b/src/main/res/drawable-hdpi/message_bubble_received_grey.9.png
index acba47c98..8d20a91e4 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_received_grey.9.png and b/src/main/res/drawable-hdpi/message_bubble_received_grey.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_grey_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_received_grey_non_first.9.png
new file mode 100644
index 000000000..a09f88a24
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_received_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_received_non_first.9.png
new file mode 100644
index 000000000..8d6c7051a
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_received_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_warning.9.png b/src/main/res/drawable-hdpi/message_bubble_received_warning.9.png
index 8bdfcc79c..702fef775 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_received_warning.9.png and b/src/main/res/drawable-hdpi/message_bubble_received_warning.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_warning_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_received_warning_non_first.9.png
new file mode 100644
index 000000000..daa7fa638
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_received_warning_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_white.9.png b/src/main/res/drawable-hdpi/message_bubble_received_white.9.png
index ed8c0273e..fbf1b049b 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_received_white.9.png and b/src/main/res/drawable-hdpi/message_bubble_received_white.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_received_white_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_received_white_non_first.9.png
new file mode 100644
index 000000000..b7284c37d
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_received_white_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_send_grey_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_send_grey_non_first.9.png
new file mode 100644
index 000000000..e10907473
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_send_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_sent.9.png b/src/main/res/drawable-hdpi/message_bubble_sent.9.png
index 487a8f79a..6af5da758 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_sent.9.png and b/src/main/res/drawable-hdpi/message_bubble_sent.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_sent_grey.9.png b/src/main/res/drawable-hdpi/message_bubble_sent_grey.9.png
index a0e998c00..73911092f 100644
Binary files a/src/main/res/drawable-hdpi/message_bubble_sent_grey.9.png and b/src/main/res/drawable-hdpi/message_bubble_sent_grey.9.png differ
diff --git a/src/main/res/drawable-hdpi/message_bubble_sent_non_first.9.png b/src/main/res/drawable-hdpi/message_bubble_sent_non_first.9.png
new file mode 100644
index 000000000..ef5ed8673
Binary files /dev/null and b/src/main/res/drawable-hdpi/message_bubble_sent_non_first.9.png differ
diff --git a/src/main/res/drawable-hdpi/open_pdf_black.png b/src/main/res/drawable-hdpi/open_pdf_black.png
index a94935def..db327299b 100644
Binary files a/src/main/res/drawable-hdpi/open_pdf_black.png and b/src/main/res/drawable-hdpi/open_pdf_black.png differ
diff --git a/src/main/res/drawable-hdpi/open_pdf_white.png b/src/main/res/drawable-hdpi/open_pdf_white.png
index ddfb33656..906d771b4 100644
Binary files a/src/main/res/drawable-hdpi/open_pdf_white.png and b/src/main/res/drawable-hdpi/open_pdf_white.png differ
diff --git a/src/main/res/drawable-hdpi/play_gif_black.png b/src/main/res/drawable-hdpi/play_gif_black.png
index 054018ad3..ad9d4603c 100644
Binary files a/src/main/res/drawable-hdpi/play_gif_black.png and b/src/main/res/drawable-hdpi/play_gif_black.png differ
diff --git a/src/main/res/drawable-hdpi/play_gif_white.png b/src/main/res/drawable-hdpi/play_gif_white.png
index 0d0f31ed6..110c58a2b 100644
Binary files a/src/main/res/drawable-hdpi/play_gif_white.png and b/src/main/res/drawable-hdpi/play_gif_white.png differ
diff --git a/src/main/res/drawable-hdpi/play_video_black.png b/src/main/res/drawable-hdpi/play_video_black.png
index 533437fb8..1c487b0e0 100644
Binary files a/src/main/res/drawable-hdpi/play_video_black.png and b/src/main/res/drawable-hdpi/play_video_black.png differ
diff --git a/src/main/res/drawable-hdpi/play_video_white.png b/src/main/res/drawable-hdpi/play_video_white.png
index 526b0b591..e7e892051 100644
Binary files a/src/main/res/drawable-hdpi/play_video_white.png and b/src/main/res/drawable-hdpi/play_video_white.png differ
diff --git a/src/main/res/drawable-mdpi/date_bubble_grey.9.png b/src/main/res/drawable-mdpi/date_bubble_grey.9.png
index 52d4daae8..a8c3f2c1c 100644
Binary files a/src/main/res/drawable-mdpi/date_bubble_grey.9.png and b/src/main/res/drawable-mdpi/date_bubble_grey.9.png differ
diff --git a/src/main/res/drawable-mdpi/date_bubble_white.9.png b/src/main/res/drawable-mdpi/date_bubble_white.9.png
index 8f8e06010..58a22aa46 100644
Binary files a/src/main/res/drawable-mdpi/date_bubble_white.9.png and b/src/main/res/drawable-mdpi/date_bubble_white.9.png differ
diff --git a/src/main/res/drawable-mdpi/ic_flip_camera_android_black_24dp.png b/src/main/res/drawable-mdpi/ic_flip_camera_android_black_24dp.png
index 79d201f48..c69dc8835 100644
Binary files a/src/main/res/drawable-mdpi/ic_flip_camera_android_black_24dp.png and b/src/main/res/drawable-mdpi/ic_flip_camera_android_black_24dp.png differ
diff --git a/src/main/res/drawable-mdpi/ic_no_results_background_black.png b/src/main/res/drawable-mdpi/ic_no_results_background_black.png
index 9b39879bc..19864206c 100644
Binary files a/src/main/res/drawable-mdpi/ic_no_results_background_black.png and b/src/main/res/drawable-mdpi/ic_no_results_background_black.png differ
diff --git a/src/main/res/drawable-mdpi/ic_no_results_background_white.png b/src/main/res/drawable-mdpi/ic_no_results_background_white.png
index 48aa58298..cf50cd3bc 100644
Binary files a/src/main/res/drawable-mdpi/ic_no_results_background_white.png and b/src/main/res/drawable-mdpi/ic_no_results_background_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_notifications_none_white80.png b/src/main/res/drawable-mdpi/ic_notifications_none_white80.png
index 0e5e5a2e3..ab1d220d7 100644
Binary files a/src/main/res/drawable-mdpi/ic_notifications_none_white80.png and b/src/main/res/drawable-mdpi/ic_notifications_none_white80.png differ
diff --git a/src/main/res/drawable-mdpi/ic_notifications_off_white80.png b/src/main/res/drawable-mdpi/ic_notifications_off_white80.png
index f78c2b83c..1d7131213 100644
Binary files a/src/main/res/drawable-mdpi/ic_notifications_off_white80.png and b/src/main/res/drawable-mdpi/ic_notifications_off_white80.png differ
diff --git a/src/main/res/drawable-mdpi/ic_notifications_paused_white80.png b/src/main/res/drawable-mdpi/ic_notifications_paused_white80.png
index 20be98a7b..d67124dc4 100644
Binary files a/src/main/res/drawable-mdpi/ic_notifications_paused_white80.png and b/src/main/res/drawable-mdpi/ic_notifications_paused_white80.png differ
diff --git a/src/main/res/drawable-mdpi/ic_notifications_white80.png b/src/main/res/drawable-mdpi/ic_notifications_white80.png
index ccbfe0916..006001da8 100644
Binary files a/src/main/res/drawable-mdpi/ic_notifications_white80.png and b/src/main/res/drawable-mdpi/ic_notifications_white80.png differ
diff --git a/src/main/res/drawable-mdpi/ic_qr_code_scan_white_24dp.png b/src/main/res/drawable-mdpi/ic_qr_code_scan_white_24dp.png
index 716034fea..9e6b6ccc1 100644
Binary files a/src/main/res/drawable-mdpi/ic_qr_code_scan_white_24dp.png and b/src/main/res/drawable-mdpi/ic_qr_code_scan_white_24dp.png differ
diff --git a/src/main/res/drawable-mdpi/ic_search_background_black.png b/src/main/res/drawable-mdpi/ic_search_background_black.png
index 29f321b42..416fca82f 100644
Binary files a/src/main/res/drawable-mdpi/ic_search_background_black.png and b/src/main/res/drawable-mdpi/ic_search_background_black.png differ
diff --git a/src/main/res/drawable-mdpi/ic_search_background_white.png b/src/main/res/drawable-mdpi/ic_search_background_white.png
index df5571175..377d67578 100644
Binary files a/src/main/res/drawable-mdpi/ic_search_background_white.png and b/src/main/res/drawable-mdpi/ic_search_background_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_cancel_away.png b/src/main/res/drawable-mdpi/ic_send_cancel_away.png
index c4fe90f51..d901cc8db 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_cancel_away.png and b/src/main/res/drawable-mdpi/ic_send_cancel_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_cancel_dnd.png b/src/main/res/drawable-mdpi/ic_send_cancel_dnd.png
index 2c80add39..f6442f090 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_cancel_dnd.png and b/src/main/res/drawable-mdpi/ic_send_cancel_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_cancel_offline.png b/src/main/res/drawable-mdpi/ic_send_cancel_offline.png
index 638b7e81f..03905a44a 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_cancel_offline.png and b/src/main/res/drawable-mdpi/ic_send_cancel_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_cancel_offline_white.png b/src/main/res/drawable-mdpi/ic_send_cancel_offline_white.png
index 5d9d4a4ce..ef036d817 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_cancel_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_cancel_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_cancel_online.png b/src/main/res/drawable-mdpi/ic_send_cancel_online.png
index 6d6f6224f..ac141c824 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_cancel_online.png and b/src/main/res/drawable-mdpi/ic_send_cancel_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_location_away.png b/src/main/res/drawable-mdpi/ic_send_location_away.png
index ca9ad2177..015998c36 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_location_away.png and b/src/main/res/drawable-mdpi/ic_send_location_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_location_dnd.png b/src/main/res/drawable-mdpi/ic_send_location_dnd.png
index 5af403011..0025713dc 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_location_dnd.png and b/src/main/res/drawable-mdpi/ic_send_location_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_location_offline.png b/src/main/res/drawable-mdpi/ic_send_location_offline.png
index 40393e8ed..695663443 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_location_offline.png and b/src/main/res/drawable-mdpi/ic_send_location_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_location_offline_white.png b/src/main/res/drawable-mdpi/ic_send_location_offline_white.png
index c649bfc71..fa316f1ed 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_location_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_location_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_location_online.png b/src/main/res/drawable-mdpi/ic_send_location_online.png
index 3e50658a7..8a9c24c0c 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_location_online.png and b/src/main/res/drawable-mdpi/ic_send_location_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_photo_away.png b/src/main/res/drawable-mdpi/ic_send_photo_away.png
index 0af6ef828..fafdbecd9 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_photo_away.png and b/src/main/res/drawable-mdpi/ic_send_photo_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_photo_dnd.png b/src/main/res/drawable-mdpi/ic_send_photo_dnd.png
index 69ad0513d..f3f46e8f7 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_photo_dnd.png and b/src/main/res/drawable-mdpi/ic_send_photo_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_photo_offline.png b/src/main/res/drawable-mdpi/ic_send_photo_offline.png
index 7cc1f9195..92cad01be 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_photo_offline.png and b/src/main/res/drawable-mdpi/ic_send_photo_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_photo_offline_white.png b/src/main/res/drawable-mdpi/ic_send_photo_offline_white.png
index f5d4606ea..ed97bbe02 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_photo_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_photo_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_photo_online.png b/src/main/res/drawable-mdpi/ic_send_photo_online.png
index 412e10638..e874600a2 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_photo_online.png and b/src/main/res/drawable-mdpi/ic_send_photo_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_picture_away.png b/src/main/res/drawable-mdpi/ic_send_picture_away.png
index b43418aa7..dfa256a57 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_picture_away.png and b/src/main/res/drawable-mdpi/ic_send_picture_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_picture_dnd.png b/src/main/res/drawable-mdpi/ic_send_picture_dnd.png
index b92dd0f00..c07b67935 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_picture_dnd.png and b/src/main/res/drawable-mdpi/ic_send_picture_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_picture_offline.png b/src/main/res/drawable-mdpi/ic_send_picture_offline.png
index 860e30c59..c89635aa0 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_picture_offline.png and b/src/main/res/drawable-mdpi/ic_send_picture_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_picture_offline_white.png b/src/main/res/drawable-mdpi/ic_send_picture_offline_white.png
index 094594ff1..9046b2cb3 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_picture_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_picture_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_picture_online.png b/src/main/res/drawable-mdpi/ic_send_picture_online.png
index 368bee55a..4e27b391a 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_picture_online.png and b/src/main/res/drawable-mdpi/ic_send_picture_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_text_away.png b/src/main/res/drawable-mdpi/ic_send_text_away.png
index 307bdbd66..053ec01e0 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_text_away.png and b/src/main/res/drawable-mdpi/ic_send_text_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_text_dnd.png b/src/main/res/drawable-mdpi/ic_send_text_dnd.png
index 1935f5a75..71855295f 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_text_dnd.png and b/src/main/res/drawable-mdpi/ic_send_text_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_text_offline.png b/src/main/res/drawable-mdpi/ic_send_text_offline.png
index 53da129f9..08223423c 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_text_offline.png and b/src/main/res/drawable-mdpi/ic_send_text_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_text_offline_white.png b/src/main/res/drawable-mdpi/ic_send_text_offline_white.png
index e5c2c4810..dea01fe68 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_text_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_text_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_text_online.png b/src/main/res/drawable-mdpi/ic_send_text_online.png
index df5123a26..6faafe8ea 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_text_online.png and b/src/main/res/drawable-mdpi/ic_send_text_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_videocam_away.png b/src/main/res/drawable-mdpi/ic_send_videocam_away.png
index bc71ca3e8..2d0eba6c0 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_videocam_away.png and b/src/main/res/drawable-mdpi/ic_send_videocam_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_videocam_dnd.png b/src/main/res/drawable-mdpi/ic_send_videocam_dnd.png
index 15f07b9df..c0b359098 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_videocam_dnd.png and b/src/main/res/drawable-mdpi/ic_send_videocam_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_videocam_offline.png b/src/main/res/drawable-mdpi/ic_send_videocam_offline.png
index 39126bf2d..b2253cf70 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_videocam_offline.png and b/src/main/res/drawable-mdpi/ic_send_videocam_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_videocam_offline_white.png b/src/main/res/drawable-mdpi/ic_send_videocam_offline_white.png
index 04048266c..6a710c578 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_videocam_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_videocam_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_videocam_online.png b/src/main/res/drawable-mdpi/ic_send_videocam_online.png
index 85373c5d8..28831712e 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_videocam_online.png and b/src/main/res/drawable-mdpi/ic_send_videocam_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_voice_away.png b/src/main/res/drawable-mdpi/ic_send_voice_away.png
index be4f7ccef..33ec719ce 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_voice_away.png and b/src/main/res/drawable-mdpi/ic_send_voice_away.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_voice_dnd.png b/src/main/res/drawable-mdpi/ic_send_voice_dnd.png
index f55907d92..31281d5c7 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_voice_dnd.png and b/src/main/res/drawable-mdpi/ic_send_voice_dnd.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_voice_offline.png b/src/main/res/drawable-mdpi/ic_send_voice_offline.png
index 83a71610f..073bd6b0a 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_voice_offline.png and b/src/main/res/drawable-mdpi/ic_send_voice_offline.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_voice_offline_white.png b/src/main/res/drawable-mdpi/ic_send_voice_offline_white.png
index 77e2601ba..d4a45bee3 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_voice_offline_white.png and b/src/main/res/drawable-mdpi/ic_send_voice_offline_white.png differ
diff --git a/src/main/res/drawable-mdpi/ic_send_voice_online.png b/src/main/res/drawable-mdpi/ic_send_voice_online.png
index b5f73ae7d..9c58d838f 100644
Binary files a/src/main/res/drawable-mdpi/ic_send_voice_online.png and b/src/main/res/drawable-mdpi/ic_send_voice_online.png differ
diff --git a/src/main/res/drawable-mdpi/ic_verified_fingerprint.png b/src/main/res/drawable-mdpi/ic_verified_fingerprint.png
index 25f2c8e19..037df8e8e 100644
Binary files a/src/main/res/drawable-mdpi/ic_verified_fingerprint.png and b/src/main/res/drawable-mdpi/ic_verified_fingerprint.png differ
diff --git a/src/main/res/drawable-mdpi/marker.png b/src/main/res/drawable-mdpi/marker.png
index 331acbf4d..30feba6dc 100644
Binary files a/src/main/res/drawable-mdpi/marker.png and b/src/main/res/drawable-mdpi/marker.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received.9.png b/src/main/res/drawable-mdpi/message_bubble_received.9.png
index 3f31766ce..21d4e5c96 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_received.9.png and b/src/main/res/drawable-mdpi/message_bubble_received.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_dark.9.png b/src/main/res/drawable-mdpi/message_bubble_received_dark.9.png
index d5c45ea9d..582bc86da 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_received_dark.9.png and b/src/main/res/drawable-mdpi/message_bubble_received_dark.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_dark_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_received_dark_non_first.9.png
new file mode 100644
index 000000000..51c17547d
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_received_dark_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_grey.9.png b/src/main/res/drawable-mdpi/message_bubble_received_grey.9.png
index 3e5e62c5e..57f239ae2 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_received_grey.9.png and b/src/main/res/drawable-mdpi/message_bubble_received_grey.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_grey_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_received_grey_non_first.9.png
new file mode 100644
index 000000000..52b4f4854
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_received_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_received_non_first.9.png
new file mode 100644
index 000000000..4a37b5278
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_received_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_warning.9.png b/src/main/res/drawable-mdpi/message_bubble_received_warning.9.png
index 66862dbe5..a8bcd0681 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_received_warning.9.png and b/src/main/res/drawable-mdpi/message_bubble_received_warning.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_warning_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_received_warning_non_first.9.png
new file mode 100644
index 000000000..70063843c
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_received_warning_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_white.9.png b/src/main/res/drawable-mdpi/message_bubble_received_white.9.png
index e8d69cc3f..a3e56adf2 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_received_white.9.png and b/src/main/res/drawable-mdpi/message_bubble_received_white.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_received_white_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_received_white_non_first.9.png
new file mode 100644
index 000000000..b9225d95c
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_received_white_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_send_grey_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_send_grey_non_first.9.png
new file mode 100644
index 000000000..4ef721ee4
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_send_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_sent.9.png b/src/main/res/drawable-mdpi/message_bubble_sent.9.png
index f7c63c8f7..f41638f48 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_sent.9.png and b/src/main/res/drawable-mdpi/message_bubble_sent.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_sent_grey.9.png b/src/main/res/drawable-mdpi/message_bubble_sent_grey.9.png
index e1a0bfe64..eb9349cf2 100644
Binary files a/src/main/res/drawable-mdpi/message_bubble_sent_grey.9.png and b/src/main/res/drawable-mdpi/message_bubble_sent_grey.9.png differ
diff --git a/src/main/res/drawable-mdpi/message_bubble_sent_non_first.9.png b/src/main/res/drawable-mdpi/message_bubble_sent_non_first.9.png
new file mode 100644
index 000000000..f759eb60c
Binary files /dev/null and b/src/main/res/drawable-mdpi/message_bubble_sent_non_first.9.png differ
diff --git a/src/main/res/drawable-mdpi/open_pdf_black.png b/src/main/res/drawable-mdpi/open_pdf_black.png
index 0d7191603..9b9db53bd 100644
Binary files a/src/main/res/drawable-mdpi/open_pdf_black.png and b/src/main/res/drawable-mdpi/open_pdf_black.png differ
diff --git a/src/main/res/drawable-mdpi/open_pdf_white.png b/src/main/res/drawable-mdpi/open_pdf_white.png
index 2403468c0..09ec981c3 100644
Binary files a/src/main/res/drawable-mdpi/open_pdf_white.png and b/src/main/res/drawable-mdpi/open_pdf_white.png differ
diff --git a/src/main/res/drawable-mdpi/play_gif_black.png b/src/main/res/drawable-mdpi/play_gif_black.png
index d0f0aae47..dd5d1e9ed 100644
Binary files a/src/main/res/drawable-mdpi/play_gif_black.png and b/src/main/res/drawable-mdpi/play_gif_black.png differ
diff --git a/src/main/res/drawable-mdpi/play_gif_white.png b/src/main/res/drawable-mdpi/play_gif_white.png
index ba70bd146..4862d6dea 100644
Binary files a/src/main/res/drawable-mdpi/play_gif_white.png and b/src/main/res/drawable-mdpi/play_gif_white.png differ
diff --git a/src/main/res/drawable-mdpi/play_video_black.png b/src/main/res/drawable-mdpi/play_video_black.png
index 6c25cda8e..727359177 100644
Binary files a/src/main/res/drawable-mdpi/play_video_black.png and b/src/main/res/drawable-mdpi/play_video_black.png differ
diff --git a/src/main/res/drawable-mdpi/play_video_white.png b/src/main/res/drawable-mdpi/play_video_white.png
index a2cf25afe..b52eed03a 100644
Binary files a/src/main/res/drawable-mdpi/play_video_white.png and b/src/main/res/drawable-mdpi/play_video_white.png differ
diff --git a/src/main/res/drawable-xhdpi/date_bubble_grey.9.png b/src/main/res/drawable-xhdpi/date_bubble_grey.9.png
index 63225157d..1265c3967 100644
Binary files a/src/main/res/drawable-xhdpi/date_bubble_grey.9.png and b/src/main/res/drawable-xhdpi/date_bubble_grey.9.png differ
diff --git a/src/main/res/drawable-xhdpi/date_bubble_white.9.png b/src/main/res/drawable-xhdpi/date_bubble_white.9.png
index c5eaa5e0b..fad186877 100644
Binary files a/src/main/res/drawable-xhdpi/date_bubble_white.9.png and b/src/main/res/drawable-xhdpi/date_bubble_white.9.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_flip_camera_android_black_24dp.png b/src/main/res/drawable-xhdpi/ic_flip_camera_android_black_24dp.png
index 7178728e3..7e32ebd8d 100644
Binary files a/src/main/res/drawable-xhdpi/ic_flip_camera_android_black_24dp.png and b/src/main/res/drawable-xhdpi/ic_flip_camera_android_black_24dp.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_no_results_background_black.png b/src/main/res/drawable-xhdpi/ic_no_results_background_black.png
index 588f94847..a87c6a468 100644
Binary files a/src/main/res/drawable-xhdpi/ic_no_results_background_black.png and b/src/main/res/drawable-xhdpi/ic_no_results_background_black.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_no_results_background_white.png b/src/main/res/drawable-xhdpi/ic_no_results_background_white.png
index 7b4ddc907..444064b64 100644
Binary files a/src/main/res/drawable-xhdpi/ic_no_results_background_white.png and b/src/main/res/drawable-xhdpi/ic_no_results_background_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_notifications_none_white80.png b/src/main/res/drawable-xhdpi/ic_notifications_none_white80.png
index 8113eddfd..9b88e6f2c 100644
Binary files a/src/main/res/drawable-xhdpi/ic_notifications_none_white80.png and b/src/main/res/drawable-xhdpi/ic_notifications_none_white80.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_notifications_off_white80.png b/src/main/res/drawable-xhdpi/ic_notifications_off_white80.png
index d225dc978..c180103b7 100644
Binary files a/src/main/res/drawable-xhdpi/ic_notifications_off_white80.png and b/src/main/res/drawable-xhdpi/ic_notifications_off_white80.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_notifications_paused_white80.png b/src/main/res/drawable-xhdpi/ic_notifications_paused_white80.png
index d034aa271..82cb1e99e 100644
Binary files a/src/main/res/drawable-xhdpi/ic_notifications_paused_white80.png and b/src/main/res/drawable-xhdpi/ic_notifications_paused_white80.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_notifications_white80.png b/src/main/res/drawable-xhdpi/ic_notifications_white80.png
index 2d5c3f31d..911f02d47 100644
Binary files a/src/main/res/drawable-xhdpi/ic_notifications_white80.png and b/src/main/res/drawable-xhdpi/ic_notifications_white80.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_qr_code_scan_white_24dp.png b/src/main/res/drawable-xhdpi/ic_qr_code_scan_white_24dp.png
index 94be3290b..73c9a8e1b 100644
Binary files a/src/main/res/drawable-xhdpi/ic_qr_code_scan_white_24dp.png and b/src/main/res/drawable-xhdpi/ic_qr_code_scan_white_24dp.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_search_background_black.png b/src/main/res/drawable-xhdpi/ic_search_background_black.png
index 50219e359..d1c15881a 100644
Binary files a/src/main/res/drawable-xhdpi/ic_search_background_black.png and b/src/main/res/drawable-xhdpi/ic_search_background_black.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_search_background_white.png b/src/main/res/drawable-xhdpi/ic_search_background_white.png
index 62d0fe923..7a7509947 100644
Binary files a/src/main/res/drawable-xhdpi/ic_search_background_white.png and b/src/main/res/drawable-xhdpi/ic_search_background_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_cancel_away.png b/src/main/res/drawable-xhdpi/ic_send_cancel_away.png
index dae743c95..7ac893742 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_cancel_away.png and b/src/main/res/drawable-xhdpi/ic_send_cancel_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_cancel_dnd.png b/src/main/res/drawable-xhdpi/ic_send_cancel_dnd.png
index 5fb004284..f7a324842 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_cancel_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_cancel_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_cancel_offline.png b/src/main/res/drawable-xhdpi/ic_send_cancel_offline.png
index 8fea5e6a3..579649e69 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_cancel_offline.png and b/src/main/res/drawable-xhdpi/ic_send_cancel_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_cancel_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_cancel_offline_white.png
index fc43e902a..4c2c0f3ec 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_cancel_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_cancel_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_cancel_online.png b/src/main/res/drawable-xhdpi/ic_send_cancel_online.png
index 9cb266444..9a123cf80 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_cancel_online.png and b/src/main/res/drawable-xhdpi/ic_send_cancel_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_location_away.png b/src/main/res/drawable-xhdpi/ic_send_location_away.png
index 5f939d7ac..50d342387 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_location_away.png and b/src/main/res/drawable-xhdpi/ic_send_location_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_location_dnd.png b/src/main/res/drawable-xhdpi/ic_send_location_dnd.png
index d28649d3c..3bcd15b31 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_location_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_location_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_location_offline.png b/src/main/res/drawable-xhdpi/ic_send_location_offline.png
index 27d998286..dc32c4de3 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_location_offline.png and b/src/main/res/drawable-xhdpi/ic_send_location_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_location_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_location_offline_white.png
index 811fce27f..eb9a0eeaf 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_location_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_location_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_location_online.png b/src/main/res/drawable-xhdpi/ic_send_location_online.png
index 3f85f7ff0..9ace17f11 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_location_online.png and b/src/main/res/drawable-xhdpi/ic_send_location_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_photo_away.png b/src/main/res/drawable-xhdpi/ic_send_photo_away.png
index 50ed4ae70..b19ef1ef4 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_photo_away.png and b/src/main/res/drawable-xhdpi/ic_send_photo_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_photo_dnd.png b/src/main/res/drawable-xhdpi/ic_send_photo_dnd.png
index 103a05c41..6da9a9b47 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_photo_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_photo_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_photo_offline.png b/src/main/res/drawable-xhdpi/ic_send_photo_offline.png
index ac58e8e6b..67750ce46 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_photo_offline.png and b/src/main/res/drawable-xhdpi/ic_send_photo_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_photo_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_photo_offline_white.png
index b9ec7fd77..a0abfcca6 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_photo_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_photo_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_photo_online.png b/src/main/res/drawable-xhdpi/ic_send_photo_online.png
index 6845677f0..6c2c3c6b7 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_photo_online.png and b/src/main/res/drawable-xhdpi/ic_send_photo_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_picture_away.png b/src/main/res/drawable-xhdpi/ic_send_picture_away.png
index 72d78b4bb..e625bff17 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_picture_away.png and b/src/main/res/drawable-xhdpi/ic_send_picture_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_picture_dnd.png b/src/main/res/drawable-xhdpi/ic_send_picture_dnd.png
index 08f4711ba..07c7a5b2b 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_picture_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_picture_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_picture_offline.png b/src/main/res/drawable-xhdpi/ic_send_picture_offline.png
index 0f494cf97..501d7f6af 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_picture_offline.png and b/src/main/res/drawable-xhdpi/ic_send_picture_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_picture_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_picture_offline_white.png
index 309ded6eb..c32fcae05 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_picture_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_picture_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_picture_online.png b/src/main/res/drawable-xhdpi/ic_send_picture_online.png
index 10de6adb7..20f38a33e 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_picture_online.png and b/src/main/res/drawable-xhdpi/ic_send_picture_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_text_away.png b/src/main/res/drawable-xhdpi/ic_send_text_away.png
index bf6e20138..ac5d6cffe 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_text_away.png and b/src/main/res/drawable-xhdpi/ic_send_text_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_text_dnd.png b/src/main/res/drawable-xhdpi/ic_send_text_dnd.png
index 6d3389adc..8fc3b971a 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_text_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_text_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_text_offline.png b/src/main/res/drawable-xhdpi/ic_send_text_offline.png
index ace8b9781..2a516042b 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_text_offline.png and b/src/main/res/drawable-xhdpi/ic_send_text_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_text_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_text_offline_white.png
index d6be27dce..b855e6c86 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_text_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_text_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_text_online.png b/src/main/res/drawable-xhdpi/ic_send_text_online.png
index 3a7c050fa..c98d5c144 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_text_online.png and b/src/main/res/drawable-xhdpi/ic_send_text_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_videocam_away.png b/src/main/res/drawable-xhdpi/ic_send_videocam_away.png
index 321443f52..f30f78491 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_videocam_away.png and b/src/main/res/drawable-xhdpi/ic_send_videocam_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_videocam_dnd.png b/src/main/res/drawable-xhdpi/ic_send_videocam_dnd.png
index c3e0fbf36..fec0331d6 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_videocam_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_videocam_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_videocam_offline.png b/src/main/res/drawable-xhdpi/ic_send_videocam_offline.png
index d9b8750fb..194ad6900 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_videocam_offline.png and b/src/main/res/drawable-xhdpi/ic_send_videocam_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_videocam_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_videocam_offline_white.png
index 0dd153812..9a7beb4b5 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_videocam_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_videocam_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_videocam_online.png b/src/main/res/drawable-xhdpi/ic_send_videocam_online.png
index b2a331d8e..995ebfae8 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_videocam_online.png and b/src/main/res/drawable-xhdpi/ic_send_videocam_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_voice_away.png b/src/main/res/drawable-xhdpi/ic_send_voice_away.png
index 018450b4f..70b811ef4 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_voice_away.png and b/src/main/res/drawable-xhdpi/ic_send_voice_away.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_voice_dnd.png b/src/main/res/drawable-xhdpi/ic_send_voice_dnd.png
index 8a14d43a4..64cea1217 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_voice_dnd.png and b/src/main/res/drawable-xhdpi/ic_send_voice_dnd.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_voice_offline.png b/src/main/res/drawable-xhdpi/ic_send_voice_offline.png
index be31673cd..886d2e55d 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_voice_offline.png and b/src/main/res/drawable-xhdpi/ic_send_voice_offline.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_voice_offline_white.png b/src/main/res/drawable-xhdpi/ic_send_voice_offline_white.png
index 998065d40..cb7948063 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_voice_offline_white.png and b/src/main/res/drawable-xhdpi/ic_send_voice_offline_white.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_send_voice_online.png b/src/main/res/drawable-xhdpi/ic_send_voice_online.png
index c238e4b9b..610296aed 100644
Binary files a/src/main/res/drawable-xhdpi/ic_send_voice_online.png and b/src/main/res/drawable-xhdpi/ic_send_voice_online.png differ
diff --git a/src/main/res/drawable-xhdpi/ic_verified_fingerprint.png b/src/main/res/drawable-xhdpi/ic_verified_fingerprint.png
index ab8cebdcb..363eb825d 100644
Binary files a/src/main/res/drawable-xhdpi/ic_verified_fingerprint.png and b/src/main/res/drawable-xhdpi/ic_verified_fingerprint.png differ
diff --git a/src/main/res/drawable-xhdpi/marker.png b/src/main/res/drawable-xhdpi/marker.png
index 614badda3..66f5095ef 100644
Binary files a/src/main/res/drawable-xhdpi/marker.png and b/src/main/res/drawable-xhdpi/marker.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received.9.png b/src/main/res/drawable-xhdpi/message_bubble_received.9.png
index 799c2e532..cfb1f00fd 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_received.9.png and b/src/main/res/drawable-xhdpi/message_bubble_received.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_dark.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_dark.9.png
index 26523a2a5..4bdb3401d 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_received_dark.9.png and b/src/main/res/drawable-xhdpi/message_bubble_received_dark.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_dark_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_dark_non_first.9.png
new file mode 100644
index 000000000..5272062d8
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_received_dark_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_grey.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_grey.9.png
index 2acae4964..ee515aeda 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_received_grey.9.png and b/src/main/res/drawable-xhdpi/message_bubble_received_grey.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_grey_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_grey_non_first.9.png
new file mode 100644
index 000000000..71c431e49
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_received_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_non_first.9.png
new file mode 100644
index 000000000..e32724b1c
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_received_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_warning.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_warning.9.png
index 9b46f4656..aa5aac296 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_received_warning.9.png and b/src/main/res/drawable-xhdpi/message_bubble_received_warning.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_warning_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_warning_non_first.9.png
new file mode 100644
index 000000000..43a5a189c
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_received_warning_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_white.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_white.9.png
index a735ad874..2dd5662fd 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_received_white.9.png and b/src/main/res/drawable-xhdpi/message_bubble_received_white.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_received_white_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_received_white_non_first.9.png
new file mode 100644
index 000000000..495cbdfc0
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_received_white_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_send_grey_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_send_grey_non_first.9.png
new file mode 100644
index 000000000..e1ae44ae3
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_send_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_sent.9.png b/src/main/res/drawable-xhdpi/message_bubble_sent.9.png
index aa7a6d1fd..19ed9f000 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_sent.9.png and b/src/main/res/drawable-xhdpi/message_bubble_sent.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_sent_grey.9.png b/src/main/res/drawable-xhdpi/message_bubble_sent_grey.9.png
index 85dd6223c..b9ed6b161 100644
Binary files a/src/main/res/drawable-xhdpi/message_bubble_sent_grey.9.png and b/src/main/res/drawable-xhdpi/message_bubble_sent_grey.9.png differ
diff --git a/src/main/res/drawable-xhdpi/message_bubble_sent_non_first.9.png b/src/main/res/drawable-xhdpi/message_bubble_sent_non_first.9.png
new file mode 100644
index 000000000..f9c95b674
Binary files /dev/null and b/src/main/res/drawable-xhdpi/message_bubble_sent_non_first.9.png differ
diff --git a/src/main/res/drawable-xhdpi/open_pdf_black.png b/src/main/res/drawable-xhdpi/open_pdf_black.png
index 755a14e85..e5d196b84 100644
Binary files a/src/main/res/drawable-xhdpi/open_pdf_black.png and b/src/main/res/drawable-xhdpi/open_pdf_black.png differ
diff --git a/src/main/res/drawable-xhdpi/open_pdf_white.png b/src/main/res/drawable-xhdpi/open_pdf_white.png
index bba78987a..2049fa203 100644
Binary files a/src/main/res/drawable-xhdpi/open_pdf_white.png and b/src/main/res/drawable-xhdpi/open_pdf_white.png differ
diff --git a/src/main/res/drawable-xhdpi/play_gif_black.png b/src/main/res/drawable-xhdpi/play_gif_black.png
index e621c14b8..e0acc6afb 100644
Binary files a/src/main/res/drawable-xhdpi/play_gif_black.png and b/src/main/res/drawable-xhdpi/play_gif_black.png differ
diff --git a/src/main/res/drawable-xhdpi/play_gif_white.png b/src/main/res/drawable-xhdpi/play_gif_white.png
index 12347f80f..992e39c70 100644
Binary files a/src/main/res/drawable-xhdpi/play_gif_white.png and b/src/main/res/drawable-xhdpi/play_gif_white.png differ
diff --git a/src/main/res/drawable-xhdpi/play_video_black.png b/src/main/res/drawable-xhdpi/play_video_black.png
index 79a4d382d..beb50b729 100644
Binary files a/src/main/res/drawable-xhdpi/play_video_black.png and b/src/main/res/drawable-xhdpi/play_video_black.png differ
diff --git a/src/main/res/drawable-xhdpi/play_video_white.png b/src/main/res/drawable-xhdpi/play_video_white.png
index 9decb0d00..9e8f7d54f 100644
Binary files a/src/main/res/drawable-xhdpi/play_video_white.png and b/src/main/res/drawable-xhdpi/play_video_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/date_bubble_grey.9.png b/src/main/res/drawable-xxhdpi/date_bubble_grey.9.png
index 085665b8b..9e8007273 100644
Binary files a/src/main/res/drawable-xxhdpi/date_bubble_grey.9.png and b/src/main/res/drawable-xxhdpi/date_bubble_grey.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/date_bubble_white.9.png b/src/main/res/drawable-xxhdpi/date_bubble_white.9.png
index 54b885fbe..0c36517dc 100644
Binary files a/src/main/res/drawable-xxhdpi/date_bubble_white.9.png and b/src/main/res/drawable-xxhdpi/date_bubble_white.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_flip_camera_android_black_24dp.png b/src/main/res/drawable-xxhdpi/ic_flip_camera_android_black_24dp.png
index 1b8b1511c..e41a93645 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_flip_camera_android_black_24dp.png and b/src/main/res/drawable-xxhdpi/ic_flip_camera_android_black_24dp.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_no_results_background_black.png b/src/main/res/drawable-xxhdpi/ic_no_results_background_black.png
index a7b07043b..d15beaec7 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_no_results_background_black.png and b/src/main/res/drawable-xxhdpi/ic_no_results_background_black.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_no_results_background_white.png b/src/main/res/drawable-xxhdpi/ic_no_results_background_white.png
index 4def0934b..ca7bc9deb 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_no_results_background_white.png and b/src/main/res/drawable-xxhdpi/ic_no_results_background_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_none_white80.png b/src/main/res/drawable-xxhdpi/ic_notifications_none_white80.png
index ac9f1e9a7..1f6714d2f 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_notifications_none_white80.png and b/src/main/res/drawable-xxhdpi/ic_notifications_none_white80.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_off_white80.png b/src/main/res/drawable-xxhdpi/ic_notifications_off_white80.png
index 09ac4e59d..f51f043cd 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_notifications_off_white80.png and b/src/main/res/drawable-xxhdpi/ic_notifications_off_white80.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_paused_white80.png b/src/main/res/drawable-xxhdpi/ic_notifications_paused_white80.png
index b0d4c54a7..1173de40f 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_notifications_paused_white80.png and b/src/main/res/drawable-xxhdpi/ic_notifications_paused_white80.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_white80.png b/src/main/res/drawable-xxhdpi/ic_notifications_white80.png
index 3022e7ce1..d0b94c0b1 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_notifications_white80.png and b/src/main/res/drawable-xxhdpi/ic_notifications_white80.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_qr_code_scan_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_qr_code_scan_white_24dp.png
index 1e0fe3301..9826c83d8 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_qr_code_scan_white_24dp.png and b/src/main/res/drawable-xxhdpi/ic_qr_code_scan_white_24dp.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_search_background_black.png b/src/main/res/drawable-xxhdpi/ic_search_background_black.png
index 9ce02844f..70755b4a6 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_search_background_black.png and b/src/main/res/drawable-xxhdpi/ic_search_background_black.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_search_background_white.png b/src/main/res/drawable-xxhdpi/ic_search_background_white.png
index 080ca7c0e..8a3865e86 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_search_background_white.png and b/src/main/res/drawable-xxhdpi/ic_search_background_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_cancel_away.png b/src/main/res/drawable-xxhdpi/ic_send_cancel_away.png
index 5d6b6dfca..d80b5d32f 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_cancel_away.png and b/src/main/res/drawable-xxhdpi/ic_send_cancel_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_cancel_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_cancel_dnd.png
index 2d4721776..cf65e75d8 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_cancel_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_cancel_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_cancel_offline.png b/src/main/res/drawable-xxhdpi/ic_send_cancel_offline.png
index a8bfa7016..428910bc2 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_cancel_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_cancel_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_cancel_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_cancel_offline_white.png
index 649218bf3..182848b1e 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_cancel_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_cancel_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_cancel_online.png b/src/main/res/drawable-xxhdpi/ic_send_cancel_online.png
index 0570efdb5..44ae3c4a9 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_cancel_online.png and b/src/main/res/drawable-xxhdpi/ic_send_cancel_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_location_away.png b/src/main/res/drawable-xxhdpi/ic_send_location_away.png
index 20701e4ac..a64fdcfd7 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_location_away.png and b/src/main/res/drawable-xxhdpi/ic_send_location_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_location_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_location_dnd.png
index 07608b3bf..5be16f91f 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_location_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_location_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_location_offline.png b/src/main/res/drawable-xxhdpi/ic_send_location_offline.png
index 2850a687a..77ea7dfe7 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_location_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_location_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_location_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_location_offline_white.png
index ab9ab908f..ab316e74b 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_location_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_location_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_location_online.png b/src/main/res/drawable-xxhdpi/ic_send_location_online.png
index 5462cbf74..a5ee9afc5 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_location_online.png and b/src/main/res/drawable-xxhdpi/ic_send_location_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_photo_away.png b/src/main/res/drawable-xxhdpi/ic_send_photo_away.png
index 81abb13e1..2a286df9b 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_photo_away.png and b/src/main/res/drawable-xxhdpi/ic_send_photo_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_photo_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_photo_dnd.png
index 545d35f54..9e04ee593 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_photo_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_photo_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_photo_offline.png b/src/main/res/drawable-xxhdpi/ic_send_photo_offline.png
index 20b636d6a..7d584f4b8 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_photo_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_photo_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_photo_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_photo_offline_white.png
index bdfbe3b2b..54bcacd4e 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_photo_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_photo_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_photo_online.png b/src/main/res/drawable-xxhdpi/ic_send_photo_online.png
index 8aaff8294..a435f01b8 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_photo_online.png and b/src/main/res/drawable-xxhdpi/ic_send_photo_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_picture_away.png b/src/main/res/drawable-xxhdpi/ic_send_picture_away.png
index 33f59e477..baf37aa7d 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_picture_away.png and b/src/main/res/drawable-xxhdpi/ic_send_picture_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_picture_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_picture_dnd.png
index 6826198c9..fe4ef017b 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_picture_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_picture_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_picture_offline.png b/src/main/res/drawable-xxhdpi/ic_send_picture_offline.png
index af6449aeb..b0ceb8a7a 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_picture_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_picture_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_picture_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_picture_offline_white.png
index 77df99b00..6d88d6118 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_picture_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_picture_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_picture_online.png b/src/main/res/drawable-xxhdpi/ic_send_picture_online.png
index aa7c194c0..0e1631acc 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_picture_online.png and b/src/main/res/drawable-xxhdpi/ic_send_picture_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_text_away.png b/src/main/res/drawable-xxhdpi/ic_send_text_away.png
index 822fbbd77..da54b7a09 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_text_away.png and b/src/main/res/drawable-xxhdpi/ic_send_text_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_text_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_text_dnd.png
index 9752b9c78..550eb3d63 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_text_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_text_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_text_offline.png b/src/main/res/drawable-xxhdpi/ic_send_text_offline.png
index 8a29a4835..a795f81eb 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_text_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_text_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_text_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_text_offline_white.png
index 398325387..95b0b1703 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_text_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_text_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_text_online.png b/src/main/res/drawable-xxhdpi/ic_send_text_online.png
index a5704a7f8..cbd0573cc 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_text_online.png and b/src/main/res/drawable-xxhdpi/ic_send_text_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_videocam_away.png b/src/main/res/drawable-xxhdpi/ic_send_videocam_away.png
index f86475ff9..ca4d0c92d 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_videocam_away.png and b/src/main/res/drawable-xxhdpi/ic_send_videocam_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_videocam_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_videocam_dnd.png
index fd1d5d5eb..5f611fa65 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_videocam_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_videocam_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_videocam_offline.png b/src/main/res/drawable-xxhdpi/ic_send_videocam_offline.png
index 0d5f52d92..cb3e26859 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_videocam_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_videocam_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_videocam_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_videocam_offline_white.png
index 8df2bf190..40ba26554 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_videocam_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_videocam_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_videocam_online.png b/src/main/res/drawable-xxhdpi/ic_send_videocam_online.png
index 099e40ea5..6b2c5f055 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_videocam_online.png and b/src/main/res/drawable-xxhdpi/ic_send_videocam_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_voice_away.png b/src/main/res/drawable-xxhdpi/ic_send_voice_away.png
index 522a9ae7a..856cf649e 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_voice_away.png and b/src/main/res/drawable-xxhdpi/ic_send_voice_away.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_voice_dnd.png b/src/main/res/drawable-xxhdpi/ic_send_voice_dnd.png
index 5009b6527..fd42c322c 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_voice_dnd.png and b/src/main/res/drawable-xxhdpi/ic_send_voice_dnd.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_voice_offline.png b/src/main/res/drawable-xxhdpi/ic_send_voice_offline.png
index 231a5033d..a5c5b3a04 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_voice_offline.png and b/src/main/res/drawable-xxhdpi/ic_send_voice_offline.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_voice_offline_white.png b/src/main/res/drawable-xxhdpi/ic_send_voice_offline_white.png
index 9fd9b7d72..f3c7793b0 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_voice_offline_white.png and b/src/main/res/drawable-xxhdpi/ic_send_voice_offline_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_send_voice_online.png b/src/main/res/drawable-xxhdpi/ic_send_voice_online.png
index 3c8b5c1cd..23f2928eb 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_send_voice_online.png and b/src/main/res/drawable-xxhdpi/ic_send_voice_online.png differ
diff --git a/src/main/res/drawable-xxhdpi/ic_verified_fingerprint.png b/src/main/res/drawable-xxhdpi/ic_verified_fingerprint.png
index a70365001..6f6ead71b 100644
Binary files a/src/main/res/drawable-xxhdpi/ic_verified_fingerprint.png and b/src/main/res/drawable-xxhdpi/ic_verified_fingerprint.png differ
diff --git a/src/main/res/drawable-xxhdpi/marker.png b/src/main/res/drawable-xxhdpi/marker.png
index 2c21e67f0..63070fd0a 100644
Binary files a/src/main/res/drawable-xxhdpi/marker.png and b/src/main/res/drawable-xxhdpi/marker.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received.9.png
index 71b8c3f1e..f38f6621e 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_received.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_received.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_dark.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_dark.9.png
index cd7d570e5..5bfc1bdb7 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_received_dark.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_received_dark.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_dark_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_dark_non_first.9.png
new file mode 100644
index 000000000..4a50e557b
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_received_dark_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_grey.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_grey.9.png
index 348b7de5c..757186c80 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_received_grey.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_received_grey.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_grey_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_grey_non_first.9.png
new file mode 100644
index 000000000..f0c41823d
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_received_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_non_first.9.png
new file mode 100644
index 000000000..cdfbf9b8e
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_received_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_warning.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_warning.9.png
index 2ff0fbaf2..22401dafc 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_received_warning.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_received_warning.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_warning_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_warning_non_first.9.png
new file mode 100644
index 000000000..3e345be71
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_received_warning_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_white.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_white.9.png
index 59925addb..857d63392 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_received_white.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_received_white.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_received_white_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_received_white_non_first.9.png
new file mode 100644
index 000000000..46a110e4a
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_received_white_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_send_grey_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_send_grey_non_first.9.png
new file mode 100644
index 000000000..cacc45bb9
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_send_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_sent.9.png b/src/main/res/drawable-xxhdpi/message_bubble_sent.9.png
index 17f85b64b..a06338049 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_sent.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_sent.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_sent_grey.9.png b/src/main/res/drawable-xxhdpi/message_bubble_sent_grey.9.png
index 585dcacc7..186075512 100644
Binary files a/src/main/res/drawable-xxhdpi/message_bubble_sent_grey.9.png and b/src/main/res/drawable-xxhdpi/message_bubble_sent_grey.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/message_bubble_sent_non_first.9.png b/src/main/res/drawable-xxhdpi/message_bubble_sent_non_first.9.png
new file mode 100644
index 000000000..841f902d7
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/message_bubble_sent_non_first.9.png differ
diff --git a/src/main/res/drawable-xxhdpi/open_pdf_black.png b/src/main/res/drawable-xxhdpi/open_pdf_black.png
index 952dc0932..c2c12be41 100644
Binary files a/src/main/res/drawable-xxhdpi/open_pdf_black.png and b/src/main/res/drawable-xxhdpi/open_pdf_black.png differ
diff --git a/src/main/res/drawable-xxhdpi/open_pdf_white.png b/src/main/res/drawable-xxhdpi/open_pdf_white.png
index e550b574c..d98b3d0c8 100644
Binary files a/src/main/res/drawable-xxhdpi/open_pdf_white.png and b/src/main/res/drawable-xxhdpi/open_pdf_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/play_gif_black.png b/src/main/res/drawable-xxhdpi/play_gif_black.png
index f49471c5d..e7a045341 100644
Binary files a/src/main/res/drawable-xxhdpi/play_gif_black.png and b/src/main/res/drawable-xxhdpi/play_gif_black.png differ
diff --git a/src/main/res/drawable-xxhdpi/play_gif_white.png b/src/main/res/drawable-xxhdpi/play_gif_white.png
index 8a62e456a..0a78b53ab 100644
Binary files a/src/main/res/drawable-xxhdpi/play_gif_white.png and b/src/main/res/drawable-xxhdpi/play_gif_white.png differ
diff --git a/src/main/res/drawable-xxhdpi/play_video_black.png b/src/main/res/drawable-xxhdpi/play_video_black.png
index 5c3c48027..ec60fe6ed 100644
Binary files a/src/main/res/drawable-xxhdpi/play_video_black.png and b/src/main/res/drawable-xxhdpi/play_video_black.png differ
diff --git a/src/main/res/drawable-xxhdpi/play_video_white.png b/src/main/res/drawable-xxhdpi/play_video_white.png
index 030b433f1..de0ecc91d 100644
Binary files a/src/main/res/drawable-xxhdpi/play_video_white.png and b/src/main/res/drawable-xxhdpi/play_video_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/date_bubble_grey.9.png b/src/main/res/drawable-xxxhdpi/date_bubble_grey.9.png
index 550fe2286..ee3fcf5ba 100644
Binary files a/src/main/res/drawable-xxxhdpi/date_bubble_grey.9.png and b/src/main/res/drawable-xxxhdpi/date_bubble_grey.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/date_bubble_white.9.png b/src/main/res/drawable-xxxhdpi/date_bubble_white.9.png
index 6f75ed33c..27a63fe6d 100644
Binary files a/src/main/res/drawable-xxxhdpi/date_bubble_white.9.png and b/src/main/res/drawable-xxxhdpi/date_bubble_white.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_flip_camera_android_black_24dp.png b/src/main/res/drawable-xxxhdpi/ic_flip_camera_android_black_24dp.png
index dd276a971..3e59dd9df 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_flip_camera_android_black_24dp.png and b/src/main/res/drawable-xxxhdpi/ic_flip_camera_android_black_24dp.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_no_results_background_black.png b/src/main/res/drawable-xxxhdpi/ic_no_results_background_black.png
index 8437800ac..71ec93f30 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_no_results_background_black.png and b/src/main/res/drawable-xxxhdpi/ic_no_results_background_black.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_no_results_background_white.png b/src/main/res/drawable-xxxhdpi/ic_no_results_background_white.png
index c8253cbd3..026195d7d 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_no_results_background_white.png and b/src/main/res/drawable-xxxhdpi/ic_no_results_background_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_none_white80.png b/src/main/res/drawable-xxxhdpi/ic_notifications_none_white80.png
index afc7ee6f7..3338b8d0e 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_notifications_none_white80.png and b/src/main/res/drawable-xxxhdpi/ic_notifications_none_white80.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_off_white80.png b/src/main/res/drawable-xxxhdpi/ic_notifications_off_white80.png
index f7551d288..e1157a60e 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_notifications_off_white80.png and b/src/main/res/drawable-xxxhdpi/ic_notifications_off_white80.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_paused_white80.png b/src/main/res/drawable-xxxhdpi/ic_notifications_paused_white80.png
index 6124e698b..e0cea996d 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_notifications_paused_white80.png and b/src/main/res/drawable-xxxhdpi/ic_notifications_paused_white80.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_white80.png b/src/main/res/drawable-xxxhdpi/ic_notifications_white80.png
index 781cf7255..5175d0f57 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_notifications_white80.png and b/src/main/res/drawable-xxxhdpi/ic_notifications_white80.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_qr_code_scan_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_qr_code_scan_white_24dp.png
index 437c52c65..11b2f26a7 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_qr_code_scan_white_24dp.png and b/src/main/res/drawable-xxxhdpi/ic_qr_code_scan_white_24dp.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_search_background_black.png b/src/main/res/drawable-xxxhdpi/ic_search_background_black.png
index 240fe2e4e..89b087f9a 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_search_background_black.png and b/src/main/res/drawable-xxxhdpi/ic_search_background_black.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_search_background_white.png b/src/main/res/drawable-xxxhdpi/ic_search_background_white.png
index b295b0266..934440320 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_search_background_white.png and b/src/main/res/drawable-xxxhdpi/ic_search_background_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_cancel_away.png b/src/main/res/drawable-xxxhdpi/ic_send_cancel_away.png
index 77600febb..cc68f39d2 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_cancel_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_cancel_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_cancel_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_cancel_dnd.png
index e35b63557..09019cc0a 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_cancel_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_cancel_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline.png
index 509dcd820..186bedeeb 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline_white.png
index f41a6a86e..1c0875f33 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_cancel_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_cancel_online.png b/src/main/res/drawable-xxxhdpi/ic_send_cancel_online.png
index e2a7152d3..0c4fee109 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_cancel_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_cancel_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_location_away.png b/src/main/res/drawable-xxxhdpi/ic_send_location_away.png
index 51185d4b0..02b589ab5 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_location_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_location_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_location_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_location_dnd.png
index 765ab79f3..45612e84a 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_location_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_location_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_location_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_location_offline.png
index 8500beca8..cdb7c19ec 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_location_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_location_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_location_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_location_offline_white.png
index b49ab42f5..720f9296e 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_location_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_location_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_location_online.png b/src/main/res/drawable-xxxhdpi/ic_send_location_online.png
index 21f08e37b..eaaf5eaa2 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_location_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_location_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_photo_away.png b/src/main/res/drawable-xxxhdpi/ic_send_photo_away.png
index 8ce5c21fc..1cd3ddccf 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_photo_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_photo_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_photo_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_photo_dnd.png
index b4014ac2f..f12978946 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_photo_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_photo_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_photo_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_photo_offline.png
index 3f2675d72..4ea782157 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_photo_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_photo_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_photo_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_photo_offline_white.png
index 8c902772e..c5dd595aa 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_photo_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_photo_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_photo_online.png b/src/main/res/drawable-xxxhdpi/ic_send_photo_online.png
index 8601d1cb3..7b97e1f13 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_photo_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_photo_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_picture_away.png b/src/main/res/drawable-xxxhdpi/ic_send_picture_away.png
index 14488b6ce..40a49519f 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_picture_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_picture_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_picture_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_picture_dnd.png
index f216178ba..835327df3 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_picture_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_picture_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_picture_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_picture_offline.png
index 0b54a3e7e..a71163474 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_picture_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_picture_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_picture_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_picture_offline_white.png
index 8bd6bfb5f..e331211d9 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_picture_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_picture_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_picture_online.png b/src/main/res/drawable-xxxhdpi/ic_send_picture_online.png
index 3f7572224..1da4abf38 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_picture_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_picture_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_text_away.png b/src/main/res/drawable-xxxhdpi/ic_send_text_away.png
index 5c1d7c886..564048e92 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_text_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_text_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_text_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_text_dnd.png
index eed56aae9..b0cdafa55 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_text_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_text_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_text_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_text_offline.png
index dab2dde9e..112434566 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_text_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_text_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_text_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_text_offline_white.png
index 6fc2f2d3e..2261ac542 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_text_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_text_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_text_online.png b/src/main/res/drawable-xxxhdpi/ic_send_text_online.png
index 8530c916f..85365fe5d 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_text_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_text_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_videocam_away.png b/src/main/res/drawable-xxxhdpi/ic_send_videocam_away.png
index 174b4ec60..eee8c9da9 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_videocam_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_videocam_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_videocam_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_videocam_dnd.png
index 5abe11829..3fed45368 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_videocam_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_videocam_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline.png
index 488d28bfe..e215e36af 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline_white.png
index 704c63c4d..76e0f42ba 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_videocam_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_videocam_online.png b/src/main/res/drawable-xxxhdpi/ic_send_videocam_online.png
index 292a49b2f..b34ace6d3 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_videocam_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_videocam_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_voice_away.png b/src/main/res/drawable-xxxhdpi/ic_send_voice_away.png
index 7aaad853e..0731010fb 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_voice_away.png and b/src/main/res/drawable-xxxhdpi/ic_send_voice_away.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_voice_dnd.png b/src/main/res/drawable-xxxhdpi/ic_send_voice_dnd.png
index 7f5601479..5093a183e 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_voice_dnd.png and b/src/main/res/drawable-xxxhdpi/ic_send_voice_dnd.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_voice_offline.png b/src/main/res/drawable-xxxhdpi/ic_send_voice_offline.png
index 633f70f3d..2738da82f 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_voice_offline.png and b/src/main/res/drawable-xxxhdpi/ic_send_voice_offline.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_voice_offline_white.png b/src/main/res/drawable-xxxhdpi/ic_send_voice_offline_white.png
index d2127c2a2..5c9b12fcb 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_voice_offline_white.png and b/src/main/res/drawable-xxxhdpi/ic_send_voice_offline_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_send_voice_online.png b/src/main/res/drawable-xxxhdpi/ic_send_voice_online.png
index d4183e1d8..af9dd547e 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_send_voice_online.png and b/src/main/res/drawable-xxxhdpi/ic_send_voice_online.png differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_verified_fingerprint.png b/src/main/res/drawable-xxxhdpi/ic_verified_fingerprint.png
index d03ebd845..73c06295b 100644
Binary files a/src/main/res/drawable-xxxhdpi/ic_verified_fingerprint.png and b/src/main/res/drawable-xxxhdpi/ic_verified_fingerprint.png differ
diff --git a/src/main/res/drawable-xxxhdpi/marker.png b/src/main/res/drawable-xxxhdpi/marker.png
index f0866327f..6449c5d20 100644
Binary files a/src/main/res/drawable-xxxhdpi/marker.png and b/src/main/res/drawable-xxxhdpi/marker.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received.9.png
index 79689cb63..868f8ca27 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_received.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_received.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_dark.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_dark.9.png
index 4ad74b6b2..1c1392a77 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_received_dark.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_received_dark.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_dark_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_dark_non_first.9.png
new file mode 100644
index 000000000..dc482a9ab
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_received_dark_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_grey.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_grey.9.png
index 3d0dd4734..90d862f3a 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_received_grey.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_received_grey.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_grey_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_grey_non_first.9.png
new file mode 100644
index 000000000..f40766388
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_received_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_non_first.9.png
new file mode 100644
index 000000000..81e47afb5
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_received_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_warning.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_warning.9.png
index 0885149b3..ed555201a 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_received_warning.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_received_warning.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_warning_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_warning_non_first.9.png
new file mode 100644
index 000000000..bda42abc5
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_received_warning_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_white.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_white.9.png
index 25511916a..d67d66a96 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_received_white.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_received_white.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_received_white_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_received_white_non_first.9.png
new file mode 100644
index 000000000..05a592bd0
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_received_white_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_send_grey_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_send_grey_non_first.9.png
new file mode 100644
index 000000000..ee76a8fcb
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_send_grey_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_sent.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_sent.9.png
index 2f3049fad..e80ff5402 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_sent.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_sent.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_sent_grey.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_sent_grey.9.png
index 7939893ac..26f746381 100644
Binary files a/src/main/res/drawable-xxxhdpi/message_bubble_sent_grey.9.png and b/src/main/res/drawable-xxxhdpi/message_bubble_sent_grey.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/message_bubble_sent_non_first.9.png b/src/main/res/drawable-xxxhdpi/message_bubble_sent_non_first.9.png
new file mode 100644
index 000000000..802d3965c
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/message_bubble_sent_non_first.9.png differ
diff --git a/src/main/res/drawable-xxxhdpi/open_pdf_black.png b/src/main/res/drawable-xxxhdpi/open_pdf_black.png
index 361414e89..70aad28f0 100644
Binary files a/src/main/res/drawable-xxxhdpi/open_pdf_black.png and b/src/main/res/drawable-xxxhdpi/open_pdf_black.png differ
diff --git a/src/main/res/drawable-xxxhdpi/open_pdf_white.png b/src/main/res/drawable-xxxhdpi/open_pdf_white.png
index 95611f496..280b584c3 100644
Binary files a/src/main/res/drawable-xxxhdpi/open_pdf_white.png and b/src/main/res/drawable-xxxhdpi/open_pdf_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/play_gif_black.png b/src/main/res/drawable-xxxhdpi/play_gif_black.png
index bec4804d5..6733e8cdd 100644
Binary files a/src/main/res/drawable-xxxhdpi/play_gif_black.png and b/src/main/res/drawable-xxxhdpi/play_gif_black.png differ
diff --git a/src/main/res/drawable-xxxhdpi/play_gif_white.png b/src/main/res/drawable-xxxhdpi/play_gif_white.png
index 60aa8fcf1..04af292fd 100644
Binary files a/src/main/res/drawable-xxxhdpi/play_gif_white.png and b/src/main/res/drawable-xxxhdpi/play_gif_white.png differ
diff --git a/src/main/res/drawable-xxxhdpi/play_video_black.png b/src/main/res/drawable-xxxhdpi/play_video_black.png
index ecb0a2bd0..df3eac69d 100644
Binary files a/src/main/res/drawable-xxxhdpi/play_video_black.png and b/src/main/res/drawable-xxxhdpi/play_video_black.png differ
diff --git a/src/main/res/drawable-xxxhdpi/play_video_white.png b/src/main/res/drawable-xxxhdpi/play_video_white.png
index de040f5f0..6d405f608 100644
Binary files a/src/main/res/drawable-xxxhdpi/play_video_white.png and b/src/main/res/drawable-xxxhdpi/play_video_white.png differ
diff --git a/src/main/res/drawable/ic_close_24dp.xml b/src/main/res/drawable/ic_close_24dp.xml
new file mode 100644
index 000000000..f4a2daf53
--- /dev/null
+++ b/src/main/res/drawable/ic_close_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/src/main/res/layout/fragment_conversation.xml b/src/main/res/layout/fragment_conversation.xml
index 4b862b752..761a55611 100644
--- a/src/main/res/layout/fragment_conversation.xml
+++ b/src/main/res/layout/fragment_conversation.xml
@@ -17,7 +17,6 @@
android:layout_alignParentTop="true"
android:background="?attr/color_background_secondary"
android:divider="@null"
- android:dividerHeight="0dp"
android:listSelector="@android:color/transparent"
android:stackFromBottom="true"
android:transcriptMode="normal"
diff --git a/src/main/res/layout/message_date_bubble.xml b/src/main/res/layout/message_date_bubble.xml
index 5e5cd0c4d..c40c13042 100644
--- a/src/main/res/layout/message_date_bubble.xml
+++ b/src/main/res/layout/message_date_bubble.xml
@@ -5,9 +5,9 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="8dp"
- android:paddingTop="5dp"
+ android:paddingTop="6dp"
android:paddingRight="8dp"
- android:paddingBottom="5dp">
+ android:paddingBottom="6dp">
+ android:paddingTop="4dp">
+ android:paddingTop="2dp"
+ android:paddingStart="2dp"
+ android:paddingEnd="2dp">
+ android:orientation="horizontal">
+
+
\ No newline at end of file
diff --git a/src/main/res/layout/message_rtp_session.xml b/src/main/res/layout/message_rtp_session.xml
index ad7f06d6a..45edbaca9 100644
--- a/src/main/res/layout/message_rtp_session.xml
+++ b/src/main/res/layout/message_rtp_session.xml
@@ -5,9 +5,9 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="8dp"
- android:paddingTop="5dp"
+ android:paddingTop="6dp"
android:paddingRight="8dp"
- android:paddingBottom="5dp">
+ android:paddingBottom="6dp">
+ android:paddingBottom="4dp">
-
-
-
-
-
-
-
-
+ android:scaleType="fitXY"
+ app:riv_corner_radius="6dp" />
@@ -49,7 +35,9 @@
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical"
- android:padding="2dp">
+ android:paddingTop="2dp"
+ android:paddingStart="2dp"
+ android:paddingEnd="2dp">
+ android:orientation="horizontal">
+
+
\ 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 f0ba01f24..341f5f4f7 100644
--- a/src/main/res/layout/message_status.xml
+++ b/src/main/res/layout/message_status.xml
@@ -4,10 +4,10 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingBottom="5dp"
+ android:paddingBottom="6dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
- android:paddingTop="5dp">
+ android:paddingTop="6dp">
+
+
\ No newline at end of file
diff --git a/src/main/res/menu/message_select_context.xml b/src/main/res/menu/message_select_context.xml
new file mode 100644
index 000000000..b4c86a297
--- /dev/null
+++ b/src/main/res/menu/message_select_context.xml
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index c099525ad..b6c1e3b42 100644
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -592,6 +592,7 @@
Удалить отмеченные
Вы должны подключиться для публикации аватара.
Показать текст ошибки
+ Выбрать сообщение
Текст ошибки
Режим экономии трафика включен
Ваша операционная система не позволяет %1$s получать доступ в Интернет в фоновом режиме. Для получения уведомлений вы должны дать %1$s неограниченный доступ в режиме экономии трафика.\n%1$s постарается экономить трафик по возможности.
diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml
index 2a9a4a8e6..3b4f7ea85 100644
--- a/src/main/res/values/attrs.xml
+++ b/src/main/res/values/attrs.xml
@@ -16,6 +16,7 @@
+
@@ -54,6 +55,9 @@
+
+
+
diff --git a/src/main/res/values/colors.xml b/src/main/res/values/colors.xml
index 0bbba7c0a..a5a44dc27 100644
--- a/src/main/res/values/colors.xml
+++ b/src/main/res/values/colors.xml
@@ -44,4 +44,6 @@
#ffe0e0e0
#ff2196f3
+
+ #aa82B1FF
\ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 7130aa6a7..a6f6e5877 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -600,6 +600,7 @@
Delete selected keys
You need to be connected to publish your avatar.
Show error message
+ Select Message
Error Message
Data saver enabled
Your operating system is restricting %1$s from accessing the Internet when in background. To receive notifications of new messages you should allow %1$s unrestricted access when “Data saver” is on.\n%1$s will still make an effort to save data when possible.
diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml
index 9e757a626..dd43124f4 100644
--- a/src/main/res/values/themes.xml
+++ b/src/main/res/values/themes.xml
@@ -11,6 +11,7 @@
- @color/grey200
- @color/grey300
- @color/black12
+ - @color/blue_alpha
- @color/red_a700
- @color/green600
- @color/red800
@@ -28,6 +29,8 @@
- true
- ?colorPrimary
+ - @drawable/ic_close_24dp
+
- 12sp
- 14sp
@@ -70,6 +73,14 @@
@drawable/message_bubble_received
+ -
+ @drawable/message_bubble_received_white_non_first
+
+ - @drawable/message_bubble_sent_non_first
+ -
+ @drawable/message_bubble_received_non_first
+
+
- @color/green700_desaturated
- @color/green700
@@ -159,6 +170,7 @@
- @color/grey900
- @color/grey700
- @color/black26
+ - @color/blue_alpha
- @drawable/search_background_dark
- @drawable/no_results_background_dark
-
@@ -176,6 +188,7 @@
- true
- ?colorPrimary
+ - @drawable/ic_close_24dp
- 12sp
- 14sp
@@ -226,6 +239,14 @@
@drawable/message_bubble_received_dark
+ -
+ @drawable/message_bubble_received_grey_non_first
+
+ - @drawable/message_bubble_send_grey_non_first
+ -
+ @drawable/message_bubble_received_dark_non_first
+
+
- @color/green900_desaturated
- @color/green900
diff --git a/src/quicksy/res/drawable-hdpi/ic_notification.png b/src/quicksy/res/drawable-hdpi/ic_notification.png
index cfb1f18c2..1b8dc2c99 100644
Binary files a/src/quicksy/res/drawable-hdpi/ic_notification.png and b/src/quicksy/res/drawable-hdpi/ic_notification.png differ
diff --git a/src/quicksy/res/drawable-hdpi/main_logo.png b/src/quicksy/res/drawable-hdpi/main_logo.png
index b674ddc6b..61f34b883 100644
Binary files a/src/quicksy/res/drawable-hdpi/main_logo.png and b/src/quicksy/res/drawable-hdpi/main_logo.png differ
diff --git a/src/quicksy/res/drawable-hdpi/splash_logo.png b/src/quicksy/res/drawable-hdpi/splash_logo.png
index 85202119f..30a94500f 100644
Binary files a/src/quicksy/res/drawable-hdpi/splash_logo.png and b/src/quicksy/res/drawable-hdpi/splash_logo.png differ
diff --git a/src/quicksy/res/drawable-mdpi/ic_notification.png b/src/quicksy/res/drawable-mdpi/ic_notification.png
index 0182fb420..61ae1fe9a 100644
Binary files a/src/quicksy/res/drawable-mdpi/ic_notification.png and b/src/quicksy/res/drawable-mdpi/ic_notification.png differ
diff --git a/src/quicksy/res/drawable-mdpi/main_logo.png b/src/quicksy/res/drawable-mdpi/main_logo.png
index 5dfb043ee..50616dece 100644
Binary files a/src/quicksy/res/drawable-mdpi/main_logo.png and b/src/quicksy/res/drawable-mdpi/main_logo.png differ
diff --git a/src/quicksy/res/drawable-mdpi/splash_logo.png b/src/quicksy/res/drawable-mdpi/splash_logo.png
index e11333e26..4585a1a60 100644
Binary files a/src/quicksy/res/drawable-mdpi/splash_logo.png and b/src/quicksy/res/drawable-mdpi/splash_logo.png differ
diff --git a/src/quicksy/res/drawable-xhdpi/ic_notification.png b/src/quicksy/res/drawable-xhdpi/ic_notification.png
index 0bfedb9d8..a8d26e332 100644
Binary files a/src/quicksy/res/drawable-xhdpi/ic_notification.png and b/src/quicksy/res/drawable-xhdpi/ic_notification.png differ
diff --git a/src/quicksy/res/drawable-xhdpi/main_logo.png b/src/quicksy/res/drawable-xhdpi/main_logo.png
index 8ce4edee1..28d5de8e0 100644
Binary files a/src/quicksy/res/drawable-xhdpi/main_logo.png and b/src/quicksy/res/drawable-xhdpi/main_logo.png differ
diff --git a/src/quicksy/res/drawable-xhdpi/splash_logo.png b/src/quicksy/res/drawable-xhdpi/splash_logo.png
index 6de9c0839..6db193e64 100644
Binary files a/src/quicksy/res/drawable-xhdpi/splash_logo.png and b/src/quicksy/res/drawable-xhdpi/splash_logo.png differ
diff --git a/src/quicksy/res/drawable-xxhdpi/ic_notification.png b/src/quicksy/res/drawable-xxhdpi/ic_notification.png
index 03226263e..c04bfc7fb 100644
Binary files a/src/quicksy/res/drawable-xxhdpi/ic_notification.png and b/src/quicksy/res/drawable-xxhdpi/ic_notification.png differ
diff --git a/src/quicksy/res/drawable-xxhdpi/main_logo.png b/src/quicksy/res/drawable-xxhdpi/main_logo.png
index 0fa974aaf..09dc85ae6 100644
Binary files a/src/quicksy/res/drawable-xxhdpi/main_logo.png and b/src/quicksy/res/drawable-xxhdpi/main_logo.png differ
diff --git a/src/quicksy/res/drawable-xxhdpi/splash_logo.png b/src/quicksy/res/drawable-xxhdpi/splash_logo.png
index 272b63c0b..7359137c9 100644
Binary files a/src/quicksy/res/drawable-xxhdpi/splash_logo.png and b/src/quicksy/res/drawable-xxhdpi/splash_logo.png differ
diff --git a/src/quicksy/res/drawable-xxxhdpi/ic_notification.png b/src/quicksy/res/drawable-xxxhdpi/ic_notification.png
index 953372e50..e229c2b37 100644
Binary files a/src/quicksy/res/drawable-xxxhdpi/ic_notification.png and b/src/quicksy/res/drawable-xxxhdpi/ic_notification.png differ
diff --git a/src/quicksy/res/drawable-xxxhdpi/main_logo.png b/src/quicksy/res/drawable-xxxhdpi/main_logo.png
index 48ac2852b..0b998d31d 100644
Binary files a/src/quicksy/res/drawable-xxxhdpi/main_logo.png and b/src/quicksy/res/drawable-xxxhdpi/main_logo.png differ
diff --git a/src/quicksy/res/drawable-xxxhdpi/splash_logo.png b/src/quicksy/res/drawable-xxxhdpi/splash_logo.png
index f1610eb9d..d325dc29d 100644
Binary files a/src/quicksy/res/drawable-xxxhdpi/splash_logo.png and b/src/quicksy/res/drawable-xxxhdpi/splash_logo.png differ