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 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
} }

View File

@ -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) }
} }
} }
} }

View File

@ -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() {