feature/top10
Laurent 7 years ago
commit 93a302bf5b
  1. 7
      app/src/main/java/net/pokeranalytics/android/ui/activity/FilterDetailsActivity.kt
  2. 12
      app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt
  4. 80
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
  5. 85
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  6. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  7. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/PokerAnalyticsFragment.kt
  8. 10
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  9. 10
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt
  10. 7
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt
  11. 59
      app/src/main/res/layout/row_title_value_check.xml

@ -34,6 +34,7 @@ class FilterDetailsActivity : PokerAnalyticsActivity() {
} }
} }
private lateinit var fragment:FilterDetailsFragment
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -41,6 +42,10 @@ class FilterDetailsActivity : PokerAnalyticsActivity() {
initUI() initUI()
} }
override fun onBackPressed() {
fragment.onBackPressed()
}
/** /**
* Init UI * Init UI
*/ */
@ -50,7 +55,7 @@ class FilterDetailsActivity : PokerAnalyticsActivity() {
val fragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction = fragmentManager.beginTransaction()
val filterCategoryOrdinal = intent.getIntExtra(IntentKey.FILTER_CATEGORY_ORDINAL.keyName, 0) val filterCategoryOrdinal = intent.getIntExtra(IntentKey.FILTER_CATEGORY_ORDINAL.keyName, 0)
val fragment = FilterDetailsFragment() fragment = FilterDetailsFragment()
fragmentTransaction.add(R.id.container, fragment) fragmentTransaction.add(R.id.container, fragment)
fragmentTransaction.commit() fragmentTransaction.commit()
fragment.setData(filterCategoryOrdinal) fragment.setData(filterCategoryOrdinal)

@ -15,6 +15,8 @@ class FiltersActivity : PokerAnalyticsActivity() {
PRIMARY_KEY("PRIMARY_KEY"); PRIMARY_KEY("PRIMARY_KEY");
} }
private lateinit var fragment: FiltersFragment
companion object { companion object {
/** /**
* Default constructor * Default constructor
@ -33,13 +35,16 @@ class FiltersActivity : PokerAnalyticsActivity() {
} }
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_filters) setContentView(R.layout.activity_filters)
initUI() initUI()
} }
override fun onBackPressed() {
fragment.onBackPressed()
}
/** /**
* Init UI * Init UI
*/ */
@ -48,10 +53,11 @@ class FiltersActivity : PokerAnalyticsActivity() {
val fragmentManager = supportFragmentManager val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction = fragmentManager.beginTransaction()
val fragment = FiltersFragment() fragment = FiltersFragment()
fragmentTransaction.add(R.id.container, fragment) fragmentTransaction.add(R.id.container, fragment)
fragmentTransaction.commit() fragmentTransaction.commit()
//fragment.setData(dataType, primaryKey) //TODO: send primary key
fragment.setData("")
} }

@ -51,7 +51,7 @@ open class PokerAnalyticsActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem?): Boolean { override fun onOptionsItemSelected(item: MenuItem?): Boolean {
item?.let { item?.let {
if (it.itemId == android.R.id.home) { if (it.itemId == android.R.id.home) {
finish() onBackPressed()
} }
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)

@ -1,7 +1,10 @@
package net.pokeranalytics.android.ui.fragment package net.pokeranalytics.android.ui.fragment
import android.os.Bundle 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 androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmObject import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_filter_details.* 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.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment 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.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow 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 net.pokeranalytics.android.ui.view.rowrepresentable.FilterSubcategoryRow
import timber.log.Timber import timber.log.Timber
@ -48,22 +53,9 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat
initData() initData()
} }
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { override fun onBackPressed() {
/* super.onBackPressed()
inflater?.inflate(R.menu.editable_data, menu) saveData()
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 onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
@ -112,8 +104,11 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), RowRepresentableDat
} }
rowRepresentableAdapter.refreshRow(row) rowRepresentableAdapter.refreshRow(row)
when(row) {
FilterRow.FROM -> BottomSheetFragment.create(fragmentManager, row, this, null)
} }
}
override fun isSelected(row: RowRepresentable): Boolean { override fun isSelected(row: RowRepresentable): Boolean {
return selectedRows.contains(row) 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 * Save data
*/ */
fun saveData() { private fun saveData() {
/*
if ((this.item as Savable).isValidForSave()) {
this.getRealm().executeTransaction {
val item = it.copyToRealmOrUpdate(this.item)
val uniqueIdentifier = if (item is Identifiable) { //TODO: Save filter details data
item.id Timber.d("Save filter details data")
} else "" finishActivityWithResult("")
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 * Finish the activity with a result

@ -1,5 +1,6 @@
package net.pokeranalytics.android.ui.fragment package net.pokeranalytics.android.ui.fragment
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -20,17 +21,20 @@ import timber.log.Timber
open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
companion object {
const val REQUEST_CODE_FILTER_DETAILS = 100
}
lateinit var parentActivity: PokerAnalyticsActivity lateinit var parentActivity: PokerAnalyticsActivity
lateinit var item: RealmObject lateinit var item: RealmObject
lateinit var rowRepresentableAdapter: RowRepresentableAdapter lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private var rows: ArrayList<RowRepresentable> = ArrayList() private var rows: ArrayList<RowRepresentable> = ArrayList()
private var filterMenu: Menu? = null private var filterMenu: Menu? = null
private var dataType: Int? = null
private var primaryKey: String? = null private var primaryKey: String? = null
private var selectedRow: RowRepresentable? = null
var isUpdating = false var isUpdating = false
var shouldOpenKeyboard = true
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_filters, container, false) return inflater.inflate(R.layout.fragment_filters, container, false)
@ -42,15 +46,34 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
initData() 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?) { override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
/*
inflater?.inflate(R.menu.editable_data, menu) inflater?.inflate(R.menu.editable_data, menu)
this.filterMenu = menu this.filterMenu = menu
*/
updateMenuUI() updateMenuUI()
super.onCreateOptionsMenu(menu, inflater) super.onCreateOptionsMenu(menu, inflater)
} }
override fun onBackPressed() {
super.onBackPressed()
//TODO: Cancel changes on the Filter object
finishActivityWithResult("")
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean { override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item!!.itemId) { when (item!!.itemId) {
@ -69,7 +92,8 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
if (row is FilterCategoryRow) { if (row is FilterCategoryRow) {
Timber.d("Subcategories: ${row.getSubcategories()}") 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 * Update menu UI
*/ */
private fun updateMenuUI() { private fun updateMenuUI() {
/* filterMenu?.findItem(R.id.delete)?.isVisible = isUpdating
editableMenu?.findItem(R.id.delete)?.isVisible = isUpdating filterMenu?.findItem(R.id.save)?.isVisible = true
editableMenu?.findItem(R.id.save)?.isVisible = true
*/
} }
/** /**
* Save data * Save data
*/ */
fun saveData() { private fun saveData() {
/*
if ((this.item as Savable).isValidForSave()) {
this.getRealm().executeTransaction {
val item = it.copyToRealmOrUpdate(this.item)
val uniqueIdentifier = if (item is Identifiable) { // TODO: Save the filter object here
item.id // Maybe we don't need to do anything because the object is already up to date
} else ""
finishActivityWithResult(uniqueIdentifier) finishActivityWithResult("")
}
} else {
val message = (this.item as Savable).getFailedSaveMessage()
val builder = AlertDialog.Builder(requireContext())
.setMessage(message)
.setNegativeButton(R.string.ok, null)
builder.show()
}
*/
} }
/** /**
* Delete data * Delete data
*/ */
private fun deleteData() { private fun deleteData() {
/*
val builder = AlertDialog.Builder(requireContext()) // TODO: Delete the filter object here
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()
*/
} }
/** /**
@ -180,12 +177,8 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
/** /**
* Set fragment data * Set fragment data
*/ */
fun setData(dataType: Int, primaryKey: String?) { fun setData(primaryKey: String?) {
/*
this.dataType = dataType
this.liveDataType = LiveData.values()[dataType]
this.primaryKey = primaryKey this.primaryKey = primaryKey
*/
} }
} }

@ -314,7 +314,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
/** /**
* Called when the user pressed back on the parent activity * Called when the user pressed back on the parent activity
*/ */
fun onBackPressed() { override fun onBackPressed() {
super.onBackPressed()
if (!sessionHasBeenCustomized) { if (!sessionHasBeenCustomized) {
currentSession.delete() currentSession.delete()
} }

@ -25,4 +25,9 @@ open class PokerAnalyticsFragment: Fragment() {
return realm return realm
} }
/**
* Method called when the activity override onBackPressed and send the information to the fragment
*/
open fun onBackPressed(){}
} }

@ -41,7 +41,6 @@ enum class RowViewType(private var layoutRes: Int) {
INFO(R.layout.row_info), INFO(R.layout.row_info),
// Row // Row
CLASSIC_HEADER_TITLE(R.layout.row_header_title),
TITLE(R.layout.row_title), TITLE(R.layout.row_title),
TITLE_ARROW(R.layout.row_title_arrow), TITLE_ARROW(R.layout.row_title_arrow),
TITLE_VALUE(R.layout.row_title_value), TITLE_VALUE(R.layout.row_title_value),
@ -51,6 +50,7 @@ enum class RowViewType(private var layoutRes: Int) {
DATA(R.layout.row_title), DATA(R.layout.row_title),
BOTTOM_SHEET_DATA(R.layout.row_bottom_sheet_title), BOTTOM_SHEET_DATA(R.layout.row_bottom_sheet_title),
TITLE_CHECK(R.layout.row_title_check), TITLE_CHECK(R.layout.row_title_check),
TITLE_VALUE_CHECK(R.layout.row_title_value_check),
LOADER(R.layout.row_loader), LOADER(R.layout.row_loader),
// Custom row // Custom row
@ -72,11 +72,11 @@ enum class RowViewType(private var layoutRes: Int) {
return when (this) { 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 // 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 layout
) )

@ -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<FilterRow>? { override fun excludedFilterRows(): ArrayList<FilterRow>? {
return when (this) { return when (this) {
@ -60,7 +66,7 @@ enum class FilterRow : RowRepresentable {
} }
override fun excludedFilterSubcategoryRows(): ArrayList<FilterSubcategoryRow>? { override fun excludedFilterSubcategoryRows(): ArrayList<FilterSubcategoryRow>? {
return when(this) { return when (this) {
TODAY, YESTERDAY, TODAY_AND_YESTERDAY, CURRENT_WEEK, CURRENT_MONTH, CURRENT_YEAR -> arrayListOf(FilterSubcategoryRow.FIXED_DATE) TODAY, YESTERDAY, TODAY_AND_YESTERDAY, CURRENT_WEEK, CURRENT_MONTH, CURRENT_YEAR -> arrayListOf(FilterSubcategoryRow.FIXED_DATE)
FROM, TO -> arrayListOf(FilterSubcategoryRow.DYNAMIC_DATE) FROM, TO -> arrayListOf(FilterSubcategoryRow.DYNAMIC_DATE)
else -> null else -> null

@ -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 * Return the type of the selection
@ -164,7 +164,10 @@ enum class FilterSubcategoryRow : RowRepresentable {
FilterRow.CURRENT_MONTH, FilterRow.CURRENT_YEAR 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)) DURATION -> rows.addAll(arrayListOf(FilterRow.PAST_DAYS))
YEAR -> { YEAR -> {

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="?selectableItemBackground">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/value"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Data Type Title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:gravity="end"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/check"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/check"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_check_state"
android:tint="@color/green"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save