diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt index 0aa6d1a..63b226a 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.Toast +import androidx.appcompat.app.AlertDialog import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import bou.amine.apps.readerforselfossv2.android.R @@ -39,10 +40,7 @@ class SourcesListAdapter( private val repository: Repository by instance() private val appSettingsService: AppSettingsService by instance() - override fun onCreateViewHolder( - parent: ViewGroup, - viewType: Int, - ): ViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { binding = SourceListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ViewHolder(binding.root) } @@ -51,50 +49,31 @@ class SourcesListAdapter( holder: ViewHolder, position: Int, ) { - val itm = items[position] + val source = items[position] val deleteBtn: Button = holder.mView.findViewById(R.id.deleteBtn) - deleteBtn.setOnClickListener { - val (id, title) = items[position] - CoroutineScope(Dispatchers.IO).launch { - val successfullyDeletedSource = repository.deleteSource(id, title) - if (successfullyDeletedSource) { - items.removeAt(position) - notifyItemRemoved(position) - notifyItemRangeChanged(position, itemCount) - } else { - Toast - .makeText( - app, - R.string.can_delete_source, - Toast.LENGTH_SHORT, - ).show() - } - } - } + deleteBtn.setOnClickListener { this.showDeleteConfirmationDialog(source, position) } holder.mView.setOnClickListener { - val source = items[position] - repository.setSelectedSource(source) app.startActivity(Intent(app, UpsertSourceActivity::class.java)) } - if (itm.getIcon(repository.baseUrl).isEmpty()) { - binding.itemImage.setBackgroundAndText(itm.title.getHtmlDecoded()) + if (source.getIcon(repository.baseUrl).isEmpty()) { + binding.itemImage.setBackgroundAndText(source.title.getHtmlDecoded()) } else { - c.circularDrawable(itm.getIcon(repository.baseUrl), binding.itemImage, appSettingsService) + c.circularDrawable(source.getIcon(repository.baseUrl), binding.itemImage, appSettingsService) } - if (!itm.error.isNullOrBlank()) { + if (!source.error.isNullOrBlank()) { binding.errorText.visibility = View.VISIBLE - binding.errorText.text = itm.error + binding.errorText.text = source.error } else { binding.errorText.visibility = View.GONE } - binding.sourceTitle.text = itm.title.getHtmlDecoded() + binding.sourceTitle.text = source.title.getHtmlDecoded() } override fun getItemId(position: Int) = position.toLong() @@ -103,6 +82,35 @@ class SourcesListAdapter( override fun getItemCount(): Int = items.size + + private fun showDeleteConfirmationDialog(source: SelfossModel.SourceDetail, position: Int) { + AlertDialog.Builder(app) + .setTitle(app.getString(R.string.confirm_delete_title)) + .setMessage(app.getString(R.string.confirm_delete_message, source.title)) + .setPositiveButton(android.R.string.ok) { _, _ -> deleteSource(source, position) } + .setNegativeButton(android.R.string.cancel, null) + .show() + } + + private fun deleteSource(source: SelfossModel.SourceDetail, position: Int) { + CoroutineScope(Dispatchers.IO).launch { + val successfullyDeletedSource = repository.deleteSource(source.id, source.title) + launch(Dispatchers.Main) { + if (successfullyDeletedSource) { + items.removeAt(position) + notifyItemRemoved(position) + notifyItemRangeChanged(position, itemCount) + } else { + Toast.makeText( + app, + R.string.can_delete_source, + Toast.LENGTH_SHORT, + ).show() + } + } + } + } + inner class ViewHolder( val mView: ConstraintLayout, ) : RecyclerView.ViewHolder(mView) diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml index 8698e41..d04a31a 100644 --- a/androidApp/src/main/res/values/strings.xml +++ b/androidApp/src/main/res/values/strings.xml @@ -131,4 +131,6 @@ <string name="action_about">"About"</string> <string name="marked_as_read">"Item read"</string> <string name="marked_as_unread">"Item unread"</string> + <string name="confirm_delete_title">Confirm Deletion</string> + <string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string> </resources>