mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-11-22 17:35:54 +03:00
Add 3Pid to the list. Not compiling, I have to modify CreateRoomParam
This commit is contained in:
parent
f714566200
commit
6c0bb2a949
13 changed files with 76 additions and 33 deletions
|
@ -28,6 +28,14 @@ data class Invite3Pid(
|
||||||
@Json(name = "id_server")
|
@Json(name = "id_server")
|
||||||
val idServer: String,
|
val idServer: String,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Required.
|
||||||
|
* An access token previously registered with the identity server. Servers can treat this as optional to
|
||||||
|
* distinguish between r0.5-compatible clients and this specification version.
|
||||||
|
*/
|
||||||
|
@Json(name = "id_access_token")
|
||||||
|
val idAccessToken: String,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required.
|
* Required.
|
||||||
* The kind of address being passed in the address field, for example email.
|
* The kind of address being passed in the address field, for example email.
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
|
|
||||||
package im.vector.riotx.features.createdirect
|
package im.vector.riotx.features.createdirect
|
||||||
|
|
||||||
import im.vector.matrix.android.api.session.user.model.User
|
|
||||||
import im.vector.riotx.core.platform.VectorViewModelAction
|
import im.vector.riotx.core.platform.VectorViewModelAction
|
||||||
|
import im.vector.riotx.features.userdirectory.PendingInvitee
|
||||||
|
|
||||||
sealed class CreateDirectRoomAction : VectorViewModelAction {
|
sealed class CreateDirectRoomAction : VectorViewModelAction {
|
||||||
data class CreateRoomAndInviteSelectedUsers(val selectedUsers: Set<User>) : CreateDirectRoomAction()
|
data class CreateRoomAndInviteSelectedUsers(val selectedUsers: Set<PendingInvitee>) : CreateDirectRoomAction()
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,9 @@ import com.squareup.inject.assisted.Assisted
|
||||||
import com.squareup.inject.assisted.AssistedInject
|
import com.squareup.inject.assisted.AssistedInject
|
||||||
import im.vector.matrix.android.api.session.Session
|
import im.vector.matrix.android.api.session.Session
|
||||||
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
|
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
|
||||||
import im.vector.matrix.android.api.session.user.model.User
|
|
||||||
import im.vector.matrix.rx.rx
|
import im.vector.matrix.rx.rx
|
||||||
import im.vector.riotx.core.platform.VectorViewModel
|
import im.vector.riotx.core.platform.VectorViewModel
|
||||||
|
import im.vector.riotx.features.userdirectory.PendingInvitee
|
||||||
|
|
||||||
class CreateDirectRoomViewModel @AssistedInject constructor(@Assisted
|
class CreateDirectRoomViewModel @AssistedInject constructor(@Assisted
|
||||||
initialState: CreateDirectRoomViewState,
|
initialState: CreateDirectRoomViewState,
|
||||||
|
@ -52,7 +52,7 @@ class CreateDirectRoomViewModel @AssistedInject constructor(@Assisted
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createRoomAndInviteSelectedUsers(selectedUsers: Set<User>) {
|
private fun createRoomAndInviteSelectedUsers(selectedUsers: Set<PendingInvitee>) {
|
||||||
val roomParams = CreateRoomParams(
|
val roomParams = CreateRoomParams(
|
||||||
invitedUserIds = selectedUsers.map { it.userId }
|
invitedUserIds = selectedUsers.map { it.userId }
|
||||||
)
|
)
|
||||||
|
|
|
@ -30,6 +30,7 @@ import im.vector.riotx.core.extensions.cleanup
|
||||||
import im.vector.riotx.core.extensions.configureWith
|
import im.vector.riotx.core.extensions.configureWith
|
||||||
import im.vector.riotx.core.extensions.hideKeyboard
|
import im.vector.riotx.core.extensions.hideKeyboard
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
|
import im.vector.riotx.features.userdirectory.PendingInvitee
|
||||||
import im.vector.riotx.features.userdirectory.UserDirectoryAction
|
import im.vector.riotx.features.userdirectory.UserDirectoryAction
|
||||||
import im.vector.riotx.features.userdirectory.UserDirectorySharedAction
|
import im.vector.riotx.features.userdirectory.UserDirectorySharedAction
|
||||||
import im.vector.riotx.features.userdirectory.UserDirectorySharedActionViewModel
|
import im.vector.riotx.features.userdirectory.UserDirectorySharedActionViewModel
|
||||||
|
@ -103,13 +104,13 @@ class PhoneBookFragment @Inject constructor(
|
||||||
|
|
||||||
override fun onMatrixIdClick(matrixId: String) {
|
override fun onMatrixIdClick(matrixId: String) {
|
||||||
view?.hideKeyboard()
|
view?.hideKeyboard()
|
||||||
viewModel.handle(UserDirectoryAction.SelectUser(User(matrixId)))
|
viewModel.handle(UserDirectoryAction.SelectPendingInvitee(PendingInvitee.UserPendingInvitee(User(matrixId))))
|
||||||
sharedActionViewModel.post(UserDirectorySharedAction.GoBack)
|
sharedActionViewModel.post(UserDirectorySharedAction.GoBack)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onThreePidClick(threePid: ThreePid) {
|
override fun onThreePidClick(threePid: ThreePid) {
|
||||||
view?.hideKeyboard()
|
view?.hideKeyboard()
|
||||||
viewModel.handle(UserDirectoryAction.SelectThreePid(threePid))
|
viewModel.handle(UserDirectoryAction.SelectPendingInvitee(PendingInvitee.ThreePidPendingInvitee(threePid)))
|
||||||
sharedActionViewModel.post(UserDirectorySharedAction.GoBack)
|
sharedActionViewModel.post(UserDirectorySharedAction.GoBack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ class DirectoryUsersController @Inject constructor(private val session: Session,
|
||||||
is Loading -> renderLoading()
|
is Loading -> renderLoading()
|
||||||
is Success -> renderSuccess(
|
is Success -> renderSuccess(
|
||||||
computeUsersList(asyncUsers(), currentState.directorySearchTerm),
|
computeUsersList(asyncUsers(), currentState.directorySearchTerm),
|
||||||
currentState.selectedUsers.map { it.userId },
|
currentState.getSelectedMatrixId(),
|
||||||
hasSearch
|
hasSearch
|
||||||
)
|
)
|
||||||
is Fail -> renderFailure(asyncUsers.error)
|
is Fail -> renderFailure(asyncUsers.error)
|
||||||
|
|
|
@ -51,7 +51,7 @@ class KnownUsersController @Inject constructor(private val session: Session,
|
||||||
|
|
||||||
fun setData(state: UserDirectoryViewState) {
|
fun setData(state: UserDirectoryViewState) {
|
||||||
this.isFiltering = !state.filterKnownUsersValue.isEmpty()
|
this.isFiltering = !state.filterKnownUsersValue.isEmpty()
|
||||||
val newSelection = state.selectedUsers.map { it.userId }
|
val newSelection = state.getSelectedMatrixId()
|
||||||
this.users = state.knownUsers
|
this.users = state.knownUsers
|
||||||
if (newSelection != selectedUsers) {
|
if (newSelection != selectedUsers) {
|
||||||
this.selectedUsers = newSelection
|
this.selectedUsers = newSelection
|
||||||
|
|
|
@ -139,7 +139,7 @@ class KnownUsersFragment @Inject constructor(
|
||||||
knownUsersController.setData(it)
|
knownUsersController.setData(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderSelectedUsers(selectedUsers: Set<User>) {
|
private fun renderSelectedUsers(selectedUsers: Set<PendingInvitee>) {
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
|
|
||||||
val currentNumberOfChips = chipGroup.childCount
|
val currentNumberOfChips = chipGroup.childCount
|
||||||
|
@ -156,22 +156,25 @@ class KnownUsersFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addChipToGroup(user: User) {
|
private fun addChipToGroup(pendingInvitee: PendingInvitee) {
|
||||||
val chip = Chip(requireContext())
|
val chip = Chip(requireContext())
|
||||||
chip.setChipBackgroundColorResource(android.R.color.transparent)
|
chip.setChipBackgroundColorResource(android.R.color.transparent)
|
||||||
chip.chipStrokeWidth = dimensionConverter.dpToPx(1).toFloat()
|
chip.chipStrokeWidth = dimensionConverter.dpToPx(1).toFloat()
|
||||||
chip.text = user.getBestName()
|
chip.text = when (pendingInvitee) {
|
||||||
|
is PendingInvitee.UserPendingInvitee -> pendingInvitee.user.getBestName()
|
||||||
|
is PendingInvitee.ThreePidPendingInvitee -> pendingInvitee.threePid.value
|
||||||
|
}
|
||||||
chip.isClickable = true
|
chip.isClickable = true
|
||||||
chip.isCheckable = false
|
chip.isCheckable = false
|
||||||
chip.isCloseIconVisible = true
|
chip.isCloseIconVisible = true
|
||||||
chipGroup.addView(chip)
|
chipGroup.addView(chip)
|
||||||
chip.setOnCloseIconClickListener {
|
chip.setOnCloseIconClickListener {
|
||||||
viewModel.handle(UserDirectoryAction.RemoveSelectedUser(user))
|
viewModel.handle(UserDirectoryAction.RemovePendingInvitee(pendingInvitee))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClick(user: User) {
|
override fun onItemClick(user: User) {
|
||||||
view?.hideKeyboard()
|
view?.hideKeyboard()
|
||||||
viewModel.handle(UserDirectoryAction.SelectUser(user))
|
viewModel.handle(UserDirectoryAction.SelectPendingInvitee(PendingInvitee.UserPendingInvitee(user)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 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.riotx.features.userdirectory
|
||||||
|
|
||||||
|
import im.vector.matrix.android.api.session.identity.ThreePid
|
||||||
|
import im.vector.matrix.android.api.session.user.model.User
|
||||||
|
|
||||||
|
sealed class PendingInvitee {
|
||||||
|
data class UserPendingInvitee(val user: User): PendingInvitee()
|
||||||
|
data class ThreePidPendingInvitee(val threePid: ThreePid): PendingInvitee()
|
||||||
|
}
|
|
@ -16,15 +16,12 @@
|
||||||
|
|
||||||
package im.vector.riotx.features.userdirectory
|
package im.vector.riotx.features.userdirectory
|
||||||
|
|
||||||
import im.vector.matrix.android.api.session.identity.ThreePid
|
|
||||||
import im.vector.matrix.android.api.session.user.model.User
|
|
||||||
import im.vector.riotx.core.platform.VectorViewModelAction
|
import im.vector.riotx.core.platform.VectorViewModelAction
|
||||||
|
|
||||||
sealed class UserDirectoryAction : VectorViewModelAction {
|
sealed class UserDirectoryAction : VectorViewModelAction {
|
||||||
data class FilterKnownUsers(val value: String) : UserDirectoryAction()
|
data class FilterKnownUsers(val value: String) : UserDirectoryAction()
|
||||||
data class SearchDirectoryUsers(val value: String) : UserDirectoryAction()
|
data class SearchDirectoryUsers(val value: String) : UserDirectoryAction()
|
||||||
object ClearFilterKnownUsers : UserDirectoryAction()
|
object ClearFilterKnownUsers : UserDirectoryAction()
|
||||||
data class SelectUser(val user: User) : UserDirectoryAction()
|
data class SelectPendingInvitee(val pendingInvitee: PendingInvitee) : UserDirectoryAction()
|
||||||
data class SelectThreePid(val threePid: ThreePid) : UserDirectoryAction()
|
data class RemovePendingInvitee(val pendingInvitee: PendingInvitee) : UserDirectoryAction()
|
||||||
data class RemoveSelectedUser(val user: User) : UserDirectoryAction()
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.view.View
|
||||||
import com.airbnb.mvrx.activityViewModel
|
import com.airbnb.mvrx.activityViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.matrix.android.api.session.user.model.User
|
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
import im.vector.riotx.core.extensions.cleanup
|
import im.vector.riotx.core.extensions.cleanup
|
||||||
import im.vector.riotx.core.extensions.configureWith
|
import im.vector.riotx.core.extensions.configureWith
|
||||||
|
@ -82,9 +81,9 @@ class UserDirectoryFragment @Inject constructor(
|
||||||
directRoomController.setData(it)
|
directRoomController.setData(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClick(user: User) {
|
override fun onItemClick(pendingInvitee: PendingInvitee) {
|
||||||
view?.hideKeyboard()
|
view?.hideKeyboard()
|
||||||
viewModel.handle(UserDirectoryAction.SelectUser(user))
|
viewModel.handle(UserDirectoryAction.SelectPendingInvitee(pendingInvitee))
|
||||||
sharedActionViewModel.post(UserDirectorySharedAction.GoBack)
|
sharedActionViewModel.post(UserDirectorySharedAction.GoBack)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
package im.vector.riotx.features.userdirectory
|
package im.vector.riotx.features.userdirectory
|
||||||
|
|
||||||
import im.vector.matrix.android.api.session.user.model.User
|
|
||||||
import im.vector.riotx.core.platform.VectorSharedAction
|
import im.vector.riotx.core.platform.VectorSharedAction
|
||||||
|
|
||||||
sealed class UserDirectorySharedAction : VectorSharedAction {
|
sealed class UserDirectorySharedAction : VectorSharedAction {
|
||||||
|
@ -24,5 +23,5 @@ sealed class UserDirectorySharedAction : VectorSharedAction {
|
||||||
object OpenPhoneBook : UserDirectorySharedAction()
|
object OpenPhoneBook : UserDirectorySharedAction()
|
||||||
object Close : UserDirectorySharedAction()
|
object Close : UserDirectorySharedAction()
|
||||||
object GoBack : UserDirectorySharedAction()
|
object GoBack : UserDirectorySharedAction()
|
||||||
data class OnMenuItemSelected(val itemId: Int, val selectedUsers: Set<User>) : UserDirectorySharedAction()
|
data class OnMenuItemSelected(val itemId: Int, val selectedUsers: Set<PendingInvitee>) : UserDirectorySharedAction()
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import com.squareup.inject.assisted.AssistedInject
|
||||||
import im.vector.matrix.android.api.session.Session
|
import im.vector.matrix.android.api.session.Session
|
||||||
import im.vector.matrix.android.api.util.toMatrixItem
|
import im.vector.matrix.android.api.util.toMatrixItem
|
||||||
import im.vector.matrix.rx.rx
|
import im.vector.matrix.rx.rx
|
||||||
|
import im.vector.riotx.core.extensions.exhaustive
|
||||||
import im.vector.riotx.core.extensions.toggle
|
import im.vector.riotx.core.extensions.toggle
|
||||||
import im.vector.riotx.core.platform.VectorViewModel
|
import im.vector.riotx.core.platform.VectorViewModel
|
||||||
import im.vector.riotx.features.createdirect.CreateDirectRoomActivity
|
import im.vector.riotx.features.createdirect.CreateDirectRoomActivity
|
||||||
|
@ -59,9 +60,9 @@ class UserDirectoryViewModel @AssistedInject constructor(@Assisted
|
||||||
is FragmentViewModelContext -> (viewModelContext.fragment() as KnownUsersFragment).userDirectoryViewModelFactory.create(state)
|
is FragmentViewModelContext -> (viewModelContext.fragment() as KnownUsersFragment).userDirectoryViewModelFactory.create(state)
|
||||||
is ActivityViewModelContext -> {
|
is ActivityViewModelContext -> {
|
||||||
when (viewModelContext.activity<FragmentActivity>()) {
|
when (viewModelContext.activity<FragmentActivity>()) {
|
||||||
is CreateDirectRoomActivity -> viewModelContext.activity<CreateDirectRoomActivity>().userDirectoryViewModelFactory.create(state)
|
is CreateDirectRoomActivity -> viewModelContext.activity<CreateDirectRoomActivity>().userDirectoryViewModelFactory.create(state)
|
||||||
is InviteUsersToRoomActivity -> viewModelContext.activity<InviteUsersToRoomActivity>().userDirectoryViewModelFactory.create(state)
|
is InviteUsersToRoomActivity -> viewModelContext.activity<InviteUsersToRoomActivity>().userDirectoryViewModelFactory.create(state)
|
||||||
else -> error("Wrong activity or fragment")
|
else -> error("Wrong activity or fragment")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> error("Wrong activity or fragment")
|
else -> error("Wrong activity or fragment")
|
||||||
|
@ -79,20 +80,20 @@ class UserDirectoryViewModel @AssistedInject constructor(@Assisted
|
||||||
is UserDirectoryAction.FilterKnownUsers -> knownUsersFilter.accept(Option.just(action.value))
|
is UserDirectoryAction.FilterKnownUsers -> knownUsersFilter.accept(Option.just(action.value))
|
||||||
is UserDirectoryAction.ClearFilterKnownUsers -> knownUsersFilter.accept(Option.empty())
|
is UserDirectoryAction.ClearFilterKnownUsers -> knownUsersFilter.accept(Option.empty())
|
||||||
is UserDirectoryAction.SearchDirectoryUsers -> directoryUsersSearch.accept(action.value)
|
is UserDirectoryAction.SearchDirectoryUsers -> directoryUsersSearch.accept(action.value)
|
||||||
is UserDirectoryAction.SelectUser -> handleSelectUser(action)
|
is UserDirectoryAction.SelectPendingInvitee -> handleSelectUser(action)
|
||||||
is UserDirectoryAction.RemoveSelectedUser -> handleRemoveSelectedUser(action)
|
is UserDirectoryAction.RemovePendingInvitee -> handleRemoveSelectedUser(action)
|
||||||
}
|
}.exhaustive
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleRemoveSelectedUser(action: UserDirectoryAction.RemoveSelectedUser) = withState { state ->
|
private fun handleRemoveSelectedUser(action: UserDirectoryAction.RemovePendingInvitee) = withState { state ->
|
||||||
val selectedUsers = state.selectedUsers.minus(action.user)
|
val selectedUsers = state.selectedUsers.minus(action.pendingInvitee)
|
||||||
setState { copy(selectedUsers = selectedUsers) }
|
setState { copy(selectedUsers = selectedUsers) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleSelectUser(action: UserDirectoryAction.SelectUser) = withState { state ->
|
private fun handleSelectUser(action: UserDirectoryAction.SelectPendingInvitee) = withState { state ->
|
||||||
// Reset the filter asap
|
// Reset the filter asap
|
||||||
directoryUsersSearch.accept("")
|
directoryUsersSearch.accept("")
|
||||||
val selectedUsers = state.selectedUsers.toggle(action.user)
|
val selectedUsers = state.selectedUsers.toggle(action.pendingInvitee)
|
||||||
setState { copy(selectedUsers = selectedUsers) }
|
setState { copy(selectedUsers = selectedUsers) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,21 @@ data class UserDirectoryViewState(
|
||||||
val excludedUserIds: Set<String>? = null,
|
val excludedUserIds: Set<String>? = null,
|
||||||
val knownUsers: Async<PagedList<User>> = Uninitialized,
|
val knownUsers: Async<PagedList<User>> = Uninitialized,
|
||||||
val directoryUsers: Async<List<User>> = Uninitialized,
|
val directoryUsers: Async<List<User>> = Uninitialized,
|
||||||
val selectedUsers: Set<User> = emptySet(),
|
val selectedUsers: Set<PendingInvitee> = emptySet(),
|
||||||
val createAndInviteState: Async<String> = Uninitialized,
|
val createAndInviteState: Async<String> = Uninitialized,
|
||||||
val directorySearchTerm: String = "",
|
val directorySearchTerm: String = "",
|
||||||
val filterKnownUsersValue: Option<String> = Option.empty()
|
val filterKnownUsersValue: Option<String> = Option.empty()
|
||||||
) : MvRxState {
|
) : MvRxState {
|
||||||
|
|
||||||
constructor(args: KnownUsersFragmentArgs) : this(excludedUserIds = args.excludedUserIds)
|
constructor(args: KnownUsersFragmentArgs) : this(excludedUserIds = args.excludedUserIds)
|
||||||
|
|
||||||
|
fun getSelectedMatrixId(): List<String> {
|
||||||
|
return selectedUsers
|
||||||
|
.mapNotNull {
|
||||||
|
when (it) {
|
||||||
|
is PendingInvitee.UserPendingInvitee -> it.user.userId
|
||||||
|
is PendingInvitee.ThreePidPendingInvitee -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue