Setup server onClick listeners

This commit is contained in:
Jarne Demeulemeester 2021-06-08 11:09:51 +02:00
parent cfecd753d6
commit 4cffd1d376
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
4 changed files with 29 additions and 8 deletions

View file

@ -8,8 +8,10 @@ import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.database.Server import dev.jdtech.jellyfin.database.Server
import dev.jdtech.jellyfin.databinding.ServerItemBinding import dev.jdtech.jellyfin.databinding.ServerItemBinding
class ServerGridAdapter(val onClickListener: OnClickListener) : class ServerGridAdapter(
ListAdapter<Server, ServerGridAdapter.ServerViewHolder>(DiffCallback) { private val onClickListener: OnClickListener,
private val onLongClickListener: OnLongClickListener
) : ListAdapter<Server, ServerGridAdapter.ServerViewHolder>(DiffCallback) {
class ServerViewHolder(private var binding: ServerItemBinding) : class ServerViewHolder(private var binding: ServerItemBinding) :
RecyclerView.ViewHolder(binding.root) { RecyclerView.ViewHolder(binding.root) {
fun bind(server: Server) { fun bind(server: Server) {
@ -31,19 +33,26 @@ class ServerGridAdapter(val onClickListener: OnClickListener) :
override fun onCreateViewHolder( override fun onCreateViewHolder(
parent: ViewGroup, parent: ViewGroup,
viewType: Int viewType: Int
): ServerGridAdapter.ServerViewHolder { ): ServerViewHolder {
return ServerViewHolder(ServerItemBinding.inflate(LayoutInflater.from(parent.context))) return ServerViewHolder(ServerItemBinding.inflate(LayoutInflater.from(parent.context)))
} }
override fun onBindViewHolder(holder: ServerGridAdapter.ServerViewHolder, position: Int) { override fun onBindViewHolder(holder: ServerViewHolder, position: Int) {
val server = getItem(position) val server = getItem(position)
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
onClickListener.onClick(server) onClickListener.onClick(server)
} }
holder.itemView.setOnLongClickListener {
onLongClickListener.onLongClick(server)
}
holder.bind(server) holder.bind(server)
} }
class OnClickListener(val clickListener: (server: Server) -> Unit) { class OnClickListener(val clickListener: (server: Server) -> Unit) {
fun onClick(server: Server) = clickListener(server) fun onClick(server: Server) = clickListener(server)
} }
class OnLongClickListener(val clickListener: (server: Server) -> Boolean) {
fun onLongClick(server: Server) = clickListener(server)
}
} }

View file

@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
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 android.widget.Toast
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.R
@ -16,7 +17,7 @@ class ServerSelectFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
val binding = FragmentServerSelectBinding.inflate(inflater) val binding = FragmentServerSelectBinding.inflate(inflater)
val application = requireNotNull(this.activity).application val application = requireNotNull(this.activity).application
@ -28,7 +29,11 @@ class ServerSelectFragment : Fragment() {
binding.lifecycleOwner = this binding.lifecycleOwner = this
binding.viewModel = viewModel binding.viewModel = viewModel
binding.serversRecyclerView.adapter = ServerGridAdapter(ServerGridAdapter.OnClickListener { binding.serversRecyclerView.adapter = ServerGridAdapter(ServerGridAdapter.OnClickListener { server ->
Toast.makeText(application, "You selected server ${server.name}", Toast.LENGTH_SHORT).show()
}, ServerGridAdapter.OnLongClickListener { server ->
viewModel.deleteServer(server)
true
}) })
binding.buttonAddServer.setOnClickListener { binding.buttonAddServer.setOnClickListener {

View file

@ -8,6 +8,7 @@ import dev.jdtech.jellyfin.database.ServerDatabaseDao
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.util.*
class ServerSelectViewModel( class ServerSelectViewModel(
val database: ServerDatabaseDao, val database: ServerDatabaseDao,
@ -17,14 +18,19 @@ class ServerSelectViewModel(
get() = _servers get() = _servers
init { init {
val demoServer = Server("0", "Demo", "https://demo.jellyfin.org", "0", "demo", "") val demoServer = Server(UUID.randomUUID().toString(), "Demo", "https://demo.jellyfin.org", "0", "demo", "")
viewModelScope.launch { viewModelScope.launch {
clearDatabase()
insert(demoServer) insert(demoServer)
} }
} }
fun deleteServer(server: Server) {
viewModelScope.launch {
delete(server)
}
}
private suspend fun insert(server: Server) { private suspend fun insert(server: Server) {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
database.insert(server) database.insert(server)

View file

@ -10,6 +10,7 @@ class ServerSelectViewModelFactory(
) : ViewModelProvider.Factory { ) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T { override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ServerSelectViewModel::class.java)) { if (modelClass.isAssignableFrom(ServerSelectViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return ServerSelectViewModel(dataSource) as T return ServerSelectViewModel(dataSource) as T
} }
throw IllegalArgumentException("Unknown ViewModel class") throw IllegalArgumentException("Unknown ViewModel class")