Replace kotlin synthetic by new view bindings

kmm
Laurent 5 years ago
parent 191fc606a2
commit b500d4b0c7
  1. 4
      app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
  2. 48
      app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt
  3. 14
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  4. 99
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt
  6. 3
      app/src/main/res/layout/row_session_view.xml

@ -14,9 +14,9 @@ import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatTextView
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
@ -147,7 +147,7 @@ fun showAlertDialog(
builder.show() builder.show()
} }
fun AppCompatTextView.setTextFormat(textFormat: TextFormat, context: Context) { fun TextView.setTextFormat(textFormat: TextFormat, context: Context) {
this.setTextColor(textFormat.getColor(context)) this.setTextColor(textFormat.getColor(context))
this.text = textFormat.text this.text = textFormat.text
} }

@ -6,12 +6,14 @@ import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet import android.util.AttributeSet
import android.util.TypedValue import android.util.TypedValue
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat.getColor import androidx.core.content.ContextCompat.getColor
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory
import kotlinx.android.synthetic.main.view_player_image.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Player import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.ui.extensions.px import net.pokeranalytics.android.ui.extensions.px
@ -43,6 +45,12 @@ class PlayerImageView : FrameLayout {
private lateinit var playerImageView: ConstraintLayout private lateinit var playerImageView: ConstraintLayout
private lateinit var playerImage: ImageView
private lateinit var playerStroke: TextView
private lateinit var playerInitial: TextView
private lateinit var playerImageSelection: View
private var onImageClickListener: OnClickListener? = null private var onImageClickListener: OnClickListener? = null
/** /**
@ -68,6 +76,12 @@ class PlayerImageView : FrameLayout {
this.playerImageView = layoutInflater.inflate(R.layout.view_player_image, this, false) as ConstraintLayout this.playerImageView = layoutInflater.inflate(R.layout.view_player_image, this, false) as ConstraintLayout
val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT) val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
addView(playerImageView, layoutParams) addView(playerImageView, layoutParams)
this.playerImage = this.playerImageView.findViewById(R.id.player_image)
this.playerStroke = this.playerImageView.findViewById(R.id.playerStroke)
this.playerInitial = this.playerImageView.findViewById(R.id.playerInitial)
this.playerImageSelection = this.playerImageView.findViewById(R.id.playerImageSelection)
} }
/** /**
@ -79,14 +93,14 @@ class PlayerImageView : FrameLayout {
player.picture?.let { picture -> player.picture?.let { picture ->
val rDrawable = RoundedBitmapDrawableFactory.create(resources, picture) val rDrawable = RoundedBitmapDrawableFactory.create(resources, picture)
rDrawable.isCircular = true rDrawable.isCircular = true
playerImageView.player_image.setImageDrawable(rDrawable) this.playerImage.setImageDrawable(rDrawable)
} ?: run { } ?: run {
playerImageView.playerStroke.background = ResourcesCompat.getDrawable(resources, R.drawable.circle_stroke_kaki, null) this.playerStroke.background = ResourcesCompat.getDrawable(resources, R.drawable.circle_stroke_kaki, null)
playerImageView.player_image.setImageDrawable(null) this.playerImage.setImageDrawable(null)
playerImageView.playerInitial.text = player.initials this.playerInitial.text = player.initials
playerImageView.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize()) this.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
} }
@ -99,17 +113,17 @@ class PlayerImageView : FrameLayout {
} }
// Stroke & initial // Stroke & initial
val drawable = this.playerImageView.playerStroke.background as GradientDrawable? val drawable = this.playerStroke.background as GradientDrawable?
drawable?.setStroke(size.getStrokeSize(), color) drawable?.setStroke(size.getStrokeSize(), color)
this.playerImageView.playerInitial.setTextColor(color) this.playerInitial.setTextColor(color)
// Click listener // Click listener
if (this.onImageClickListener != null) { if (this.onImageClickListener != null) {
this.playerImageView.playerImageSelection.setOnClickListener { this.playerImageSelection.setOnClickListener {
this.onImageClickListener?.onClick(it) this.onImageClickListener?.onClick(it)
} }
} else { } else {
this.playerImageView.playerImageSelection.background = null this.playerImageSelection.background = null
} }
} }
@ -127,12 +141,12 @@ class PlayerImageView : FrameLayout {
val color = getColor(context, res) val color = getColor(context, res)
val drawable = this.playerImageView.playerStroke.background as GradientDrawable? val drawable = this.playerStroke.background as GradientDrawable?
drawable?.setStroke(size.getStrokeSize(), color) drawable?.setStroke(size.getStrokeSize(), color)
this.playerImageView.playerInitial.text = text this.playerInitial.text = text
this.playerImageView.playerInitial.setTextColor(color) this.playerInitial.setTextColor(color)
this.playerImageView.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize()) this.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
} }
/** /**
@ -141,17 +155,17 @@ class PlayerImageView : FrameLayout {
fun setOnImageClickListener(onImageClickListener: OnClickListener) { fun setOnImageClickListener(onImageClickListener: OnClickListener) {
this.onImageClickListener = onImageClickListener this.onImageClickListener = onImageClickListener
this.playerImageView.playerImageSelection.setOnClickListener { this.playerImageSelection.setOnClickListener {
this.onImageClickListener?.onClick(it) this.onImageClickListener?.onClick(it)
} }
} }
fun clear(size: Size = Size.NORMAL) { fun clear(size: Size = Size.NORMAL) {
val drawable = this.playerImageView.playerStroke.background as GradientDrawable? val drawable = this.playerStroke.background as GradientDrawable?
drawable?.setStroke(size.getStrokeSize(), getColor(context, R.color.kaki)) drawable?.setStroke(size.getStrokeSize(), getColor(context, R.color.kaki))
this.playerImageView.playerInitial.text = null this.playerInitial.text = null
} }
} }

@ -15,8 +15,6 @@ import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.data.* import com.github.mikephil.charting.data.*
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup import com.google.android.material.chip.ChipGroup
import kotlinx.android.synthetic.main.row_feed_session.view.*
import kotlinx.android.synthetic.main.row_transaction.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.AxisFormatting import net.pokeranalytics.android.calculus.AxisFormatting
import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.ComputedStat
@ -435,11 +433,13 @@ enum class RowViewType(private var layoutRes: Int) : ViewIdentifier {
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder { BindableHolder {
override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
itemView.sessionRow.setData(row as Session) val sessionRow = itemView.findViewById<SessionRowView>(R.id.sessionRow)
sessionRow.setData(row as Session)
val listener = View.OnClickListener { val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row) adapter.delegate?.onRowSelected(position, row)
} }
itemView.sessionRow.setOnClickListener(listener) sessionRow.setOnClickListener(listener)
} }
} }
@ -449,11 +449,13 @@ enum class RowViewType(private var layoutRes: Int) : ViewIdentifier {
inner class RowTransactionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), inner class RowTransactionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
BindableHolder { BindableHolder {
override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) {
itemView.transactionRow.setData(row as Transaction) val transactionRow = itemView.findViewById<TransactionRowView>(R.id.transactionRow)
transactionRow.setData(row as Transaction)
val listener = View.OnClickListener { val listener = View.OnClickListener {
adapter.delegate?.onRowSelected(position, row) adapter.delegate?.onRowSelected(position, row)
} }
itemView.transactionRow.setOnClickListener(listener) transactionRow.setOnClickListener(listener)
} }
} }

@ -4,9 +4,10 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.row_session_view.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
@ -27,6 +28,19 @@ class SessionRowView : FrameLayout {
private lateinit var rowSession: ConstraintLayout private lateinit var rowSession: ConstraintLayout
private lateinit var dateDay: TextView
private lateinit var dateNumber: TextView
private lateinit var sessionTitle: TextView
private lateinit var sessionInfoDurationIcon: ImageView
private lateinit var sessionInfoDurationValue: TextView
private lateinit var sessionInfoLocationIcon: ImageView
private lateinit var sessionInfoLocationValue: TextView
private lateinit var sessionInfoTableIcon: ImageView
private lateinit var sessionInfoTableValue: TextView
private lateinit var gameResult: TextView
private lateinit var infoIcon: ImageView
private lateinit var infoTitle: TextView
/** /**
* Constructors * Constructors
*/ */
@ -48,8 +62,21 @@ class SessionRowView : FrameLayout {
private fun init() { private fun init() {
val layoutInflater = LayoutInflater.from(context) val layoutInflater = LayoutInflater.from(context)
rowSession = layoutInflater.inflate(R.layout.row_session_view, this, false) as ConstraintLayout rowSession = layoutInflater.inflate(R.layout.row_session_view, this, false) as ConstraintLayout
val layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
addView(rowSession, layoutParams) addView(rowSession, layoutParams)
this.dateDay = rowSession.findViewById(R.id.dateDay)
this.dateNumber = rowSession.findViewById(R.id.dateNumber)
this.sessionTitle = rowSession.findViewById(R.id.sessionTitle)
this.sessionInfoDurationIcon = rowSession.findViewById(R.id.sessionInfoDurationIcon)
this.sessionInfoDurationValue = rowSession.findViewById(R.id.sessionInfoDurationValue)
this.sessionInfoLocationIcon = rowSession.findViewById(R.id.sessionInfoLocationIcon)
this.sessionInfoLocationValue = rowSession.findViewById(R.id.sessionInfoLocationValue)
this.sessionInfoTableIcon = rowSession.findViewById(R.id.sessionInfoTableIcon)
this.sessionInfoTableValue = sessionInfoTableValue.findViewById(R.id.dateDay)
this.gameResult = rowSession.findViewById(R.id.gameResult)
this.infoIcon = rowSession.findViewById(R.id.infoIcon)
this.infoTitle = rowSession.findViewById(R.id.infoTitle)
} }
/** /**
@ -60,69 +87,69 @@ class SessionRowView : FrameLayout {
val date = session.startDate ?: session.creationDate val date = session.startDate ?: session.creationDate
// Date // Date
rowSession.dateDay.text = date.getShortDayName() this.dateDay.text = date.getShortDayName()
rowSession.dateNumber.text = date.getDayNumber() this.dateNumber.text = date.getDayNumber()
// Title / Game type // Title / Game type
rowSession.sessionTitle.text = session.getFormattedGameType(context) this.sessionTitle.text = session.getFormattedGameType(context)
// Duration // Duration
rowSession.sessionInfoDurationValue.text = session.getFormattedDuration() this.sessionInfoDurationValue.text = session.getFormattedDuration()
// Location // Location
rowSession.sessionInfoLocationIcon.isVisible = session.location != null this.sessionInfoLocationIcon.isVisible = session.location != null
rowSession.sessionInfoLocationValue.isVisible = session.location != null this.sessionInfoLocationValue.isVisible = session.location != null
session.location?.let { session.location?.let {
rowSession.sessionInfoLocationValue.text = it.name this.sessionInfoLocationValue.text = it.name
} }
// Table size // Table size
rowSession.sessionInfoTableIcon.isVisible = session.tableSize != null this.sessionInfoTableIcon.isVisible = session.tableSize != null
rowSession.sessionInfoTableValue.isVisible = session.tableSize != null this.sessionInfoTableValue.isVisible = session.tableSize != null
session.tableSize?.let { session.tableSize?.let {
rowSession.sessionInfoTableValue.text = TableSize(it).localizedTitle(context) this.sessionInfoTableValue.text = TableSize(it).localizedTitle(context)
} }
val state = session.getState() val state = session.getState()
rowSession.sessionInfoDurationIcon.isVisible = state.hasStarted this.sessionInfoDurationIcon.isVisible = state.hasStarted
rowSession.sessionInfoDurationValue.isVisible = state.hasStarted this.sessionInfoDurationValue.isVisible = state.hasStarted
// State // State
when (state) { when (state) {
SessionState.STARTED -> { SessionState.STARTED -> {
rowSession.gameResult.isVisible = false this.gameResult.isVisible = false
rowSession.infoIcon.isVisible = true this.infoIcon.isVisible = true
rowSession.infoIcon.setImageResource(R.drawable.ic_play_circle_outline) this.infoIcon.setImageResource(R.drawable.ic_play_circle_outline)
rowSession.infoTitle.isVisible = true this.infoTitle.isVisible = true
rowSession.infoTitle.text = context.getString(R.string.running_session_state) this.infoTitle.text = context.getString(R.string.running_session_state)
} }
SessionState.PAUSED -> { SessionState.PAUSED -> {
rowSession.gameResult.isVisible = false this.gameResult.isVisible = false
rowSession.infoIcon.isVisible = true this.infoIcon.isVisible = true
rowSession.infoIcon.setImageResource(R.drawable.ic_pause_circle_outline) this.infoIcon.setImageResource(R.drawable.ic_pause_circle_outline)
rowSession.infoTitle.isVisible = true this.infoTitle.isVisible = true
rowSession.infoTitle.text = context.getString(R.string.paused_session_state) this.infoTitle.text = context.getString(R.string.paused_session_state)
} }
SessionState.PLANNED -> { SessionState.PLANNED -> {
rowSession.gameResult.isVisible = false this.gameResult.isVisible = false
rowSession.infoIcon.isVisible = true this.infoIcon.isVisible = true
rowSession.infoIcon.setImageResource(R.drawable.ic_planned) this.infoIcon.setImageResource(R.drawable.ic_planned)
rowSession.infoTitle.isVisible = true this.infoTitle.isVisible = true
rowSession.infoTitle.text = session.startDate!!.shortTime() this.infoTitle.text = session.startDate!!.shortTime()
} }
SessionState.PENDING -> { SessionState.PENDING -> {
rowSession.gameResult.isVisible = false this.gameResult.isVisible = false
rowSession.infoIcon.isVisible = false this.infoIcon.isVisible = false
rowSession.infoTitle.isVisible = false this.infoTitle.isVisible = false
} }
else -> { else -> {
rowSession.gameResult.isVisible = true this.gameResult.isVisible = true
rowSession.infoIcon.isVisible = false this.infoIcon.isVisible = false
rowSession.infoTitle.isVisible = false this.infoTitle.isVisible = false
session.result?.net?.let { netResult -> session.result?.net?.let { netResult ->
val stat = ComputedStat(Stat.NET_RESULT, netResult, currency = session.currency) val stat = ComputedStat(Stat.NET_RESULT, netResult, currency = session.currency)
rowSession.gameResult.setTextFormat(stat.textFormat, context) this.gameResult.setTextFormat(stat.textFormat, context)
} }
// val formattedStat = ComputedStat(Stat.NET_RESULT, result, currency = session.currency).format() // val formattedStat = ComputedStat(Stat.NET_RESULT, result, currency = session.currency).format()

@ -4,8 +4,8 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import kotlinx.android.synthetic.main.row_transaction_view.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
@ -52,21 +52,21 @@ class TransactionRowView : FrameLayout {
fun setData(transaction: Transaction) { fun setData(transaction: Transaction) {
// Date // Date
rowTransaction.transactionDateDay.text = transaction.date.getShortDayName() rowTransaction.findViewById<TextView>(R.id.transactionDateDay).text = transaction.date.getShortDayName()
rowTransaction.transactionDateNumber.text = transaction.date.getDayNumber() rowTransaction.findViewById<TextView>(R.id.transactionDateNumber).text = transaction.date.getDayNumber()
// Title / Game type // Title / Game type
val title = transaction.type?.name ?: "" + " " + transaction.comment val title = transaction.type?.name ?: "" + " " + transaction.comment
val subtitle = transaction.bankroll?.name val subtitle = transaction.bankroll?.name
rowTransaction.transactionTitle.text = title rowTransaction.findViewById<TextView>(R.id.transactionTitle).text = title
rowTransaction.transactionSubtitle.text = subtitle rowTransaction.findViewById<TextView>(R.id.transactionSubtitle).text = subtitle
// Amount // Amount
val computedStat = ComputedStat(Stat.NET_RESULT, val computedStat = ComputedStat(Stat.NET_RESULT,
transaction.amount, transaction.amount,
currency = transaction.bankroll?.utilCurrency) currency = transaction.bankroll?.utilCurrency)
rowTransaction.transactionAmount.setTextFormat(computedStat.textFormat, context) rowTransaction.findViewById<TextView>(R.id.transactionAmount).setTextFormat(computedStat.textFormat, context)
} }

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"

Loading…
Cancel
Save