From d888798044031b1b734ef77afb5c19816174dde7 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 8 Mar 2019 17:35:51 +0100 Subject: [PATCH] add tournament name / feature management --- .../pokeranalytics/android/model/LiveData.kt | 5 ++ .../android/model/TournamentKind.kt | 10 +++ .../android/model/realm/Session.kt | 6 +- .../ui/fragment/EditableDataFragment.kt | 4 +- .../bottomsheet/BottomSheetFragment.kt | 12 +++ .../BottomSheetStaticListFragment.kt | 74 +++++++++++++++++++ .../ui/view/RowRepresentableEditDescriptor.kt | 3 +- .../ui/view/rowrepresentable/SessionRow.kt | 3 +- .../ui/view/rowrepresentable/SettingRow.kt | 8 +- app/src/main/res/values/strings.xml | 7 +- 10 files changed, 119 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 13b27eba..22e93f4d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -1,5 +1,6 @@ package net.pokeranalytics.android.model +import android.content.Context import io.realm.Realm import io.realm.RealmObject import io.realm.RealmResults @@ -96,6 +97,10 @@ enum class LiveData : Localizable { TRANSACTION_TYPE -> R.string.operation_types } } + + fun newEntityLocalizedTitle(context: Context): String { + return "${context.getString(R.string.new_entity)} ${this.localizedTitle(context)}" + } } /* diff --git a/app/src/main/java/net/pokeranalytics/android/model/TournamentKind.kt b/app/src/main/java/net/pokeranalytics/android/model/TournamentKind.kt index 59781a2c..772a593f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/TournamentKind.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/TournamentKind.kt @@ -2,11 +2,19 @@ package net.pokeranalytics.android.model import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType enum class TournamentKind : RowRepresentable { MTT, SNG; + companion object { + val all : List + get() { + return TournamentKind.values() as List + } + } + override val resId: Int? get() { return when (this) { @@ -14,4 +22,6 @@ enum class TournamentKind : RowRepresentable { SNG -> R.string.sng } } + + override val viewType: Int = RowViewType.TITLE.ordinal } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 20c68941..2c992301 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -553,7 +553,9 @@ open class Session : RealmObject(), SessionInterface, Savable, } SessionRow.TOURNAMENT_KIND -> { // Add current tournament kind and tournament kind list - data.add(RowRepresentableEditDescriptor(tournamentKind)) + data.add(RowRepresentableEditDescriptor(tournamentKind, staticData = TournamentKind.values().map { + it + })) } SessionRow.TOURNAMENT_FEATURE -> { // Add current tournament feature and tournament features list @@ -668,7 +670,7 @@ open class Session : RealmObject(), SessionInterface, Savable, result = localResult } SessionRow.TOURNAMENT_NAME -> tournamentName = value as TournamentName? - + SessionRow.TOURNAMENT_KIND -> tournamentKind = value as Int? } realm.commitTransaction() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index f0450fcb..ac06e065 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -213,10 +213,10 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, this.liveDataType = LiveData.values()[dataType] val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey) proxyItem?.let { - this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}" + this.appBar.toolbar.title = "Update ${this.liveDataType.localizedTitle(this.parentActivity).toLowerCase().capitalize()}" isUpdating = true } ?: run { - this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}" + this.appBar.toolbar.title = "New ${this.liveDataType.localizedTitle(this.parentActivity).toLowerCase().capitalize()}" } this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey) this.rowRepresentableAdapter = RowRepresentableAdapter( diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt index 3c84267f..d179e7ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt @@ -25,6 +25,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow enum class BottomSheetType { NONE, LIST, + LIST_STATIC, LIST_GAME, DOUBLE_LIST, GRID, @@ -64,6 +65,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { val bottomSheetFragment = when (row.bottomSheetType) { BottomSheetType.LIST -> BottomSheetListFragment() BottomSheetType.LIST_GAME -> BottomSheetListGameFragment() + BottomSheetType.LIST_STATIC -> BottomSheetStaticListFragment() BottomSheetType.GRID -> BottomSheetTableSizeGridFragment() BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment() BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment() @@ -150,6 +152,16 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { LiveData.LOCATION.ordinal, requestCode = REQUEST_CODE_ADD_NEW_OBJECT ) + SessionRow.TOURNAMENT_NAME -> EditableDataActivity.newInstanceForResult( + this, + LiveData.TOURNAMENT_NAME.ordinal, + requestCode = REQUEST_CODE_ADD_NEW_OBJECT + ) + SessionRow.TOURNAMENT_FEATURE -> EditableDataActivity.newInstanceForResult( + this, + LiveData.TOURNAMENT_FEATURE.ordinal, + requestCode = REQUEST_CODE_ADD_NEW_OBJECT + ) } true } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt new file mode 100644 index 00000000..fbd909b2 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStaticListFragment.kt @@ -0,0 +1,74 @@ +package net.pokeranalytics.android.ui.fragment.components.bottomsheet + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import io.realm.RealmResults +import kotlinx.android.synthetic.main.bottom_sheet_list.* +import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.TournamentKind +import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate +import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType + +class BottomSheetStaticListFragment : BottomSheetFragment(), StaticRowRepresentableDataSource, + RowRepresentableDelegate { + + private var staticRows: List = emptyList() + private lateinit var dataAdapter: RowRepresentableAdapter + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun onResume() { + super.onResume() + dataAdapter.notifyDataSetChanged() + } + + override fun adapterRows(): List? { + return this.staticRows + } + + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + this.delegate.onRowValueChanged((row as TournamentKind).ordinal, this.row) + dismiss() + super.onRowSelected(position, row, fromAction) + } + + /** + * Init data + */ + private fun initData() { + val bottomSheetData = this.getData() + if (bottomSheetData.isNotEmpty() && bottomSheetData.first().staticData != null) { + this.staticRows = bottomSheetData.first().staticData as List + } + } + + /** + * Init UI + */ + private fun initUI() { + + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true) + + val viewManager = LinearLayoutManager(requireContext()) + dataAdapter = RowRepresentableAdapter(this, this) + + reyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = dataAdapter + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt index 212580fe..9d18652c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt @@ -9,5 +9,6 @@ class RowRepresentableEditDescriptor( var defaultValue: Any? = null, var hint: Int? = null, var inputType: Int? = null, - var data: RealmResults<*>? = null + var data: RealmResults<*>? = null, + var staticData: List? = null ) \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt index 20456919..c17342b9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt @@ -131,7 +131,8 @@ enum class SessionRow : RowRepresentable { BUY_IN, TIPS -> BottomSheetType.SUM BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT GAME -> BottomSheetType.LIST_GAME - LOCATION, BANKROLL, TOURNAMENT_KIND, TOURNAMENT_NAME, TOURNAMENT_FEATURE -> BottomSheetType.LIST + TOURNAMENT_KIND -> BottomSheetType.LIST_STATIC + LOCATION, BANKROLL, TOURNAMENT_NAME, TOURNAMENT_FEATURE -> BottomSheetType.LIST TABLE_SIZE -> BottomSheetType.GRID COMMENT -> BottomSheetType.EDIT_TEXT_MULTI_LINES else -> BottomSheetType.NONE diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt index 4834ad4f..f5e6c690 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt @@ -24,7 +24,8 @@ enum class SettingRow : RowRepresentable { BANKROLL, GAME, LOCATION, - TOURNAMENT_TYPE, + TOURNAMENT_NAME, + TOURNAMENT_FEATURE, // Terms PRIVACY_POLICY, @@ -54,7 +55,7 @@ enum class SettingRow : RowRepresentable { resId = R.string.data_management ) ) - rows.addAll(arrayListOf(BANKROLL, GAME, LOCATION, TOURNAMENT_TYPE)) + rows.addAll(arrayListOf(BANKROLL, GAME, LOCATION, TOURNAMENT_NAME, TOURNAMENT_FEATURE)) rows.add(HeaderRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.terms)) rows.addAll(arrayListOf(PRIVACY_POLICY, TERMS_OF_USE, GDPR)) @@ -101,7 +102,8 @@ enum class SettingRow : RowRepresentable { BANKROLL -> LiveData.BANKROLL GAME -> LiveData.GAME LOCATION -> LiveData.LOCATION - TOURNAMENT_TYPE -> LiveData.TOURNAMENT_NAME + TOURNAMENT_NAME -> LiveData.TOURNAMENT_NAME + TOURNAMENT_FEATURE -> LiveData.TOURNAMENT_FEATURE else -> null } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b23a343..97267e4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -734,9 +734,8 @@ Save - Tournament name - Tournament feature - New tournament name - New tournament feature + Tournament Name + Tournament Feature + New