diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/FilterDetailsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/FilterDetailsActivity.kt index 8d6b4148..62259941 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/FilterDetailsActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/FilterDetailsActivity.kt @@ -34,6 +34,7 @@ class FilterDetailsActivity : PokerAnalyticsActivity() { } } + private lateinit var fragment:FilterDetailsFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -41,6 +42,10 @@ class FilterDetailsActivity : PokerAnalyticsActivity() { initUI() } + override fun onBackPressed() { + fragment.onBackPressed() + } + /** * Init UI */ @@ -50,7 +55,7 @@ class FilterDetailsActivity : PokerAnalyticsActivity() { val fragmentTransaction = fragmentManager.beginTransaction() val filterCategoryOrdinal = intent.getIntExtra(IntentKey.FILTER_CATEGORY_ORDINAL.keyName, 0) - val fragment = FilterDetailsFragment() + fragment = FilterDetailsFragment() fragmentTransaction.add(R.id.container, fragment) fragmentTransaction.commit() fragment.setData(filterCategoryOrdinal) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt index 70652990..61003c35 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt @@ -15,6 +15,8 @@ class FiltersActivity : PokerAnalyticsActivity() { PRIMARY_KEY("PRIMARY_KEY"); } + private lateinit var fragment: FiltersFragment + companion object { /** * Default constructor @@ -33,13 +35,16 @@ class FiltersActivity : PokerAnalyticsActivity() { } } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_filters) initUI() } + override fun onBackPressed() { + fragment.onBackPressed() + } + /** * Init UI */ @@ -48,10 +53,11 @@ class FiltersActivity : PokerAnalyticsActivity() { val fragmentManager = supportFragmentManager val fragmentTransaction = fragmentManager.beginTransaction() - val fragment = FiltersFragment() + fragment = FiltersFragment() fragmentTransaction.add(R.id.container, fragment) fragmentTransaction.commit() - //fragment.setData(dataType, primaryKey) + //TODO: send primary key + fragment.setData("") } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt index 22febecc..5ab0e2b9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt @@ -51,7 +51,7 @@ open class PokerAnalyticsActivity : AppCompatActivity() { override fun onOptionsItemSelected(item: MenuItem?): Boolean { item?.let { if (it.itemId == android.R.id.home) { - finish() + onBackPressed() } } return super.onOptionsItemSelected(item) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt index 143369a3..c3e52fff 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt @@ -1,7 +1,10 @@ package net.pokeranalytics.android.ui.fragment import android.os.Bundle -import android.view.* +import android.view.LayoutInflater +import android.view.Menu +import android.view.View +import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import io.realm.RealmObject import kotlinx.android.synthetic.main.fragment_filter_details.* @@ -12,9 +15,11 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow +import net.pokeranalytics.android.ui.view.rowrepresentable.FilterRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSubcategoryRow import timber.log.Timber @@ -48,22 +53,9 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat initData() } - override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { - /* - inflater?.inflate(R.menu.editable_data, menu) - this.filterMenu = menu - */ - updateMenuUI() - super.onCreateOptionsMenu(menu, inflater) - } - - - override fun onOptionsItemSelected(item: MenuItem?): Boolean { - when (item!!.itemId) { - R.id.save -> saveData() - R.id.delete -> deleteData() - } - return true + override fun onBackPressed() { + super.onBackPressed() + saveData() } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { @@ -112,8 +104,11 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat } rowRepresentableAdapter.refreshRow(row) - } + when(row) { + FilterRow.FROM -> BottomSheetFragment.create(fragmentManager, row, this, null) + } + } override fun isSelected(row: RowRepresentable): Boolean { return selectedRows.contains(row) @@ -192,60 +187,17 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat } - /** - * Update menu UI - */ - private fun updateMenuUI() { - /* - editableMenu?.findItem(R.id.delete)?.isVisible = isUpdating - editableMenu?.findItem(R.id.save)?.isVisible = true - */ - } /** * Save data */ - fun saveData() { - /* - if ((this.item as Savable).isValidForSave()) { - this.getRealm().executeTransaction { - val item = it.copyToRealmOrUpdate(this.item) - - val uniqueIdentifier = if (item is Identifiable) { - item.id - } else "" + private fun saveData() { - finishActivityWithResult(uniqueIdentifier) - } - } else { - val message = (this.item as Savable).getFailedSaveMessage() - val builder = AlertDialog.Builder(requireContext()) - .setMessage(message) - .setNegativeButton(R.string.ok, null) - builder.show() - } - */ + //TODO: Save filter details data + Timber.d("Save filter details data") + finishActivityWithResult("") } - /** - * Delete data - */ - private fun deleteData() { - /* - val builder = AlertDialog.Builder(requireContext()) - builder.setTitle(R.string.warning) - .setMessage(R.string.are_you_sure_you_want_to_do_that_) - .setNegativeButton(R.string.no, null) - .setPositiveButton(R.string.yes) { _, _ -> - //TODO: Maybe update this code, does the object need to be managed? - this.getRealm().executeTransaction { - this.liveDataType.deleteData(it, (this.item as Manageable)) - } - this.activity?.finish() - } - builder.show() - */ - } /** * Finish the activity with a result diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt index ed9186d9..87eff49f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt @@ -1,5 +1,6 @@ package net.pokeranalytics.android.ui.fragment +import android.content.Intent import android.os.Bundle import android.view.* import androidx.recyclerview.widget.LinearLayoutManager @@ -20,17 +21,20 @@ import timber.log.Timber open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { + companion object { + const val REQUEST_CODE_FILTER_DETAILS = 100 + } + lateinit var parentActivity: PokerAnalyticsActivity lateinit var item: RealmObject lateinit var rowRepresentableAdapter: RowRepresentableAdapter private var rows: ArrayList = ArrayList() private var filterMenu: Menu? = null - private var dataType: Int? = null private var primaryKey: String? = null + private var selectedRow: RowRepresentable? = null var isUpdating = false - var shouldOpenKeyboard = true override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_filters, container, false) @@ -42,15 +46,34 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat initData() } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + if (requestCode == REQUEST_CODE_FILTER_DETAILS) { + + Timber.d("onActivityResult: $requestCode") + + // TODO: Update the selected row here... + selectedRow?.let { + rowRepresentableAdapter.refreshRow(it) + } + } + } + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { - /* inflater?.inflate(R.menu.editable_data, menu) this.filterMenu = menu - */ updateMenuUI() super.onCreateOptionsMenu(menu, inflater) } + override fun onBackPressed() { + super.onBackPressed() + + //TODO: Cancel changes on the Filter object + + finishActivityWithResult("") + } override fun onOptionsItemSelected(item: MenuItem?): Boolean { when (item!!.itemId) { @@ -69,7 +92,8 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat if (row is FilterCategoryRow) { Timber.d("Subcategories: ${row.getSubcategories()}") - FilterDetailsActivity.newInstanceForResult(this, row.ordinal, 1000) + selectedRow = row + FilterDetailsActivity.newInstanceForResult(this, row.ordinal, REQUEST_CODE_FILTER_DETAILS) } } @@ -113,55 +137,28 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat * Update menu UI */ private fun updateMenuUI() { - /* - editableMenu?.findItem(R.id.delete)?.isVisible = isUpdating - editableMenu?.findItem(R.id.save)?.isVisible = true - */ + filterMenu?.findItem(R.id.delete)?.isVisible = isUpdating + filterMenu?.findItem(R.id.save)?.isVisible = true } /** * Save data */ - fun saveData() { - /* - if ((this.item as Savable).isValidForSave()) { - this.getRealm().executeTransaction { - val item = it.copyToRealmOrUpdate(this.item) + private fun saveData() { - val uniqueIdentifier = if (item is Identifiable) { - item.id - } else "" + // TODO: Save the filter object here + // Maybe we don't need to do anything because the object is already up to date - finishActivityWithResult(uniqueIdentifier) - } - } else { - val message = (this.item as Savable).getFailedSaveMessage() - val builder = AlertDialog.Builder(requireContext()) - .setMessage(message) - .setNegativeButton(R.string.ok, null) - builder.show() - } - */ + finishActivityWithResult("") } /** * Delete data */ private fun deleteData() { - /* - val builder = AlertDialog.Builder(requireContext()) - builder.setTitle(R.string.warning) - .setMessage(R.string.are_you_sure_you_want_to_do_that_) - .setNegativeButton(R.string.no, null) - .setPositiveButton(R.string.yes) { _, _ -> - //TODO: Maybe update this code, does the object need to be managed? - this.getRealm().executeTransaction { - this.liveDataType.deleteData(it, (this.item as Manageable)) - } - this.activity?.finish() - } - builder.show() - */ + + // TODO: Delete the filter object here + } /** @@ -180,12 +177,8 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat /** * Set fragment data */ - fun setData(dataType: Int, primaryKey: String?) { - /* - this.dataType = dataType - this.liveDataType = LiveData.values()[dataType] + fun setData(primaryKey: String?) { this.primaryKey = primaryKey - */ } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index a067ea5c..fad5f61b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -314,7 +314,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { /** * Called when the user pressed back on the parent activity */ - fun onBackPressed() { + override fun onBackPressed() { + super.onBackPressed() if (!sessionHasBeenCustomized) { currentSession.delete() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt index b333ee94..fb720dc9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt @@ -25,4 +25,9 @@ open class PokerAnalyticsFragment: Fragment() { return realm } + /** + * Method called when the activity override onBackPressed and send the information to the fragment + */ + open fun onBackPressed(){} + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index a8ec6bbc..4671f50b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -41,7 +41,6 @@ enum class RowViewType(private var layoutRes: Int) { INFO(R.layout.row_info), // Row - CLASSIC_HEADER_TITLE(R.layout.row_header_title), TITLE(R.layout.row_title), TITLE_ARROW(R.layout.row_title_arrow), TITLE_VALUE(R.layout.row_title_value), @@ -51,6 +50,7 @@ enum class RowViewType(private var layoutRes: Int) { DATA(R.layout.row_title), BOTTOM_SHEET_DATA(R.layout.row_bottom_sheet_title), TITLE_CHECK(R.layout.row_title_check), + TITLE_VALUE_CHECK(R.layout.row_title_value_check), LOADER(R.layout.row_loader), // Custom row @@ -72,11 +72,11 @@ enum class RowViewType(private var layoutRes: Int) { return when (this) { - // Customizable Row View Holder - HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, LOCATION_TITLE, INFO -> RowViewHolder(layout) - // Row View Holder - CLASSIC_HEADER_TITLE, TITLE, TITLE_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder( + HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, + LOCATION_TITLE, INFO, + TITLE, TITLE_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK, + DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder( layout ) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt index eb970fc5..6f20e8e3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt @@ -49,7 +49,13 @@ enum class FilterRow : RowRepresentable { } } - override val viewType: Int = RowViewType.TITLE_CHECK.ordinal + override val viewType: Int + get() { + return when (this) { + FROM, TO -> RowViewType.TITLE_VALUE_CHECK.ordinal + else -> RowViewType.TITLE_CHECK.ordinal + } + } override fun excludedFilterRows(): ArrayList? { return when (this) { @@ -60,7 +66,7 @@ enum class FilterRow : RowRepresentable { } override fun excludedFilterSubcategoryRows(): ArrayList? { - return when(this) { + return when (this) { TODAY, YESTERDAY, TODAY_AND_YESTERDAY, CURRENT_WEEK, CURRENT_MONTH, CURRENT_YEAR -> arrayListOf(FilterSubcategoryRow.FIXED_DATE) FROM, TO -> arrayListOf(FilterSubcategoryRow.DYNAMIC_DATE) else -> null diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt index 8c0da6bc..88e29e7d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt @@ -120,7 +120,7 @@ enum class FilterSubcategoryRow : RowRepresentable { } } - override val viewType: Int = RowViewType.CLASSIC_HEADER_TITLE.ordinal + override val viewType: Int = RowViewType.HEADER_TITLE.ordinal /** * Return the type of the selection @@ -164,7 +164,10 @@ enum class FilterSubcategoryRow : RowRepresentable { FilterRow.CURRENT_MONTH, FilterRow.CURRENT_YEAR ) ) - FIXED_DATE -> rows.addAll(arrayListOf(FilterRow.FROM, FilterRow.TO)) + FIXED_DATE -> { + rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_VALUE_CHECK, resId = FilterRow.FROM.resId, isSelectable = true, value = "20/03/2019")) + rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_VALUE_CHECK, resId = FilterRow.TO.resId, isSelectable = true, value = "20/03/2019")) + } DURATION -> rows.addAll(arrayListOf(FilterRow.PAST_DAYS)) YEAR -> { diff --git a/app/src/main/res/layout/row_title_value_check.xml b/app/src/main/res/layout/row_title_value_check.xml new file mode 100644 index 00000000..683e9169 --- /dev/null +++ b/app/src/main/res/layout/row_title_value_check.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + \ No newline at end of file