From 6a4adbb061ee240cc617f2874f618163fb8db7d4 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 11:12:38 +0100 Subject: [PATCH 01/18] Improve layouts --- .../android/model/realm/Session.kt | 10 +- .../android/ui/view/RowViewType.kt | 8 ++ .../layout/row_header_title_amount_big.xml | 70 +++++++++++++ .../res/layout/row_header_title_value.xml | 8 +- app/src/main/res/layout/row_title_switch.xml | 99 ++++++++++--------- 5 files changed, 136 insertions(+), 59 deletions(-) create mode 100644 app/src/main/res/layout/row_header_title_amount_big.xml 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 7424ced4..e09d7029 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 @@ -229,7 +229,7 @@ open class Session : RealmObject(), SessionInterface, Savable, // get all sessions part of the deleted session set val sessionsFromSet = set.sessions - // cleanup unecessary related objects + // cleanup unnecessary related objects set.deleteFromRealm() this.timeFrame?.deleteFromRealm() this.result?.deleteFromRealm() @@ -288,7 +288,7 @@ open class Session : RealmObject(), SessionInterface, Savable, } override fun getDisplayName(): String { - return "session ${this.creationDate}" + return "Session ${this.creationDate}" } override fun adapterRows(): ArrayList { @@ -299,7 +299,7 @@ open class Session : RealmObject(), SessionInterface, Savable, SessionState.STARTED -> { rows.add( HeaderRowRepresentable( - RowViewType.HEADER_TITLE_AMOUNT, + RowViewType.HEADER_TITLE_AMOUNT_BIG, title = getDuration(), value = result?.net.toString() ) ) @@ -307,7 +307,7 @@ open class Session : RealmObject(), SessionInterface, Savable, SessionState.PAUSED -> { rows.add( HeaderRowRepresentable( - RowViewType.HEADER_TITLE_AMOUNT, + RowViewType.HEADER_TITLE_AMOUNT_BIG, resId = R.string.pause, value = result?.net.toString() ) ) @@ -315,7 +315,7 @@ open class Session : RealmObject(), SessionInterface, Savable, SessionState.FINISHED -> { rows.add( HeaderRowRepresentable( - RowViewType.HEADER_TITLE_AMOUNT, + RowViewType.HEADER_TITLE_AMOUNT_BIG, title = getDuration(), value = result?.net.toString() ) ) 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 a98d4198..1f933dc3 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 @@ -33,6 +33,7 @@ enum class RowViewType { HEADER, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, + HEADER_TITLE_AMOUNT_BIG, EDIT_TEXT, TITLE, TITLE_VALUE, @@ -227,6 +228,13 @@ enum class RowViewType { false ) ) + HEADER_TITLE_AMOUNT_BIG -> HeaderTitleAmountViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.row_header_title_amount_big, + parent, + false + ) + ) TITLE -> TitleViewHolder( LayoutInflater.from(parent.context).inflate( R.layout.row_title, diff --git a/app/src/main/res/layout/row_header_title_amount_big.xml b/app/src/main/res/layout/row_header_title_amount_big.xml new file mode 100644 index 00000000..d2916d2d --- /dev/null +++ b/app/src/main/res/layout/row_header_title_amount_big.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_header_title_value.xml b/app/src/main/res/layout/row_header_title_value.xml index 67b27389..d9f427a8 100644 --- a/app/src/main/res/layout/row_header_title_value.xml +++ b/app/src/main/res/layout/row_header_title_value.xml @@ -4,12 +4,12 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rowHeaderTitleValue.container" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="48dp" android:orientation="vertical"> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/rowTitleSwitch.container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?selectableItemBackground"> + android:id="@+id/rowTitleSwitch.title" + android:layout_width="0dp" + android:layout_height="wrap_content" + style="@style/PokerAnalyticsTheme.TextView.RowTitle" + android:layout_marginTop="16dp" + android:layout_marginEnd="8dp" + android:layout_marginBottom="16dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/rowTitleSwitch.switch" + app:layout_constraintStart_toStartOf="@+id/guidelineStart" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0" + tools:text="Data Type Title" /> + android:id="@+id/guidelineStart" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_begin="16dp" /> - + android:id="@+id/guidelineEnd" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_end="16dp" /> + + + android:id="@+id/rowTitleSwitch.separator" + android:layout_width="match_parent" + android:layout_height="16dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + tools:visibility="visible"> + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_gravity="center" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + android:background="@color/kaki" /> From dc15b402c4a76e35f282d2886e14038071c559ad Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 11:33:05 +0100 Subject: [PATCH 02/18] Improve Switch row --- .../ui/adapter/RowRepresentableAdapter.kt | 18 +++++++++--------- .../ui/fragment/EditableDataFragment.kt | 1 - .../android/ui/view/RowViewType.kt | 9 +++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index cd6f2623..5295065a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -1,15 +1,12 @@ package net.pokeranalytics.android.ui.adapter import android.content.Context -import android.os.Handler import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.ui.view.BindableHolder -import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowViewType interface RowRepresentableDataSource : DisplayableDataSource { @@ -130,13 +127,16 @@ class RowRepresentableAdapter( * Refresh the row in the adapter */ fun refreshRow(row: RowRepresentable) { + + if (row.viewType == RowViewType.TITLE_SWITCH.ordinal) { + // Avoid to refresh the view because it will refresh itself + // Caution if we want to update the title for example + return + } + val index = this.dataSource.indexForRow(row) if (index >= 0) { - val handler = Handler() - - handler.post { - notifyItemChanged(index) - } + notifyItemChanged(index) } } 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 4015aa47..c629d020 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 @@ -18,7 +18,6 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment -import net.pokeranalytics.android.ui.view.BankrollRow import net.pokeranalytics.android.ui.view.RowRepresentable import timber.log.Timber 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 1f933dc3..d389953a 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 @@ -128,19 +128,20 @@ enum class RowViewType { BindableHolder { override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowTitleSwitch_title.text = row.localizedTitle(itemView.context) + adapter.dataSource.let { itemView.rowTitleSwitch_switch.isChecked = it.boolForRow(row) - itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { _, b -> - adapter.delegate?.onRowValueChanged(b, row) - } + itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { buttonView, isChecked -> + adapter.delegate?.onRowValueChanged(isChecked, row) + } } val listener = View.OnClickListener { itemView.rowTitleSwitch_switch.isChecked = !itemView.rowTitleSwitch_switch.isChecked - adapter.delegate?.onRowValueChanged(itemView.rowTitleSwitch_switch.isChecked, row) } itemView.rowTitleSwitch_container.setOnClickListener(listener) itemView.rowTitleSwitch_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE + } } From 2129cde49a76acf265fcaad8923b63b2a65b226d Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 11:37:57 +0100 Subject: [PATCH 03/18] Clean code & format --- .../android/ui/activity/EditableDataActivity.kt | 12 ++++++------ .../android/ui/activity/SessionActivity.kt | 4 ++-- app/src/main/res/layout/activity_data_list.xml | 14 +++++++------- app/src/main/res/layout/activity_editable_data.xml | 14 +++++++------- app/src/main/res/layout/activity_new_session.xml | 13 ------------- app/src/main/res/layout/activity_session.xml | 13 +++++++++++++ 6 files changed, 35 insertions(+), 35 deletions(-) delete mode 100644 app/src/main/res/layout/activity_new_session.xml create mode 100644 app/src/main/res/layout/activity_session.xml diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt index 28b7f8ff..4a1c5224 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt @@ -10,16 +10,16 @@ import net.pokeranalytics.android.ui.fragment.EditableDataFragment class EditableDataActivity : PokerAnalyticsActivity() { enum class IntentKey(val keyName : String) { - DATATYPE("DATATYPE"), - PRIMARYKEY("PRIMARYKEY"); + DATA_TYPE("DATA_TYPE"), + PRIMARY_KEY("PRIMARY_KEY"); } companion object { fun newInstance(context: Context, dataType: Int, primaryKey: String? = null) { val intent = Intent(context, EditableDataActivity::class.java) - intent.putExtra(IntentKey.DATATYPE.keyName, dataType) + intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType) primaryKey?.let { - intent.putExtra(IntentKey.PRIMARYKEY.keyName, it) + intent.putExtra(IntentKey.PRIMARY_KEY.keyName, it) } context.startActivity(intent) } @@ -36,8 +36,8 @@ class EditableDataActivity : PokerAnalyticsActivity() { */ private fun initUI() { - val dataType = intent.getIntExtra(IntentKey.DATATYPE.keyName, 0) - val primaryKey = intent.getStringExtra(IntentKey.PRIMARYKEY.keyName) + val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0) + val primaryKey = intent.getStringExtra(IntentKey.PRIMARY_KEY.keyName) val fragment = editableDataFragment as EditableDataFragment fragment.setData(dataType, primaryKey) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt index 0017d653..12be0c7d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt @@ -3,7 +3,7 @@ package net.pokeranalytics.android.ui.activity import android.content.Context import android.content.Intent import android.os.Bundle -import kotlinx.android.synthetic.main.activity_new_session.* +import kotlinx.android.synthetic.main.activity_session.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.SessionFragment @@ -34,7 +34,7 @@ class SessionActivity: PokerAnalyticsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_new_session) + setContentView(R.layout.activity_session) initUI() } diff --git a/app/src/main/res/layout/activity_data_list.xml b/app/src/main/res/layout/activity_data_list.xml index 2911b5ae..bdbc43aa 100644 --- a/app/src/main/res/layout/activity_data_list.xml +++ b/app/src/main/res/layout/activity_data_list.xml @@ -1,13 +1,13 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/dataListFragment" + android:name="net.pokeranalytics.android.ui.fragment.DataListFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_editable_data.xml b/app/src/main/res/layout/activity_editable_data.xml index 479e51ea..d669661e 100644 --- a/app/src/main/res/layout/activity_editable_data.xml +++ b/app/src/main/res/layout/activity_editable_data.xml @@ -1,13 +1,13 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/editableDataFragment" + android:name="net.pokeranalytics.android.ui.fragment.EditableDataFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_new_session.xml b/app/src/main/res/layout/activity_new_session.xml deleted file mode 100644 index 3305e157..00000000 --- a/app/src/main/res/layout/activity_new_session.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_session.xml b/app/src/main/res/layout/activity_session.xml new file mode 100644 index 00000000..3a3d0b9a --- /dev/null +++ b/app/src/main/res/layout/activity_session.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file From e96647e8adb13919a4ab424c96cf075749a32551 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 13:49:40 +0100 Subject: [PATCH 04/18] Improve UI for settings --- .../android/ui/activity/DataListActivity.kt | 75 ++++++++-------- .../android/ui/fragment/DataListFragment.kt | 29 +++++-- .../android/ui/view/RowRepresentable.kt | 4 +- app/src/main/res/drawable/separator.xml | 2 +- .../main/res/layout/activity_data_list.xml | 4 +- .../res/layout/activity_editable_data.xml | 4 +- app/src/main/res/layout/activity_session.xml | 4 +- .../main/res/layout/fragment_data_list.xml | 86 +++++++++++++------ app/src/main/res/layout/fragment_session.xml | 2 - 9 files changed, 130 insertions(+), 80 deletions(-) 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 index 3b492ebd..54119d48 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt @@ -5,46 +5,45 @@ import android.content.Intent import android.os.Bundle import kotlinx.android.synthetic.main.activity_data_list.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.fragment.DataListFragment import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.fragment.DataListFragment class DataListActivity : PokerAnalyticsActivity() { - enum class IntentKey(val keyName : String) { - DATATYPE("DATATYPE"), - } - - companion object { - fun newInstance(context: Context, dataType: Int) { - val intent = Intent(context, DataListActivity::class.java) - intent.putExtra(IntentKey.DATATYPE.keyName, 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(IntentKey.DATATYPE.keyName, 0) - val fragment = dataListFragment as DataListFragment - fragment.setData(dataType) - } - - /** - * Init data - */ - private fun initData() { - - - - } + enum class IntentKey(val keyName: String) { + DATA_TYPE("DATA_TYPE"), + } + + companion object { + fun newInstance(context: Context, dataType: Int) { + val intent = Intent(context, DataListActivity::class.java) + intent.putExtra(IntentKey.DATA_TYPE.keyName, 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(IntentKey.DATA_TYPE.keyName, 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/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index 41adc617..3724d63a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.activity.EditableDataActivity +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate @@ -18,14 +19,13 @@ import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.SettingRow -import timber.log.Timber class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { private lateinit var dataType: SettingRow - private lateinit var items: RealmResults<*> + private lateinit var items: RealmResults<*> override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_data_list, container, false) @@ -55,18 +55,31 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { this.dataType.relatedResultsRepresentable?.let { - EditableDataActivity.newInstance(requireContext(), it.ordinal, (this.items[position] as Savable).uniqueIdentifier()) + EditableDataActivity.newInstance( + requireContext(), + it.ordinal, + (this.items[position] as Savable).uniqueIdentifier() + ) } } - private fun initData() { - } + private fun initData() { + } /** * Init UI */ private fun initUI() { + val activity = activity as PokerAnalyticsActivity + + // Avoid a bug during setting the title + toolbar.title = "" + + activity.setSupportActionBar(toolbar) + activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) + setHasOptionsMenu(true) + val viewManager = LinearLayoutManager(requireContext()) val dataListAdapter = RowRepresentableAdapter(this, this) @@ -85,22 +98,20 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, ) } } - } - /** * Set fragment data */ fun setData(dataType: Int) { this.dataType = SettingRow.values()[dataType] - this.title.text = this.dataType.name.toLowerCase().capitalize() + + this.toolbar.title = this.dataType.localizedTitle(requireContext()) val realm = Realm.getDefaultInstance() this.dataType.relatedResultsRepresentable?.let { this.items = it.items(realm) this.items.addChangeListener { newItems -> - Timber.d("newItems: ${newItems.size}") this.recyclerView.adapter?.notifyDataSetChanged() } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index b27ff292..36176548 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -320,7 +320,7 @@ enum class SettingRow : RowRepresentable { BANKROLL, GAME, LOCATION, - TOURNAMENT_FEATURE, + TOURNAMENT_TYPE, TRANSACTION_TYPE; override val resId: Int? @@ -343,7 +343,7 @@ enum class SettingRow : RowRepresentable { BANKROLL -> LiveData.BANKROLL GAME -> LiveData.GAME LOCATION -> LiveData.LOCATION - TOURNAMENT_FEATURE -> LiveData.TOURNAMENT_FEATURE + TOURNAMENT_TYPE -> LiveData.TOURNAMENT_TYPE TRANSACTION_TYPE -> LiveData.TRANSACTION_TYPE else -> null } diff --git a/app/src/main/res/drawable/separator.xml b/app/src/main/res/drawable/separator.xml index 0af99c11..d2658897 100644 --- a/app/src/main/res/drawable/separator.xml +++ b/app/src/main/res/drawable/separator.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_data_list.xml b/app/src/main/res/layout/activity_data_list.xml index bdbc43aa..83171e1b 100644 --- a/app/src/main/res/layout/activity_data_list.xml +++ b/app/src/main/res/layout/activity_data_list.xml @@ -1,5 +1,6 @@ @@ -8,6 +9,7 @@ android:id="@+id/dataListFragment" android:name="net.pokeranalytics.android.ui.fragment.DataListFragment" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + tools:layout="@layout/fragment_data_list" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_editable_data.xml b/app/src/main/res/layout/activity_editable_data.xml index d669661e..d8f373b8 100644 --- a/app/src/main/res/layout/activity_editable_data.xml +++ b/app/src/main/res/layout/activity_editable_data.xml @@ -2,12 +2,14 @@ + android:layout_height="match_parent" + tools:layout="@layout/fragment_editable_data" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_session.xml b/app/src/main/res/layout/activity_session.xml index 3a3d0b9a..66d4c60a 100644 --- a/app/src/main/res/layout/activity_session.xml +++ b/app/src/main/res/layout/activity_session.xml @@ -2,12 +2,14 @@ + android:layout_height="match_parent" + tools:layout="@layout/fragment_session" /> \ 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 index c2fd9428..8aaf3bd3 100644 --- a/app/src/main/res/layout/fragment_data_list.xml +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -1,36 +1,72 @@ - + android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools"> + + + + + + + + + + + + + + + + + + + + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_session.xml b/app/src/main/res/layout/fragment_session.xml index 9baeaa3b..bbe0d2f0 100644 --- a/app/src/main/res/layout/fragment_session.xml +++ b/app/src/main/res/layout/fragment_session.xml @@ -135,12 +135,10 @@ app:titleTextColor="@color/white" tools:title="Poker Analytics" /> - - Date: Wed, 27 Feb 2019 13:55:50 +0100 Subject: [PATCH 05/18] Clean import --- .../pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index 0d8af72e..c3a14d29 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -1,7 +1,6 @@ package net.pokeranalytics.android.ui.adapter import android.view.ViewGroup -import android.content.Context import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import net.pokeranalytics.android.ui.view.BindableHolder From b7f2f6947932f36abfd051986acc20fc4250ae75 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 14:15:46 +0100 Subject: [PATCH 06/18] Fix BottomSheet keyboard bug --- .../components/bottomsheet/BottomSheetFragment.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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 0fce18a5..79fb9c69 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 @@ -1,5 +1,7 @@ package net.pokeranalytics.android.ui.fragment.components.bottomsheet +import android.annotation.SuppressLint +import android.app.Dialog import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -74,11 +76,10 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { initUI() } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - - // To display correctly the keyboard - dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) + @SuppressLint("RestrictedApi") + override fun setupDialog(dialog: Dialog?, style: Int) { + super.setupDialog(dialog, style) + dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) } /** From e036f2dc89d14d4be98890ecddd9e0404b4257c0 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 14:27:49 +0100 Subject: [PATCH 07/18] Update ripple color with something light --- app/src/main/res/values/styles.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8848770a..1ad30e40 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,7 @@ @color/colorAccent @color/gray_dark @color/colorPrimary + @color/white_transparent @style/PokerAnalyticsTheme.BottomNavigationView @style/PokerAnalyticsTheme.Toolbar From 6de5f26733f34f134f515ec0a13d7d1c034893bd Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 14:42:14 +0100 Subject: [PATCH 08/18] Add ViewPager for HomeActivity and BottomNav --- .../android/ui/activity/HomeActivity.kt | 30 +++------ .../android/ui/adapter/HomePagerAdapter.kt | 64 +++++++++++++++++++ .../ui/view/PokerAnalyticsViewPager.kt | 33 ++++++++++ app/src/main/res/layout/activity_home.xml | 10 +++ 4 files changed, 116 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index b1c395b9..87f5f11c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -3,14 +3,11 @@ package net.pokeranalytics.android.ui.activity import android.content.Context import android.content.Intent import android.os.Bundle -import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationView import kotlinx.android.synthetic.main.activity_home.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.fragment.HistoryFragment -import net.pokeranalytics.android.ui.fragment.SettingsFragment -import net.pokeranalytics.android.ui.fragment.StatsFragment +import net.pokeranalytics.android.ui.adapter.HomePagerAdapter @@ -44,7 +41,7 @@ class HomeActivity : PokerAnalyticsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(net.pokeranalytics.android.R.layout.activity_home) + setContentView(R.layout.activity_home) initUI() } @@ -55,6 +52,12 @@ class HomeActivity : PokerAnalyticsActivity() { private fun initUI() { navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history + + val homePagerAdapter = HomePagerAdapter(supportFragmentManager) + viewPager.offscreenPageLimit = 5 + viewPager.enablePaging = false + viewPager.adapter = homePagerAdapter + } /** @@ -69,22 +72,7 @@ class HomeActivity : PokerAnalyticsActivity() { else -> "" } - val fragment: Fragment = when(index) { - 0 -> HistoryFragment() - 1 -> StatsFragment() - else -> SettingsFragment() - } - - val fragmentManager = supportFragmentManager - val count = fragmentManager.backStackEntryCount - for (i in 0 until count) { - fragmentManager.popBackStack() - } - - val fragmentTransaction = fragmentManager.beginTransaction() - fragmentTransaction.replace(net.pokeranalytics.android.R.id.container, fragment) - fragmentTransaction.commit() - + viewPager.setCurrentItem(index, false) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt new file mode 100644 index 00000000..41cc6926 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt @@ -0,0 +1,64 @@ +package net.pokeranalytics.android.ui.adapter + +import android.util.SparseArray +import android.view.ViewGroup +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentStatePagerAdapter +import net.pokeranalytics.android.ui.fragment.HistoryFragment +import net.pokeranalytics.android.ui.fragment.SettingsFragment +import net.pokeranalytics.android.ui.fragment.StatsFragment +import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import java.lang.ref.WeakReference + +/** + * Home Adapter + */ +class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) { + + var weakReferences = SparseArray>() + + override fun getItem(position: Int): PokerAnalyticsFragment { + return when (position) { + 0 -> HistoryFragment.newInstance() + 1 -> StatsFragment.newInstance() + 2 -> SettingsFragment.newInstance() + else -> HistoryFragment.newInstance() + } + } + + override fun getCount(): Int { + return 5 + } + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + super.destroyItem(container, position, `object`) + weakReferences.remove(position) + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val fragment = super.instantiateItem(container, position) as PokerAnalyticsFragment + weakReferences.put(position, WeakReference(fragment)) + return fragment + } + + override fun getItemPosition(obj: Any): Int { + val fragment = obj as PokerAnalyticsFragment + return when (fragment) { + HistoryFragment::class.java -> 0 + StatsFragment::class.java -> 1 + SettingsFragment::class.java -> 2 + else -> -1 + } + } + + /** + * Return the fragment at the position key + */ + fun getFragment(key: Int): PokerAnalyticsFragment? { + if (weakReferences.get(key) != null) { + return weakReferences.get(key).get() + } + return null + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt new file mode 100644 index 00000000..830ed374 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt @@ -0,0 +1,33 @@ +package net.pokeranalytics.android.ui.view + +import android.content.Context +import android.util.AttributeSet +import android.view.MotionEvent +import androidx.viewpager.widget.ViewPager + +/** + * Poker Analytics ViewPager + */ +class PokerAnalyticsViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) { + + var enablePaging: Boolean = false + + init { + this.enablePaging = false + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + return if (this.enablePaging) { + super.onTouchEvent(event) + } else false + + } + + override fun onInterceptTouchEvent(event: MotionEvent): Boolean { + return if (this.enablePaging) { + super.onInterceptTouchEvent(event) + } else false + + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index a56b0b25..670ad70c 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -15,6 +15,7 @@ app:layout_constraintTop_toTopOf="parent" app:title="@string/app_name" /> + + + Date: Wed, 27 Feb 2019 15:13:04 +0100 Subject: [PATCH 09/18] Improve Session UI --- .../android/ui/fragment/SessionFragment.kt | 47 ++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index 7127aef4..67e98a2d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -27,6 +27,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableDiffCallback import net.pokeranalytics.android.ui.view.SessionRow import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager +import timber.log.Timber import java.util.* class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { @@ -36,7 +37,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott private var sessionMenu: Menu? = null private val oldRows: ArrayList = ArrayList() private val handler: Handler = Handler() - private val refreshTimer: Runnable = object: Runnable { + private val refreshTimer: Runnable = object : Runnable { override fun run() { sessionAdapter.notifyItemChanged(0) handler.postDelayed(this, 30000) @@ -60,7 +61,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { inflater?.inflate(R.menu.session_toolbar, menu) this.sessionMenu = menu - updateSessionUI() + updateMenuUI() super.onCreateOptionsMenu(menu, inflater) } @@ -94,7 +95,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott this, currentSession.timeFrame?.endDate ) - else -> BottomSheetFragment.create(fragmentManager, row,this, data) + else -> BottomSheetFragment.create(fragmentManager, row, this, data) } } @@ -110,7 +111,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott currentSession.updateValue(value, row) sessionAdapter.refreshRow(row) when (row) { - SessionRow.CASHED_OUT, SessionRow.BUY_IN, SessionRow.TIPS -> updateSessionUI() + SessionRow.CASHED_OUT, SessionRow.BUY_IN, SessionRow.TIPS, SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI() } } @@ -146,6 +147,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott */ private fun updateSessionUI() { + Timber.d("updateSessionUI") + handler.removeCallbacksAndMessages(null) when (currentSession.getState()) { @@ -181,11 +184,36 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott floatingActionButton.animate().scaleX(0f).scaleY(0f).alpha(0f) .setInterpolator(FastOutSlowInInterpolator()).start() } + else -> { + } } + updateMenuUI() updateAdapterUI(true) } + /** + * Update Menu UI + */ + private fun updateMenuUI() { + when (currentSession.getState()) { + SessionState.PENDING -> { + sessionMenu?.findItem(R.id.restart)?.isVisible = false + sessionMenu?.findItem(R.id.stop)?.isVisible = false + } + SessionState.STARTED, SessionState.PAUSED -> { + sessionMenu?.findItem(R.id.restart)?.isVisible = true + sessionMenu?.findItem(R.id.stop)?.isVisible = true + } + SessionState.FINISHED -> { + sessionMenu?.findItem(R.id.restart)?.isVisible = true + sessionMenu?.findItem(R.id.stop)?.isVisible = false + } + else -> { + } + } + } + /** * Update adapter UI */ @@ -207,20 +235,16 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott * Update the state of the session (start / pause) */ private fun manageSessionState() { - when (currentSession.getState()) { - SessionState.PENDING -> { + SessionState.PENDING, SessionState.PAUSED -> { currentSession.startSession() } SessionState.STARTED -> { currentSession.pauseSession() } - SessionState.PAUSED -> { - currentSession.startSession() + else -> { } - else -> {} } - updateSessionUI() } @@ -264,7 +288,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott realm.commitTransaction() } - toolbar.title = if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game) + toolbar.title = + if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game) sessionAdapter = RowRepresentableAdapter(currentSession, this) recyclerView.adapter = sessionAdapter From a986a6030ef20a89ac6b66e5fc5dbc47485b502c Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 15:56:25 +0100 Subject: [PATCH 10/18] Add code for location and places --- .../components/PokerAnalyticsActivity.kt | 105 +++++++++++++++++- app/src/main/res/values/secrets.xml | 4 + 2 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/values/secrets.xml diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt index d6d582bf..895c1c48 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt @@ -1,17 +1,51 @@ package net.pokeranalytics.android.ui.activity.components +import android.Manifest +import android.Manifest.permission.ACCESS_FINE_LOCATION +import android.content.pm.PackageManager import android.os.Bundle -import android.os.PersistableBundle import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import com.google.android.gms.common.api.ApiException +import com.google.android.libraries.places.api.Places +import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.api.net.FindCurrentPlaceRequest import io.realm.Realm +import timber.log.Timber +import java.util.* + open class PokerAnalyticsActivity : AppCompatActivity() { + companion object { + const val PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 1000 + } + private val realm = Realm.getDefaultInstance() - override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { - super.onCreate(savedInstanceState, persistentState) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + + when (requestCode) { + PERMISSION_REQUEST_ACCESS_FINE_LOCATION -> { + if (permissions.isNotEmpty() && permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION + && grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED + ) { + locationPermissionGranted() + } else { + // permission denied, boo! Disable the + // functionality that depends on this permission. + // showMessage(getString(R.string.error)); + } + } + } + } override fun onOptionsItemSelected(item: MenuItem?): Boolean { @@ -35,4 +69,69 @@ open class PokerAnalyticsActivity : AppCompatActivity() { return realm } + /** + * Ask for location permission + */ + fun askForLocationPermission() { + ActivityCompat.requestPermissions( + this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), + PERMISSION_REQUEST_ACCESS_FINE_LOCATION + ) + } + + /** + * Return if the user has given the permission location + */ + fun hasLocationPermission(): Boolean { + return ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + } + + /** + * Called when the permission location has been granted + */ + open fun locationPermissionGranted() {} + + /** + * Ask for places request + */ + fun askForPlacesRequest() { + + // Initialize Places. + Places.initialize(applicationContext, getString(net.pokeranalytics.android.R.string.google_places_api)) + + // Create a new Places client instance. + val placesClient = Places.createClient(this) + + // Use fields to define the data types to return. + val placeFields = Arrays.asList(Place.Field.NAME) + + // Use the builder to create a FindCurrentPlaceRequest. + val request = FindCurrentPlaceRequest.builder(placeFields).build() + + // Call findCurrentPlace and handle the response (first check that the user has granted permission). + if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + val placeResponse = placesClient.findCurrentPlace(request) + placeResponse.addOnCompleteListener { task -> + if (task.isSuccessful) { + val response = task.result + for (placeLikelihood in response!!.placeLikelihoods) { + Timber.d( + String.format( + "Place '%s' has likelihood: %f", placeLikelihood.place.name, placeLikelihood.likelihood + ) + ) + } + } else { + val exception = task.exception + if (exception is ApiException) { + Timber.d("Error: ${"Place not found: " + exception.statusCode}") + } + } + } + + } else { + askForLocationPermission() + } + } + } \ No newline at end of file diff --git a/app/src/main/res/values/secrets.xml b/app/src/main/res/values/secrets.xml new file mode 100644 index 00000000..77732c57 --- /dev/null +++ b/app/src/main/res/values/secrets.xml @@ -0,0 +1,4 @@ + + + AIzaSyCg-vgW4YnFsQ_s1iWjgzSq2vT0te3R1Hw + \ No newline at end of file From f902448fb0a09f19643f64b57560bdfcc8f7f1cf Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 16:47:17 +0100 Subject: [PATCH 11/18] Fix clear Game in Session --- .../java/net/pokeranalytics/android/model/realm/Session.kt | 3 +++ 1 file changed, 3 insertions(+) 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 e09d7029..ae6de33e 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 @@ -549,6 +549,9 @@ open class Session : RealmObject(), SessionInterface, Savable, } catch (e: Exception) { null } + } else if (value == null) { + limit = null + game = null } } SessionRow.INITIAL_BUY_IN -> tournamentEntryFee = if (value == null) null else (value as String).toDouble() From a5b5a4e8e20150bacf08e4202d34a47ceef089ab Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 16:47:45 +0100 Subject: [PATCH 12/18] Improve blinds edition --- .../BottomSheetDoubleEditTextFragment.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index b0ef64ce..9fa23f7e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -9,11 +9,14 @@ import androidx.core.widget.addTextChangedListener import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.view.SessionRow +import net.pokeranalytics.android.util.round class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { private val values = ArrayList() + private var isEditingBlinds: Boolean = false override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -34,6 +37,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { * Init data */ private fun initData() { + isEditingBlinds = row == SessionRow.BLINDS } /** @@ -55,12 +59,25 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { data[0].hint?.let { editText1.hint = getString(it) } editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT - editText1.addTextChangedListener { values[0] = it?.toString() ?: "" } - editText1.setText((data[0].defaultValue ?: "").toString()) + editText1.addTextChangedListener { + values[0] = it?.toString() ?: "" + if (isEditingBlinds) { + try { + val smallBlind = values[0].toDouble() + editText2.setText((smallBlind * 2).round()) + } catch (e: Exception) { + editText2.setText("") + } + } + } data[1].hint?.let { editText2.hint = getString(it) } editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT - editText2.addTextChangedListener { values[1] = it?.toString() ?: "" } + editText2.addTextChangedListener { + values[1] = it?.toString() ?: "" + } + + editText1.setText((data[0].defaultValue ?: "").toString()) editText2.setText((data[1].defaultValue ?: "").toString()) editText2.setOnEditorActionListener { v, actionId, event -> From 172330c98692a0f306ab765f6299d366b4b7c9fb Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 16:47:54 +0100 Subject: [PATCH 13/18] Update style --- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/styles.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f5d08d56..320151df 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -16,6 +16,7 @@ #40000000 #58C473 + #2558C473 #65FF82 #282e29 #2E8148 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 1ad30e40..dec0a790 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,7 +8,7 @@ @color/colorAccent @color/gray_dark @color/colorPrimary - @color/white_transparent + @color/green_transparent @style/PokerAnalyticsTheme.BottomNavigationView @style/PokerAnalyticsTheme.Toolbar From b44e7e21f4bd8f94f54a60eb1d2cfabbfb6ad2c6 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 17:37:20 +0100 Subject: [PATCH 14/18] Remove default input type --- .../android/ui/view/RowRepresentableEditDescriptor.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 d9fb8fd8..212580fe 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 @@ -1,6 +1,5 @@ package net.pokeranalytics.android.ui.view -import android.text.InputType import io.realm.RealmResults /** @@ -9,6 +8,6 @@ import io.realm.RealmResults class RowRepresentableEditDescriptor( var defaultValue: Any? = null, var hint: Int? = null, - var inputType: Int? = InputType.TYPE_CLASS_TEXT, + var inputType: Int? = null, var data: RealmResults<*>? = null ) \ No newline at end of file From 2473dbdd36614290cfdc10ee1f3a6ca90a23dd24 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 17:38:18 +0100 Subject: [PATCH 15/18] Add multi lines edit text --- .../android/model/realm/Session.kt | 2 +- .../BottomSheetEditTextMultiLinesFragment.kt | 56 +++++++++++++++++++ .../bottomsheet/BottomSheetFragment.kt | 2 + .../android/ui/view/RowRepresentable.kt | 2 +- .../bottom_sheet_edit_text_multi_lines.xml | 28 ++++++++++ 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt create mode 100644 app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml 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 ae6de33e..9184ff42 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 @@ -438,7 +438,7 @@ open class Session : RealmObject(), SessionInterface, Savable, ) } SessionRow.COMMENT -> { - data.add(RowRepresentableEditDescriptor(comment, R.string.comment, InputType.TYPE_CLASS_TEXT)) + data.add(RowRepresentableEditDescriptor(comment, R.string.comment)) } SessionRow.GAME -> { // Add current game & games list diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt new file mode 100644 index 00000000..3787218f --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt @@ -0,0 +1,56 @@ +package net.pokeranalytics.android.ui.fragment.components.bottomsheet + +import android.os.Bundle +import android.text.InputType +import android.view.LayoutInflater +import android.view.View +import androidx.core.widget.addTextChangedListener +import kotlinx.android.synthetic.main.bottom_sheet_edit_text_multi_lines.* +import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* + + +class BottomSheetEditTextMultiLinesFragment : BottomSheetFragment() { + + private var value = "" + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun onStart() { + super.onStart() + editText1.requestFocus() + } + + override fun getValue(): Any? { + return value.trim() + } + + /** + * Init data + */ + private fun initData() { + } + + /** + * Init UI + */ + private fun initUI() { + + setAddButtonVisible(false) + + LayoutInflater.from(requireContext()).inflate(net.pokeranalytics.android.R.layout.bottom_sheet_edit_text_multi_lines, view?.bottomSheetContainer, true) + + val data = getData() + + if (data.size == 1) { + data[0].hint?.let { editText1.hint = getString(it) } + editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES + editText1.addTextChangedListener { value = it?.toString() ?: "" } + editText1.setText((data[0].defaultValue ?: "").toString()) + } + } + +} \ No newline at end of file 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 79fb9c69..1f7a2760 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 @@ -22,6 +22,7 @@ enum class BottomSheetType { DOUBLE_LIST, GRID, EDIT_TEXT, + EDIT_TEXT_MULTI_LINES, DOUBLE_EDIT_TEXT, SUM } @@ -54,6 +55,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { BottomSheetType.GRID -> BottomSheetTableSizeGridFragment() BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment() BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment() + BottomSheetType.EDIT_TEXT_MULTI_LINES -> BottomSheetEditTextMultiLinesFragment() BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment() BottomSheetType.SUM -> BottomSheetSumFragment() else -> BottomSheetFragment() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index 36176548..bb335e54 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -206,7 +206,7 @@ enum class SessionRow : RowRepresentable { GAME -> BottomSheetType.LIST_GAME LOCATION, BANKROLL, TOURNAMENT_TYPE -> BottomSheetType.LIST TABLE_SIZE -> BottomSheetType.GRID - COMMENT -> BottomSheetType.EDIT_TEXT + COMMENT -> BottomSheetType.EDIT_TEXT_MULTI_LINES else -> BottomSheetType.NONE } } diff --git a/app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml b/app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml new file mode 100644 index 00000000..766adff7 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file From 475a4e64ce313fde8c34017b8936301bb2cb5e26 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 17:38:33 +0100 Subject: [PATCH 16/18] Improve default input type for edit text --- .../bottomsheet/BottomSheetDoubleEditTextFragment.kt | 4 ++-- .../components/bottomsheet/BottomSheetEditTextFragment.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index 9fa23f7e..a1866cf2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -58,7 +58,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { if (data.size == 2) { data[0].hint?.let { editText1.hint = getString(it) } - editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT + editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES editText1.addTextChangedListener { values[0] = it?.toString() ?: "" if (isEditingBlinds) { @@ -72,7 +72,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { } data[1].hint?.let { editText2.hint = getString(it) } - editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT + editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES editText2.addTextChangedListener { values[1] = it?.toString() ?: "" } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index 9e6be4a7..610301e3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -50,7 +50,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() { if (data.size == 1) { data[0].hint?.let { editText1.hint = getString(it) } - editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT + editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES editText1.addTextChangedListener { value = it?.toString() ?: "" } editText1.setText((data[0].defaultValue ?: "").toString()) From 7a839db397dc5de643b4eb756b32616ab83242fc Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 27 Feb 2019 18:13:58 +0100 Subject: [PATCH 17/18] Add Net Hourly --- .../java/net/pokeranalytics/android/model/realm/Session.kt | 6 +++--- app/src/main/res/layout/row_header_title_amount.xml | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) 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 9184ff42..9e550425 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 @@ -250,7 +250,7 @@ open class Session : RealmObject(), SessionInterface, Savable, } @Ignore - override var estimatedHands: Double = 25.0 * (this.timeFrame?.hourlyDuration?.toDouble() ?: 0.0) + override var estimatedHands: Double = 25.0 * (this.timeFrame?.hourlyDuration ?: 0.0) @Ignore override var bbNetResult: Double = 0.0 @@ -321,8 +321,8 @@ open class Session : RealmObject(), SessionInterface, Savable, ) rows.add( HeaderRowRepresentable( - RowViewType.HEADER_TITLE_VALUE, - resId = R.string.hour_rate_without_pauses, value = result?.net.toString() + RowViewType.HEADER_TITLE_AMOUNT, + resId = R.string.hour_rate_without_pauses, value = this.sessionSet?.hourlyRate.toString() ) ) diff --git a/app/src/main/res/layout/row_header_title_amount.xml b/app/src/main/res/layout/row_header_title_amount.xml index 48af1625..7eb14e31 100644 --- a/app/src/main/res/layout/row_header_title_amount.xml +++ b/app/src/main/res/layout/row_header_title_amount.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rowHeaderTitleAmount.container" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="48dp" android:orientation="vertical"> Date: Wed, 27 Feb 2019 18:28:02 +0100 Subject: [PATCH 18/18] Fix blinds & format code --- .../android/model/realm/Session.kt | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) 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 9e550425..0e4c5dee 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 @@ -322,7 +322,8 @@ open class Session : RealmObject(), SessionInterface, Savable, rows.add( HeaderRowRepresentable( RowViewType.HEADER_TITLE_AMOUNT, - resId = R.string.hour_rate_without_pauses, value = this.sessionSet?.hourlyRate.toString() + resId = R.string.hour_rate_without_pauses, + value = this.sessionSet?.hourlyRate.toString() ) ) @@ -330,12 +331,14 @@ open class Session : RealmObject(), SessionInterface, Savable, rows.add( HeaderRowRepresentable( RowViewType.HEADER_TITLE_VALUE, - resId = R.string.bankroll_variation, value = result?.net.toString() + resId = R.string.bankroll_variation, + value = result?.net.toString() ) ) } } - else -> {} + else -> { + } } // Rows @@ -372,7 +375,7 @@ open class Session : RealmObject(), SessionInterface, Savable, override fun actionIconForRow(row: RowRepresentable): Int? { return when (row) { SessionRow.START_DATE, SessionRow.END_DATE -> { - R.drawable.ic_close + net.pokeranalytics.android.R.drawable.ic_close } else -> null } @@ -390,19 +393,25 @@ open class Session : RealmObject(), SessionInterface, Savable, SessionRow.BLINDS -> { data.add( RowRepresentableEditDescriptor( - cgSmallBlind?.round(), R.string.smallblind, InputType.TYPE_CLASS_NUMBER + cgSmallBlind?.round(), + R.string.smallblind, + InputType.TYPE_CLASS_NUMBER + or InputType.TYPE_NUMBER_FLAG_DECIMAL ) ) data.add( RowRepresentableEditDescriptor( cgBigBlind?.round(), R.string.bigblind, InputType.TYPE_CLASS_NUMBER + or InputType.TYPE_NUMBER_FLAG_DECIMAL ) ) } SessionRow.BREAK_TIME -> { data.add( - RowRepresentableEditDescriptor("", - hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER) + RowRepresentableEditDescriptor( + "", + hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER + ) ) } SessionRow.BUY_IN -> { @@ -434,7 +443,10 @@ open class Session : RealmObject(), SessionInterface, Savable, } SessionRow.CASHED_OUT, SessionRow.PRIZE -> { data.add( - RowRepresentableEditDescriptor(result?.cashout?.round(), inputType = InputType.TYPE_CLASS_NUMBER) + RowRepresentableEditDescriptor( + result?.cashout?.round(), + inputType = InputType.TYPE_NUMBER_FLAG_SIGNED + ) ) } SessionRow.COMMENT -> { @@ -456,7 +468,10 @@ open class Session : RealmObject(), SessionInterface, Savable, } SessionRow.PLAYERS -> { data.add( - RowRepresentableEditDescriptor(tournamentNumberOfPlayers?.toString(), inputType = InputType.TYPE_CLASS_NUMBER) + RowRepresentableEditDescriptor( + tournamentNumberOfPlayers?.toString(), + inputType = InputType.TYPE_NUMBER_FLAG_SIGNED + ) ) } SessionRow.POSITION -> {