forked from GitHub-Mirror/riotX-android
70 lines
2.2 KiB
Kotlin
70 lines
2.2 KiB
Kotlin
/*
|
|
*
|
|
* * Copyright 2019 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.home.createdirect
|
|
|
|
import com.airbnb.epoxy.EpoxyController
|
|
import im.vector.matrix.android.api.session.user.model.User
|
|
import im.vector.matrix.android.internal.util.firstLetterOfDisplayName
|
|
import im.vector.riotx.features.home.AvatarRenderer
|
|
import javax.inject.Inject
|
|
|
|
class CreateDirectRoomController @Inject constructor(private val avatarRenderer: AvatarRenderer) : EpoxyController() {
|
|
|
|
private var state: CreateDirectRoomViewState? = null
|
|
var callback: Callback? = null
|
|
|
|
init {
|
|
requestModelBuild()
|
|
}
|
|
|
|
fun setData(state: CreateDirectRoomViewState) {
|
|
this.state = state
|
|
requestModelBuild()
|
|
}
|
|
|
|
override fun buildModels() {
|
|
val currentState = state ?: return
|
|
val knownUsers = currentState.knownUsers() ?: return
|
|
|
|
var lastFirstLetter: String? = null
|
|
knownUsers.forEach { user ->
|
|
val currentFirstLetter = user.displayName.firstLetterOfDisplayName()
|
|
val showLetter = lastFirstLetter != currentFirstLetter
|
|
lastFirstLetter = currentFirstLetter
|
|
createDirectRoomUserItem {
|
|
id(user.userId)
|
|
userId(user.userId)
|
|
showLetter(showLetter)
|
|
firstLetter(currentFirstLetter)
|
|
name(user.displayName)
|
|
avatarUrl(user.avatarUrl)
|
|
avatarRenderer(avatarRenderer)
|
|
clickListener { _ ->
|
|
callback?.onItemClick(user)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
interface Callback {
|
|
fun onItemClick(user: User)
|
|
}
|
|
|
|
} |