From d90aaa72bcc9c0b0f15f11ce2bfe645b9d94d7ba Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 4 Jul 2019 16:32:20 +0200 Subject: [PATCH] Improve comment deletion --- .../android/model/realm/Comment.kt | 4 ++ .../android/model/realm/CustomField.kt | 7 ++-- .../android/model/realm/Player.kt | 15 ++++++++ .../ui/fragment/data/PlayerDataFragment.kt | 38 +++++++++---------- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Comment.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Comment.kt index 47d57191..efd4dab0 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Comment.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Comment.kt @@ -37,6 +37,9 @@ open class Comment : RealmObject(), Manageable, RowRepresentable { @Ignore override val inputFragmentType: InputFragmentType = InputFragmentType.EDIT_TEXT_MULTI_LINES + @Ignore + override val valueCanBeClearedWhenEditing: Boolean = false + override fun localizedTitle(context: Context): String { return context.getString(R.string.comment) } @@ -53,6 +56,7 @@ open class Comment : RealmObject(), Manageable, RowRepresentable { InputFragment.buildAndShow(this, parent, data, isDeletable = true) } + override fun updateValue(value: Any?, row: RowRepresentable) { this.content = value as String? ?: "" } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt index bd98946d..7c0eb30d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt @@ -19,8 +19,8 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.input.InputFragment import net.pokeranalytics.android.ui.fragment.components.input.InputFragmentType -import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowEditableDataSource +import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldRow import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable @@ -253,10 +253,11 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa updateRowRepresentation() } + /** + * Cleanup deleted entries + */ fun cleanupEntries() { // called when saving the custom field - val realm = Realm.getDefaultInstance() - realm.executeTransaction { this.entriesToDelete.forEach { // entries are out of realm realm.where().equalTo("id", it.id).findFirst()?.deleteFromRealm() diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt index 482f6181..102d2aca 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt @@ -6,6 +6,7 @@ import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import io.realm.kotlin.where import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus @@ -151,4 +152,18 @@ open class Player : RealmObject(), NameManageable, Deletable, StaticRowRepresent updateRowRepresentation() } + /** + * Clean up deleted entries + */ + fun cleanupComments() { // called when saving the custom field + val realm = Realm.getDefaultInstance() + realm.executeTransaction { + this.commentsToDelete.forEach { // entries are out of realm + realm.where().equalTo("id", it.id).findFirst()?.deleteFromRealm() + } + } + realm.close() + this.commentsToDelete.clear() + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt index 7ce92df0..bfdce1ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt @@ -9,6 +9,10 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import kotlinx.android.synthetic.main.fragment_player.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Comment import net.pokeranalytics.android.model.realm.Player @@ -16,6 +20,7 @@ import net.pokeranalytics.android.ui.activity.ColorPickerActivity import net.pokeranalytics.android.ui.activity.components.MediaActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource +import net.pokeranalytics.android.ui.extensions.showAlertDialog import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.PlayerRow @@ -127,26 +132,15 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou super.onRowDeleted(row) when (row) { is Comment -> { - if (!row.isValidForDelete(getRealm())) { - - } else { - player.deleteComment(row) - rowRepresentableAdapter.notifyDataSetChanged() - } - - /* - if (!row.isValidForDelete(getRealm())) { - val status = row.getDeleteStatus(requireContext(), getRealm()) - val message = row.getFailedDeleteMessage(status) - showAlertDialog(requireContext(), R.string.cf_entry_delete_popup_title, message, showCancelButton = true, positiveAction = { - customField.deleteEntry(row) - rowRepresentableAdapter.notifyDataSetChanged() - }) - } else { - customField.deleteEntry(row) - rowRepresentableAdapter.notifyDataSetChanged() + if (row.isValidForDelete(getRealm())) { + GlobalScope.launch(Dispatchers.Main) { + delay(300) + showAlertDialog(requireContext(), message = R.string.are_you_sure_you_want_to_delete, showCancelButton = true, positiveAction = { + player.deleteComment(row) + rowRepresentableAdapter.notifyDataSetChanged() + }) + } } - */ } } } @@ -201,4 +195,10 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou builder.show() } + + override fun onDataSaved() { + super.onDataSaved() + player.cleanupComments() + } + } \ No newline at end of file