From 47c297ebfd5aafa3969404d01e0a9e6eb97707e8 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 14 Feb 2019 13:31:53 +0100 Subject: [PATCH] clean up previous settings implementation to use DynamicAdapter --- .../android/ui/adapter/SettingsAdapter.kt | 79 ------------------- .../adapter/components/DynamicListAdapter.kt | 4 +- .../adapter/components/DynamicRowInterface.kt | 17 +++- .../ui/adapter/components/RowViewType.kt | 17 ++++ .../android/ui/fragment/SettingsFragment.kt | 20 ++++- .../android/ui/view/DataRowView.kt | 55 ------------- app/src/main/res/layout/fragment_settings.xml | 20 +++-- app/src/main/res/layout/row_data_cell.xml | 12 --- ...ow_data_content_view.xml => row_title.xml} | 4 +- app/src/main/res/values/strings.xml | 6 ++ 10 files changed, 75 insertions(+), 159 deletions(-) delete mode 100644 app/src/main/java/net/pokeranalytics/android/ui/adapter/SettingsAdapter.kt delete mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/DataRowView.kt delete mode 100644 app/src/main/res/layout/row_data_cell.xml rename app/src/main/res/layout/{row_data_content_view.xml => row_title.xml} (89%) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/SettingsAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/SettingsAdapter.kt deleted file mode 100644 index ff7d8e5f..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/SettingsAdapter.kt +++ /dev/null @@ -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() { - - 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()[position]) - } - } - - override fun getItemCount(): Int { - return enumValues().count() - } - - override fun getItemViewType(position: Int): Int { - return ROW_DATA - } - - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt index 3def04b0..0de4ba55 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt @@ -13,8 +13,8 @@ interface DynamicRowDelegate { fun adapterRows() : ArrayList - fun boolForRow(row: DynamicRowInterface) : Boolean - fun stringForRow(row: DynamicRowInterface) : String + fun boolForRow(row: DynamicRowInterface) : Boolean { return false } + fun stringForRow(row: DynamicRowInterface) : String { return "" } /** * Manages: diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index def90f3c..1ef17b2d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -52,4 +52,19 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { override var viewType: Int = 1 -} \ No newline at end of file +} + +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 + +} diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt index a0e4365f..6a2b3640 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt @@ -17,6 +17,7 @@ interface DynamicHolder { enum class RowViewType { HEADER, EDIT_TEXT, + TITLE, TITLE_VALUE; 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 { return when (this) { TITLE_VALUE -> TitleValueViewHolder( @@ -41,6 +50,14 @@ enum class RowViewType { false ) ) + TITLE -> TitleViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_title, + parent, + false + ) + ) + else -> FakeViewHolder(parent) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 4923fbdf..ee5b3dc2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -4,13 +4,14 @@ 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 -import net.pokeranalytics.android.ui.adapter.SettingsAdapter +import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.util.PokerAnalyticsFragment -class SettingsFragment : PokerAnalyticsFragment() { +class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate { 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? { @@ -37,13 +38,24 @@ class SettingsFragment : PokerAnalyticsFragment() { initData() } + override fun adapterRows(): ArrayList { + val rows = ArrayList() + rows.addAll(BusinessObjectRowType.values()) + return rows + } + /** * Init data */ private fun initData() { val viewManager = LinearLayoutManager(requireContext()) - settingsAdapter = SettingsAdapter() + settingsAdapter = DynamicListAdapter( + this + ) + settingsAdapter.callback = { + val bottomSheetFragment = openBottomSheet() + } recyclerView.apply { setHasFixedSize(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/DataRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/DataRowView.kt deleted file mode 100644 index def52bde..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/DataRowView.kt +++ /dev/null @@ -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 - } - -} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index ecd6264b..6202c2e5 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -3,19 +3,29 @@ 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="match_parent" - tools:context=".ui.activity.HomeActivity"> + android:layout_height="match_parent"> + + + android:layout_marginTop="8dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/row_data_cell.xml b/app/src/main/res/layout/row_data_cell.xml deleted file mode 100644 index bfe6f84a..00000000 --- a/app/src/main/res/layout/row_data_cell.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/row_data_content_view.xml b/app/src/main/res/layout/row_title.xml similarity index 89% rename from app/src/main/res/layout/row_data_content_view.xml rename to app/src/main/res/layout/row_title.xml index 6cc65075..44662103 100644 --- a/app/src/main/res/layout/row_data_content_view.xml +++ b/app/src/main/res/layout/row_title.xml @@ -5,10 +5,12 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="?selectableItemBackground" + android:id="@+id/container" android:padding="16dp"> Stats Settings + Bankroll + Game + Location + Tournament Type + Transaction Type +