clean up previous settings implementation to use DynamicAdapter

dev_raz_wip
Razmig Sarkissian 7 years ago
parent cf70562735
commit 47c297ebfd
  1. 79
      app/src/main/java/net/pokeranalytics/android/ui/adapter/SettingsAdapter.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt
  3. 15
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt
  4. 17
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt
  5. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  6. 55
      app/src/main/java/net/pokeranalytics/android/ui/view/DataRowView.kt
  7. 20
      app/src/main/res/layout/fragment_settings.xml
  8. 12
      app/src/main/res/layout/row_data_cell.xml
  9. 4
      app/src/main/res/layout/row_title.xml
  10. 6
      app/src/main/res/values/strings.xml

@ -1,79 +0,0 @@
package net.pokeranalytics.android.ui.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_data_cell.view.*
import kotlinx.android.synthetic.main.row_history_session.view.*
import net.pokeranalytics.android.R
class SettingsAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val ROW_DATA: Int = 100
enum class DataType {
BANKROLL {
override fun localizedName(): String {
return "Bankroll"
}
},
GAME {
override fun localizedName(): String {
return "Game"
}
},
LOCATION {
override fun localizedName(): String {
return "Location"
}
},
TOURNAMENT_TYPE {
override fun localizedName(): String {
return "Tournament Type"
}
},
TRANSACTION_TYPE {
override fun localizedName(): String {
return "Transaction"
}
};
abstract fun localizedName(): String
}
}
var onClickOnData: ((position: Int, dataType: DataType) -> Unit)? = null
inner class RowDataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(dataType: DataType) {
itemView.dataRow.setData(dataType.localizedName())
itemView.dataRow.setOnClickListener {
onClickOnData?.invoke(adapterPosition, dataType)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
ROW_DATA -> return RowDataViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_data_cell, parent, false))
else -> throw IllegalStateException("Need to implement type $viewType in Settings Adapter")
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (getItemViewType(position)) {
ROW_DATA -> (holder as SettingsAdapter.RowDataViewHolder).bind(enumValues<DataType>()[position])
}
}
override fun getItemCount(): Int {
return enumValues<DataType>().count()
}
override fun getItemViewType(position: Int): Int {
return ROW_DATA
}
}

@ -13,8 +13,8 @@ interface DynamicRowDelegate {
fun adapterRows() : ArrayList<DynamicRowInterface> fun adapterRows() : ArrayList<DynamicRowInterface>
fun boolForRow(row: DynamicRowInterface) : Boolean fun boolForRow(row: DynamicRowInterface) : Boolean { return false }
fun stringForRow(row: DynamicRowInterface) : String fun stringForRow(row: DynamicRowInterface) : String { return "" }
/** /**
* Manages: * Manages:

@ -53,3 +53,18 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface {
override var viewType: Int = 1 override var viewType: Int = 1
} }
enum class BusinessObjectRowType(val resId: Int) : DynamicRowInterface {
BANKROLL(R.string.bankroll),
GAME(R.string.game),
LOCATION(R.string.location),
TOURNAMENT_TYPE(R.string.tournament_type),
TRANSACTION_TYPE(R.string.transaction_type);
override fun localizedTitle(context: Context): String {
return context.getString(this.resId)
}
override var viewType: Int = RowViewType.TITLE.ordinal
}

@ -17,6 +17,7 @@ interface DynamicHolder {
enum class RowViewType { enum class RowViewType {
HEADER, HEADER,
EDIT_TEXT, EDIT_TEXT,
TITLE,
TITLE_VALUE; TITLE_VALUE;
inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
@ -32,6 +33,14 @@ enum class RowViewType {
} }
} }
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) {
itemView.title.text = row.localizedTitle(itemView.context)
itemView.container.setOnClickListener(listener)
}
}
fun viewHolder(parent: ViewGroup): RecyclerView.ViewHolder { fun viewHolder(parent: ViewGroup): RecyclerView.ViewHolder {
return when (this) { return when (this) {
TITLE_VALUE -> TitleValueViewHolder( TITLE_VALUE -> TitleValueViewHolder(
@ -41,6 +50,14 @@ enum class RowViewType {
false false
) )
) )
TITLE -> TitleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_title,
parent,
false
)
)
else -> FakeViewHolder(parent) else -> FakeViewHolder(parent)
} }
} }

@ -4,13 +4,14 @@ import android.os.Bundle
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.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_settings.* import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.adapter.SettingsAdapter import net.pokeranalytics.android.ui.adapter.components.*
import net.pokeranalytics.android.util.PokerAnalyticsFragment import net.pokeranalytics.android.util.PokerAnalyticsFragment
class SettingsFragment : PokerAnalyticsFragment() { class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate {
companion object { companion object {
@ -25,7 +26,7 @@ class SettingsFragment : PokerAnalyticsFragment() {
} }
} }
private lateinit var settingsAdapter: SettingsAdapter private lateinit var settingsAdapter: DynamicListAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -37,13 +38,24 @@ class SettingsFragment : PokerAnalyticsFragment() {
initData() initData()
} }
override fun adapterRows(): ArrayList<DynamicRowInterface> {
val rows = ArrayList<DynamicRowInterface>()
rows.addAll(BusinessObjectRowType.values())
return rows
}
/** /**
* Init data * Init data
*/ */
private fun initData() { private fun initData() {
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
settingsAdapter = SettingsAdapter() settingsAdapter = DynamicListAdapter(
this
)
settingsAdapter.callback = {
val bottomSheetFragment = openBottomSheet()
}
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)

@ -1,55 +0,0 @@
package net.pokeranalytics.android.ui.view
import android.widget.FrameLayout
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import kotlinx.android.synthetic.main.row_data_cell.view.*
import kotlinx.android.synthetic.main.row_data_content_view.view.*
import net.pokeranalytics.android.R
class DataRowView : FrameLayout {
private lateinit var rowDataCell: ConstraintLayout
/**
* Constructors
*/
constructor(context: Context) : super(context) {
init()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init()
}
/**
* Init
*
* @param attrs
*/
private fun init() {
val layoutInflater = LayoutInflater.from(context)
rowDataCell = layoutInflater.inflate(R.layout.row_data_content_view, this, false) as ConstraintLayout
val layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT
)
addView(rowDataCell, layoutParams)
}
/**
* Set the session data to the view
*/
fun setData(title: String) {
rowDataCell.rowTitle.text = title
}
}

@ -3,19 +3,29 @@
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="match_parent" android:layout_height="match_parent">
tools:context=".ui.activity.HomeActivity">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Settings"
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 <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/title"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp"/>
tools:listitem="@layout/row_data_cell"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<net.pokeranalytics.android.ui.view.DataRowView
android:id="@+id/dataRow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>

@ -5,10 +5,12 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:id="@+id/container"
android:padding="16dp"> android:padding="16dp">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowTitle" android:id="@+id/title"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

@ -5,4 +5,10 @@
<string name="title_stats">Stats</string> <string name="title_stats">Stats</string>
<string name="title_settings">Settings</string> <string name="title_settings">Settings</string>
<string name="bankroll">Bankroll</string>
<string name="game">Game</string>
<string name="location">Location</string>
<string name="tournament_type">Tournament Type</string>
<string name="transaction_type">Transaction Type</string>
</resources> </resources>

Loading…
Cancel
Save