From 3c31ada7bfce2683287c6da6c8e743047861c7b3 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 22 Feb 2019 13:41:48 +0100 Subject: [PATCH] remove usage of TableSizeGridAdapter --- .../BottomSheetTableSizeGridFragment.kt | 121 +++++++++++++++++- .../android/ui/view/RowViewType.kt | 18 ++- 2 files changed, 136 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt index 868d17e7..38159ee5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt @@ -1,16 +1,131 @@ package net.pokeranalytics.android.ui.fragment.components.bottomsheet +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View import androidx.recyclerview.widget.GridLayoutManager import kotlinx.android.synthetic.main.bottom_sheet_grid.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* -import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.view.GridSpacingItemDecoration +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.px +class TableSize(var numberOfPlayer:Int): RowRepresentable { + companion object { + val all = Array(8, init = + { index -> TableSize(index+2)}) + } + + override val resId: Int? + get() { + return if (this.numberOfPlayer == 2) { + R.string.heads_up + } else { + R.string.max + } + } + + override fun localizedTitle(context: Context): String { + this.resId?.let { + return if (this.numberOfPlayer == 2) { + context.getString(it) + } else { + "$this.numberOfPlayer$context.getString(it)" + } + } + return super.localizedTitle(context) + } + + override val viewType: Int + get() = RowViewType.TITLE_GRID.ordinal +} + +class BottomSheetTableSizeGridFragment : BottomSheetFragment(), RowRepresentableDataSource, RowRepresentableDelegate { + + private lateinit var dataAdapter: RowRepresentableAdapter + private var defaultSize: Int? = null + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun onResume() { + super.onResume() + dataAdapter.notifyDataSetChanged() + } + + override fun getValue(): Any? { + return defaultSize + } + + /** + * Init data + */ + private fun initData() { + + val bottomSheetData = getData() + if (bottomSheetData.isNotEmpty() && bottomSheetData.first().defaultValue != null) { + defaultSize = bottomSheetData.first().defaultValue as Int? + } + } + /** + * Init UI + */ + private fun initUI() { + + setAddButtonVisible(false) + + LayoutInflater.from(requireContext()) + .inflate(net.pokeranalytics.android.R.layout.bottom_sheet_grid, view?.bottomSheetContainer, true) + + val viewManager = GridLayoutManager(requireContext(), 3) + dataAdapter = RowRepresentableAdapter(this, this) + + val spanCount = 3 + val spacing = 2.px + val includeEdge = false + + reyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = dataAdapter + addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, includeEdge)) + } + } + + override fun rowRepresentableForPosition(position: Int): RowRepresentable { + return TableSize.all[position] + } + + override fun indexForRow(row: RowRepresentable): Int { + return TableSize.all.indexOf(row) + } + + override fun numberOfRows(): Int { + return TableSize.all.size + } + + override fun onRowSelected(row: RowRepresentable) { + bottomSheetDelegate.setValue((this.row as TableSize).numberOfPlayer, this.row) + dismiss() + } + + override fun stringForRow(row: RowRepresentable): String { + this.context?.let { + return row.localizedTitle(it) + } + return "UNKNOWN CONTEXT FOR ROW $row" + } +} + +/* class BottomSheetTableSizeGridFragment : BottomSheetFragment() { private var dataList: ArrayList = ArrayList() @@ -79,4 +194,6 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() { } -} \ No newline at end of file +} + + */ \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 3dab41d9..d1dbeb88 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -6,11 +6,13 @@ import android.view.ViewGroup import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* import kotlinx.android.synthetic.main.row_header_title_value.view.* import kotlinx.android.synthetic.main.row_title.view.* import kotlinx.android.synthetic.main.row_title_value.view.* import kotlinx.android.synthetic.main.row_title_value_action.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.adapter.TableSizeGridAdapter import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource /** @@ -30,7 +32,8 @@ enum class RowViewType { TITLE_VALUE, TITLE_VALUE_ACTION, DATA, - BOTTOM_SHEET_DATA; + BOTTOM_SHEET_DATA, + TITLE_GRID; inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { @@ -38,6 +41,13 @@ enum class RowViewType { } } + inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { + itemView.title.text = row.localizedTitle(itemView.context) + itemView.container.setOnClickListener(listener) + } + } + inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { override fun bind(row: RowRepresentable, rowRepresentableDataSource: RowRepresentableDataSource?, listener: View.OnClickListener, actionListener: View.OnClickListener?) { itemView.findViewById(R.id.rowTitle_title).text = row.getDisplayName() @@ -147,6 +157,12 @@ enum class RowViewType { false ) ) + TITLE_GRID -> CellSessionViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_bottom_sheet_grid_title, + parent, + false) + ) else -> FakeViewHolder(parent) } }