Code review
This commit is contained in:
parent
19223826fe
commit
5e2c3239ea
@ -130,23 +130,24 @@ internal class DefaultSpaceService @Inject constructor(
|
|||||||
?.flatMap { childSummary ->
|
?.flatMap { childSummary ->
|
||||||
response.events
|
response.events
|
||||||
?.filter { it.stateKey == childSummary.roomId && it.type == EventType.STATE_SPACE_CHILD }
|
?.filter { it.stateKey == childSummary.roomId && it.type == EventType.STATE_SPACE_CHILD }
|
||||||
?.map { childStateEv ->
|
?.mapNotNull { childStateEv ->
|
||||||
// create a child entry for everytime this room is the child of a space
|
// create a child entry for everytime this room is the child of a space
|
||||||
// beware that a room could appear then twice in this list
|
// beware that a room could appear then twice in this list
|
||||||
val childStateEvContent = childStateEv.content.toModel<SpaceChildContent>()
|
childStateEv.content.toModel<SpaceChildContent>()?.let { childStateEvContent ->
|
||||||
SpaceChildInfo(
|
SpaceChildInfo(
|
||||||
childRoomId = childSummary.roomId,
|
childRoomId = childSummary.roomId,
|
||||||
isKnown = true,
|
isKnown = true,
|
||||||
roomType = childSummary.roomType,
|
roomType = childSummary.roomType,
|
||||||
name = childSummary.name,
|
name = childSummary.name,
|
||||||
topic = childSummary.topic,
|
topic = childSummary.topic,
|
||||||
avatarUrl = childSummary.avatarUrl,
|
avatarUrl = childSummary.avatarUrl,
|
||||||
order = childStateEvContent?.order,
|
order = childStateEvContent?.order,
|
||||||
autoJoin = childStateEvContent?.autoJoin ?: false,
|
autoJoin = childStateEvContent?.autoJoin ?: false,
|
||||||
viaServers = childStateEvContent?.via ?: emptyList(),
|
viaServers = childStateEvContent?.via ?: emptyList(),
|
||||||
activeMemberCount = childSummary.numJoinedMembers,
|
activeMemberCount = childSummary.numJoinedMembers,
|
||||||
parentRoomId = childStateEv.roomId
|
parentRoomId = childStateEv.roomId
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}.orEmpty()
|
}.orEmpty()
|
||||||
}
|
}
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
|
@ -36,6 +36,7 @@ import im.vector.app.databinding.BottomSheetMatrixToCardBinding
|
|||||||
import im.vector.app.features.home.AvatarRenderer
|
import im.vector.app.features.home.AvatarRenderer
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.matrix.android.sdk.api.session.permalinks.PermalinkData
|
import org.matrix.android.sdk.api.session.permalinks.PermalinkData
|
||||||
|
import java.lang.ref.WeakReference
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
@ -56,7 +57,13 @@ class MatrixToBottomSheet :
|
|||||||
injector.inject(this)
|
injector.inject(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
var interactionListener: InteractionListener? = null
|
var weakReference = WeakReference<InteractionListener>(null)
|
||||||
|
|
||||||
|
var interactionListener: InteractionListener?
|
||||||
|
set(value) {
|
||||||
|
weakReference = WeakReference(value)
|
||||||
|
}
|
||||||
|
get() = weakReference.get()
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): BottomSheetMatrixToCardBinding {
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): BottomSheetMatrixToCardBinding {
|
||||||
return BottomSheetMatrixToCardBinding.inflate(inflater, container, false)
|
return BottomSheetMatrixToCardBinding.inflate(inflater, container, false)
|
||||||
|
@ -171,16 +171,20 @@ class MatrixToRoomSpaceFragment @Inject constructor(
|
|||||||
when (state.peopleYouKnow) {
|
when (state.peopleYouKnow) {
|
||||||
is Success -> {
|
is Success -> {
|
||||||
val someYouKnow = state.peopleYouKnow.invoke()
|
val someYouKnow = state.peopleYouKnow.invoke()
|
||||||
someYouKnow.forEachIndexed { index, item ->
|
if (someYouKnow.isEmpty()) {
|
||||||
images[index].isVisible = true
|
views.peopleYouMayKnowText.isVisible = false
|
||||||
avatarRenderer.render(item, images[index])
|
} else {
|
||||||
|
someYouKnow.forEachIndexed { index, item ->
|
||||||
|
images[index].isVisible = true
|
||||||
|
avatarRenderer.render(item, images[index])
|
||||||
|
}
|
||||||
|
views.peopleYouMayKnowText.setTextOrHide(
|
||||||
|
resources.getQuantityString(R.plurals.space_people_you_know,
|
||||||
|
someYouKnow.count(),
|
||||||
|
someYouKnow.count()
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
views.peopleYouMayKnowText.setTextOrHide(
|
|
||||||
resources.getQuantityString(R.plurals.space_people_you_know,
|
|
||||||
someYouKnow.count(),
|
|
||||||
someYouKnow.count()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
views.peopleYouMayKnowText.isVisible = false
|
views.peopleYouMayKnowText.isVisible = false
|
||||||
|
@ -19,6 +19,7 @@ package im.vector.app.features.spaces
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
import com.airbnb.mvrx.MvRx
|
import com.airbnb.mvrx.MvRx
|
||||||
import com.airbnb.mvrx.viewModel
|
import com.airbnb.mvrx.viewModel
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
@ -26,6 +27,7 @@ import im.vector.app.core.di.ScreenComponent
|
|||||||
import im.vector.app.core.extensions.commitTransaction
|
import im.vector.app.core.extensions.commitTransaction
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.databinding.ActivitySimpleBinding
|
import im.vector.app.databinding.ActivitySimpleBinding
|
||||||
|
import im.vector.app.features.matrixto.MatrixToBottomSheet
|
||||||
import im.vector.app.features.spaces.explore.SpaceDirectoryArgs
|
import im.vector.app.features.spaces.explore.SpaceDirectoryArgs
|
||||||
import im.vector.app.features.spaces.explore.SpaceDirectoryFragment
|
import im.vector.app.features.spaces.explore.SpaceDirectoryFragment
|
||||||
import im.vector.app.features.spaces.explore.SpaceDirectoryState
|
import im.vector.app.features.spaces.explore.SpaceDirectoryState
|
||||||
@ -33,7 +35,7 @@ import im.vector.app.features.spaces.explore.SpaceDirectoryViewEvents
|
|||||||
import im.vector.app.features.spaces.explore.SpaceDirectoryViewModel
|
import im.vector.app.features.spaces.explore.SpaceDirectoryViewModel
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class SpaceExploreActivity : VectorBaseActivity<ActivitySimpleBinding>(), SpaceDirectoryViewModel.Factory {
|
class SpaceExploreActivity : VectorBaseActivity<ActivitySimpleBinding>(), SpaceDirectoryViewModel.Factory, MatrixToBottomSheet.InteractionListener {
|
||||||
|
|
||||||
@Inject lateinit var spaceDirectoryViewModelFactory: SpaceDirectoryViewModel.Factory
|
@Inject lateinit var spaceDirectoryViewModelFactory: SpaceDirectoryViewModel.Factory
|
||||||
|
|
||||||
@ -72,10 +74,20 @@ class SpaceExploreActivity : VectorBaseActivity<ActivitySimpleBinding>(), SpaceD
|
|||||||
is SpaceDirectoryViewEvents.NavigateToRoom -> {
|
is SpaceDirectoryViewEvents.NavigateToRoom -> {
|
||||||
navigator.openRoom(this, it.roomId)
|
navigator.openRoom(this, it.roomId)
|
||||||
}
|
}
|
||||||
|
is SpaceDirectoryViewEvents.NavigateToMxToBottomSheet -> {
|
||||||
|
MatrixToBottomSheet.withLink(it.link, this).show(supportFragmentManager, "ShowChild")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onAttachFragment(fragment: Fragment) {
|
||||||
|
if (fragment is MatrixToBottomSheet) {
|
||||||
|
fragment.interactionListener = this
|
||||||
|
}
|
||||||
|
super.onAttachFragment(fragment)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun newIntent(context: Context, spaceId: String): Intent {
|
fun newIntent(context: Context, spaceId: String): Intent {
|
||||||
return Intent(context, SpaceExploreActivity::class.java).apply {
|
return Intent(context, SpaceExploreActivity::class.java).apply {
|
||||||
@ -86,4 +98,8 @@ class SpaceExploreActivity : VectorBaseActivity<ActivitySimpleBinding>(), SpaceD
|
|||||||
|
|
||||||
override fun create(initialState: SpaceDirectoryState): SpaceDirectoryViewModel =
|
override fun create(initialState: SpaceDirectoryState): SpaceDirectoryViewModel =
|
||||||
spaceDirectoryViewModelFactory.create(initialState)
|
spaceDirectoryViewModelFactory.create(initialState)
|
||||||
|
|
||||||
|
override fun navigateToRoom(roomId: String) {
|
||||||
|
navigator.openRoom(this, roomId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import android.os.Parcelable
|
|||||||
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 androidx.fragment.app.FragmentOnAttachListener
|
|
||||||
import com.airbnb.mvrx.activityViewModel
|
import com.airbnb.mvrx.activityViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
@ -30,7 +29,6 @@ import im.vector.app.core.extensions.configureWith
|
|||||||
import im.vector.app.core.platform.OnBackPressed
|
import im.vector.app.core.platform.OnBackPressed
|
||||||
import im.vector.app.core.platform.VectorBaseFragment
|
import im.vector.app.core.platform.VectorBaseFragment
|
||||||
import im.vector.app.databinding.FragmentRoomDirectoryPickerBinding
|
import im.vector.app.databinding.FragmentRoomDirectoryPickerBinding
|
||||||
import im.vector.app.features.matrixto.MatrixToBottomSheet
|
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -44,19 +42,13 @@ class SpaceDirectoryFragment @Inject constructor(
|
|||||||
private val epoxyController: SpaceDirectoryController
|
private val epoxyController: SpaceDirectoryController
|
||||||
) : VectorBaseFragment<FragmentRoomDirectoryPickerBinding>(),
|
) : VectorBaseFragment<FragmentRoomDirectoryPickerBinding>(),
|
||||||
SpaceDirectoryController.InteractionListener,
|
SpaceDirectoryController.InteractionListener,
|
||||||
OnBackPressed, MatrixToBottomSheet.InteractionListener {
|
OnBackPressed {
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?) =
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?) =
|
||||||
FragmentRoomDirectoryPickerBinding.inflate(layoutInflater, container, false)
|
FragmentRoomDirectoryPickerBinding.inflate(layoutInflater, container, false)
|
||||||
|
|
||||||
private val viewModel by activityViewModel(SpaceDirectoryViewModel::class)
|
private val viewModel by activityViewModel(SpaceDirectoryViewModel::class)
|
||||||
|
|
||||||
private var fragmentOnAttachListener = FragmentOnAttachListener { _, fragment ->
|
|
||||||
if (fragment is MatrixToBottomSheet) {
|
|
||||||
fragment.interactionListener = this
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
@ -68,12 +60,9 @@ class SpaceDirectoryFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
epoxyController.listener = this
|
epoxyController.listener = this
|
||||||
views.roomDirectoryPickerList.configureWith(epoxyController)
|
views.roomDirectoryPickerList.configureWith(epoxyController)
|
||||||
|
|
||||||
childFragmentManager.addFragmentOnAttachListener(fragmentOnAttachListener)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
childFragmentManager.removeFragmentOnAttachListener(fragmentOnAttachListener)
|
|
||||||
epoxyController.listener = null
|
epoxyController.listener = null
|
||||||
views.roomDirectoryPickerList.cleanup()
|
views.roomDirectoryPickerList.cleanup()
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
@ -97,11 +86,7 @@ class SpaceDirectoryFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onRoomClick(spaceChildInfo: SpaceChildInfo) {
|
override fun onRoomClick(spaceChildInfo: SpaceChildInfo) {
|
||||||
// This is temporary for now to at least display something for the space beta
|
viewModel.handle(SpaceDirectoryViewAction.ShowDetails(spaceChildInfo))
|
||||||
// It's not ideal as it's doing some peeking that is not needed.
|
|
||||||
viewModel.session.permalinkService().createRoomPermalink(spaceChildInfo.childRoomId)?.let {
|
|
||||||
MatrixToBottomSheet.withLink(it, this).show(childFragmentManager, "ShowChild")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed(toolbarButton: Boolean): Boolean {
|
override fun onBackPressed(toolbarButton: Boolean): Boolean {
|
||||||
@ -109,7 +94,7 @@ class SpaceDirectoryFragment @Inject constructor(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun navigateToRoom(roomId: String) {
|
// override fun navigateToRoom(roomId: String) {
|
||||||
viewModel.handle(SpaceDirectoryViewAction.NavigateToRoom(roomId))
|
// viewModel.handle(SpaceDirectoryViewAction.NavigateToRoom(roomId))
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
|||||||
sealed class SpaceDirectoryViewAction : VectorViewModelAction {
|
sealed class SpaceDirectoryViewAction : VectorViewModelAction {
|
||||||
data class ExploreSubSpace(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
data class ExploreSubSpace(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
||||||
data class JoinOrOpen(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
data class JoinOrOpen(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
||||||
|
data class ShowDetails(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
||||||
data class NavigateToRoom(val roomId: String) : SpaceDirectoryViewAction()
|
data class NavigateToRoom(val roomId: String) : SpaceDirectoryViewAction()
|
||||||
object HandleBack : SpaceDirectoryViewAction()
|
object HandleBack : SpaceDirectoryViewAction()
|
||||||
}
|
}
|
||||||
|
@ -21,4 +21,5 @@ import im.vector.app.core.platform.VectorViewEvents
|
|||||||
sealed class SpaceDirectoryViewEvents : VectorViewEvents {
|
sealed class SpaceDirectoryViewEvents : VectorViewEvents {
|
||||||
object Dismiss : SpaceDirectoryViewEvents()
|
object Dismiss : SpaceDirectoryViewEvents()
|
||||||
data class NavigateToRoom(val roomId: String) : SpaceDirectoryViewEvents()
|
data class NavigateToRoom(val roomId: String) : SpaceDirectoryViewEvents()
|
||||||
|
data class NavigateToMxToBottomSheet(val link: String) : SpaceDirectoryViewEvents()
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ import timber.log.Timber
|
|||||||
|
|
||||||
class SpaceDirectoryViewModel @AssistedInject constructor(
|
class SpaceDirectoryViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: SpaceDirectoryState,
|
@Assisted initialState: SpaceDirectoryState,
|
||||||
val session: Session
|
private val session: Session
|
||||||
) : VectorViewModel<SpaceDirectoryState, SpaceDirectoryViewAction, SpaceDirectoryViewEvents>(initialState) {
|
) : VectorViewModel<SpaceDirectoryState, SpaceDirectoryViewAction, SpaceDirectoryViewEvents>(initialState) {
|
||||||
|
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
@ -139,6 +139,13 @@ class SpaceDirectoryViewModel @AssistedInject constructor(
|
|||||||
is SpaceDirectoryViewAction.NavigateToRoom -> {
|
is SpaceDirectoryViewAction.NavigateToRoom -> {
|
||||||
_viewEvents.post(SpaceDirectoryViewEvents.NavigateToRoom(action.roomId))
|
_viewEvents.post(SpaceDirectoryViewEvents.NavigateToRoom(action.roomId))
|
||||||
}
|
}
|
||||||
|
is SpaceDirectoryViewAction.ShowDetails -> {
|
||||||
|
// This is temporary for now to at least display something for the space beta
|
||||||
|
// It's not ideal as it's doing some peeking that is not needed.
|
||||||
|
session.permalinkService().createRoomPermalink(action.spaceChildInfo.childRoomId)?.let {
|
||||||
|
_viewEvents.post(SpaceDirectoryViewEvents.NavigateToMxToBottomSheet(it))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user