mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
fbd1721eaf
* feat: Menu redesign * Add bottomsheet * Handle default peek height * Smooth out setting peek height * Move contacts prep to util * Dialog layout tweaks * Contact grouping tweaks * Add new message dialog * Add public key input delegate * Add create group dialog * Add join community dialog * Handle dialog back navigation * Enter community url tab tweaks * Scan QR code tab refactor * Scan qr code refactor * Direct and community tabs refactor * Add session id copy context menu item * Set dialog background colours * Set full dialog background colour * Minor tweaks * Add closed group contact search * Cleanup * Add content descriptions * Resize community chips * Fix new conversation screen paddings * Fix fade in/out of join community screen * Prevent creating conversation with empty public key * Resize and position create group loader * Fix back nav after creating direct message conversation * Fix inter-screen transitions * Fix new conversation background colours * Fix background colours * Rename contact list header for clarity * Bug fixes * Enable scrolling of Enter Session ID tab of the new message dialog * Minor refactor * Switch to child fragment manager * Fix member search on create group screen Co-authored-by: charles <charles@oxen.io>
96 lines
4.3 KiB
Kotlin
96 lines
4.3 KiB
Kotlin
package org.thoughtcrime.securesms.groups
|
|
|
|
import android.graphics.BitmapFactory
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.view.inputmethod.InputMethodManager
|
|
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory
|
|
import androidx.core.view.isVisible
|
|
import androidx.core.widget.addTextChangedListener
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.activityViewModels
|
|
import com.google.android.material.chip.Chip
|
|
import network.loki.messenger.R
|
|
import network.loki.messenger.databinding.FragmentEnterCommunityUrlBinding
|
|
import org.session.libsession.messaging.open_groups.OpenGroupApi
|
|
import org.thoughtcrime.securesms.BaseActionBarActivity
|
|
import org.thoughtcrime.securesms.util.State
|
|
import org.thoughtcrime.securesms.util.hideKeyboard
|
|
import java.util.Locale
|
|
|
|
class EnterCommunityUrlFragment : Fragment() {
|
|
private lateinit var binding: FragmentEnterCommunityUrlBinding
|
|
private val viewModel by activityViewModels<DefaultGroupsViewModel>()
|
|
|
|
var delegate: EnterCommunityUrlDelegate? = null
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
|
binding = FragmentEnterCommunityUrlBinding.inflate(inflater, container, false)
|
|
return binding.root
|
|
}
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
binding.communityUrlEditText.imeOptions = binding.communityUrlEditText.imeOptions or 16777216 // Always use incognito keyboard
|
|
binding.communityUrlEditText.addTextChangedListener { text -> binding.joinCommunityButton.isEnabled = !text.isNullOrBlank() }
|
|
binding.communityUrlEditText.setOnFocusChangeListener { _, hasFocus -> binding.defaultRoomsContainer.isVisible = !hasFocus }
|
|
binding.mainContainer.setOnTouchListener { _, _ ->
|
|
binding.defaultRoomsContainer.isVisible = true
|
|
binding.communityUrlEditText.clearFocus()
|
|
binding.communityUrlEditText.hideKeyboard()
|
|
true
|
|
}
|
|
binding.joinCommunityButton.setOnClickListener { joinCommunityIfPossible() }
|
|
viewModel.defaultRooms.observe(viewLifecycleOwner) { state ->
|
|
binding.defaultRoomsContainer.isVisible = state is State.Success
|
|
binding.defaultRoomsLoaderContainer.isVisible = state is State.Loading
|
|
binding.defaultRoomsLoader.isVisible = state is State.Loading
|
|
when (state) {
|
|
State.Loading -> {
|
|
// TODO: Show a binding.loader
|
|
}
|
|
is State.Error -> {
|
|
// TODO: Hide the binding.loader
|
|
}
|
|
is State.Success -> {
|
|
populateDefaultGroups(state.value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun populateDefaultGroups(groups: List<OpenGroupApi.DefaultGroup>) {
|
|
binding.defaultRoomsFlexboxLayout.removeAllViews()
|
|
groups.iterator().forEach { defaultGroup ->
|
|
val chip = layoutInflater.inflate(R.layout.default_group_chip, binding.defaultRoomsFlexboxLayout, false) as Chip
|
|
val drawable = defaultGroup.image?.let { bytes ->
|
|
val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
|
|
RoundedBitmapDrawableFactory.create(resources, bitmap).apply {
|
|
isCircular = true
|
|
}
|
|
}
|
|
chip.chipIcon = drawable
|
|
chip.text = defaultGroup.name
|
|
chip.setOnClickListener {
|
|
delegate?.handleCommunityUrlEntered(defaultGroup.joinURL)
|
|
}
|
|
binding.defaultRoomsFlexboxLayout.addView(chip)
|
|
}
|
|
}
|
|
|
|
// region Convenience
|
|
private fun joinCommunityIfPossible() {
|
|
val inputMethodManager = requireContext().getSystemService(BaseActionBarActivity.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
inputMethodManager.hideSoftInputFromWindow(binding.communityUrlEditText.windowToken, 0)
|
|
val communityUrl = binding.communityUrlEditText.text.trim().toString().lowercase(Locale.US)
|
|
delegate?.handleCommunityUrlEntered(communityUrl)
|
|
}
|
|
// endregion
|
|
}
|
|
|
|
fun interface EnterCommunityUrlDelegate {
|
|
fun handleCommunityUrlEntered(url: String)
|
|
}
|