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