|
|
|
|
@ -25,11 +25,16 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat |
|
|
|
|
lateinit var item: RealmObject |
|
|
|
|
lateinit var rowRepresentableAdapter: RowRepresentableAdapter |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private var rows: ArrayList<RowRepresentable> = ArrayList() |
|
|
|
|
private var rowsForFilterSubcategory: HashMap<FilterSubcategoryRow, ArrayList<RowRepresentable>> = HashMap() |
|
|
|
|
|
|
|
|
|
private var filterMenu: Menu? = null |
|
|
|
|
private var filterCategory: FilterCategoryRow? = null |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val selectedRows = ArrayList<RowRepresentable>() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var isUpdating = false |
|
|
|
|
var shouldOpenKeyboard = true |
|
|
|
|
|
|
|
|
|
@ -64,29 +69,51 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat |
|
|
|
|
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { |
|
|
|
|
super.onRowSelected(position, row, fromAction) |
|
|
|
|
|
|
|
|
|
val oldRows = ArrayList<RowRepresentable>() |
|
|
|
|
oldRows.addAll(rows) |
|
|
|
|
|
|
|
|
|
filterCategory?.let { |
|
|
|
|
for (subcategory in it.getSubcategories()) { |
|
|
|
|
if (subcategory.getFilterRows(getRealm()).contains(row)) { |
|
|
|
|
if (subcategory.getType() == FilterSubcategoryRow.Type.SINGLE) { |
|
|
|
|
for (filterRow in subcategory.getFilterRows(getRealm())) { |
|
|
|
|
selectedRows.remove(filterRow) |
|
|
|
|
if (selectedRows.contains(row)) { |
|
|
|
|
selectedRows.remove(row) |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
val excludedRows = ArrayList<RowRepresentable>() |
|
|
|
|
|
|
|
|
|
// Exclude the rows of the same subcategory if we are an a single row selection |
|
|
|
|
if (row.subcategoryRow()?.getType() == FilterSubcategoryRow.Type.SINGLE) { |
|
|
|
|
row.subcategoryRow()?.let { filterSubcategory -> |
|
|
|
|
rowsForFilterSubcategory[filterSubcategory]?.let { filterRows -> |
|
|
|
|
excludedRows.addAll(filterRows) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Exclude the filter rows of the subcategories |
|
|
|
|
row.excludedFilterSubcategoryRows()?.let { subcategories -> |
|
|
|
|
for (subcategory in subcategories) { |
|
|
|
|
rowsForFilterSubcategory[subcategory]?.let { rows -> |
|
|
|
|
excludedRows.addAll(rows) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Exclude the filter rows |
|
|
|
|
row.excludedFilterRows()?.let { |
|
|
|
|
excludedRows.addAll(it) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (filterRow in excludedRows) { |
|
|
|
|
if (selectedRows.contains(filterRow)) { |
|
|
|
|
selectedRows.remove(filterRow) |
|
|
|
|
rowRepresentableAdapter.refreshRow(filterRow) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (selectedRows.contains(row)) { |
|
|
|
|
selectedRows.remove(row) |
|
|
|
|
} else { |
|
|
|
|
selectedRows.add(row) |
|
|
|
|
} |
|
|
|
|
rowRepresentableAdapter.refreshRow(row) |
|
|
|
|
|
|
|
|
|
rowRepresentableAdapter.notifyDataSetChanged() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val selectedRows = ArrayList<RowRepresentable>() |
|
|
|
|
|
|
|
|
|
override fun isSelected(row: RowRepresentable): Boolean { |
|
|
|
|
return selectedRows.contains(row) |
|
|
|
|
@ -149,9 +176,14 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat |
|
|
|
|
this.appBar.toolbar.title = it.localizedTitle(requireContext()) |
|
|
|
|
|
|
|
|
|
this.rows.clear() |
|
|
|
|
this.rowsForFilterSubcategory.clear() |
|
|
|
|
|
|
|
|
|
for (subcategory in it.getSubcategories()) { |
|
|
|
|
this.rows.add(subcategory) |
|
|
|
|
this.rows.addAll(subcategory.getFilterRows(getRealm())) |
|
|
|
|
|
|
|
|
|
val subcategoryRows = subcategory.getFilterRows(getRealm()) |
|
|
|
|
this.rowsForFilterSubcategory.put(subcategory, subcategoryRows) |
|
|
|
|
this.rows.addAll(subcategoryRows) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this) |
|
|
|
|
|