From f1423257b160def0e8a87a6d0ed3d50573d48780 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 7 Jun 2019 18:25:38 +0200 Subject: [PATCH] Improve Player management --- .../android/model/realm/Player.kt | 13 ++- .../ui/fragment/data/PlayerDataFragment.kt | 13 ++- .../android/ui/view/PlayerImageView.kt | 18 ++++- .../android/ui/view/RowViewType.kt | 31 ++++++- app/src/main/res/layout/row_player.xml | 81 +++++++++++++++++++ 5 files changed, 148 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/layout/row_player.xml diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt index 66dc2765..71575f58 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt @@ -3,13 +3,16 @@ package net.pokeranalytics.android.model.realm import android.content.Context import io.realm.Realm import io.realm.RealmObject +import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor +import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.PlayerRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.util.NULL_TEXT @@ -33,6 +36,8 @@ open class Player : RealmObject(), NameManageable, Deletable, StaticRowRepresent // The name of the player override var name: String = "" + @Ignore + override val viewType: Int = RowViewType.ROW_PLAYER.ordinal // New fields var summary: String = "" @@ -41,11 +46,13 @@ open class Player : RealmObject(), NameManageable, Deletable, StaticRowRepresent override fun isValidForDelete(realm: Realm): Boolean { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + //TODO + return true } override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + //TODO + return R.string.relationship_error } override fun adapterRows(): List? { @@ -81,7 +88,7 @@ open class Player : RealmObject(), NameManageable, Deletable, StaticRowRepresent /** * Return if the player has a picture */ - fun hasPicture() : Boolean { + fun hasPicture(): Boolean { return picture != null && picture?.isNotEmpty() == true } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt index 8f6940bc..02d16d00 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt @@ -17,6 +17,7 @@ import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.PlayerRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.util.NULL_TEXT +import timber.log.Timber import java.io.File /** @@ -34,6 +35,7 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) + shouldOpenKeyboard = false return inflater.inflate(R.layout.fragment_player, container, false) } @@ -89,6 +91,7 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + Timber.d("onRowSelected") when (row) { PlayerRow.PLAYER_IMAGE -> { openPictureDialog() @@ -113,6 +116,10 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou */ private fun initUI() { mediaActivity = parentActivity as MediaActivity? + + if (!deleteButtonShouldAppear) { + onRowSelected(0, SimpleRow.NAME) + } } /** @@ -124,7 +131,9 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou val placesArray = ArrayList() placesArray.add(getString(R.string.take_a_picture)) placesArray.add(getString(R.string.library)) - placesArray.add(getString(R.string.select_a_color)) + + // TODO + //placesArray.add(getString(R.string.select_a_color)) if (player.hasPicture()) { placesArray.add(getString(R.string.remove_picture)) @@ -135,8 +144,6 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou 0 -> mediaActivity?.openImageCaptureIntent(false) 1 -> mediaActivity?.openImageGalleryIntent(false) 2 -> { - } - 3 -> { player.updateValue(null, PlayerRow.PLAYER_IMAGE) rowRepresentableAdapter.refreshRow(PlayerRow.PLAYER_IMAGE) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt index 8f8f40de..95dc07a6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt @@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.view import android.content.Context import android.graphics.drawable.GradientDrawable import android.util.AttributeSet +import android.util.TypedValue import android.view.LayoutInflater import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout @@ -22,6 +23,19 @@ import net.pokeranalytics.android.util.NULL_TEXT */ class PlayerImageView : FrameLayout { + enum class Size { + NORMAL, + SMALL; + + fun getFontSize(): Float { + return when (this) { + NORMAL -> 32f + SMALL -> 16f + } + } + + } + private lateinit var playerImageView: ConstraintLayout private var onImageClickListener: OnClickListener? = null @@ -54,7 +68,7 @@ class PlayerImageView : FrameLayout { /** * Set the session data to the view */ - fun setPlayer(player: Player) { + fun setPlayer(player: Player, size: Size = Size.NORMAL) { // Initial val playerInitial = if (player.name.isNotEmpty()) { @@ -70,6 +84,7 @@ class PlayerImageView : FrameLayout { NULL_TEXT } playerImageView.playerInitial.text = playerInitial + playerImageView.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize()) // Picture if (player.hasPicture()) { @@ -83,6 +98,7 @@ class PlayerImageView : FrameLayout { } else { playerImageView.playerStroke.background = ResourcesCompat.getDrawable(resources, R.drawable.circle_stroke_kaki, null) + playerImageView.playerImage.setImageDrawable(null) } // Stroke 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 f3d5dae1..e9143995 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 @@ -79,6 +79,7 @@ enum class RowViewType(private var layoutRes: Int) { // Custom row ROW_SESSION(R.layout.row_feed_session), ROW_TRANSACTION(R.layout.row_transaction), + ROW_PLAYER(R.layout.row_player), ROW_PLAYER_IMAGE(R.layout.row_player_image), ROW_BUTTON(R.layout.row_button), ROW_FOLLOW_US(R.layout.row_follow_us), @@ -113,6 +114,8 @@ enum class RowViewType(private var layoutRes: Int) { // Row Transaction ROW_TRANSACTION -> RowTransactionViewHolder(layout) + ROW_PLAYER -> RowPlayerViewHolder(layout) + ROW_PLAYER_IMAGE -> RowPlayerImageViewHolder(layout) // Row Button @@ -518,12 +521,38 @@ enum class RowViewType(private var layoutRes: Int) { } } + /** + * Display a player image view + */ + inner class RowPlayerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + + if (row is Player) { + itemView.findViewById(R.id.playerImage)?.let { playerImageView -> + playerImageView.setPlayer(row, PlayerImageView.Size.SMALL) + } + itemView.findViewById(R.id.playerName)?.let { textView -> + textView.text = row.name + } + itemView.findViewById(R.id.playerSummary)?.let { textView -> + textView.text = row.summary + textView.isVisible = row.summary.isNotEmpty() + } + + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.setOnClickListener(listener) + } + } + } + /** * Display a player image view */ inner class RowPlayerImageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { - itemView.findViewById(R.id.playerImageView)?.let { playerImageView -> + itemView.findViewById(R.id.playerImageView)?.let { playerImageView -> val listener = View.OnClickListener { adapter.delegate?.onRowSelected(position, PlayerRow.PLAYER_IMAGE) } diff --git a/app/src/main/res/layout/row_player.xml b/app/src/main/res/layout/row_player.xml new file mode 100644 index 00000000..4b970c45 --- /dev/null +++ b/app/src/main/res/layout/row_player.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + +