diff --git a/src/cheogram/res/values/strings.xml b/src/cheogram/res/values/strings.xml
index ed2152ab9b54fdf514f1432163029b5e24ec2f41..d4bc883598daf9b0b2d61f4d067b5ab49140155c 100644
--- a/src/cheogram/res/values/strings.xml
+++ b/src/cheogram/res/values/strings.xml
@@ -25,6 +25,7 @@
Go
OLED Black
Invite to Chat
+ Show only this thread
Use Phone Accounts for Incoming Calls
Incoming calls from phone numbers may ring with your system dialler instead of this app\'s notification settings
diff --git a/src/cheogram/res/values/themes.xml b/src/cheogram/res/values/themes.xml
index c7d21f641b9163938934e6958c73c2f4317a9810..55494cea1a2b4a4b56220eeabb5fe28ea84b7f18 100644
--- a/src/cheogram/res/values/themes.xml
+++ b/src/cheogram/res/values/themes.xml
@@ -121,6 +121,7 @@
- @drawable/ic_help_white_24dp
- @drawable/ic_question_answer_white_24dp
- @drawable/ic_lock_open_white_24dp
+ - @drawable/ic_lock_black_18dp
- @drawable/ic_settings_black_24dp
- @drawable/ic_share_white_24dp
- @drawable/ic_cloud_download_white_24dp
@@ -275,6 +276,7 @@
- @drawable/ic_help_white_24dp
- @drawable/ic_question_answer_white_24dp
- @drawable/ic_lock_open_white_24dp
+ - @drawable/ic_lock_white_18dp
- @drawable/ic_settings_white_24dp
- @drawable/ic_share_white_24dp
- @drawable/ic_cloud_download_white_24dp
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index 0a25dd7b869020fcb2ed9babbffea391e04ff04f..e7e098815eaf1c1541c634fb11f945770588f2e4 100644
--- a/src/main/java/eu/siacs/conversations/entities/Conversation.java
+++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java
@@ -149,6 +149,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
protected int mCurrentTab = -1;
protected ConversationPagerAdapter pagerAdapter = new ConversationPagerAdapter();
protected Element thread = null;
+ protected boolean lockThread = false;
protected boolean userSelectedThread = false;
public Conversation(final String name, final Account account, final Jid contactJid,
@@ -531,7 +532,8 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
messages.addAll(this.messages);
}
for (Iterator iterator = messages.iterator(); iterator.hasNext(); ) {
- if (iterator.next().wasMergedIntoPrevious()) {
+ Message m = iterator.next();
+ if (m.wasMergedIntoPrevious() || (getLockThread() && (m.getThread() == null || !m.getThread().getContent().equals(getThread().getContent())))) {
iterator.remove();
}
}
@@ -638,6 +640,15 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
this.thread = thread;
}
+ public void setLockThread(boolean flag) {
+ this.lockThread = flag;
+ if (flag) setUserSelectedThread(true);
+ }
+
+ public boolean getLockThread() {
+ return this.lockThread;
+ }
+
public void setUserSelectedThread(boolean flag) {
this.userSelectedThread = flag;
}
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 59253fa1fc330a0a217fc7bf18a52348c2c4930e..358e7a558947856183789a3fe5e1759553c8cc3d 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -1257,14 +1257,20 @@ public class ConversationFragment extends XmppFragment
conversation.setUserSelectedThread(true);
});
- binding.threadIdenticon.setOnClickListener(v -> {
+ binding.threadIdenticonLayout.setOnClickListener(v -> {
+ boolean wasLocked = conversation.getLockThread();
+ conversation.setLockThread(false);
newThread();
conversation.setUserSelectedThread(true);
+ if (wasLocked) refresh();
});
- binding.threadIdenticon.setOnLongClickListener(v -> {
+ binding.threadIdenticonLayout.setOnLongClickListener(v -> {
+ boolean wasLocked = conversation.getLockThread();
+ conversation.setLockThread(false);
setThread(null);
conversation.setUserSelectedThread(true);
+ if (wasLocked) refresh();
return true;
});
@@ -1303,6 +1309,7 @@ public class ConversationFragment extends XmppFragment
private void setThread(Element thread) {
this.conversation.setThread(thread);
binding.threadIdenticon.setAlpha(0f);
+ binding.threadIdenticonLock.setVisibility(this.conversation.getLockThread() ? View.VISIBLE : View.GONE);
if (thread != null) {
final String threadId = thread.getContent();
if (threadId != null) {
@@ -1362,6 +1369,7 @@ public class ConversationFragment extends XmppFragment
MenuItem retryDecryption = menu.findItem(R.id.retry_decryption);
MenuItem correctMessage = menu.findItem(R.id.correct_message);
MenuItem retractMessage = menu.findItem(R.id.retract_message);
+ MenuItem onlyThisThread = menu.findItem(R.id.only_this_thread);
MenuItem shareWith = menu.findItem(R.id.share_with);
MenuItem sendAgain = menu.findItem(R.id.send_again);
MenuItem copyUrl = menu.findItem(R.id.copy_url);
@@ -1369,6 +1377,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);
+ onlyThisThread.setVisible(!conversation.getLockThread() && m.getThread() != null);
final boolean unInitiatedButKnownSize = MessageUtils.unInitiatedButKnownSize(m);
final boolean showError =
m.getStatus() == Message.STATUS_SEND_FAILED
@@ -1505,6 +1514,12 @@ public class ConversationFragment extends XmppFragment
case R.id.open_with:
openWith(selectedMessage);
return true;
+ case R.id.only_this_thread:
+ conversation.setLockThread(true);
+ setThread(selectedMessage.getThread());
+ refresh();
+ setThread(selectedMessage.getThread());
+ return true;
default:
return super.onContextItemSelected(item);
}
diff --git a/src/main/res/layout/fragment_conversation.xml b/src/main/res/layout/fragment_conversation.xml
index 861e3a1e429b97d2beaf1a8a283c169967af7c50..477ecf3f012a51b675de67ac4593e09424bc243b 100644
--- a/src/main/res/layout/fragment_conversation.xml
+++ b/src/main/res/layout/fragment_conversation.xml
@@ -62,8 +62,8 @@
android:layout_height="wrap_content"
android:layout_toStartOf="@+id/textSendButton"
android:layout_toLeftOf="@+id/textSendButton"
- android:layout_toEndOf="@+id/thread_identicon"
- android:layout_toRightOf="@+id/thread_identicon"
+ android:layout_toEndOf="@+id/thread_identicon_layout"
+ android:layout_toRightOf="@+id/thread_identicon_layout"
android:orientation="vertical">
-
+ android:layout_marginLeft="8dp">
+
+
+
+
+
+
+
+