Adds space switching functionality
This commit is contained in:
parent
4ee5b90f82
commit
89f69a1062
@ -24,6 +24,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.airbnb.mvrx.activityViewModel
|
import com.airbnb.mvrx.activityViewModel
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
@ -55,6 +56,7 @@ import im.vector.app.features.settings.VectorSettingsActivity.Companion.EXTRA_DI
|
|||||||
import im.vector.app.features.themes.ThemeUtils
|
import im.vector.app.features.themes.ThemeUtils
|
||||||
import im.vector.app.features.workers.signout.BannerState
|
import im.vector.app.features.workers.signout.BannerState
|
||||||
import im.vector.app.features.workers.signout.ServerBackupStatusViewModel
|
import im.vector.app.features.workers.signout.ServerBackupStatusViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
||||||
import org.matrix.android.sdk.api.session.group.model.GroupSummary
|
import org.matrix.android.sdk.api.session.group.model.GroupSummary
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
@ -196,6 +198,17 @@ class HomeDetailFragment @Inject constructor(
|
|||||||
currentCallsViewPresenter.updateCall(callManager.getCurrentCall(), callManager.getCalls())
|
currentCallsViewPresenter.updateCall(callManager.getCurrentCall(), callManager.getCalls())
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
observeSharedActions()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun observeSharedActions() = lifecycleScope.launch {
|
||||||
|
sharedActionViewModel.stream().collect { action ->
|
||||||
|
when(action) {
|
||||||
|
is HomeActivitySharedAction.OpenGroup -> toggleModalVisibility()
|
||||||
|
else -> Unit
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toggleModalVisibility() {
|
private fun toggleModalVisibility() {
|
||||||
@ -468,7 +481,8 @@ class HomeDetailFragment @Inject constructor(
|
|||||||
it.syncState,
|
it.syncState,
|
||||||
it.incrementalSyncStatus,
|
it.incrementalSyncStatus,
|
||||||
it.pushCounter,
|
it.pushCounter,
|
||||||
vectorPreferences.developerShowDebugInfo())
|
vectorPreferences.developerShowDebugInfo()
|
||||||
|
)
|
||||||
|
|
||||||
hasUnreadRooms = it.hasUnreadMessages
|
hasUnreadRooms = it.hasUnreadMessages
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,8 @@ class SpaceListAdapter(
|
|||||||
private val avatarRenderer: AvatarRenderer,
|
private val avatarRenderer: AvatarRenderer,
|
||||||
) : RecyclerView.Adapter<SpaceListAdapter.ViewHolder>() {
|
) : RecyclerView.Adapter<SpaceListAdapter.ViewHolder>() {
|
||||||
|
|
||||||
|
private var onItemClickListener: ((RoomSummary) -> Unit)? = null
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
val itemView = ItemModalSpaceBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
val itemView = ItemModalSpaceBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
return ViewHolder(itemView)
|
return ViewHolder(itemView)
|
||||||
@ -45,11 +47,16 @@ class SpaceListAdapter(
|
|||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setOnSpaceClickListener(onClick: (space: RoomSummary) -> Unit) {
|
||||||
|
this.onItemClickListener = onClick
|
||||||
|
}
|
||||||
|
|
||||||
inner class ViewHolder(private val binding: ItemModalSpaceBinding) : RecyclerView.ViewHolder(binding.root) {
|
inner class ViewHolder(private val binding: ItemModalSpaceBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
fun bind(space: RoomSummary) {
|
fun bind(space: RoomSummary) {
|
||||||
avatarRenderer.render(space.toMatrixItem(), binding.avatar)
|
avatarRenderer.render(space.toMatrixItem(), binding.avatar)
|
||||||
binding.name.text = space.name
|
binding.name.text = space.name
|
||||||
|
binding.root.setOnClickListener { onItemClickListener?.invoke(space) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,22 +20,20 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.LinearLayout
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import im.vector.app.core.platform.VectorBaseFragment
|
import im.vector.app.core.platform.VectorBaseFragment
|
||||||
import im.vector.app.databinding.FragmentSpaceListModalBinding
|
import im.vector.app.databinding.FragmentSpaceListModalBinding
|
||||||
|
import im.vector.app.features.spaces.SpaceListAction
|
||||||
import im.vector.app.features.spaces.SpaceListViewModel
|
import im.vector.app.features.spaces.SpaceListViewModel
|
||||||
import im.vector.app.features.spaces.SpaceSummaryController
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class SpaceListModalFragment : VectorBaseFragment<FragmentSpaceListModalBinding>() {
|
class SpaceListModalFragment : VectorBaseFragment<FragmentSpaceListModalBinding>() {
|
||||||
|
|
||||||
@Inject
|
private lateinit var sharedActionViewModel: HomeSharedActionViewModel
|
||||||
lateinit var spaceModalController: SpaceSummaryController
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var avatarRenderer: AvatarRenderer
|
lateinit var avatarRenderer: AvatarRenderer
|
||||||
@ -51,12 +49,18 @@ class SpaceListModalFragment : VectorBaseFragment<FragmentSpaceListModalBinding>
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
sharedActionViewModel = activityViewModelProvider.get(HomeSharedActionViewModel::class.java)
|
||||||
setupRecyclerView()
|
setupRecyclerView()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupRecyclerView() {
|
private fun setupRecyclerView() {
|
||||||
binding.roomList.layoutManager = LinearLayoutManager(context)
|
binding.roomList.layoutManager = LinearLayoutManager(context)
|
||||||
binding.roomList.adapter = SpaceListAdapter(mutableListOf(), avatarRenderer)
|
binding.roomList.adapter = SpaceListAdapter(mutableListOf(), avatarRenderer).apply {
|
||||||
|
setOnSpaceClickListener { spaceSummary ->
|
||||||
|
viewModel.handle(SpaceListAction.SelectSpace(spaceSummary))
|
||||||
|
sharedActionViewModel.post(HomeActivitySharedAction.OpenGroup(false))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun invalidate() {
|
override fun invalidate() {
|
||||||
|
Loading…
Reference in New Issue
Block a user