2021-07-09 05:56:38 +02:00
|
|
|
package org.thoughtcrime.securesms.home
|
2020-09-07 02:57:25 +02:00
|
|
|
|
2021-05-13 02:25:11 +02:00
|
|
|
import android.annotation.SuppressLint
|
2020-09-07 07:20:32 +02:00
|
|
|
import android.content.ClipData
|
|
|
|
import android.content.ClipboardManager
|
|
|
|
import android.content.Context
|
2021-08-12 09:50:35 +02:00
|
|
|
import android.content.Intent
|
2020-09-07 02:57:25 +02:00
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
2021-05-13 08:20:55 +02:00
|
|
|
import android.view.inputmethod.EditorInfo
|
2021-05-13 02:25:11 +02:00
|
|
|
import android.view.inputmethod.InputMethodManager
|
2020-09-07 07:20:32 +02:00
|
|
|
import android.widget.Toast
|
2021-07-26 05:44:04 +02:00
|
|
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
2020-09-07 07:20:32 +02:00
|
|
|
import kotlinx.android.synthetic.main.fragment_user_details_bottom_sheet.*
|
2020-09-07 02:57:25 +02:00
|
|
|
import network.loki.messenger.R
|
2021-08-12 09:50:35 +02:00
|
|
|
import org.session.libsession.messaging.MessagingModuleConfiguration
|
2021-05-24 02:27:31 +02:00
|
|
|
import org.session.libsession.messaging.contacts.Contact
|
2021-05-20 04:01:08 +02:00
|
|
|
import org.session.libsession.utilities.Address
|
|
|
|
import org.session.libsession.utilities.recipients.Recipient
|
2021-08-12 09:50:35 +02:00
|
|
|
import org.thoughtcrime.securesms.conversation.v2.ConversationActivityV2
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
2020-09-07 07:20:32 +02:00
|
|
|
import org.thoughtcrime.securesms.mms.GlideApp
|
2021-07-14 06:39:20 +02:00
|
|
|
import org.thoughtcrime.securesms.util.UiModeUtilities
|
2020-09-07 02:57:25 +02:00
|
|
|
|
2021-05-21 07:36:16 +02:00
|
|
|
class UserDetailsBottomSheet : BottomSheetDialogFragment() {
|
2020-09-07 02:57:25 +02:00
|
|
|
|
|
|
|
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)
|
2020-09-07 07:20:32 +02:00
|
|
|
val publicKey = arguments?.getString("publicKey") ?: return dismiss()
|
2021-05-11 09:05:04 +02:00
|
|
|
val recipient = Recipient.from(requireContext(), Address.fromSerialized(publicKey), false)
|
2020-09-07 07:20:32 +02:00
|
|
|
profilePictureView.publicKey = publicKey
|
|
|
|
profilePictureView.glide = GlideApp.with(this)
|
|
|
|
profilePictureView.isLarge = true
|
2021-07-26 05:44:04 +02:00
|
|
|
profilePictureView.update(recipient, -1)
|
2021-05-11 09:05:04 +02:00
|
|
|
nameTextViewContainer.visibility = View.VISIBLE
|
|
|
|
nameTextViewContainer.setOnClickListener {
|
|
|
|
nameTextViewContainer.visibility = View.INVISIBLE
|
2021-05-24 03:08:08 +02:00
|
|
|
nameEditTextContainer.visibility = View.VISIBLE
|
|
|
|
nicknameEditText.text = null
|
|
|
|
nicknameEditText.requestFocus()
|
2021-05-13 02:25:11 +02:00
|
|
|
showSoftKeyboard()
|
2021-05-11 09:05:04 +02:00
|
|
|
}
|
2021-05-24 03:08:08 +02:00
|
|
|
cancelNicknameEditingButton.setOnClickListener {
|
|
|
|
nicknameEditText.clearFocus()
|
2021-05-13 02:25:11 +02:00
|
|
|
hideSoftKeyboard()
|
2021-05-11 09:05:04 +02:00
|
|
|
nameTextViewContainer.visibility = View.VISIBLE
|
2021-05-24 03:08:08 +02:00
|
|
|
nameEditTextContainer.visibility = View.INVISIBLE
|
2021-05-11 09:05:04 +02:00
|
|
|
}
|
2021-05-24 03:08:08 +02:00
|
|
|
saveNicknameButton.setOnClickListener {
|
2021-05-13 08:20:55 +02:00
|
|
|
saveNickName(recipient)
|
|
|
|
}
|
2021-05-24 03:08:08 +02:00
|
|
|
nicknameEditText.setOnEditorActionListener { _, actionId, _ ->
|
2021-05-13 08:20:55 +02:00
|
|
|
when (actionId) {
|
|
|
|
EditorInfo.IME_ACTION_DONE -> {
|
|
|
|
saveNickName(recipient)
|
|
|
|
return@setOnEditorActionListener true
|
|
|
|
}
|
|
|
|
else -> return@setOnEditorActionListener false
|
2021-05-12 07:11:09 +02:00
|
|
|
}
|
2021-05-11 09:05:04 +02:00
|
|
|
}
|
2021-05-24 02:27:31 +02:00
|
|
|
nameTextView.text = recipient.name ?: publicKey // Uses the Contact API internally
|
2020-09-07 07:20:32 +02:00
|
|
|
publicKeyTextView.text = publicKey
|
2021-08-12 09:50:35 +02:00
|
|
|
publicKeyTextView.setOnLongClickListener {
|
2020-09-07 07:20:32 +02:00
|
|
|
val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
|
|
|
val clip = ClipData.newPlainText("Session ID", publicKey)
|
|
|
|
clipboard.setPrimaryClip(clip)
|
|
|
|
Toast.makeText(requireContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
|
2021-08-12 09:50:35 +02:00
|
|
|
true
|
|
|
|
}
|
|
|
|
messageButton.setOnClickListener {
|
|
|
|
val threadId = MessagingModuleConfiguration.shared.storage.getThreadId(recipient)
|
|
|
|
val intent = Intent(
|
|
|
|
context,
|
|
|
|
ConversationActivityV2::class.java
|
|
|
|
)
|
|
|
|
intent.putExtra(ConversationActivityV2.ADDRESS, recipient.address)
|
|
|
|
intent.putExtra(ConversationActivityV2.THREAD_ID, threadId ?: -1)
|
|
|
|
startActivity(intent)
|
|
|
|
dismiss()
|
2020-09-07 07:20:32 +02:00
|
|
|
}
|
2020-09-07 02:57:25 +02:00
|
|
|
}
|
2021-05-13 02:25:11 +02:00
|
|
|
|
2021-07-14 06:39:20 +02:00
|
|
|
override fun onStart() {
|
|
|
|
super.onStart()
|
|
|
|
val window = dialog?.window ?: return
|
|
|
|
val isLightMode = UiModeUtilities.isDayUiMode(requireContext())
|
|
|
|
window.setDimAmount(if (isLightMode) 0.1f else 0.75f)
|
|
|
|
}
|
|
|
|
|
2021-05-13 08:20:55 +02:00
|
|
|
fun saveNickName(recipient: Recipient) {
|
2021-05-24 03:08:08 +02:00
|
|
|
nicknameEditText.clearFocus()
|
2021-05-13 08:20:55 +02:00
|
|
|
hideSoftKeyboard()
|
|
|
|
nameTextViewContainer.visibility = View.VISIBLE
|
2021-05-24 03:08:08 +02:00
|
|
|
nameEditTextContainer.visibility = View.INVISIBLE
|
2021-05-13 08:20:55 +02:00
|
|
|
var newNickName: String? = null
|
2021-05-24 03:08:08 +02:00
|
|
|
if (nicknameEditText.text.isNotEmpty()) {
|
|
|
|
newNickName = nicknameEditText.text.toString()
|
2021-05-13 08:20:55 +02:00
|
|
|
}
|
2021-05-24 02:27:31 +02:00
|
|
|
val publicKey = recipient.address.serialize()
|
2021-10-04 09:51:19 +02:00
|
|
|
val contactDB = DatabaseComponent.get(requireContext()).sessionContactDatabase()
|
2021-05-24 02:27:31 +02:00
|
|
|
val contact = contactDB.getContactWithSessionID(publicKey) ?: Contact(publicKey)
|
|
|
|
contact.nickname = newNickName
|
|
|
|
contactDB.setContact(contact)
|
|
|
|
nameTextView.text = recipient.name ?: publicKey // Uses the Contact API internally
|
2021-05-13 08:20:55 +02:00
|
|
|
}
|
|
|
|
|
2021-05-13 02:25:11 +02:00
|
|
|
@SuppressLint("ServiceCast")
|
|
|
|
fun showSoftKeyboard() {
|
|
|
|
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
|
2021-05-24 03:08:08 +02:00
|
|
|
imm?.showSoftInput(nicknameEditText, 0)
|
2021-05-13 02:25:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun hideSoftKeyboard() {
|
|
|
|
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
|
2021-05-24 03:08:08 +02:00
|
|
|
imm?.hideSoftInputFromWindow(nicknameEditText.windowToken, 0)
|
2021-05-13 02:25:11 +02:00
|
|
|
}
|
2020-09-07 02:57:25 +02:00
|
|
|
}
|