diff --git a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt index 823f5bbb..41a5e94b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt @@ -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 } 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 f79b1967..71291839 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 @@ -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 } } \ No newline at end of file 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 36d655de..5b1b9ee5 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 @@ -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(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(R.id.transactionRow) + + transactionRow.setData(row as Transaction) val listener = View.OnClickListener { adapter.delegate?.onRowSelected(position, row) } - itemView.transactionRow.setOnClickListener(listener) + transactionRow.setOnClickListener(listener) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index 89fcba4e..fd9f8a14 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt @@ -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() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt index 7d814174..71167eef 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt @@ -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(R.id.transactionDateDay).text = transaction.date.getShortDayName() + rowTransaction.findViewById(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(R.id.transactionTitle).text = title + rowTransaction.findViewById(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(R.id.transactionAmount).setTextFormat(computedStat.textFormat, context) } diff --git a/app/src/main/res/layout/row_session_view.xml b/app/src/main/res/layout/row_session_view.xml index a9b54440..7cfa9466 100644 --- a/app/src/main/res/layout/row_session_view.xml +++ b/app/src/main/res/layout/row_session_view.xml @@ -1,5 +1,6 @@ -