More cleanup and split into several files

This commit is contained in:
Benoit Marty 2021-05-05 18:09:29 +02:00
parent 2acfb29416
commit 961f3bcd19
8 changed files with 111 additions and 39 deletions

View File

@ -71,7 +71,7 @@ class SpacePeopleFragment @Inject constructor(
return roomMemberModelFactory.create(initialState) return roomMemberModelFactory.create(initialState)
} }
override fun invalidate() = withState(viewModel, membersViewModel) { baseState, memberListState -> override fun invalidate() = withState(membersViewModel) { memberListState ->
views.appBarTitle.text = getString(R.string.bottom_action_people) views.appBarTitle.text = getString(R.string.bottom_action_people)
val memberCount = (memberListState.roomSummary.invoke()?.otherMemberIds?.size ?: 0) + 1 val memberCount = (memberListState.roomSummary.invoke()?.otherMemberIds?.size ?: 0) + 1
views.appBarSpaceInfo.text = resources.getQuantityString(R.plurals.room_title_members, memberCount, memberCount) views.appBarSpaceInfo.text = resources.getQuantityString(R.plurals.room_title_members, memberCount, memberCount)
@ -133,7 +133,7 @@ class SpacePeopleFragment @Inject constructor(
private fun handleViewEvents(events: SpacePeopleViewEvents) { private fun handleViewEvents(events: SpacePeopleViewEvents) {
when (events) { when (events) {
is SpacePeopleViewEvents.OpenRoom -> { is SpacePeopleViewEvents.OpenRoom -> {
sharedActionViewModel.post(SpacePeopleSharedAction.NavigateToRoom(events.roomId)) sharedActionViewModel.post(SpacePeopleSharedAction.NavigateToRoom(events.roomId))
} }
is SpacePeopleViewEvents.InviteToSpace -> { is SpacePeopleViewEvents.InviteToSpace -> {

View File

@ -159,7 +159,7 @@ class SpacePeopleListController @Inject constructor(
private fun RoomMemberListCategories.toPowerLevelLabel(): String? { private fun RoomMemberListCategories.toPowerLevelLabel(): String? {
return when (this) { return when (this) {
RoomMemberListCategories.ADMIN -> stringProvider.getString(R.string.power_level_admin) RoomMemberListCategories.ADMIN -> stringProvider.getString(R.string.power_level_admin)
RoomMemberListCategories.MODERATOR -> stringProvider.getString(R.string.power_level_moderator) RoomMemberListCategories.MODERATOR -> stringProvider.getString(R.string.power_level_moderator)
else -> null else -> null
} }

View File

@ -0,0 +1,27 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.spaces.people
import im.vector.app.core.platform.VectorSharedAction
sealed class SpacePeopleSharedAction : VectorSharedAction {
object Dismiss : SpacePeopleSharedAction()
object ShowModalLoading : SpacePeopleSharedAction()
object HideModalLoading : SpacePeopleSharedAction()
data class NavigateToRoom(val roomId: String) : SpacePeopleSharedAction()
data class NavigateToInvite(val spaceId: String) : SpacePeopleSharedAction()
}

View File

@ -16,16 +16,7 @@
package im.vector.app.features.spaces.people package im.vector.app.features.spaces.people
import im.vector.app.core.platform.VectorSharedAction
import im.vector.app.core.platform.VectorSharedActionViewModel import im.vector.app.core.platform.VectorSharedActionViewModel
import javax.inject.Inject import javax.inject.Inject
sealed class SpacePeopleSharedAction : VectorSharedAction {
object Dismiss : SpacePeopleSharedAction()
object ShowModalLoading : SpacePeopleSharedAction()
object HideModalLoading : SpacePeopleSharedAction()
data class NavigateToRoom(val roomId: String) : SpacePeopleSharedAction()
data class NavigateToInvite(val spaceId: String) : SpacePeopleSharedAction()
}
class SpacePeopleSharedActionViewModel @Inject constructor() : VectorSharedActionViewModel<SpacePeopleSharedAction>() class SpacePeopleSharedActionViewModel @Inject constructor() : VectorSharedActionViewModel<SpacePeopleSharedAction>()

View File

@ -0,0 +1,25 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.spaces.people
import im.vector.app.core.platform.VectorViewModelAction
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
sealed class SpacePeopleViewAction : VectorViewModelAction {
data class ChatWith(val member: RoomMemberSummary) : SpacePeopleViewAction()
object InviteToSpace : SpacePeopleViewAction()
}

View File

@ -0,0 +1,24 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.spaces.people
import im.vector.app.core.platform.VectorViewEvents
sealed class SpacePeopleViewEvents : VectorViewEvents {
data class OpenRoom(val roomId: String) : SpacePeopleViewEvents()
data class InviteToSpace(val spaceId: String) : SpacePeopleViewEvents()
}

View File

@ -18,51 +18,25 @@ package im.vector.app.features.spaces.people
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.airbnb.mvrx.ActivityViewModelContext import com.airbnb.mvrx.ActivityViewModelContext
import com.airbnb.mvrx.Async
import com.airbnb.mvrx.Fail import com.airbnb.mvrx.Fail
import com.airbnb.mvrx.FragmentViewModelContext import com.airbnb.mvrx.FragmentViewModelContext
import com.airbnb.mvrx.Loading import com.airbnb.mvrx.Loading
import com.airbnb.mvrx.MvRxState
import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.MvRxViewModelFactory
import com.airbnb.mvrx.Success import com.airbnb.mvrx.Success
import com.airbnb.mvrx.Uninitialized
import com.airbnb.mvrx.ViewModelContext import com.airbnb.mvrx.ViewModelContext
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.platform.VectorViewEvents
import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.platform.VectorViewModelAction
import im.vector.app.features.raw.wellknown.getElementWellknown import im.vector.app.features.raw.wellknown.getElementWellknown
import im.vector.app.features.raw.wellknown.isE2EByDefault import im.vector.app.features.raw.wellknown.isE2EByDefault
import im.vector.app.features.roomprofile.RoomProfileArgs
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.raw.RawService import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
data class SpacePeopleViewState(
val spaceId: String,
val createAndInviteState: Async<String> = Uninitialized
) : MvRxState {
constructor(args: RoomProfileArgs) : this(
spaceId = args.roomId
)
}
sealed class SpacePeopleViewAction : VectorViewModelAction {
data class ChatWith(val member: RoomMemberSummary) : SpacePeopleViewAction()
object InviteToSpace : SpacePeopleViewAction()
}
sealed class SpacePeopleViewEvents : VectorViewEvents {
data class OpenRoom(val roomId: String) : SpacePeopleViewEvents()
data class InviteToSpace(val spaceId: String) : SpacePeopleViewEvents()
}
class SpacePeopleViewModel @AssistedInject constructor( class SpacePeopleViewModel @AssistedInject constructor(
@Assisted val initialState: SpacePeopleViewState, @Assisted val initialState: SpacePeopleViewState,
private val rawService: RawService, private val rawService: RawService,
@ -86,7 +60,7 @@ class SpacePeopleViewModel @AssistedInject constructor(
override fun handle(action: SpacePeopleViewAction) { override fun handle(action: SpacePeopleViewAction) {
when (action) { when (action) {
is SpacePeopleViewAction.ChatWith -> handleChatWith(action) is SpacePeopleViewAction.ChatWith -> handleChatWith(action)
SpacePeopleViewAction.InviteToSpace -> handleInviteToSpace() SpacePeopleViewAction.InviteToSpace -> handleInviteToSpace()
}.exhaustive }.exhaustive
} }

View File

@ -0,0 +1,31 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.spaces.people
import com.airbnb.mvrx.Async
import com.airbnb.mvrx.MvRxState
import com.airbnb.mvrx.Uninitialized
import im.vector.app.features.roomprofile.RoomProfileArgs
data class SpacePeopleViewState(
val spaceId: String,
val createAndInviteState: Async<String> = Uninitialized
) : MvRxState {
constructor(args: RoomProfileArgs) : this(
spaceId = args.roomId
)
}