commit
33f04d9519
@ -0,0 +1,13 @@ |
|||||||
|
package net.pokeranalytics.android.model |
||||||
|
|
||||||
|
data class Stakes(var blinds: String?, var ante: Double?) { |
||||||
|
|
||||||
|
companion object { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,186 @@ |
|||||||
|
package net.pokeranalytics.android.model.interfaces |
||||||
|
|
||||||
|
import net.pokeranalytics.android.model.realm.Bankroll |
||||||
|
import net.pokeranalytics.android.util.BLIND_SEPARATOR |
||||||
|
import net.pokeranalytics.android.util.NULL_TEXT |
||||||
|
import net.pokeranalytics.android.util.UserDefaults |
||||||
|
import net.pokeranalytics.android.util.extensions.formatted |
||||||
|
import net.pokeranalytics.android.util.extensions.toCurrency |
||||||
|
import java.lang.Integer.min |
||||||
|
import java.text.NumberFormat |
||||||
|
import java.text.ParseException |
||||||
|
import java.util.* |
||||||
|
|
||||||
|
data class CodedStake(var stakes: String) : Comparable<CodedStake> { |
||||||
|
|
||||||
|
var ante: Double? = null |
||||||
|
var blinds: String? = null |
||||||
|
var currency: Currency |
||||||
|
|
||||||
|
init { |
||||||
|
|
||||||
|
var currencyCode: String? = null |
||||||
|
|
||||||
|
val parameters = this.stakes.split(StakesHolder.cbSeparator) |
||||||
|
parameters.forEach { param -> |
||||||
|
when { |
||||||
|
param.contains(StakesHolder.cbAnte) -> ante = param.removePrefix(StakesHolder.cbAnte).let { NumberFormat.getInstance().parse(it)?.toDouble() } |
||||||
|
param.contains(StakesHolder.cbBlinds) -> blinds = param.removePrefix(StakesHolder.cbBlinds) |
||||||
|
param.contains(StakesHolder.cbCode) -> currencyCode = param.removePrefix( |
||||||
|
StakesHolder.cbCode |
||||||
|
) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
this.currency = currencyCode?.let { Currency.getInstance(it) } |
||||||
|
?: run { UserDefaults.currency } |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
override fun compareTo(other: CodedStake): Int { |
||||||
|
|
||||||
|
if (this.currency == other.currency) { |
||||||
|
|
||||||
|
this.blinds?.let { b1 -> |
||||||
|
other.blinds?.let { b2 -> |
||||||
|
if (b1 == b2) { |
||||||
|
return this.compareAnte(other) |
||||||
|
} else { |
||||||
|
val bv1 = this.reversedBlindsArray(b1) |
||||||
|
val bv2 = this.reversedBlindsArray(b2) |
||||||
|
|
||||||
|
for (i in 0 until min(bv1.size, bv2.size)) { |
||||||
|
if (bv1[i] != bv2[i]) { |
||||||
|
return bv1[i].compareTo(bv2[i]) |
||||||
|
} else { |
||||||
|
continue |
||||||
|
} |
||||||
|
} |
||||||
|
return bv1.size.compareTo(bv2.size) |
||||||
|
} |
||||||
|
} ?: run { |
||||||
|
return 1 |
||||||
|
} |
||||||
|
|
||||||
|
} ?: run { |
||||||
|
return this.compareAnte(other) |
||||||
|
} |
||||||
|
} else { |
||||||
|
return this.currency.currencyCode.compareTo(other.currency.currencyCode) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private fun compareAnte(other: CodedStake): Int { |
||||||
|
this.ante?.let { a1 -> |
||||||
|
other.ante?.let { a2 -> |
||||||
|
return a1.compareTo(a2) |
||||||
|
} ?: run { |
||||||
|
return 1 |
||||||
|
} |
||||||
|
} ?: run { |
||||||
|
return -1 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private fun reversedBlindsArray(blinds: String): List<Double> { |
||||||
|
return blinds.split(BLIND_SEPARATOR).mapNotNull { NumberFormat.getInstance().parse(it)?.toDouble() }.reversed() |
||||||
|
} |
||||||
|
|
||||||
|
fun formattedStakes(): String { |
||||||
|
val components = arrayListOf<String>() |
||||||
|
this.formattedBlinds()?.let { components.add(it) } |
||||||
|
this.formattedAnte()?.let { components.add("($it)") } |
||||||
|
|
||||||
|
return if (components.isNotEmpty()) { |
||||||
|
components.joinToString(" ") |
||||||
|
} else { |
||||||
|
NULL_TEXT |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private fun formattedBlinds(): String? { |
||||||
|
this.blinds?.let { |
||||||
|
val placeholder = 1.0 |
||||||
|
val regex = Regex("-?\\d+(\\.\\d+)?") |
||||||
|
return placeholder.toCurrency(currency).replace(regex, it) |
||||||
|
} |
||||||
|
return null |
||||||
|
} |
||||||
|
|
||||||
|
private fun formattedAnte(): String? { |
||||||
|
this.ante?.let { |
||||||
|
return it.toCurrency(this.currency) |
||||||
|
} |
||||||
|
return null |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
interface StakesHolder { |
||||||
|
|
||||||
|
companion object { |
||||||
|
|
||||||
|
const val cbSeparator = ";" |
||||||
|
const val cbAnte = "A=" |
||||||
|
const val cbBlinds = "B=" |
||||||
|
const val cbCode = "C=" |
||||||
|
|
||||||
|
fun readableStakes(value: String): String { |
||||||
|
return CodedStake(value).formattedStakes() |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
val ante: Double? |
||||||
|
val blinds: String? |
||||||
|
val biggestBet: Double? |
||||||
|
val stakes: String? |
||||||
|
|
||||||
|
val bankroll: Bankroll? |
||||||
|
|
||||||
|
fun setHolderStakes(stakes: String?) |
||||||
|
fun setHolderBiggestBet(biggestBet: Double?) |
||||||
|
|
||||||
|
val blindValues: List<Double> |
||||||
|
get() { |
||||||
|
this.blinds?.let { blinds -> |
||||||
|
val blindsSplit = blinds.split(BLIND_SEPARATOR) |
||||||
|
return blindsSplit.mapNotNull { |
||||||
|
try { |
||||||
|
NumberFormat.getInstance().parse(it)?.toDouble() |
||||||
|
} catch (e: ParseException) { |
||||||
|
null |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return listOf() |
||||||
|
} |
||||||
|
|
||||||
|
fun generateStakes() { |
||||||
|
|
||||||
|
if (this.ante == null && this.blinds == null) { |
||||||
|
setHolderStakes(null) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
val components = arrayListOf<String>() |
||||||
|
|
||||||
|
this.blinds?.let { components.add("${cbBlinds}${it}") } |
||||||
|
this.ante?.let { components.add("${cbAnte}${it.formatted}") } |
||||||
|
|
||||||
|
val code = this.bankroll?.currency?.code ?: UserDefaults.currency.currencyCode |
||||||
|
components.add("${cbCode}${code}") |
||||||
|
|
||||||
|
setHolderStakes(components.joinToString(cbSeparator)) |
||||||
|
} |
||||||
|
|
||||||
|
fun defineHighestBet() { |
||||||
|
val bets = arrayListOf<Double>() |
||||||
|
this.ante?.let { bets.add(it) } |
||||||
|
bets.addAll(this.blindValues) |
||||||
|
setHolderBiggestBet(bets.maxOrNull()) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,150 @@ |
|||||||
|
package net.pokeranalytics.android.ui.fragment.components.bottomsheet |
||||||
|
|
||||||
|
import android.content.Context |
||||||
|
import android.os.Bundle |
||||||
|
import android.text.InputType |
||||||
|
import android.view.LayoutInflater |
||||||
|
import android.view.View |
||||||
|
import android.view.ViewGroup |
||||||
|
import android.view.inputmethod.EditorInfo |
||||||
|
import android.view.inputmethod.InputMethodManager |
||||||
|
import android.widget.EditText |
||||||
|
import androidx.core.widget.addTextChangedListener |
||||||
|
import kotlinx.android.synthetic.main.view_keyboard_stakes.view.* |
||||||
|
import net.pokeranalytics.android.databinding.BottomSheetStakesBinding |
||||||
|
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException |
||||||
|
import java.text.NumberFormat |
||||||
|
import java.text.ParseException |
||||||
|
|
||||||
|
|
||||||
|
class BottomSheetStakesFragment : BottomSheetFragment() { |
||||||
|
|
||||||
|
private var _binding: BottomSheetStakesBinding? = null |
||||||
|
private val binding get() = _binding!! |
||||||
|
|
||||||
|
override fun inflateContentView(inflater: LayoutInflater, container: ViewGroup): View { |
||||||
|
_binding = BottomSheetStakesBinding.inflate(inflater, container, true) |
||||||
|
return binding.root |
||||||
|
} |
||||||
|
|
||||||
|
override fun onDestroyView() { |
||||||
|
super.onDestroyView() |
||||||
|
_binding = null |
||||||
|
} |
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
||||||
|
super.onViewCreated(view, savedInstanceState) |
||||||
|
initData() |
||||||
|
initUI() |
||||||
|
} |
||||||
|
|
||||||
|
override fun onStart() { |
||||||
|
super.onStart() |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Init data |
||||||
|
*/ |
||||||
|
private fun initData() { |
||||||
|
// this.viewModel.isEditingBlinds = this.viewModel.row == SessionRow.BLINDS |
||||||
|
} |
||||||
|
|
||||||
|
private fun focusEditTextAndHideKeyboard(editText: EditText) { |
||||||
|
|
||||||
|
editText.requestFocus() |
||||||
|
|
||||||
|
editText.onCreateInputConnection(EditorInfo())?.let { |
||||||
|
binding.stakesKeyboard.inputConnection = it |
||||||
|
} |
||||||
|
|
||||||
|
val mgr: InputMethodManager? = |
||||||
|
requireContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager? |
||||||
|
mgr?.hideSoftInputFromWindow(editText.windowToken, InputMethodManager.SHOW_FORCED) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Init UI |
||||||
|
*/ |
||||||
|
private fun initUI() { |
||||||
|
|
||||||
|
val data = getDescriptors()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found") |
||||||
|
if (data.size != 2) { |
||||||
|
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency") |
||||||
|
} |
||||||
|
|
||||||
|
// Ante |
||||||
|
val anteED = data[0] |
||||||
|
anteED.defaultValue?.let { |
||||||
|
binding.anteEditText.hint = NumberFormat.getInstance().format(it as Double) |
||||||
|
} ?: run { |
||||||
|
anteED.hintResId?.let { binding.anteEditText.hint = getString(it) } |
||||||
|
} |
||||||
|
|
||||||
|
// binding.anteEditText.inputType = anteED.inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES |
||||||
|
|
||||||
|
|
||||||
|
// binding.anteKeyboard.toolbar.isVisible = false |
||||||
|
// binding.anteKeyboard.visibility = View.GONE |
||||||
|
|
||||||
|
binding.anteEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER) |
||||||
|
binding.anteEditText.showSoftInputOnFocus = false |
||||||
|
|
||||||
|
// Blinds |
||||||
|
val blindsED = data[1] |
||||||
|
blindsED.defaultValue?.let { |
||||||
|
binding.blindsEditText.hint = it as? String |
||||||
|
} ?: run { |
||||||
|
blindsED.hintResId?.let { binding.blindsEditText.hint = getString(it) } |
||||||
|
} |
||||||
|
|
||||||
|
binding.blindsEditText.onCreateInputConnection(EditorInfo())?.let { |
||||||
|
binding.stakesKeyboard.inputConnection = it |
||||||
|
} |
||||||
|
|
||||||
|
binding.blindsEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER) |
||||||
|
binding.blindsEditText.showSoftInputOnFocus = false |
||||||
|
|
||||||
|
binding.blindsEditText.setOnTouchListener { _, _ -> |
||||||
|
|
||||||
|
this.focusEditTextAndHideKeyboard(binding.blindsEditText) |
||||||
|
|
||||||
|
// binding.stakesKeyboard.visibility = View.VISIBLE |
||||||
|
binding.stakesKeyboard.value_separator.visibility = View.VISIBLE |
||||||
|
|
||||||
|
return@setOnTouchListener true |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
binding.anteEditText.setOnTouchListener { _, _ -> |
||||||
|
|
||||||
|
// binding.anteKeyboard.setInputConnection(binding.anteEditText) |
||||||
|
|
||||||
|
this.focusEditTextAndHideKeyboard(binding.anteEditText) |
||||||
|
|
||||||
|
binding.stakesKeyboard.value_separator.visibility = View.GONE |
||||||
|
|
||||||
|
// binding.stakesKeyboard.visibility = View.VISIBLE |
||||||
|
// binding.stakesKeyboard.visibility = View.GONE |
||||||
|
return@setOnTouchListener true |
||||||
|
} |
||||||
|
|
||||||
|
binding.anteEditText.addTextChangedListener { text -> |
||||||
|
text?.let { |
||||||
|
|
||||||
|
val ante = try { |
||||||
|
NumberFormat.getInstance().parse(it.toString()) |
||||||
|
} catch(e: ParseException) { |
||||||
|
null |
||||||
|
} |
||||||
|
this.model.ante = ante?.toDouble() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
binding.blindsEditText.addTextChangedListener { |
||||||
|
this.model.secondStringValue = it?.toString() |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,79 @@ |
|||||||
|
package net.pokeranalytics.android.ui.view.keyboard |
||||||
|
|
||||||
|
import android.content.Context |
||||||
|
import android.util.AttributeSet |
||||||
|
import android.view.LayoutInflater |
||||||
|
import android.view.inputmethod.InputConnection |
||||||
|
import android.widget.FrameLayout |
||||||
|
import androidx.appcompat.widget.LinearLayoutCompat |
||||||
|
import kotlinx.android.synthetic.main.view_keyboard_stakes.view.* |
||||||
|
import net.pokeranalytics.android.R |
||||||
|
import net.pokeranalytics.android.exceptions.PAIllegalStateException |
||||||
|
import net.pokeranalytics.android.util.BLIND_SEPARATOR |
||||||
|
import java.text.DecimalFormatSymbols |
||||||
|
|
||||||
|
class StakesKeyboardView : LinearLayoutCompat { |
||||||
|
|
||||||
|
var inputConnection: InputConnection? = null |
||||||
|
|
||||||
|
constructor(context: Context) : super(context) { |
||||||
|
init(context, null) |
||||||
|
} |
||||||
|
|
||||||
|
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { |
||||||
|
init(context, attrs) |
||||||
|
} |
||||||
|
|
||||||
|
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { |
||||||
|
init(context, attrs) |
||||||
|
} |
||||||
|
|
||||||
|
private fun init(context: Context, attrs: AttributeSet?) { |
||||||
|
val layoutInflater = LayoutInflater.from(context) |
||||||
|
val view = layoutInflater.inflate(R.layout.view_keyboard_stakes, this, false) |
||||||
|
|
||||||
|
view.value_0.text = "0" |
||||||
|
view.value_1.text = "1" |
||||||
|
view.value_2.text = "2" |
||||||
|
view.value_3.text = "3" |
||||||
|
view.value_4.text = "4" |
||||||
|
view.value_5.text = "5" |
||||||
|
view.value_6.text = "6" |
||||||
|
view.value_7.text = "7" |
||||||
|
view.value_8.text = "8" |
||||||
|
view.value_9.text = "9" |
||||||
|
view.value_decimal.text = DecimalFormatSymbols.getInstance().decimalSeparator.toString() |
||||||
|
view.value_back.text = "⌫" |
||||||
|
view.value_separator.text = "/" |
||||||
|
|
||||||
|
view.value_0.setOnClickListener { this.commitText("0") } |
||||||
|
view.value_1.setOnClickListener { this.commitText("1") } |
||||||
|
view.value_2.setOnClickListener { this.commitText("2") } |
||||||
|
view.value_3.setOnClickListener { this.commitText("3") } |
||||||
|
view.value_4.setOnClickListener { this.commitText("4") } |
||||||
|
view.value_5.setOnClickListener { this.commitText("5") } |
||||||
|
view.value_6.setOnClickListener { this.commitText("6") } |
||||||
|
view.value_7.setOnClickListener { this.commitText("7") } |
||||||
|
view.value_8.setOnClickListener { this.commitText("8") } |
||||||
|
view.value_9.setOnClickListener { this.commitText("9") } |
||||||
|
view.value_decimal.setOnClickListener { this.commitText(DecimalFormatSymbols.getInstance().decimalSeparator.toString()) } |
||||||
|
view.value_separator.setOnClickListener { this.commitText(BLIND_SEPARATOR) } |
||||||
|
view.value_back.setOnClickListener { this.deleteText() } |
||||||
|
|
||||||
|
val layoutParams = FrameLayout.LayoutParams( |
||||||
|
FrameLayout.LayoutParams.MATCH_PARENT, |
||||||
|
FrameLayout.LayoutParams.WRAP_CONTENT |
||||||
|
) |
||||||
|
addView(view, layoutParams) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private fun commitText(string: String) { |
||||||
|
this.inputConnection?.commitText(string, 1) ?: throw PAIllegalStateException("No input connection") |
||||||
|
} |
||||||
|
|
||||||
|
private fun deleteText() { |
||||||
|
this.inputConnection?.deleteSurroundingText(1, 0) ?: throw PAIllegalStateException("No input connection") |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,74 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<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" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:orientation="vertical" |
||||||
|
tools:background="@color/grey_darkest"> |
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout |
||||||
|
android:id="@+id/top_container" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
app:layout_constraintTop_toTopOf="parent" |
||||||
|
app:layout_constraintStart_toStartOf="parent" |
||||||
|
app:layout_constraintEnd_toEndOf="parent"> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatEditText |
||||||
|
android:id="@+id/blindsEditText" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_marginStart="16dp" |
||||||
|
android:layout_marginTop="16dp" |
||||||
|
android:layout_marginEnd="16dp" |
||||||
|
android:layout_marginBottom="16dp" |
||||||
|
android:gravity="center" |
||||||
|
android:lines="1" |
||||||
|
app:layout_constraintBottom_toBottomOf="parent" |
||||||
|
app:layout_constraintEnd_toStartOf="@id/anteEditText" |
||||||
|
app:layout_constraintHorizontal_bias="0.5" |
||||||
|
app:layout_constraintHorizontal_chainStyle="packed" |
||||||
|
app:layout_constraintStart_toStartOf="parent" |
||||||
|
app:layout_constraintTop_toTopOf="parent" |
||||||
|
app:layout_constraintVertical_bias="0.0" |
||||||
|
tools:text="20" /> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatEditText |
||||||
|
android:id="@+id/anteEditText" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_marginTop="16dp" |
||||||
|
android:layout_marginEnd="16dp" |
||||||
|
android:layout_marginBottom="16dp" |
||||||
|
android:gravity="center" |
||||||
|
android:imeOptions="actionNext" |
||||||
|
android:lines="1" |
||||||
|
app:layout_constraintBottom_toBottomOf="parent" |
||||||
|
app:layout_constraintEnd_toEndOf="parent" |
||||||
|
app:layout_constraintHorizontal_bias="0.5" |
||||||
|
app:layout_constraintStart_toEndOf="@id/blindsEditText" |
||||||
|
app:layout_constraintTop_toTopOf="parent" |
||||||
|
tools:text="10" /> |
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout> |
||||||
|
|
||||||
|
<net.pokeranalytics.android.ui.view.keyboard.StakesKeyboardView |
||||||
|
android:id="@+id/stakes_keyboard" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
app:layout_constraintTop_toBottomOf="@id/top_container" |
||||||
|
app:layout_constraintStart_toStartOf="parent" |
||||||
|
app:layout_constraintEnd_toEndOf="parent" |
||||||
|
app:layout_constraintBottom_toBottomOf="parent" /> |
||||||
|
|
||||||
|
<!-- <net.pokeranalytics.android.ui.modules.handhistory.views.KeyboardAmountView--> |
||||||
|
<!-- android:id="@+id/ante_keyboard"--> |
||||||
|
<!-- android:layout_width="match_parent"--> |
||||||
|
<!-- android:layout_height="wrap_content"--> |
||||||
|
<!-- app:layout_constraintTop_toBottomOf="@id/top_container"--> |
||||||
|
<!-- app:layout_constraintStart_toStartOf="parent"--> |
||||||
|
<!-- app:layout_constraintEnd_toEndOf="parent"--> |
||||||
|
<!-- app:layout_constraintBottom_toBottomOf="parent" />--> |
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout> |
||||||
@ -0,0 +1,134 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat android:layout_width="match_parent" |
||||||
|
android:layout_height="216dp" |
||||||
|
android:orientation="horizontal" |
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="match_parent" |
||||||
|
android:orientation="vertical"> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_1" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginBottom="1dp" |
||||||
|
android:layout_marginEnd="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_4" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginVertical="1dp" |
||||||
|
android:layout_marginEnd="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_7" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginVertical="1dp" |
||||||
|
android:layout_marginEnd="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_decimal" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginEnd="1dp" |
||||||
|
android:layout_marginTop="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="match_parent" |
||||||
|
android:orientation="vertical"> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_2" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginBottom="1dp" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_5" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginVertical="1dp" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_8" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginVertical="1dp" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_0" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_marginTop="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="match_parent" |
||||||
|
android:orientation="vertical"> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_3" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginBottom="1dp" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_6" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginVertical="1dp" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_9" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginVertical="1dp" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_back" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardButton" |
||||||
|
android:layout_marginHorizontal="1dp" |
||||||
|
android:layout_marginTop="1dp" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView |
||||||
|
android:id="@+id/value_separator" |
||||||
|
android:layout_marginStart="1dp" |
||||||
|
style="@style/PokerAnalyticsTheme.KeyboardHighlightedButton" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="match_parent"/> |
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat> |
||||||
Loading…
Reference in new issue