Improve Bottom Sheet data management

dev_raz_wip
Aurelien Hubert 7 years ago
parent 24ace8b042
commit e4ad8deafe
  1. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt
  4. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  5. 36
      app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt
  6. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt
  7. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt
  8. 39
      app/src/main/res/layout/row_session.xml

@ -2,7 +2,10 @@ package net.pokeranalytics.android.model.realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.GameRow
import java.util.* import java.util.*
open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource { open class Game : RealmObject(), DynamicRowDelegate, DisplayableDataSource {

@ -139,6 +139,8 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa
return when (row) { return when (row) {
SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--" SessionRow.BLINDS -> if (cgSmallBlind != null && cgBigBlind != null) "$cgSmallBlind / $cgBigBlind" else "--"
SessionRow.GAME -> game?.title ?: "--" SessionRow.GAME -> game?.title ?: "--"
SessionRow.LOCATION -> location?.title ?: "--"
SessionRow.BANKROLL -> bankroll?.title ?: "--"
SessionRow.DATE -> if (timeFrame != null) timeFrame?.startDate.toString() else "--" SessionRow.DATE -> if (timeFrame != null) timeFrame?.startDate.toString() else "--"
else -> "--" else -> "--"
} }

@ -3,7 +3,6 @@ package net.pokeranalytics.android.ui.adapter.components
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_session.view.* import kotlinx.android.synthetic.main.row_session.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
@ -28,6 +27,7 @@ enum class RowViewType {
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener) { override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener) {
itemView.title.text = row.localizedTitle(itemView.context) itemView.title.text = row.localizedTitle(itemView.context)
delegate?.let { delegate?.let {
itemView.value.text = it.stringForRow(row) itemView.value.text = it.stringForRow(row)
} }

@ -42,6 +42,10 @@ class EditableDataFragment : PokerAnalyticsFragment(), DynamicRowCallback, Botto
Toast.makeText(requireContext(), "Add new element: $row", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Add new element: $row", Toast.LENGTH_SHORT).show()
} }
override fun clickOnClear(row: DynamicRowInterface) {
Toast.makeText(requireContext(), "Clear: $row", Toast.LENGTH_SHORT).show()
}
override fun setValue(value: Any, row: DynamicRowInterface) { override fun setValue(value: Any, row: DynamicRowInterface) {
Toast.makeText(requireContext(), "Callback for ${row.localizedTitle(requireContext())} ($value)", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Callback for ${row.localizedTitle(requireContext())} ($value)", Toast.LENGTH_SHORT).show()
} }

@ -8,6 +8,9 @@ import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_new_session.* import kotlinx.android.synthetic.main.fragment_new_session.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.model.realm.Location
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -15,10 +18,12 @@ import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.BottomSheetDelegate
import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import timber.log.Timber
class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate { class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomSheetDelegate {
private lateinit var newSession: Session private lateinit var currentSession: Session
private lateinit var sessionAdapter : DynamicListAdapter
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_new_session, container, false) return inflater.inflate(R.layout.fragment_new_session, container, false)
@ -31,7 +36,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
} }
override fun onRowSelected(row: DynamicRowInterface) { override fun onRowSelected(row: DynamicRowInterface) {
val data = newSession.getBottomSheetData(row, getRealm()) val data = currentSession.getBottomSheetData(row, getRealm())
BottomSheetFragment.create(fragmentManager, row, this, data) BottomSheetFragment.create(fragmentManager, row, this, data)
} }
@ -46,12 +51,33 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
} }
override fun clickOnClear(row: DynamicRowInterface) {
when(row) {
SessionRow.GAME -> currentSession.game = null
SessionRow.BANKROLL -> currentSession.bankroll = null
SessionRow.LOCATION -> currentSession.location = null
}
sessionAdapter.notifyItemChanged(SessionRow.values().indexOf(row))
}
override fun setValue(value: Any, row: DynamicRowInterface) { override fun setValue(value: Any, row: DynamicRowInterface) {
Timber.d("Value: $value")
Timber.d("Row: $row")
when(row) {
SessionRow.GAME -> if (value is Game) currentSession.game = value
SessionRow.BANKROLL -> if (value is Bankroll) currentSession.bankroll = value
SessionRow.LOCATION -> if (value is Location) currentSession.location = value
}
sessionAdapter.notifyItemChanged(SessionRow.values().indexOf(row))
Timber.d("Index: ${SessionRow.values().indexOf(row)}")
Toast.makeText(requireContext(), "Callback for ${row.localizedTitle(requireContext())} ($value)", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Callback for ${row.localizedTitle(requireContext())} ($value)", Toast.LENGTH_SHORT).show()
} }
private fun initData() { private fun initData() {
newSession = Session() currentSession = Session()
} }
/** /**
@ -64,12 +90,12 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, BottomS
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
val newSessionAdapter = DynamicListAdapter(newSession, this) sessionAdapter = DynamicListAdapter(currentSession, this)
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
adapter = newSessionAdapter adapter = sessionAdapter
} }
} }

@ -22,13 +22,12 @@ enum class BottomSheetType {
} }
interface BottomSheetInterface { interface BottomSheetInterface {
fun clickOnClear()
fun clickOnCheck() fun clickOnCheck()
fun clickOnAdd()
} }
interface BottomSheetDelegate { interface BottomSheetDelegate {
fun clickOnAdd(row: DynamicRowInterface) fun clickOnAdd(row: DynamicRowInterface)
fun clickOnClear(row: DynamicRowInterface)
fun setValue(value: Any, row: DynamicRowInterface) fun setValue(value: Any, row: DynamicRowInterface)
} }
@ -80,17 +79,9 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
} }
override fun clickOnClear() {
}
override fun clickOnCheck() { override fun clickOnCheck() {
} }
override fun clickOnAdd() {
when (row) {
}
}
/** /**
* Init UI * Init UI
*/ */
@ -105,7 +96,8 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa
// Menu // Menu
bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener {
clickOnClear() bottomSheetDelegate.clickOnClear(row)
dismiss()
true true
} }
bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener {
@ -114,6 +106,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa
} }
bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener {
clickOnCheck() clickOnCheck()
dismiss()
true true
} }

@ -3,7 +3,6 @@ package net.pokeranalytics.android.ui.fragment.components
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults import io.realm.RealmResults
import kotlinx.android.synthetic.main.bottom_sheet_double_list.* import kotlinx.android.synthetic.main.bottom_sheet_double_list.*
@ -13,7 +12,6 @@ import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.ui.adapter.components.DataListAdapter import net.pokeranalytics.android.ui.adapter.components.DataListAdapter
import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource
import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate
import timber.log.Timber
class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate { class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate {
@ -29,7 +27,6 @@ class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate {
override fun clickOnCheck() { override fun clickOnCheck() {
super.clickOnCheck() super.clickOnCheck()
bottomSheetDelegate.setValue("", row) bottomSheetDelegate.setValue("", row)
dismiss()
} }
override fun onResume() { override fun onResume() {
@ -47,7 +44,11 @@ class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate {
override fun onRowSelected(position: Int) { override fun onRowSelected(position: Int) {
realmData?.let { realmData?.let {
Toast.makeText(requireContext(), "Select: ${it[position]}", Toast.LENGTH_SHORT).show() val selectedData = it[position]
selectedData?.let {data ->
bottomSheetDelegate.setValue(data, row)
dismiss()
}
} }
} }

@ -1,41 +1,44 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?selectableItemBackground" android:background="?selectableItemBackground"
android:id="@+id/container"
android:padding="16dp"> android:padding="16dp">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:textSize="18sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/value" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" /> tools:text="Title" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/value" android:id="@+id/value"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="16dp"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:textSize="16sp" android:layout_marginEnd="8dp"
tools:text="Value"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"/> android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save