|
|
|
|
@ -6,10 +6,8 @@ import android.os.Bundle |
|
|
|
|
import android.view.LayoutInflater |
|
|
|
|
import android.view.View |
|
|
|
|
import android.view.ViewGroup |
|
|
|
|
import androidx.appcompat.app.AlertDialog |
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager |
|
|
|
|
import com.github.mikephil.charting.data.LineDataSet |
|
|
|
|
import io.realm.Realm |
|
|
|
|
import io.realm.RealmObject |
|
|
|
|
import io.realm.RealmResults |
|
|
|
|
import kotlinx.android.synthetic.main.fragment_bankroll.* |
|
|
|
|
@ -25,7 +23,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 |
|
|
|
|
import net.pokeranalytics.android.ui.activity.DataListActivity |
|
|
|
|
@ -66,9 +64,9 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour |
|
|
|
|
|
|
|
|
|
private var rows: ArrayList<RowRepresentable> = ArrayList() |
|
|
|
|
private var bankrollReportForRow: HashMap<RowRepresentable, BankrollReport> = HashMap() |
|
|
|
|
private var deletedItem: RealmObject? = null |
|
|
|
|
private var lastDeletedItemPosition: Int = 0 |
|
|
|
|
private var lastItemClickedPosition: Int = 0 |
|
|
|
|
private var lastItemClickedId: String = "" |
|
|
|
|
private var deletedRow: RowRepresentable? = null |
|
|
|
|
|
|
|
|
|
// Life Cycle |
|
|
|
|
|
|
|
|
|
@ -91,7 +89,7 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour |
|
|
|
|
if (needToDeleteItem) { |
|
|
|
|
GlobalScope.launch(Dispatchers.Main) { |
|
|
|
|
delay(300) |
|
|
|
|
deleteItem(lastItemClickedPosition) |
|
|
|
|
deleteItem(bankrollAdapter, LiveData.BANKROLL.items(getRealm()), lastItemClickedId) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (requestCode == REQUEST_CODE_CREATE && resultCode == Activity.RESULT_OK) { |
|
|
|
|
@ -115,6 +113,7 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour |
|
|
|
|
if (bankrollReportForRow.containsKey(row)) { |
|
|
|
|
bankrollReportForRow[row]?.let { bankrollReport -> |
|
|
|
|
lastItemClickedPosition = position |
|
|
|
|
lastItemClickedId = (row as Identifiable).id |
|
|
|
|
BankrollDetailsActivity.newInstanceForResult(this, bankrollReport, REQUEST_CODE_DETAILS) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -136,6 +135,9 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour |
|
|
|
|
|
|
|
|
|
launch(Dispatchers.Main) { |
|
|
|
|
|
|
|
|
|
// TODO: Improve that |
|
|
|
|
// We are in the main thread... |
|
|
|
|
|
|
|
|
|
val startDate = Date() |
|
|
|
|
|
|
|
|
|
// Graph |
|
|
|
|
@ -152,14 +154,13 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour |
|
|
|
|
|
|
|
|
|
val bankrolls = LiveData.BANKROLL.items(getRealm()) as RealmResults<Bankroll> |
|
|
|
|
|
|
|
|
|
bankrolls.forEach { |
|
|
|
|
|
|
|
|
|
Timber.d("Bankroll: ${it.name} => isValidForDelete: ${it.isValidForDelete(Realm.getDefaultInstance())}") |
|
|
|
|
|
|
|
|
|
val bankrollReportSetup = BankrollReportSetup(it) |
|
|
|
|
bankrolls.forEach { bankroll -> |
|
|
|
|
val bankrollReportSetup = BankrollReportSetup(bankroll) |
|
|
|
|
val bankrollReport = BankrollCalculator.computeReport(getRealm(), bankrollReportSetup) |
|
|
|
|
val computedStat = ComputedStat(Stat.NET_RESULT, bankrollReport.total) |
|
|
|
|
val row = CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, title = it.name, computedStat = computedStat, isSelectable = true) |
|
|
|
|
val row = |
|
|
|
|
CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, title = bankroll.name, computedStat = computedStat, isSelectable = true) |
|
|
|
|
row.id = bankroll.id |
|
|
|
|
|
|
|
|
|
rows.add(row) |
|
|
|
|
bankrollReportForRow[row] = bankrollReport |
|
|
|
|
@ -201,68 +202,26 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun updateUIAfterDeletion(itemPosition: Int) { |
|
|
|
|
lastItemClickedPosition = rows.indexOfFirst { if (it is Identifiable) it.id == lastItemClickedId else false } |
|
|
|
|
deletedRow = rows.find { if (it is Identifiable) it.id == lastItemClickedId else false } |
|
|
|
|
rows.removeAt(lastItemClickedPosition) |
|
|
|
|
bankrollAdapter.notifyItemRemoved(lastItemClickedPosition) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Delete item |
|
|
|
|
*/ |
|
|
|
|
private fun deleteItem(position: Int) { |
|
|
|
|
|
|
|
|
|
//TODO: Get bankroll from bankrollReport and delete it |
|
|
|
|
|
|
|
|
|
if (isDetached || activity == null) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Save the delete position & create a copy of the object |
|
|
|
|
val bankrollReport = bankrollReportForRow[rowRepresentableForPosition(position)] |
|
|
|
|
val mRecentlyDeletedItem = bankrollReport?.setup?.bankroll |
|
|
|
|
lastDeletedItemPosition = position |
|
|
|
|
|
|
|
|
|
if (mRecentlyDeletedItem is Bankroll) { |
|
|
|
|
override fun updateUIAfterUndoDeletion(newItem: RealmObject) { |
|
|
|
|
|
|
|
|
|
val deletableItem = (mRecentlyDeletedItem as Deletable) |
|
|
|
|
// TODO: Improve that |
|
|
|
|
// We are recreating a Bankroll report because the last one if invalid => the bankroll of the setup has been deleted |
|
|
|
|
|
|
|
|
|
// Check if the object is valid for the deletion |
|
|
|
|
if (deletableItem.isValidForDelete(this.getRealm())) { |
|
|
|
|
deletedItem = getRealm().copyFromRealm(mRecentlyDeletedItem) |
|
|
|
|
getRealm().executeTransaction { |
|
|
|
|
mRecentlyDeletedItem.deleteFromRealm() |
|
|
|
|
} |
|
|
|
|
//bankrollAdapter.notifyItemRemoved(position) |
|
|
|
|
//showUndoSnackBar() |
|
|
|
|
|
|
|
|
|
//TODO: Refresh bankrolls |
|
|
|
|
initData() |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
bankrollAdapter.notifyItemChanged(position) |
|
|
|
|
val status = deletableItem.getDeleteStatus(this.getRealm()) |
|
|
|
|
val errorMessage = deletableItem.getFailedDeleteMessage(status) |
|
|
|
|
val builder = AlertDialog.Builder(requireContext()) |
|
|
|
|
.setMessage(errorMessage) |
|
|
|
|
.setNegativeButton(R.string.ok, null) |
|
|
|
|
builder.show() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
deletedRow?.let { row -> |
|
|
|
|
val bankrollReportSetup = BankrollReportSetup(newItem as Bankroll) |
|
|
|
|
val bankrollReport = BankrollCalculator.computeReport(getRealm(), bankrollReportSetup) |
|
|
|
|
bankrollReportForRow[row] = bankrollReport |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Show undo snack bar |
|
|
|
|
*/ |
|
|
|
|
private fun showUndoSnackBar() { |
|
|
|
|
/* |
|
|
|
|
val message = String.format(getString(R.string.data_deleted), getString(R.string.bankroll)) |
|
|
|
|
val snackBar = Snackbar.make(coordinatorLayout, message, Snackbar.LENGTH_INDEFINITE) |
|
|
|
|
snackBar.setAction(R.string.cancel) { |
|
|
|
|
getRealm().executeTransaction { realm -> |
|
|
|
|
deletedItem?.let { |
|
|
|
|
realm.copyToRealmOrUpdate(it) |
|
|
|
|
bankrollAdapter.notifyItemInserted(lastDeletedItemPosition) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
rows.add(lastItemClickedPosition, row) |
|
|
|
|
bankrollAdapter.notifyItemInserted(lastItemClickedPosition) |
|
|
|
|
} |
|
|
|
|
snackBar.show() |
|
|
|
|
*/ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |