diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 86ccd723..0dfe3a0d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -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 } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt new file mode 100644 index 00000000..e41805f7 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt @@ -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() { + + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt new file mode 100644 index 00000000..3ac5cbb5 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt @@ -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() { + + 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) + } + +} \ No newline at end of file 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 1ef17b2d..8919f288 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 @@ -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 - -} +} \ No newline at end of file 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 6a2b3640..f5ac0bd2 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 @@ -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) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt new file mode 100644 index 00000000..ef60341f --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -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] + } +} \ No newline at end of file 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 499a5ad6..0abed1ca 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,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 { val rows = ArrayList() - rows.addAll(BusinessObjectRowType.values()) + rows.addAll(DataObjectRowType.values()) return rows } override fun onRowSelected(row: DynamicRowInterface) { - val bottomSheetFragment = openBottomSheet(row) } /** diff --git a/app/src/main/res/layout/activity_data_list.xml b/app/src/main/res/layout/activity_data_list.xml new file mode 100644 index 00000000..2911b5ae --- /dev/null +++ b/app/src/main/res/layout/activity_data_list.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_data_list.xml b/app/src/main/res/layout/fragment_data_list.xml new file mode 100644 index 00000000..6fea404a --- /dev/null +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file