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

@ -22,6 +22,7 @@ import net.pokeranalytics.android.calculus.bankroll.BankrollCalculator
import net.pokeranalytics.android.calculus.bankroll.BankrollReport
import net.pokeranalytics.android.calculus.bankroll.BankrollReportSetup
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.realm.Bankroll
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 bankrollReportForRow: HashMap<RowRepresentable, BankrollReport> = HashMap()
private var lastItemClickedPosition: Int = 0
@ -69,7 +68,7 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour
private lateinit var bankrolls: RealmResults<Bankroll>
override fun deletableItems() : List<Identifiable> {
override fun deletableItems() : List<Deletable> {
return this.bankrolls
}

@ -13,6 +13,7 @@ import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
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.realm.Filter
import net.pokeranalytics.android.ui.activity.EditableDataActivity
@ -33,12 +34,12 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
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 items: RealmResults<out Identifiable>
private lateinit var items: RealmResults<out Deletable>
override fun deletableItems() : List<Identifiable> {
override fun deletableItems() : List<Deletable> {
return this.items
}

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

@ -14,13 +14,13 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
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.adapter.RowRepresentableAdapter
/**
* 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() {
@ -37,7 +37,7 @@ abstract class DeletableItemFragment : RealmFragment() {
private var mainLayout: ViewGroup? = null
private var snackBar: Snackbar? = null
abstract fun deletableItems() : List<Identifiable>
abstract fun deletableItems() : List<Deletable>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -60,7 +60,6 @@ abstract class DeletableItemFragment : RealmFragment() {
deleteItem(dataListAdapter, deletableItems(), id)
}
}
}
}
@ -69,9 +68,8 @@ abstract class DeletableItemFragment : RealmFragment() {
* [dataListAdapter]: Adapter to update
* [items]: List of items which contains the element 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) {
return
@ -85,10 +83,8 @@ abstract class DeletableItemFragment : RealmFragment() {
if (itemToDelete is RealmObject && itemPosition != -1) {
val deletableItem = (itemToDelete as Deletable)
// Check if the object is valid for the deletion
if (deletableItem.isValidForDelete(this.getRealm())) {
if (itemToDelete.isValidForDelete(this.getRealm())) {
deletedItem = getRealm().copyFromRealm(itemToDelete)
lastDeletedItemPosition = itemPosition
getRealm().executeTransaction {
@ -100,8 +96,8 @@ abstract class DeletableItemFragment : RealmFragment() {
showUndoSnackBar()
} else {
dataListAdapter.notifyItemChanged(itemPosition)
val status = deletableItem.getDeleteStatus(requireContext(), this.getRealm())
val message = deletableItem.getFailedDeleteMessage(status)
val status = itemToDelete.getDeleteStatus(requireContext(), this.getRealm())
val message = itemToDelete.getFailedDeleteMessage(status)
val builder = AlertDialog.Builder(requireContext())
.setMessage(message)
.setNegativeButton(R.string.ok, null)

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

Loading…
Cancel
Save