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.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatTextView
import androidx.appcompat.widget.SearchView
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
@ -147,7 +147,7 @@ fun showAlertDialog(
builder.show()
}
fun AppCompatTextView.setTextFormat(textFormat: TextFormat, context: Context) {
fun TextView.setTextFormat(textFormat: TextFormat, context: Context) {
this.setTextColor(textFormat.getColor(context))
this.text = textFormat.text
}

@ -6,12 +6,14 @@ import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat.getColor
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory
import kotlinx.android.synthetic.main.view_player_image.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.ui.extensions.px
@ -43,6 +45,12 @@ class PlayerImageView : FrameLayout {
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
/**
@ -68,6 +76,12 @@ class PlayerImageView : FrameLayout {
this.playerImageView = layoutInflater.inflate(R.layout.view_player_image, this, false) as ConstraintLayout
val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
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 ->
val rDrawable = RoundedBitmapDrawableFactory.create(resources, picture)
rDrawable.isCircular = true
playerImageView.player_image.setImageDrawable(rDrawable)
this.playerImage.setImageDrawable(rDrawable)
} ?: run {
playerImageView.playerStroke.background = ResourcesCompat.getDrawable(resources, R.drawable.circle_stroke_kaki, null)
playerImageView.player_image.setImageDrawable(null)
playerImageView.playerInitial.text = player.initials
playerImageView.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
this.playerStroke.background = ResourcesCompat.getDrawable(resources, R.drawable.circle_stroke_kaki, null)
this.playerImage.setImageDrawable(null)
this.playerInitial.text = player.initials
this.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
}
@ -99,17 +113,17 @@ class PlayerImageView : FrameLayout {
}
// Stroke & initial
val drawable = this.playerImageView.playerStroke.background as GradientDrawable?
val drawable = this.playerStroke.background as GradientDrawable?
drawable?.setStroke(size.getStrokeSize(), color)
this.playerImageView.playerInitial.setTextColor(color)
this.playerInitial.setTextColor(color)
// Click listener
if (this.onImageClickListener != null) {
this.playerImageView.playerImageSelection.setOnClickListener {
this.playerImageSelection.setOnClickListener {
this.onImageClickListener?.onClick(it)
}
} else {
this.playerImageView.playerImageSelection.background = null
this.playerImageSelection.background = null
}
}
@ -127,12 +141,12 @@ class PlayerImageView : FrameLayout {
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)
this.playerImageView.playerInitial.text = text
this.playerImageView.playerInitial.setTextColor(color)
this.playerImageView.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
this.playerInitial.text = text
this.playerInitial.setTextColor(color)
this.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
}
/**
@ -141,17 +155,17 @@ class PlayerImageView : FrameLayout {
fun setOnImageClickListener(onImageClickListener: OnClickListener) {
this.onImageClickListener = onImageClickListener
this.playerImageView.playerImageSelection.setOnClickListener {
this.playerImageSelection.setOnClickListener {
this.onImageClickListener?.onClick(it)
}
}
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))
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.google.android.material.chip.Chip
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.calculus.AxisFormatting
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),
BindableHolder {
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 {
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),
BindableHolder {
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 {
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.view.LayoutInflater
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.row_session_view.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat
@ -27,6 +28,19 @@ class SessionRowView : FrameLayout {
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
*/
@ -48,8 +62,21 @@ class SessionRowView : FrameLayout {
private fun init() {
val layoutInflater = LayoutInflater.from(context)
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)
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
// Date
rowSession.dateDay.text = date.getShortDayName()
rowSession.dateNumber.text = date.getDayNumber()
this.dateDay.text = date.getShortDayName()
this.dateNumber.text = date.getDayNumber()
// Title / Game type
rowSession.sessionTitle.text = session.getFormattedGameType(context)
this.sessionTitle.text = session.getFormattedGameType(context)
// Duration
rowSession.sessionInfoDurationValue.text = session.getFormattedDuration()
this.sessionInfoDurationValue.text = session.getFormattedDuration()
// Location
rowSession.sessionInfoLocationIcon.isVisible = session.location != null
rowSession.sessionInfoLocationValue.isVisible = session.location != null
this.sessionInfoLocationIcon.isVisible = session.location != null
this.sessionInfoLocationValue.isVisible = session.location != null
session.location?.let {
rowSession.sessionInfoLocationValue.text = it.name
this.sessionInfoLocationValue.text = it.name
}
// Table size
rowSession.sessionInfoTableIcon.isVisible = session.tableSize != null
rowSession.sessionInfoTableValue.isVisible = session.tableSize != null
this.sessionInfoTableIcon.isVisible = session.tableSize != null
this.sessionInfoTableValue.isVisible = session.tableSize != null
session.tableSize?.let {
rowSession.sessionInfoTableValue.text = TableSize(it).localizedTitle(context)
this.sessionInfoTableValue.text = TableSize(it).localizedTitle(context)
}
val state = session.getState()
rowSession.sessionInfoDurationIcon.isVisible = state.hasStarted
rowSession.sessionInfoDurationValue.isVisible = state.hasStarted
this.sessionInfoDurationIcon.isVisible = state.hasStarted
this.sessionInfoDurationValue.isVisible = state.hasStarted
// State
when (state) {
SessionState.STARTED -> {
rowSession.gameResult.isVisible = false
rowSession.infoIcon.isVisible = true
rowSession.infoIcon.setImageResource(R.drawable.ic_play_circle_outline)
rowSession.infoTitle.isVisible = true
rowSession.infoTitle.text = context.getString(R.string.running_session_state)
this.gameResult.isVisible = false
this.infoIcon.isVisible = true
this.infoIcon.setImageResource(R.drawable.ic_play_circle_outline)
this.infoTitle.isVisible = true
this.infoTitle.text = context.getString(R.string.running_session_state)
}
SessionState.PAUSED -> {
rowSession.gameResult.isVisible = false
rowSession.infoIcon.isVisible = true
rowSession.infoIcon.setImageResource(R.drawable.ic_pause_circle_outline)
rowSession.infoTitle.isVisible = true
rowSession.infoTitle.text = context.getString(R.string.paused_session_state)
this.gameResult.isVisible = false
this.infoIcon.isVisible = true
this.infoIcon.setImageResource(R.drawable.ic_pause_circle_outline)
this.infoTitle.isVisible = true
this.infoTitle.text = context.getString(R.string.paused_session_state)
}
SessionState.PLANNED -> {
rowSession.gameResult.isVisible = false
rowSession.infoIcon.isVisible = true
rowSession.infoIcon.setImageResource(R.drawable.ic_planned)
rowSession.infoTitle.isVisible = true
rowSession.infoTitle.text = session.startDate!!.shortTime()
this.gameResult.isVisible = false
this.infoIcon.isVisible = true
this.infoIcon.setImageResource(R.drawable.ic_planned)
this.infoTitle.isVisible = true
this.infoTitle.text = session.startDate!!.shortTime()
}
SessionState.PENDING -> {
rowSession.gameResult.isVisible = false
rowSession.infoIcon.isVisible = false
rowSession.infoTitle.isVisible = false
this.gameResult.isVisible = false
this.infoIcon.isVisible = false
this.infoTitle.isVisible = false
}
else -> {
rowSession.gameResult.isVisible = true
rowSession.infoIcon.isVisible = false
rowSession.infoTitle.isVisible = false
this.gameResult.isVisible = true
this.infoIcon.isVisible = false
this.infoTitle.isVisible = false
session.result?.net?.let { netResult ->
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()

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

Loading…
Cancel
Save