diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a7bce528..e581fdd5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,9 +42,12 @@
android:launchMode="singleTop" />
+
when (item.itemId) {
net.pokeranalytics.android.R.id.navigation_history -> {
@@ -48,10 +53,26 @@ class HomeActivity : PokerAnalyticsActivity() {
checkFirstLaunch()
}
+ override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+ menuInflater.inflate(R.menu.home_menu, menu)
+ this.homeMenu = menu
+ return super.onCreateOptionsMenu(menu)
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem?): Boolean {
+ when (item?.itemId) {
+ R.id.filter -> manageFilters()
+ }
+ return super.onOptionsItemSelected(item)
+ }
+
/**
* Init UI
*/
private fun initUI() {
+
+ setSupportActionBar(toolbar)
+
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history
@@ -80,16 +101,63 @@ class HomeActivity : PokerAnalyticsActivity() {
* Display a new fragment
*/
private fun displayFragment(index: Int) {
+ viewPager.setCurrentItem(index, false)
+ updateToolbar(index)
+ }
- toolbar.title = when (index) {
- 0 -> getString(R.string.title_history)
- 1 -> getString(R.string.title_stats)
- 2 -> getString(R.string.title_settings)
- else -> ""
+ /**
+ * Update toolbar
+ */
+ private fun updateToolbar(index: Int) {
+ when (index) {
+ 0 -> {
+ toolbar.title = getString(R.string.title_history)
+ homeMenu?.findItem(R.id.filter)?.isVisible = true
+ }
+ 1 -> {
+ toolbar.title = getString(R.string.title_stats)
+ homeMenu?.findItem(R.id.filter)?.isVisible = false
+ }
+ 2 -> {
+ toolbar.title = getString(R.string.title_settings)
+ homeMenu?.findItem(R.id.filter)?.isVisible = false
+ }
}
-
- viewPager.setCurrentItem(index, false)
}
+ /**
+ * Manage filters
+ */
+ private fun manageFilters() {
+
+ val filterSelected = false
+
+ val choices = ArrayList()
+ choices.add(getString(R.string.new_str))
+
+ if (filterSelected) {
+ choices.add(getString(R.string.modify_current_filter))
+ choices.add(getString(R.string.load_from_db))
+ choices.add(getString(R.string.remove_filter))
+ }
+
+ val builder = AlertDialog.Builder(this)
+ builder.setTitle(R.string.filter_selection)
+ .setCancelable(true)
+ .setItems(choices.toTypedArray()) { _, which ->
+ Timber.d("Click on $which")
+
+ when(which) {
+ 0 -> FilterActivity.newInstance(this@HomeActivity)
+ }
+
+ }
+ .setNegativeButton(R.string.cancel) {dialog, which ->
+ Timber.d("Click on cancel")
+ }
+
+ builder.show()
+
+ }
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDataFragment.kt
new file mode 100644
index 00000000..cc530abe
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDataFragment.kt
@@ -0,0 +1,210 @@
+package net.pokeranalytics.android.ui.fragment
+
+import android.os.Bundle
+import android.view.*
+import androidx.recyclerview.widget.LinearLayoutManager
+import io.realm.RealmObject
+import kotlinx.android.synthetic.main.fragment_editable_data.*
+import kotlinx.android.synthetic.main.fragment_filter.view.*
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
+import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
+import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
+import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
+import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
+import net.pokeranalytics.android.ui.view.RowRepresentable
+import net.pokeranalytics.android.ui.view.rowrepresentable.FilterRow
+
+
+open class FilterDataFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
+
+ 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
+
+ var isUpdating = false
+ var shouldOpenKeyboard = true
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_filter, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initUI()
+ 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 adapterRows(): List? {
+ return rows
+ }
+
+ override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
+ super.onRowSelected(position, row, fromAction)
+ }
+
+ override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
+ super.onRowValueChanged(value, row)
+ }
+
+ /**
+ * Init UI
+ */
+ private fun initUI() {
+ parentActivity = activity as PokerAnalyticsActivity
+ parentActivity.setSupportActionBar(toolbar)
+ parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ setHasOptionsMenu(true)
+
+ val viewManager = LinearLayoutManager(requireContext())
+
+ recyclerView.apply {
+ setHasFixedSize(true)
+ layoutManager = viewManager
+ }
+ }
+
+ /**
+ * Init data
+ */
+ private fun initData() {
+
+ this.appBar.toolbar.title = getString(R.string.filter)
+
+ rows.addAll(FilterRow.values())
+
+ this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
+ this.recyclerView.adapter = rowRepresentableAdapter
+
+ /*
+ if (this.dataType != null) {
+ val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey)
+ proxyItem?.let {
+ //TODO: Localize
+ this.appBar.toolbar.title = "Update ${this.liveDataType.localizedTitle(this.parentActivity).toLowerCase().capitalize()}"
+ isUpdating = true
+ } ?: run {
+ //TODO: Localize
+ this.appBar.toolbar.title = this.liveDataType.newEntityLocalizedTitle(requireContext())
+ }
+ this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey)
+
+ val dataSource = getDataSource()
+ this.rowRepresentableAdapter = RowRepresentableAdapter(getDataSource(), this)
+ this.recyclerView.adapter = rowRepresentableAdapter
+
+ // When creating an object, open automatically the keyboard for the first row
+ if (!isUpdating && shouldOpenKeyboard) {
+ val row = dataSource.adapterRows()?.firstOrNull()
+ row?.let {
+ onRowSelected(0, it)
+ }
+ }
+ }
+ */
+ }
+
+ /**
+ * 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 ""
+
+ finishActivityWithResult(uniqueIdentifier)
+ }
+ } else {
+ val message = (this.item as Savable).getFailedSaveMessage()
+ val builder = AlertDialog.Builder(requireContext())
+ .setMessage(message)
+ .setNegativeButton(R.string.ok, null)
+ builder.show()
+ }
+ */
+ }
+
+ /**
+ * 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
+ */
+ private fun finishActivityWithResult(uniqueIdentifier: String) {
+ /*
+ val intent = Intent()
+ intent.putExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, dataType)
+ intent.putExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName, uniqueIdentifier)
+ activity?.setResult(RESULT_OK, intent)
+ */
+ activity?.finish()
+ }
+
+ /**
+ * Set fragment data
+ */
+ fun setData(dataType: Int, primaryKey: String?) {
+ /*
+ this.dataType = dataType
+ this.liveDataType = LiveData.values()[dataType]
+ this.primaryKey = primaryKey
+ */
+ }
+
+}
\ No newline at end of file
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
new file mode 100644
index 00000000..0b5f2b7a
--- /dev/null
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt
@@ -0,0 +1,50 @@
+package net.pokeranalytics.android.ui.view.rowrepresentable
+
+import net.pokeranalytics.android.R
+import net.pokeranalytics.android.ui.view.RowRepresentable
+import net.pokeranalytics.android.ui.view.RowViewType
+
+enum class FilterRow : RowRepresentable {
+
+ GENERAL,
+ DATE,
+ DURATION,
+ SESSION,
+ CASH,
+ TOURNAMENT,
+ ONLINE,
+ RESULT,
+ TRANSACTION_TYPES,
+
+ // Title Custom fields
+ LOCATION,
+ BANKROLL,
+ PLAYERS;
+
+ override val resId: Int?
+ get() {
+ return when (this) {
+ GENERAL -> R.string.general
+ DATE -> R.string.date
+ DURATION -> R.string.duration
+ SESSION -> R.string.session
+ CASH -> R.string.cash
+ TOURNAMENT -> R.string.tournament
+ ONLINE -> R.string.online
+ RESULT -> R.string.result
+ TRANSACTION_TYPES -> R.string.operation_types
+ LOCATION -> R.string.location
+ BANKROLL -> R.string.bankroll
+ PLAYERS -> R.string.players
+ }
+ }
+
+ override val viewType: Int
+ get() {
+ return when (this) {
+ GENERAL, DATE, DURATION, SESSION, CASH, TOURNAMENT, ONLINE, RESULT, TRANSACTION_TYPES,
+ LOCATION, BANKROLL, PLAYERS -> RowViewType.TITLE_VALUE_ARROW.ordinal
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt
index 094f9bd6..c3aca78c 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt
@@ -6,7 +6,6 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
-import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable
@@ -277,8 +276,6 @@ enum class SessionRow : RowRepresentable {
}
else -> null
}
-
-
-
}
+
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml
new file mode 100644
index 00000000..70454fb9
--- /dev/null
+++ b/app/src/main/res/layout/activity_filter.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_filter.xml b/app/src/main/res/layout/fragment_filter.xml
new file mode 100644
index 00000000..bab049a9
--- /dev/null
+++ b/app/src/main/res/layout/fragment_filter.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/home_menu.xml b/app/src/main/res/menu/home_menu.xml
new file mode 100644
index 00000000..38cbd892
--- /dev/null
+++ b/app/src/main/res/menu/home_menu.xml
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 8a13e62f..b9faf4be 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -185,7 +185,7 @@