Add a confirmation when deleting a source
A popup appears after tapping the delete source button with the name of the source.
This commit is contained in:
parent
f38936f9b4
commit
3ad2ad402f
@ -8,6 +8,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import bou.amine.apps.readerforselfossv2.android.R
|
import bou.amine.apps.readerforselfossv2.android.R
|
||||||
@ -39,10 +40,7 @@ class SourcesListAdapter(
|
|||||||
private val repository: Repository by instance()
|
private val repository: Repository by instance()
|
||||||
private val appSettingsService: AppSettingsService by instance()
|
private val appSettingsService: AppSettingsService by instance()
|
||||||
|
|
||||||
override fun onCreateViewHolder(
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
parent: ViewGroup,
|
|
||||||
viewType: Int,
|
|
||||||
): ViewHolder {
|
|
||||||
binding = SourceListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
binding = SourceListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
return ViewHolder(binding.root)
|
return ViewHolder(binding.root)
|
||||||
}
|
}
|
||||||
@ -51,50 +49,31 @@ class SourcesListAdapter(
|
|||||||
holder: ViewHolder,
|
holder: ViewHolder,
|
||||||
position: Int,
|
position: Int,
|
||||||
) {
|
) {
|
||||||
val itm = items[position]
|
val source = items[position]
|
||||||
|
|
||||||
val deleteBtn: Button = holder.mView.findViewById(R.id.deleteBtn)
|
val deleteBtn: Button = holder.mView.findViewById(R.id.deleteBtn)
|
||||||
|
|
||||||
deleteBtn.setOnClickListener {
|
deleteBtn.setOnClickListener { this.showDeleteConfirmationDialog(source, position) }
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.mView.setOnClickListener {
|
holder.mView.setOnClickListener {
|
||||||
val source = items[position]
|
|
||||||
|
|
||||||
repository.setSelectedSource(source)
|
repository.setSelectedSource(source)
|
||||||
app.startActivity(Intent(app, UpsertSourceActivity::class.java))
|
app.startActivity(Intent(app, UpsertSourceActivity::class.java))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (itm.getIcon(repository.baseUrl).isEmpty()) {
|
if (source.getIcon(repository.baseUrl).isEmpty()) {
|
||||||
binding.itemImage.setBackgroundAndText(itm.title.getHtmlDecoded())
|
binding.itemImage.setBackgroundAndText(source.title.getHtmlDecoded())
|
||||||
} else {
|
} 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.visibility = View.VISIBLE
|
||||||
binding.errorText.text = itm.error
|
binding.errorText.text = source.error
|
||||||
} else {
|
} else {
|
||||||
binding.errorText.visibility = View.GONE
|
binding.errorText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.sourceTitle.text = itm.title.getHtmlDecoded()
|
binding.sourceTitle.text = source.title.getHtmlDecoded()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemId(position: Int) = position.toLong()
|
override fun getItemId(position: Int) = position.toLong()
|
||||||
@ -103,6 +82,35 @@ class SourcesListAdapter(
|
|||||||
|
|
||||||
override fun getItemCount(): Int = items.size
|
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(
|
inner class ViewHolder(
|
||||||
val mView: ConstraintLayout,
|
val mView: ConstraintLayout,
|
||||||
) : RecyclerView.ViewHolder(mView)
|
) : RecyclerView.ViewHolder(mView)
|
||||||
|
@ -131,4 +131,6 @@
|
|||||||
<string name="action_about">"About"</string>
|
<string name="action_about">"About"</string>
|
||||||
<string name="marked_as_read">"Item read"</string>
|
<string name="marked_as_read">"Item read"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</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>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user