|
|
|
|
@ -46,7 +46,7 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep |
|
|
|
|
|
|
|
|
|
private var deletedItem: RealmObject? = null |
|
|
|
|
private var lastDeletedItemPosition: Int = 0 |
|
|
|
|
private var lastItemClickedPosition: Int = 0 |
|
|
|
|
private var lastItemClickedId: String = "" |
|
|
|
|
|
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { |
|
|
|
|
super.onCreateView(inflater, container, savedInstanceState) |
|
|
|
|
@ -61,11 +61,12 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep |
|
|
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { |
|
|
|
|
super.onActivityResult(requestCode, resultCode, data) |
|
|
|
|
if (requestCode == REQUEST_CODE_DETAILS && resultCode == Activity.RESULT_OK) { |
|
|
|
|
val needToDeleteItem = data?.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false) ?: false |
|
|
|
|
val needToDeleteItem = |
|
|
|
|
data?.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false) ?: false |
|
|
|
|
if (needToDeleteItem) { |
|
|
|
|
GlobalScope.launch(Dispatchers.Main) { |
|
|
|
|
delay(300) |
|
|
|
|
deleteItem(lastItemClickedPosition) |
|
|
|
|
deleteItem(lastItemClickedId) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -95,20 +96,15 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep |
|
|
|
|
|
|
|
|
|
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { |
|
|
|
|
this.dataType?.let { |
|
|
|
|
if (it == LiveData.FILTER) { |
|
|
|
|
val intent = Intent() |
|
|
|
|
intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, (row as Filter).id) |
|
|
|
|
activity?.setResult(Activity.RESULT_OK, intent) |
|
|
|
|
activity?.finish() |
|
|
|
|
} else { |
|
|
|
|
lastItemClickedPosition = position |
|
|
|
|
EditableDataActivity.newInstanceForResult( |
|
|
|
|
this, |
|
|
|
|
it.ordinal, |
|
|
|
|
(row as Identifiable).id, |
|
|
|
|
REQUEST_CODE_DETAILS |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
if (it == LiveData.FILTER) { |
|
|
|
|
val intent = Intent() |
|
|
|
|
intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, (row as Filter).id) |
|
|
|
|
activity?.setResult(Activity.RESULT_OK, intent) |
|
|
|
|
activity?.finish() |
|
|
|
|
} else { |
|
|
|
|
lastItemClickedId = (row as Identifiable).id |
|
|
|
|
EditableDataActivity.newInstanceForResult(this, it.ordinal, lastItemClickedId, REQUEST_CODE_DETAILS) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -130,7 +126,7 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep |
|
|
|
|
dataListAdapter = RowRepresentableAdapter(this, this) |
|
|
|
|
|
|
|
|
|
val swipeToDelete = SwipeToDeleteCallback(dataListAdapter) { position -> |
|
|
|
|
deleteItem(position) |
|
|
|
|
deleteItem((this.items[position] as Identifiable).id) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val itemTouchHelper = ItemTouchHelper(swipeToDelete) |
|
|
|
|
@ -156,30 +152,31 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep |
|
|
|
|
/** |
|
|
|
|
* Delete item |
|
|
|
|
*/ |
|
|
|
|
private fun deleteItem(position: Int) { |
|
|
|
|
private fun deleteItem(itemId: String) { |
|
|
|
|
|
|
|
|
|
if (isDetached || activity == null) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Save the delete position & create a copy of the object |
|
|
|
|
val mRecentlyDeletedItem = rowRepresentableForPosition(position) |
|
|
|
|
lastDeletedItemPosition = position |
|
|
|
|
val itemPosition = this.items.indexOfFirst { (it as Identifiable).id == itemId } |
|
|
|
|
val itemToDelete = this.items.find { (it as Identifiable).id == itemId } |
|
|
|
|
|
|
|
|
|
if (mRecentlyDeletedItem is RealmObject) { |
|
|
|
|
if (itemToDelete is RealmObject && itemPosition != -1) { |
|
|
|
|
|
|
|
|
|
// Check if the object is valid for the deletion |
|
|
|
|
if ((mRecentlyDeletedItem as Deletable).isValidForDelete(this.getRealm())) { |
|
|
|
|
deletedItem = getRealm().copyFromRealm(mRecentlyDeletedItem) |
|
|
|
|
if ((itemToDelete as Deletable).isValidForDelete(this.getRealm())) { |
|
|
|
|
deletedItem = getRealm().copyFromRealm(itemToDelete) |
|
|
|
|
lastDeletedItemPosition = itemPosition |
|
|
|
|
getRealm().executeTransaction { |
|
|
|
|
mRecentlyDeletedItem.deleteFromRealm() |
|
|
|
|
itemToDelete.deleteFromRealm() |
|
|
|
|
} |
|
|
|
|
dataListAdapter.notifyItemRemoved(position) |
|
|
|
|
dataListAdapter.notifyItemRemoved(itemPosition) |
|
|
|
|
showUndoSnackBar() |
|
|
|
|
} else { |
|
|
|
|
dataListAdapter.notifyItemChanged(position) |
|
|
|
|
dataListAdapter.notifyItemChanged(itemPosition) |
|
|
|
|
val builder = AlertDialog.Builder(requireContext()) |
|
|
|
|
.setMessage((mRecentlyDeletedItem as Deletable).getFailedDeleteMessage()) |
|
|
|
|
.setMessage((itemToDelete as Deletable).getFailedDeleteMessage()) |
|
|
|
|
.setNegativeButton(R.string.ok, null) |
|
|
|
|
builder.show() |
|
|
|
|
} |
|
|
|
|
|