From 4cffd1d37684709a7536bc863f1e016ac1edea04 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 8 Jun 2021 11:09:51 +0200 Subject: [PATCH] Setup server onClick listeners --- .../jellyfin/serverselect/ServerGridAdapter.kt | 17 +++++++++++++---- .../serverselect/ServerSelectFragment.kt | 9 +++++++-- .../serverselect/ServerSelectViewModel.kt | 10 ++++++++-- .../ServerSelectViewModelFactory.kt | 1 + 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerGridAdapter.kt b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerGridAdapter.kt index f728bad3..a2201d13 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerGridAdapter.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerGridAdapter.kt @@ -8,8 +8,10 @@ import androidx.recyclerview.widget.RecyclerView import dev.jdtech.jellyfin.database.Server import dev.jdtech.jellyfin.databinding.ServerItemBinding -class ServerGridAdapter(val onClickListener: OnClickListener) : - ListAdapter(DiffCallback) { +class ServerGridAdapter( + private val onClickListener: OnClickListener, + private val onLongClickListener: OnLongClickListener + ) : ListAdapter(DiffCallback) { class ServerViewHolder(private var binding: ServerItemBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(server: Server) { @@ -31,19 +33,26 @@ class ServerGridAdapter(val onClickListener: OnClickListener) : override fun onCreateViewHolder( parent: ViewGroup, viewType: Int - ): ServerGridAdapter.ServerViewHolder { + ): ServerViewHolder { 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) holder.itemView.setOnClickListener { onClickListener.onClick(server) } + holder.itemView.setOnLongClickListener { + onLongClickListener.onLongClick(server) + } holder.bind(server) } class OnClickListener(val clickListener: (server: Server) -> Unit) { fun onClick(server: Server) = clickListener(server) } + + class OnLongClickListener(val clickListener: (server: Server) -> Boolean) { + fun onLongClick(server: Server) = clickListener(server) + } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectFragment.kt index 7816b8df..95cd97b4 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectFragment.kt @@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import dev.jdtech.jellyfin.R @@ -16,7 +17,7 @@ class ServerSelectFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { val binding = FragmentServerSelectBinding.inflate(inflater) val application = requireNotNull(this.activity).application @@ -28,7 +29,11 @@ class ServerSelectFragment : Fragment() { binding.lifecycleOwner = this 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 { diff --git a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModel.kt index 8fd8f1fd..55345e71 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModel.kt @@ -8,6 +8,7 @@ import dev.jdtech.jellyfin.database.ServerDatabaseDao import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.util.* class ServerSelectViewModel( val database: ServerDatabaseDao, @@ -17,14 +18,19 @@ class ServerSelectViewModel( get() = _servers 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 { - clearDatabase() insert(demoServer) } } + fun deleteServer(server: Server) { + viewModelScope.launch { + delete(server) + } + } + private suspend fun insert(server: Server) { withContext(Dispatchers.IO) { database.insert(server) diff --git a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModelFactory.kt b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModelFactory.kt index c18c6b7d..771b08d3 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModelFactory.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/serverselect/ServerSelectViewModelFactory.kt @@ -10,6 +10,7 @@ class ServerSelectViewModelFactory( ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(ServerSelectViewModel::class.java)) { + @Suppress("UNCHECKED_CAST") return ServerSelectViewModel(dataSource) as T } throw IllegalArgumentException("Unknown ViewModel class")