You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.6 KiB
Kotlin
71 lines
2.6 KiB
Kotlin
package org.thoughtcrime.securesms.loki
|
|
|
|
import android.content.Context
|
|
import android.util.AttributeSet
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.BaseAdapter
|
|
import android.widget.ListView
|
|
import nl.komponents.kovenant.combine.Tuple2
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
|
|
|
class UserSelectionView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : ListView(context, attrs, defStyleAttr) {
|
|
private var users = listOf<Tuple2<String, String>>()
|
|
set(newValue) { field = newValue; userSelectionViewAdapter.users = newValue }
|
|
private var hasGroupContext = false
|
|
var onUserSelected: ((Tuple2<String, String>) -> Unit)? = null
|
|
|
|
private val userSelectionViewAdapter by lazy { Adapter(context) }
|
|
|
|
private class Adapter(private val context: Context) : BaseAdapter() {
|
|
var users = listOf<Tuple2<String, String>>()
|
|
set(newValue) { field = newValue; notifyDataSetChanged() }
|
|
var hasGroupContext = false
|
|
|
|
override fun getCount(): Int {
|
|
return users.count()
|
|
}
|
|
|
|
override fun getItemId(position: Int): Long {
|
|
return position.toLong()
|
|
}
|
|
|
|
override fun getItem(position: Int): Tuple2<String, String> {
|
|
return users[position]
|
|
}
|
|
|
|
override fun getView(position: Int, cellToBeReused: View?, parent: ViewGroup): View {
|
|
val cell = cellToBeReused as UserSelectionViewCell? ?: UserSelectionViewCell.inflate(LayoutInflater.from(context), parent)
|
|
val user = getItem(position)
|
|
cell.user = user
|
|
cell.hasGroupContext = hasGroupContext
|
|
return cell
|
|
}
|
|
}
|
|
|
|
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
|
|
constructor(context: Context) : this(context, null)
|
|
|
|
init {
|
|
adapter = userSelectionViewAdapter
|
|
userSelectionViewAdapter.users = users
|
|
setOnItemClickListener { _, _, position, _ ->
|
|
onUserSelected?.invoke(users[position])
|
|
}
|
|
}
|
|
|
|
fun show(users: List<Tuple2<String, String>>, threadID: Long) {
|
|
hasGroupContext = DatabaseFactory.getThreadDatabase(context).getRecipientForThreadId(threadID)!!.isGroupRecipient
|
|
this.users = users
|
|
val layoutParams = this.layoutParams as ViewGroup.LayoutParams
|
|
layoutParams.height = toPx(6 + Math.min(users.count(), 4) * 52, resources)
|
|
this.layoutParams = layoutParams
|
|
}
|
|
|
|
fun hide() {
|
|
val layoutParams = this.layoutParams as ViewGroup.LayoutParams
|
|
layoutParams.height = 0
|
|
this.layoutParams = layoutParams
|
|
}
|
|
} |