From 28b97e45cc896201f9265abbda72f63f5775cfec Mon Sep 17 00:00:00 2001 From: Harris Date: Thu, 16 Dec 2021 15:47:26 +1100 Subject: [PATCH] Remove ID copy interactions (#811) * fix: remove selected session ID interactions * fix: include thread ID in home activity's creation of user details bottom sheet * refactor: use bundleOf builder instead of old bundle put value methods --- .../menus/ConversationActionModeCallback.kt | 2 +- .../v2/menus/ConversationMenuHelper.kt | 1 - .../v2/messages/VisibleMessageView.kt | 14 +++++++++---- .../securesms/home/HomeActivity.kt | 7 +++++-- .../securesms/home/UserDetailsBottomSheet.kt | 20 ++++++++++++++++++- 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationActionModeCallback.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationActionModeCallback.kt index d5eb26b47..275691c00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationActionModeCallback.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationActionModeCallback.kt @@ -67,7 +67,7 @@ class ConversationActionModeCallback(private val adapter: ConversationAdapter, p menu.findItem(R.id.menu_context_copy).isVisible = !containsControlMessage && hasText // Copy Session ID menu.findItem(R.id.menu_context_copy_public_key).isVisible = - (thread.isGroupRecipient && selectedItems.size == 1 && firstMessage.recipient.address.toString() != userPublicKey) + (thread.isGroupRecipient && !thread.isOpenGroupRecipient && selectedItems.size == 1 && firstMessage.recipient.address.toString() != userPublicKey) // Message detail menu.findItem(R.id.menu_message_details).isVisible = (selectedItems.size == 1 && firstMessage.isFailed) // Resend diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt index 8a33f985c..adfbf297e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt @@ -77,7 +77,6 @@ object ConversationMenuHelper { } else { inflater.inflate(R.menu.menu_conversation_block, menu) } - inflater.inflate(R.menu.menu_conversation_copy_session_id, menu) } // Closed group menu (options that should only be present in closed groups) if (thread.isClosedGroupRecipient) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt index d9cd334bc..802409cbe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt @@ -16,6 +16,7 @@ import android.widget.RelativeLayout import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat +import androidx.core.os.bundleOf import androidx.core.view.isVisible import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.view_visible_message.view.* @@ -23,6 +24,7 @@ import network.loki.messenger.R import org.session.libsession.messaging.contacts.Contact.ContactContext import org.session.libsession.messaging.open_groups.OpenGroupAPIV2 import org.session.libsession.utilities.ViewUtil +import org.session.libsession.utilities.recipients.Recipient import org.session.libsignal.utilities.ThreadUtils import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.database.* @@ -103,7 +105,9 @@ class VisibleMessageView : LinearLayout { profilePictureView.publicKey = senderSessionID profilePictureView.glide = glide profilePictureView.update(message.individualRecipient, threadID) - profilePictureView.setOnClickListener { showUserDetails(message.recipient.address.toString()) } + profilePictureView.setOnClickListener { + showUserDetails(senderSessionID, threadID) + } if (thread.isOpenGroupRecipient) { val openGroup = lokiThreadDb.getOpenGroupChat(threadID) ?: return val isModerator = OpenGroupAPIV2.isUserModerator(senderSessionID, openGroup.room, openGroup.server) @@ -379,10 +383,12 @@ class VisibleMessageView : LinearLayout { pressCallback = null } - private fun showUserDetails(publicKey: String) { + private fun showUserDetails(publicKey: String, threadID: Long) { val userDetailsBottomSheet = UserDetailsBottomSheet() - val bundle = Bundle() - bundle.putString("publicKey", publicKey) + val bundle = bundleOf( + UserDetailsBottomSheet.ARGUMENT_PUBLIC_KEY to publicKey, + UserDetailsBottomSheet.ARGUMENT_THREAD_ID to threadID + ) userDetailsBottomSheet.arguments = bundle val activity = context as AppCompatActivity userDetailsBottomSheet.show(activity.supportFragmentManager, userDetailsBottomSheet.tag) diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt index e0fad535e..6373aaca1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt @@ -12,6 +12,7 @@ import android.text.SpannableString import android.text.style.ForegroundColorSpan import android.view.View import android.widget.Toast +import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope @@ -250,8 +251,10 @@ class HomeActivity : PassphraseRequiredActionBarActivity(), ConversationClickLis bottomSheet.onViewDetailsTapped = { bottomSheet.dismiss() val userDetailsBottomSheet = UserDetailsBottomSheet() - val bundle = Bundle() - bundle.putString("publicKey", thread.recipient.address.toString()) + val bundle = bundleOf( + UserDetailsBottomSheet.ARGUMENT_PUBLIC_KEY to thread.recipient.address.toString(), + UserDetailsBottomSheet.ARGUMENT_THREAD_ID to thread.threadId + ) userDetailsBottomSheet.arguments = bundle userDetailsBottomSheet.show(supportFragmentManager, userDetailsBottomSheet.tag) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/UserDetailsBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/home/UserDetailsBottomSheet.kt index 43a9b432d..35785492d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/UserDetailsBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/UserDetailsBottomSheet.kt @@ -12,7 +12,10 @@ import android.view.ViewGroup import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager import android.widget.Toast +import androidx.core.view.isVisible import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import dagger.hilt.EntryPoint +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_user_details_bottom_sheet.* import network.loki.messenger.R import org.session.libsession.messaging.MessagingModuleConfiguration @@ -20,20 +23,32 @@ import org.session.libsession.messaging.contacts.Contact import org.session.libsession.utilities.Address import org.session.libsession.utilities.recipients.Recipient import org.thoughtcrime.securesms.conversation.v2.ConversationActivityV2 +import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.util.UiModeUtilities +import javax.inject.Inject +@AndroidEntryPoint class UserDetailsBottomSheet : BottomSheetDialogFragment() { + @Inject lateinit var threadDb: ThreadDatabase + + companion object { + const val ARGUMENT_PUBLIC_KEY = "publicKey" + const val ARGUMENT_THREAD_ID = "threadId" + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_user_details_bottom_sheet, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val publicKey = arguments?.getString("publicKey") ?: return dismiss() + val publicKey = arguments?.getString(ARGUMENT_PUBLIC_KEY) ?: return dismiss() + val threadID = arguments?.getLong(ARGUMENT_THREAD_ID) ?: return dismiss() val recipient = Recipient.from(requireContext(), Address.fromSerialized(publicKey), false) + val threadRecipient = threadDb.getRecipientForThreadId(threadID) ?: return dismiss() profilePictureView.publicKey = publicKey profilePictureView.glide = GlideApp.with(this) profilePictureView.isLarge = true @@ -65,6 +80,9 @@ class UserDetailsBottomSheet : BottomSheetDialogFragment() { } } nameTextView.text = recipient.name ?: publicKey // Uses the Contact API internally + + publicKeyTextView.isVisible = !threadRecipient.isOpenGroupRecipient + messageButton.isVisible = !threadRecipient.isOpenGroupRecipient publicKeyTextView.text = publicKey publicKeyTextView.setOnLongClickListener { val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager