Adds space switching functionality

This commit is contained in:
ericdecanini 2022-05-06 15:50:53 +02:00
parent 4ee5b90f82
commit 89f69a1062
3 changed files with 31 additions and 6 deletions

View File

@ -24,6 +24,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.airbnb.mvrx.activityViewModel
import com.airbnb.mvrx.fragmentViewModel
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.workers.signout.BannerState
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.group.model.GroupSummary
import org.matrix.android.sdk.api.session.room.model.RoomSummary
@ -196,6 +198,17 @@ class HomeDetailFragment @Inject constructor(
currentCallsViewPresenter.updateCall(callManager.getCurrentCall(), callManager.getCalls())
invalidateOptionsMenu()
}
observeSharedActions()
}
private fun observeSharedActions() = lifecycleScope.launch {
sharedActionViewModel.stream().collect { action ->
when(action) {
is HomeActivitySharedAction.OpenGroup -> toggleModalVisibility()
else -> Unit
}
}
}
private fun toggleModalVisibility() {
@ -468,7 +481,8 @@ class HomeDetailFragment @Inject constructor(
it.syncState,
it.incrementalSyncStatus,
it.pushCounter,
vectorPreferences.developerShowDebugInfo())
vectorPreferences.developerShowDebugInfo()
)
hasUnreadRooms = it.hasUnreadMessages
}

View File

@ -28,6 +28,8 @@ class SpaceListAdapter(
private val avatarRenderer: AvatarRenderer,
) : RecyclerView.Adapter<SpaceListAdapter.ViewHolder>() {
private var onItemClickListener: ((RoomSummary) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = ItemModalSpaceBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(itemView)
@ -45,11 +47,16 @@ class SpaceListAdapter(
notifyDataSetChanged()
}
fun setOnSpaceClickListener(onClick: (space: RoomSummary) -> Unit) {
this.onItemClickListener = onClick
}
inner class ViewHolder(private val binding: ItemModalSpaceBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(space: RoomSummary) {
avatarRenderer.render(space.toMatrixItem(), binding.avatar)
binding.name.text = space.name
binding.root.setOnClickListener { onItemClickListener?.invoke(space) }
}
}
}

View File

@ -20,22 +20,20 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState
import dagger.hilt.android.AndroidEntryPoint
import im.vector.app.core.platform.VectorBaseFragment
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.SpaceSummaryController
import javax.inject.Inject
@AndroidEntryPoint
class SpaceListModalFragment : VectorBaseFragment<FragmentSpaceListModalBinding>() {
@Inject
lateinit var spaceModalController: SpaceSummaryController
private lateinit var sharedActionViewModel: HomeSharedActionViewModel
@Inject
lateinit var avatarRenderer: AvatarRenderer
@ -51,12 +49,18 @@ class SpaceListModalFragment : VectorBaseFragment<FragmentSpaceListModalBinding>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
sharedActionViewModel = activityViewModelProvider.get(HomeSharedActionViewModel::class.java)
setupRecyclerView()
}
private fun setupRecyclerView() {
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() {