add DataListAdapter to handle list of business data

dev_raz_wip
Razmig Sarkissian 7 years ago
parent f3ec817a31
commit 9d150a9ab8
  1. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  2. 52
      app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt
  3. 39
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt
  4. 3
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt
  6. 68
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  7. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  8. 13
      app/src/main/res/layout/activity_data_list.xml
  9. 31
      app/src/main/res/layout/fragment_data_list.xml

@ -1,12 +1,15 @@
package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.ui.adapter.components.RowViewType
import java.util.*
open class Bankroll(name: String = "") : RealmObject() {
open class Bankroll(name: String = "") : RealmObject(), DynamicRowInterface {
@PrimaryKey
var id = UUID.randomUUID().toString()
@ -24,4 +27,10 @@ open class Bankroll(name: String = "") : RealmObject() {
var currency: Currency? = null
// @todo rate management
override fun localizedTitle(context: Context): String {
return name
}
override var viewType: Int = RowViewType.TITLE.ordinal
}

@ -0,0 +1,52 @@
package net.pokeranalytics.android.ui.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import io.realm.Realm
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.activity_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.fragment.DataListFragment
import net.pokeranalytics.android.util.PokerAnalyticsActivity
import net.pokeranalytics.android.util.data.sessionDao
import java.util.*
class DataListActivity : PokerAnalyticsActivity() {
companion object {
fun newInstance(context: Context, dataType: Int) {
val intent = Intent(context, DataListActivity::class.java)
intent.putExtra("dataType", dataType)
context.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_data_list)
initUI()
}
/**
* Init UI
*/
private fun initUI() {
val dataType = intent.getIntExtra("dataType", 0)
val fragment = dataListFragment as DataListFragment
fragment.setData(dataType)
}
/**
* Init data
*/
private fun initData() {
}
}

@ -0,0 +1,39 @@
package net.pokeranalytics.android.ui.adapter.components
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
interface DataRowDelegate {
var viewType: RowViewType
fun data(position: Int) : DynamicRowInterface
fun size() : Int { return 0 }
}
interface DataRowCallback {
fun onRowSelected(position: Int)
}
class DataListAdapter(var delegate: DataRowDelegate, var callBackDelegate: DataRowCallback? = null) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemViewType(position: Int): Int {
return delegate.viewType.ordinal
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val rowViewType: RowViewType = RowViewType.values()[viewType]
return rowViewType.viewHolder(parent)
}
override fun getItemCount(): Int {
return delegate.size()
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val listener = View.OnClickListener {
callBackDelegate?.onRowSelected(position)
}
(holder as DynamicHolder).bind(this.delegate.data(position), null, listener)
}
}

@ -54,7 +54,7 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface {
}
enum class BusinessObjectRowType(val resId: Int) : DynamicRowInterface {
enum class DataObjectRowType(val resId: Int) : DynamicRowInterface {
BANKROLL(R.string.bankroll),
GAME(R.string.game),
LOCATION(R.string.location),
@ -66,5 +66,4 @@ enum class BusinessObjectRowType(val resId: Int) : DynamicRowInterface {
}
override var viewType: Int = RowViewType.TITLE.ordinal
}

@ -10,7 +10,7 @@ import net.pokeranalytics.android.R
interface DynamicHolder {
fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener)
fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate? = null, listener: View.OnClickListener)
}
@ -21,20 +21,22 @@ enum class RowViewType {
TITLE_VALUE;
inner class FakeViewHolder(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) {
}
}
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.value.text = delegate.stringForRow(row)
delegate?.let {
itemView.value.text = it.stringForRow(row)
}
itemView.container.setOnClickListener(listener)
}
}
inner class TitleViewHolder(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.container.setOnClickListener(listener)
}

@ -0,0 +1,68 @@
package net.pokeranalytics.android.ui.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
import io.realm.Sort
import kotlinx.android.synthetic.main.fragment_new_session.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.util.PokerAnalyticsFragment
class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallback {
private lateinit var dataType: DataObjectRowType
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_data_list, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override var viewType: RowViewType
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
set(value) {}
override fun data(position: Int): DynamicRowInterface {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onRowSelected(position: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
val viewManager = LinearLayoutManager(requireContext())
val dataListAdapter = DataListAdapter(this, this)
recyclerView.apply {
setHasFixedSize(true)
layoutManager = viewManager
adapter = dataListAdapter
}
}
/**
* Set fragment data
*/
fun setData(dataType: Int) {
this.dataType = DataObjectRowType.values()[dataType]
}
}

@ -4,7 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.R
@ -40,12 +39,11 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(BusinessObjectRowType.values())
rows.addAll(DataObjectRowType.values())
return rows
}
override fun onRowSelected(row: DynamicRowInterface) {
val bottomSheetFragment = openBottomSheet(row)
}
/**

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/dataListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="net.pokeranalytics.android.ui.fragment.DataListFragment" />
</LinearLayout>

@ -0,0 +1,31 @@
<?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:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data List"
android:layout_marginTop="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="8dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save