diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index aaf5c9b8a..8967bfc43 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -52,6 +52,7 @@ import eu.siacs.conversations.ui.util.MenuDoubleTabUtil; import eu.siacs.conversations.ui.util.MucConfiguration; import eu.siacs.conversations.ui.util.MucDetailsContextMenuHelper; import eu.siacs.conversations.ui.util.MyLinkify; +import eu.siacs.conversations.ui.util.ShareUtil; import eu.siacs.conversations.ui.util.SoftKeyboardUtils; import eu.siacs.conversations.utils.AccountUtils; import eu.siacs.conversations.utils.Compatibility; @@ -110,6 +111,13 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers } intent.putExtra("uuid", uuid); + + Jid counterpart = conversation.getNextCounterpart(); + + if (counterpart != null) { + intent.putExtra("counterpart", counterpart.toEscapedString()); + } + activity.startActivity(intent); } @@ -510,6 +518,27 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers if (mConversation == null) { return; } + + String counterpart = getIntent().getStringExtra("counterpart"); + if (counterpart != null) { + binding.mucPmInfo.setVisibility(View.VISIBLE); + + Jid counterpartJid = Jid.of(counterpart); + + binding.mucPmCounterpartName.setText(getResources().getString(R.string.muc_private_conversation_title, counterpartJid.getResource(), mConversation.getName())); + binding.mucPmCounterpartJid.setText(counterpart); + binding.mucPmCounterpartJid.setOnClickListener(v -> ShareUtil.copyJidToClipboard(ConferenceDetailsActivity.this, counterpartJid)); + + Conversation conversation = xmppConnectionService.find(mConversation.getAccount(), mConversation.getJid(), counterpartJid); + + if (conversation != null) { + binding.mucPmCounterpartAvatar.setVisibility(View.VISIBLE); + AvatarWorkerTask.loadAvatar(conversation, binding.mucPmCounterpartAvatar, R.dimen.avatar_on_details_screen_size); + } else { + binding.mucPmCounterpartAvatar.setVisibility(View.GONE); + } + } + final MucOptions mucOptions = mConversation.getMucOptions(); final User self = mucOptions.getSelf(); String account; @@ -524,8 +553,6 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers this.binding.detailsAccount.setText(getString(R.string.using_account, account)); if (mConversation.isPrivateAndNonAnonymous()) { this.binding.jid.setText(getString(R.string.hosted_on, mConversation.getJid().getDomain())); - } else { - this.binding.jid.setText(mConversation.getJid().asBareJid().toEscapedString()); } AvatarWorkerTask.loadAvatar(mConversation, binding.yourPhoto, R.dimen.avatar_on_details_screen_size); String roomName = mucOptions.getName(); @@ -543,6 +570,11 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers hasTitle = false; this.binding.mucTitle.setVisibility(View.GONE); } + + this.binding.mucJid.setText(mConversation.getJid().asBareJid().toEscapedString()); + binding.mucJid.setOnClickListener(v -> ShareUtil.copyJidToClipboard(ConferenceDetailsActivity.this, mConversation.getJid().asBareJid())); + + if (printableValue(subject)) { SpannableStringBuilder spannable = new SpannableStringBuilder(subject); StylingHelper.format(spannable, this.binding.mucSubject.getCurrentTextColor()); 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 2d0eed59b..05198bf6e 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/ShareUtil.java +++ b/src/main/java/eu/siacs/conversations/ui/util/ShareUtil.java @@ -256,4 +256,10 @@ public class ShareUtil { } return null; } + + public static void copyJidToClipboard(final XmppActivity activity, Jid jid) { + if (copyTextToClipboard(activity, jid.toEscapedString(), R.string.account_settings_jabber_id)) { + Toast.makeText(activity, R.string.jabber_id_copied_to_clipboard, Toast.LENGTH_SHORT).show(); + } + } } diff --git a/src/main/res/drawable/content_copy_12dp.xml b/src/main/res/drawable/content_copy_12dp.xml new file mode 100644 index 000000000..22e6ff2df --- /dev/null +++ b/src/main/res/drawable/content_copy_12dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/src/main/res/drawable/content_copy_12dp_white.xml b/src/main/res/drawable/content_copy_12dp_white.xml new file mode 100644 index 000000000..a19a2be04 --- /dev/null +++ b/src/main/res/drawable/content_copy_12dp_white.xml @@ -0,0 +1,11 @@ + + + diff --git a/src/main/res/layout/activity_muc_details.xml b/src/main/res/layout/activity_muc_details.xml index 774df9b93..7f2e0bfd2 100644 --- a/src/main/res/layout/activity_muc_details.xml +++ b/src/main/res/layout/activity_muc_details.xml @@ -23,6 +23,61 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 7ef16baa7..bbb19220c 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1065,6 +1065,7 @@ filter could_not_create_file %1$s (%2$s) + Private conversation with: %1$d selected General %1$s (%2$d) diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index 9d9291aa7..1bdcf3fd9 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -142,6 +142,7 @@ @drawable/ic_gps_fixed_black_24dp @drawable/ic_directions_black_24dp @drawable/ic_content_copy_white_24dp + @drawable/content_copy_12dp @drawable/ic_notifications_black_24dp @@ -309,6 +310,7 @@ @drawable/ic_gps_fixed_white_24dp @drawable/ic_directions_white_24dp @drawable/ic_content_copy_white_24dp + @drawable/content_copy_12dp_white @drawable/ic_notifications_white_24dp