Making DataListFragment deletableItems Deletable by default

dev
Laurent 7 years ago
parent df73f1ed65
commit 1d4ffa5a24
  1. 15
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  3. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt
  4. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  6. 18
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/DeletableItemFragment.kt
  7. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/DataManagerFragment.kt

@ -2,9 +2,8 @@ package net.pokeranalytics.android.model
import android.content.Context import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.RealmModel
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.Localizable import net.pokeranalytics.android.ui.view.Localizable
import net.pokeranalytics.android.util.extensions.findById import net.pokeranalytics.android.util.extensions.findById
@ -24,7 +23,7 @@ enum class LiveData : Localizable {
CUSTOM_FIELD, CUSTOM_FIELD,
REPORT_SETUP; REPORT_SETUP;
val relatedEntity: Class<out Identifiable> val relatedEntity: Class<out Deletable>
get() { get() {
return when (this) { return when (this) {
BANKROLL -> Bankroll::class.java BANKROLL -> Bankroll::class.java
@ -40,8 +39,8 @@ enum class LiveData : Localizable {
} }
} }
fun updateOrCreate(realm: Realm, primaryKey: String?): RealmModel { fun updateOrCreate(realm: Realm, primaryKey: String?): Deletable {
val proxyItem: Identifiable? = this.getData(realm, primaryKey) val proxyItem: Deletable? = this.getData(realm, primaryKey)
proxyItem?.let { proxyItem?.let {
return realm.copyFromRealm(it) return realm.copyFromRealm(it)
} ?: run { } ?: run {
@ -49,12 +48,12 @@ enum class LiveData : Localizable {
} }
} }
private fun newEntity(): RealmModel { private fun newEntity(): Deletable {
return this.relatedEntity.newInstance() return this.relatedEntity.newInstance()
} }
fun getData(realm: Realm, primaryKey: String?): Identifiable? { fun getData(realm: Realm, primaryKey: String?): Deletable? {
var proxyItem: Identifiable? = null var proxyItem: Deletable? = null
primaryKey?.let { primaryKey?.let {
val t = realm.findById(this.relatedEntity, it) val t = realm.findById(this.relatedEntity, it)
t?.let { t?.let {

@ -21,7 +21,7 @@ enum class DeleteValidityStatus {
} }
/** /**
* An interface to grouped object which are managed by the database * An interface to group object which are managed by the database
*/ */
interface Manageable : Savable, Deletable, Editable interface Manageable : Savable, Deletable, Editable

@ -22,6 +22,7 @@ import net.pokeranalytics.android.calculus.bankroll.BankrollCalculator
import net.pokeranalytics.android.calculus.bankroll.BankrollReport import net.pokeranalytics.android.calculus.bankroll.BankrollReport
import net.pokeranalytics.android.calculus.bankroll.BankrollReportSetup import net.pokeranalytics.android.calculus.bankroll.BankrollReportSetup
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.activity.BankrollDetailsActivity import net.pokeranalytics.android.ui.activity.BankrollDetailsActivity
@ -59,8 +60,6 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
} }
} }
private lateinit var bankrollAdapter: RowRepresentableAdapter
private var rows: ArrayList<RowRepresentable> = ArrayList() private var rows: ArrayList<RowRepresentable> = ArrayList()
private var bankrollReportForRow: HashMap<RowRepresentable, BankrollReport> = HashMap() private var bankrollReportForRow: HashMap<RowRepresentable, BankrollReport> = HashMap()
private var lastItemClickedPosition: Int = 0 private var lastItemClickedPosition: Int = 0
@ -69,7 +68,7 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
private lateinit var bankrolls: RealmResults<Bankroll> private lateinit var bankrolls: RealmResults<Bankroll>
override fun deletableItems() : List<Identifiable> { override fun deletableItems() : List<Deletable> {
return this.bankrolls return this.bankrolls
} }

@ -13,6 +13,7 @@ import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.* import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
@ -33,12 +34,12 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
const val REQUEST_CODE_DETAILS = 1000 const val REQUEST_CODE_DETAILS = 1000
} }
private lateinit var identifiableClass: Class<out Identifiable> private lateinit var identifiableClass: Class<out Deletable>
private lateinit var dataType: LiveData private lateinit var dataType: LiveData
private lateinit var items: RealmResults<out Identifiable> private lateinit var items: RealmResults<out Deletable>
override fun deletableItems() : List<Identifiable> { override fun deletableItems() : List<Deletable> {
return this.items return this.items
} }

@ -20,7 +20,7 @@ import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.ReportSetup import net.pokeranalytics.android.model.realm.ReportSetup
import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.ReportCreationActivity import net.pokeranalytics.android.ui.activity.ReportCreationActivity
@ -42,7 +42,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc
private lateinit var reportSetups: RealmResults<ReportSetup> private lateinit var reportSetups: RealmResults<ReportSetup>
private var adapterRows = mutableListOf<RowRepresentable>() private var adapterRows = mutableListOf<RowRepresentable>()
override fun deletableItems(): List<Identifiable> { override fun deletableItems(): List<Deletable> {
return this.reportSetups return this.reportSetups
} }

@ -14,13 +14,13 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
/** /**
* Deletable Item Fragment * Deletable Item Fragment
* Don't forget to add a CoordinatorLayout at the top of your XML if you want to display correctly the snack bar * Don't forget to add a CoordinatorLayout at the top of your XML
* if you want to display correctly the snack bar
*/ */
abstract class DeletableItemFragment : RealmFragment() { abstract class DeletableItemFragment : RealmFragment() {
@ -37,7 +37,7 @@ abstract class DeletableItemFragment : RealmFragment() {
private var mainLayout: ViewGroup? = null private var mainLayout: ViewGroup? = null
private var snackBar: Snackbar? = null private var snackBar: Snackbar? = null
abstract fun deletableItems() : List<Identifiable> abstract fun deletableItems() : List<Deletable>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -60,7 +60,6 @@ abstract class DeletableItemFragment : RealmFragment() {
deleteItem(dataListAdapter, deletableItems(), id) deleteItem(dataListAdapter, deletableItems(), id)
} }
} }
} }
} }
@ -69,9 +68,8 @@ abstract class DeletableItemFragment : RealmFragment() {
* [dataListAdapter]: Adapter to update * [dataListAdapter]: Adapter to update
* [items]: List of items which contains the element to delete * [items]: List of items which contains the element to delete
* [itemId]: Id of the item to delete * [itemId]: Id of the item to delete
* [container]: View to display the Snackbar
*/ */
fun deleteItem(dataListAdapter: RowRepresentableAdapter, items: List<Identifiable>, itemId: String) { fun deleteItem(dataListAdapter: RowRepresentableAdapter, items: List<Deletable>, itemId: String) {
if (isDetached || activity == null) { if (isDetached || activity == null) {
return return
@ -85,10 +83,8 @@ abstract class DeletableItemFragment : RealmFragment() {
if (itemToDelete is RealmObject && itemPosition != -1) { if (itemToDelete is RealmObject && itemPosition != -1) {
val deletableItem = (itemToDelete as Deletable)
// Check if the object is valid for the deletion // Check if the object is valid for the deletion
if (deletableItem.isValidForDelete(this.getRealm())) { if (itemToDelete.isValidForDelete(this.getRealm())) {
deletedItem = getRealm().copyFromRealm(itemToDelete) deletedItem = getRealm().copyFromRealm(itemToDelete)
lastDeletedItemPosition = itemPosition lastDeletedItemPosition = itemPosition
getRealm().executeTransaction { getRealm().executeTransaction {
@ -100,8 +96,8 @@ abstract class DeletableItemFragment : RealmFragment() {
showUndoSnackBar() showUndoSnackBar()
} else { } else {
dataListAdapter.notifyItemChanged(itemPosition) dataListAdapter.notifyItemChanged(itemPosition)
val status = deletableItem.getDeleteStatus(requireContext(), this.getRealm()) val status = itemToDelete.getDeleteStatus(requireContext(), this.getRealm())
val message = deletableItem.getFailedDeleteMessage(status) val message = itemToDelete.getFailedDeleteMessage(status)
val builder = AlertDialog.Builder(requireContext()) val builder = AlertDialog.Builder(requireContext())
.setMessage(message) .setMessage(message)
.setNegativeButton(R.string.ok, null) .setNegativeButton(R.string.ok, null)

@ -8,7 +8,6 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import io.realm.RealmModel
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ConfigurationException import net.pokeranalytics.android.exceptions.ConfigurationException
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
@ -21,7 +20,7 @@ import net.pokeranalytics.android.ui.fragment.components.RealmFragment
open class DataManagerFragment : RealmFragment() { open class DataManagerFragment : RealmFragment() {
lateinit var item: RealmModel lateinit var item: Deletable
lateinit var liveDataType: LiveData lateinit var liveDataType: LiveData
protected var primaryKey: String? = null protected var primaryKey: String? = null
@ -123,17 +122,16 @@ open class DataManagerFragment : RealmFragment() {
*/ */
protected open fun deleteData() { protected open fun deleteData() {
val deletable = this.item as Deletable
val realm = this.getRealm() val realm = this.getRealm()
if (deletable.isValidForDelete(realm)) { if (this.item.isValidForDelete(realm)) {
val intent = Intent() val intent = Intent()
intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, deletable.id) intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, this.item.id)
activity?.setResult(Activity.RESULT_OK, intent) activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish() activity?.finish()
} else { } else {
val status = deletable.getDeleteStatus(requireContext(), realm) val status = this.item.getDeleteStatus(requireContext(), realm)
val message = deletable.getFailedDeleteMessage(status) val message = this.item.getFailedDeleteMessage(status)
val builder = AlertDialog.Builder(requireContext()) val builder = AlertDialog.Builder(requireContext())
.setMessage(message) .setMessage(message)
.setNegativeButton(R.string.ok, null) .setNegativeButton(R.string.ok, null)

Loading…
Cancel
Save