diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt index baa3597b32..e6aae879a5 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt @@ -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 } diff --git a/vector/src/main/java/im/vector/app/features/home/SpaceListAdapter.kt b/vector/src/main/java/im/vector/app/features/home/SpaceListAdapter.kt index 97e4918816..ec8684500d 100644 --- a/vector/src/main/java/im/vector/app/features/home/SpaceListAdapter.kt +++ b/vector/src/main/java/im/vector/app/features/home/SpaceListAdapter.kt @@ -28,6 +28,8 @@ class SpaceListAdapter( private val avatarRenderer: AvatarRenderer, ) : RecyclerView.Adapter() { + 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) } } } } diff --git a/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt b/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt index 69a82497f5..e7673075b2 100644 --- a/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt @@ -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() { - @Inject - lateinit var spaceModalController: SpaceSummaryController + private lateinit var sharedActionViewModel: HomeSharedActionViewModel @Inject lateinit var avatarRenderer: AvatarRenderer @@ -51,12 +49,18 @@ class SpaceListModalFragment : VectorBaseFragment 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() {