|
|
|
|
@ -5,19 +5,17 @@ import android.content.Intent |
|
|
|
|
import android.os.Bundle |
|
|
|
|
import android.view.Menu |
|
|
|
|
import android.view.MenuInflater |
|
|
|
|
import android.view.MenuItem |
|
|
|
|
import android.view.View |
|
|
|
|
import androidx.appcompat.app.AlertDialog |
|
|
|
|
import androidx.lifecycle.ViewModelProvider |
|
|
|
|
import io.realm.kotlin.isManaged |
|
|
|
|
import net.pokeranalytics.android.R |
|
|
|
|
import net.pokeranalytics.android.exceptions.ConfigurationException |
|
|
|
|
import net.pokeranalytics.android.model.interfaces.Savable |
|
|
|
|
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus |
|
|
|
|
import net.pokeranalytics.android.ui.fragment.components.RealmFragment |
|
|
|
|
import net.pokeranalytics.android.ui.modules.datalist.DataListActivity |
|
|
|
|
import net.pokeranalytics.android.ui.viewmodel.AddedDataViewModel |
|
|
|
|
import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel |
|
|
|
|
import timber.log.Timber |
|
|
|
|
|
|
|
|
|
open class DataManagerFragment : RealmFragment() { |
|
|
|
|
|
|
|
|
|
@ -25,6 +23,10 @@ open class DataManagerFragment : RealmFragment() { |
|
|
|
|
ViewModelProvider(this).get(modelClass) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected open val addedDataViewModel: AddedDataViewModel by lazy { |
|
|
|
|
ViewModelProvider(requireActivity()).get(AddedDataViewModel::class.java) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
open val modelClass: Class<out DataManagerViewModel> = DataManagerViewModel::class.java |
|
|
|
|
|
|
|
|
|
var deleteButtonShouldAppear = false |
|
|
|
|
@ -50,10 +52,22 @@ open class DataManagerFragment : RealmFragment() { |
|
|
|
|
menu.clear() |
|
|
|
|
inflater.inflate(R.menu.toolbar_editable_data, menu) |
|
|
|
|
this.editableMenu = menu |
|
|
|
|
setMenuListeners() |
|
|
|
|
updateMenuUI() |
|
|
|
|
super.onCreateOptionsMenu(menu, inflater) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun setMenuListeners() { |
|
|
|
|
editableMenu?.findItem(R.id.delete)?.setOnMenuItemClickListener { |
|
|
|
|
deleteData() |
|
|
|
|
return@setOnMenuItemClickListener true |
|
|
|
|
} |
|
|
|
|
editableMenu?.findItem(R.id.save)?.setOnMenuItemClickListener { |
|
|
|
|
saveData() |
|
|
|
|
return@setOnMenuItemClickListener true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Update menu UI |
|
|
|
|
*/ |
|
|
|
|
@ -62,13 +76,13 @@ open class DataManagerFragment : RealmFragment() { |
|
|
|
|
editableMenu?.findItem(R.id.save)?.isVisible = this.saveButtonShouldAppear |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean { |
|
|
|
|
when (item.itemId) { |
|
|
|
|
R.id.save -> saveData() |
|
|
|
|
R.id.delete -> deleteData() |
|
|
|
|
} |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
// override fun onOptionsItemSelected(item: MenuItem): Boolean { |
|
|
|
|
// when (item.itemId) { |
|
|
|
|
// R.id.save -> saveData() |
|
|
|
|
// R.id.delete -> deleteData() |
|
|
|
|
// } |
|
|
|
|
// return true |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Init data |
|
|
|
|
@ -93,15 +107,20 @@ open class DataManagerFragment : RealmFragment() { |
|
|
|
|
val status = savable.getSaveValidityStatus(realm = this.getRealm()) |
|
|
|
|
when (status) { |
|
|
|
|
SaveValidityStatus.VALID -> { |
|
|
|
|
Timber.d("ismanaged = ${this.model.item.isManaged()}") |
|
|
|
|
|
|
|
|
|
this.getRealm().executeTransactionAsync { asyncRealm -> |
|
|
|
|
val managedItem = asyncRealm.copyToRealmOrUpdate(this.model.item) |
|
|
|
|
if (managedItem is Savable) { |
|
|
|
|
val uniqueIdentifier = managedItem.id |
|
|
|
|
finishActivityWithResult(uniqueIdentifier) |
|
|
|
|
} |
|
|
|
|
asyncRealm.copyToRealmOrUpdate(savable) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onDataSaved() |
|
|
|
|
|
|
|
|
|
if (this.addedDataViewModel.dataForAdd) { |
|
|
|
|
this.addedDataViewModel.data.value = savable |
|
|
|
|
this.parentActivity?.supportFragmentManager?.popBackStack() |
|
|
|
|
} else { |
|
|
|
|
val uniqueIdentifier = savable.id |
|
|
|
|
finishActivityWithResult(uniqueIdentifier) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else -> { |
|
|
|
|
val message = savable.getFailedSaveMessage(status) |
|
|
|
|
|