Setup server onClick listeners
This commit is contained in:
parent
cfecd753d6
commit
4cffd1d376
4 changed files with 29 additions and 8 deletions
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in a new issue