merge conflicts

feature/top10
Laurent 7 years ago
commit 0c7c58a0db
  1. 52
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  2. 9
      app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt
  3. 12
      app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt
  4. 30
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt
  6. 105
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt
  7. 64
      app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt
  8. 12
      app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt
  9. 24
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  10. 44
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  11. 27
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt
  12. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt
  13. 56
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt
  14. 13
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt
  15. 33
      app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt
  16. 16
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  17. 3
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt
  18. 16
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  19. 1
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt
  20. 7
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt
  21. 2
      app/src/main/res/drawable/separator.xml
  22. 8
      app/src/main/res/layout/activity_data_list.xml
  23. 8
      app/src/main/res/layout/activity_editable_data.xml
  24. 10
      app/src/main/res/layout/activity_home.xml
  25. 13
      app/src/main/res/layout/activity_new_session.xml
  26. 15
      app/src/main/res/layout/activity_session.xml
  27. 28
      app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml
  28. 70
      app/src/main/res/layout/fragment_data_list.xml
  29. 2
      app/src/main/res/layout/fragment_session.xml
  30. 4
      app/src/main/res/layout/row_header_title_amount.xml
  31. 70
      app/src/main/res/layout/row_header_title_amount_big.xml
  32. 8
      app/src/main/res/layout/row_header_title_value.xml
  33. 17
      app/src/main/res/layout/row_title_switch.xml
  34. 1
      app/src/main/res/values/colors.xml
  35. 4
      app/src/main/res/values/secrets.xml
  36. 1
      app/src/main/res/values/styles.xml

@ -238,7 +238,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
// get all sessions part of the deleted session set
val sessionsFromSet = set.sessions
// cleanup unecessary related objects
// cleanup unnecessary related objects
set.deleteFromRealm()
this.timeFrame?.deleteFromRealm()
this.result?.deleteFromRealm()
@ -259,7 +259,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
}
@Ignore
override var estimatedHands: Double = 25.0 * (this.timeFrame?.hourlyDuration?.toDouble() ?: 0.0)
override var estimatedHands: Double = 25.0 * (this.timeFrame?.hourlyDuration ?: 0.0)
@Ignore
override var bbNetResult: Double = 0.0
@ -297,7 +297,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
}
override fun getDisplayName(): String {
return "session ${this.creationDate}"
return "Session ${this.creationDate}"
}
override fun adapterRows(): ArrayList<RowRepresentable> {
@ -308,7 +308,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionState.STARTED -> {
rows.add(
HeaderRowRepresentable(
RowViewType.HEADER_TITLE_AMOUNT,
RowViewType.HEADER_TITLE_AMOUNT_BIG,
title = getDuration(), value = result?.net.toString()
)
)
@ -316,7 +316,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionState.PAUSED -> {
rows.add(
HeaderRowRepresentable(
RowViewType.HEADER_TITLE_AMOUNT,
RowViewType.HEADER_TITLE_AMOUNT_BIG,
resId = R.string.pause, value = result?.net.toString()
)
)
@ -324,14 +324,15 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionState.FINISHED -> {
rows.add(
HeaderRowRepresentable(
RowViewType.HEADER_TITLE_AMOUNT,
RowViewType.HEADER_TITLE_AMOUNT_BIG,
title = getDuration(), value = result?.net.toString()
)
)
rows.add(
HeaderRowRepresentable(
RowViewType.HEADER_TITLE_VALUE,
resId = R.string.hour_rate_without_pauses, value = result?.net.toString()
RowViewType.HEADER_TITLE_AMOUNT,
resId = R.string.hour_rate_without_pauses,
value = this.sessionSet?.hourlyRate.toString()
)
)
@ -339,12 +340,14 @@ open class Session : RealmObject(), SessionInterface, Savable,
rows.add(
HeaderRowRepresentable(
RowViewType.HEADER_TITLE_VALUE,
resId = R.string.bankroll_variation, value = result?.net.toString()
resId = R.string.bankroll_variation,
value = result?.net.toString()
)
)
}
}
else -> {}
else -> {
}
}
// Rows
@ -381,7 +384,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
override fun actionIconForRow(row: RowRepresentable): Int? {
return when (row) {
SessionRow.START_DATE, SessionRow.END_DATE -> {
R.drawable.ic_close
net.pokeranalytics.android.R.drawable.ic_close
}
else -> null
}
@ -399,19 +402,25 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionRow.BLINDS -> {
data.add(
RowRepresentableEditDescriptor(
cgSmallBlind?.round(), R.string.smallblind, InputType.TYPE_CLASS_NUMBER
cgSmallBlind?.round(),
R.string.smallblind,
InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
)
data.add(
RowRepresentableEditDescriptor(
cgBigBlind?.round(), R.string.bigblind, InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
)
}
SessionRow.BREAK_TIME -> {
data.add(
RowRepresentableEditDescriptor("",
hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER)
RowRepresentableEditDescriptor(
"",
hint = R.string.in_minutes, inputType = InputType.TYPE_CLASS_NUMBER
)
)
}
SessionRow.BUY_IN -> {
@ -443,11 +452,14 @@ open class Session : RealmObject(), SessionInterface, Savable,
}
SessionRow.CASHED_OUT, SessionRow.PRIZE -> {
data.add(
RowRepresentableEditDescriptor(result?.cashout?.round(), inputType = InputType.TYPE_CLASS_NUMBER)
RowRepresentableEditDescriptor(
result?.cashout?.round(),
inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
SessionRow.COMMENT -> {
data.add(RowRepresentableEditDescriptor(comment, R.string.comment, InputType.TYPE_CLASS_TEXT))
data.add(RowRepresentableEditDescriptor(comment, R.string.comment))
}
SessionRow.GAME -> {
// Add current game & games list
@ -465,7 +477,10 @@ open class Session : RealmObject(), SessionInterface, Savable,
}
SessionRow.PLAYERS -> {
data.add(
RowRepresentableEditDescriptor(tournamentNumberOfPlayers?.toString(), inputType = InputType.TYPE_CLASS_NUMBER)
RowRepresentableEditDescriptor(
tournamentNumberOfPlayers?.toString(),
inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
SessionRow.POSITION -> {
@ -558,6 +573,9 @@ open class Session : RealmObject(), SessionInterface, Savable,
} catch (e: Exception) {
null
}
} else if (value == null) {
limit = null
game = null
}
}
SessionRow.INITIAL_BUY_IN -> tournamentEntryFee = if (value == null) null else (value as String).toDouble()

@ -5,18 +5,18 @@ import android.content.Intent
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.fragment.DataListFragment
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.DataListFragment
class DataListActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName: String) {
DATATYPE("DATATYPE"),
DATA_TYPE("DATA_TYPE"),
}
companion object {
fun newInstance(context: Context, dataType: Int) {
val intent = Intent(context, DataListActivity::class.java)
intent.putExtra(IntentKey.DATATYPE.keyName, dataType)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
context.startActivity(intent)
}
}
@ -33,7 +33,7 @@ class DataListActivity : PokerAnalyticsActivity() {
*/
private fun initUI() {
val dataType = intent.getIntExtra(IntentKey.DATATYPE.keyName, 0)
val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0)
val fragment = dataListFragment as DataListFragment
fragment.setData(dataType)
}
@ -44,7 +44,6 @@ class DataListActivity : PokerAnalyticsActivity() {
private fun initData() {
}
}

@ -10,16 +10,16 @@ import net.pokeranalytics.android.ui.fragment.EditableDataFragment
class EditableDataActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName : String) {
DATATYPE("DATATYPE"),
PRIMARYKEY("PRIMARYKEY");
DATA_TYPE("DATA_TYPE"),
PRIMARY_KEY("PRIMARY_KEY");
}
companion object {
fun newInstance(context: Context, dataType: Int, primaryKey: String? = null) {
val intent = Intent(context, EditableDataActivity::class.java)
intent.putExtra(IntentKey.DATATYPE.keyName, dataType)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
primaryKey?.let {
intent.putExtra(IntentKey.PRIMARYKEY.keyName, it)
intent.putExtra(IntentKey.PRIMARY_KEY.keyName, it)
}
context.startActivity(intent)
}
@ -36,8 +36,8 @@ class EditableDataActivity : PokerAnalyticsActivity() {
*/
private fun initUI() {
val dataType = intent.getIntExtra(IntentKey.DATATYPE.keyName, 0)
val primaryKey = intent.getStringExtra(IntentKey.PRIMARYKEY.keyName)
val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0)
val primaryKey = intent.getStringExtra(IntentKey.PRIMARY_KEY.keyName)
val fragment = editableDataFragment as EditableDataFragment
fragment.setData(dataType, primaryKey)
}

@ -3,14 +3,11 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_home.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.HistoryFragment
import net.pokeranalytics.android.ui.fragment.SettingsFragment
import net.pokeranalytics.android.ui.fragment.StatsFragment
import net.pokeranalytics.android.ui.adapter.HomePagerAdapter
@ -44,7 +41,7 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(net.pokeranalytics.android.R.layout.activity_home)
setContentView(R.layout.activity_home)
initUI()
}
@ -55,6 +52,12 @@ class HomeActivity : PokerAnalyticsActivity() {
private fun initUI() {
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history
val homePagerAdapter = HomePagerAdapter(supportFragmentManager)
viewPager.offscreenPageLimit = 5
viewPager.enablePaging = false
viewPager.adapter = homePagerAdapter
}
/**
@ -69,22 +72,7 @@ class HomeActivity : PokerAnalyticsActivity() {
else -> ""
}
val fragment: Fragment = when(index) {
0 -> HistoryFragment()
1 -> StatsFragment()
else -> SettingsFragment()
}
val fragmentManager = supportFragmentManager
val count = fragmentManager.backStackEntryCount
for (i in 0 until count) {
fragmentManager.popBackStack()
}
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(net.pokeranalytics.android.R.id.container, fragment)
fragmentTransaction.commit()
viewPager.setCurrentItem(index, false)
}

@ -3,7 +3,7 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_new_session.*
import kotlinx.android.synthetic.main.activity_session.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.SessionFragment
@ -34,7 +34,7 @@ class SessionActivity: PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_session)
setContentView(R.layout.activity_session)
initUI()
}

@ -1,17 +1,51 @@
package net.pokeranalytics.android.ui.activity.components
import android.Manifest
import android.Manifest.permission.ACCESS_FINE_LOCATION
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.PersistableBundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.google.android.gms.common.api.ApiException
import com.google.android.libraries.places.api.Places
import com.google.android.libraries.places.api.model.Place
import com.google.android.libraries.places.api.net.FindCurrentPlaceRequest
import io.realm.Realm
import timber.log.Timber
import java.util.*
open class PokerAnalyticsActivity : AppCompatActivity() {
companion object {
const val PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 1000
}
private val realm = Realm.getDefaultInstance()
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
PERMISSION_REQUEST_ACCESS_FINE_LOCATION -> {
if (permissions.isNotEmpty() && permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION
&& grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED
) {
locationPermissionGranted()
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
// showMessage(getString(R.string.error));
}
}
}
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
@ -35,4 +69,69 @@ open class PokerAnalyticsActivity : AppCompatActivity() {
return realm
}
/**
* Ask for location permission
*/
fun askForLocationPermission() {
ActivityCompat.requestPermissions(
this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSION_REQUEST_ACCESS_FINE_LOCATION
)
}
/**
* Return if the user has given the permission location
*/
fun hasLocationPermission(): Boolean {
return ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
}
/**
* Called when the permission location has been granted
*/
open fun locationPermissionGranted() {}
/**
* Ask for places request
*/
fun askForPlacesRequest() {
// Initialize Places.
Places.initialize(applicationContext, getString(net.pokeranalytics.android.R.string.google_places_api))
// Create a new Places client instance.
val placesClient = Places.createClient(this)
// Use fields to define the data types to return.
val placeFields = Arrays.asList(Place.Field.NAME)
// Use the builder to create a FindCurrentPlaceRequest.
val request = FindCurrentPlaceRequest.builder(placeFields).build()
// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
val placeResponse = placesClient.findCurrentPlace(request)
placeResponse.addOnCompleteListener { task ->
if (task.isSuccessful) {
val response = task.result
for (placeLikelihood in response!!.placeLikelihoods) {
Timber.d(
String.format(
"Place '%s' has likelihood: %f", placeLikelihood.place.name, placeLikelihood.likelihood
)
)
}
} else {
val exception = task.exception
if (exception is ApiException) {
Timber.d("Error: ${"Place not found: " + exception.statusCode}")
}
}
}
} else {
askForLocationPermission()
}
}
}

@ -0,0 +1,64 @@
package net.pokeranalytics.android.ui.adapter
import android.util.SparseArray
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import net.pokeranalytics.android.ui.fragment.HistoryFragment
import net.pokeranalytics.android.ui.fragment.SettingsFragment
import net.pokeranalytics.android.ui.fragment.StatsFragment
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import java.lang.ref.WeakReference
/**
* Home Adapter
*/
class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {
var weakReferences = SparseArray<WeakReference<PokerAnalyticsFragment>>()
override fun getItem(position: Int): PokerAnalyticsFragment {
return when (position) {
0 -> HistoryFragment.newInstance()
1 -> StatsFragment.newInstance()
2 -> SettingsFragment.newInstance()
else -> HistoryFragment.newInstance()
}
}
override fun getCount(): Int {
return 5
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
super.destroyItem(container, position, `object`)
weakReferences.remove(position)
}
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val fragment = super.instantiateItem(container, position) as PokerAnalyticsFragment
weakReferences.put(position, WeakReference(fragment))
return fragment
}
override fun getItemPosition(obj: Any): Int {
val fragment = obj as PokerAnalyticsFragment
return when (fragment) {
HistoryFragment::class.java -> 0
StatsFragment::class.java -> 1
SettingsFragment::class.java -> 2
else -> -1
}
}
/**
* Return the fragment at the position key
*/
fun getFragment(key: Int): PokerAnalyticsFragment? {
if (weakReferences.get(key) != null) {
return weakReferences.get(key).get()
}
return null
}
}

@ -1,6 +1,5 @@
package net.pokeranalytics.android.ui.adapter
import android.os.Handler
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
@ -46,15 +45,18 @@ class RowRepresentableAdapter(
* Refresh the row in the adapter
*/
fun refreshRow(row: RowRepresentable) {
if (row.viewType == RowViewType.TITLE_SWITCH.ordinal) {
// Avoid to refresh the view because it will refresh itself
// Caution if we want to update the title for example
return
}
val index = this.dataSource.indexForRow(row)
if (index >= 0) {
val handler = Handler()
handler.post {
notifyItemChanged(index)
}
}
}
/**
* Update UI

@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.fragment_data_list.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -18,7 +19,7 @@ import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
import timber.log.Timber
class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
RowRepresentableDelegate {
@ -55,7 +56,11 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
this.dataType.relatedResultsRepresentable?.let {
EditableDataActivity.newInstance(requireContext(), it.ordinal, (this.items[position] as Savable).uniqueIdentifier())
EditableDataActivity.newInstance(
requireContext(),
it.ordinal,
(this.items[position] as Savable).uniqueIdentifier()
)
}
}
@ -67,6 +72,15 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
*/
private fun initUI() {
val activity = activity as PokerAnalyticsActivity
// Avoid a bug during setting the title
toolbar.title = ""
activity.setSupportActionBar(toolbar)
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
setHasOptionsMenu(true)
val viewManager = LinearLayoutManager(requireContext())
val dataListAdapter = RowRepresentableAdapter(this, this)
@ -85,22 +99,20 @@ class DataListFragment : PokerAnalyticsFragment(), RowRepresentableDataSource,
)
}
}
}
/**
* Set fragment data
*/
fun setData(dataType: Int) {
this.dataType = SettingRow.values()[dataType]
this.title.text = this.dataType.name.toLowerCase().capitalize()
this.toolbar.title = this.dataType.localizedTitle(requireContext())
val realm = Realm.getDefaultInstance()
this.dataType.relatedResultsRepresentable?.let {
this.items = it.items(realm)
this.items.addChangeListener { newItems ->
Timber.d("newItems: ${newItems.size}")
this.recyclerView.adapter?.notifyDataSetChanged()
}
}

@ -27,8 +27,10 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableDiffCallback
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import timber.log.Timber
import java.util.*
class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate {
private lateinit var currentSession: Session
@ -60,7 +62,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
inflater?.inflate(R.menu.session_toolbar, menu)
this.sessionMenu = menu
updateSessionUI()
updateMenuUI()
super.onCreateOptionsMenu(menu, inflater)
}
@ -110,7 +112,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
currentSession.updateValue(value, row)
sessionAdapter.refreshRow(row)
when (row) {
SessionRow.CASHED_OUT, SessionRow.BUY_IN, SessionRow.TIPS -> updateSessionUI()
SessionRow.CASHED_OUT, SessionRow.BUY_IN, SessionRow.TIPS,
SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI()
}
}
@ -146,6 +148,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
*/
private fun updateSessionUI() {
Timber.d("updateSessionUI")
handler.removeCallbacksAndMessages(null)
when (currentSession.getState()) {
@ -181,11 +185,36 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
floatingActionButton.animate().scaleX(0f).scaleY(0f).alpha(0f)
.setInterpolator(FastOutSlowInInterpolator()).start()
}
else -> {
}
}
updateMenuUI()
updateAdapterUI(true)
}
/**
* Update Menu UI
*/
private fun updateMenuUI() {
when (currentSession.getState()) {
SessionState.PENDING -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = false
sessionMenu?.findItem(R.id.stop)?.isVisible = false
}
SessionState.STARTED, SessionState.PAUSED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = true
sessionMenu?.findItem(R.id.stop)?.isVisible = true
}
SessionState.FINISHED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = true
sessionMenu?.findItem(R.id.stop)?.isVisible = false
}
else -> {
}
}
}
/**
* Update adapter UI
*/
@ -207,20 +236,16 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
* Update the state of the session (start / pause)
*/
private fun manageSessionState() {
when (currentSession.getState()) {
SessionState.PENDING -> {
SessionState.PENDING, SessionState.PAUSED -> {
currentSession.startSession()
}
SessionState.STARTED -> {
currentSession.pauseSession()
}
SessionState.PAUSED -> {
currentSession.startSession()
else -> {
}
else -> {}
}
updateSessionUI()
}
@ -264,7 +289,8 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
realm.commitTransaction()
}
toolbar.title = if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game)
toolbar.title =
if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game)
sessionAdapter = RowRepresentableAdapter(currentSession, this)
recyclerView.adapter = sessionAdapter

@ -9,11 +9,14 @@ import androidx.core.widget.addTextChangedListener
import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.util.round
class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
private val values = ArrayList<String>()
private var isEditingBlinds: Boolean = false
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -34,6 +37,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
* Init data
*/
private fun initData() {
isEditingBlinds = row == SessionRow.BLINDS
}
/**
@ -54,13 +58,26 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() {
if (data.size == 2) {
data[0].hint?.let { editText1.hint = getString(it) }
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT
editText1.addTextChangedListener { values[0] = it?.toString() ?: "" }
editText1.setText((data[0].defaultValue ?: "").toString())
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText1.addTextChangedListener {
values[0] = it?.toString() ?: ""
if (isEditingBlinds) {
try {
val smallBlind = values[0].toDouble()
editText2.setText((smallBlind * 2).round())
} catch (e: Exception) {
editText2.setText("")
}
}
}
data[1].hint?.let { editText2.hint = getString(it) }
editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT
editText2.addTextChangedListener { values[1] = it?.toString() ?: "" }
editText2.inputType = data[1].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText2.addTextChangedListener {
values[1] = it?.toString() ?: ""
}
editText1.setText((data[0].defaultValue ?: "").toString())
editText2.setText((data[1].defaultValue ?: "").toString())
editText2.setOnEditorActionListener { v, actionId, _ ->

@ -50,7 +50,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() {
if (data.size == 1) {
data[0].hint?.let { editText1.hint = getString(it) }
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText1.addTextChangedListener { value = it?.toString() ?: "" }
editText1.setText((data[0].defaultValue ?: "").toString())

@ -0,0 +1,56 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.os.Bundle
import android.text.InputType
import android.view.LayoutInflater
import android.view.View
import androidx.core.widget.addTextChangedListener
import kotlinx.android.synthetic.main.bottom_sheet_edit_text_multi_lines.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
class BottomSheetEditTextMultiLinesFragment : BottomSheetFragment() {
private var value = ""
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onStart() {
super.onStart()
editText1.requestFocus()
}
override fun getValue(): Any? {
return value.trim()
}
/**
* Init data
*/
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
setAddButtonVisible(false)
LayoutInflater.from(requireContext()).inflate(net.pokeranalytics.android.R.layout.bottom_sheet_edit_text_multi_lines, view?.bottomSheetContainer, true)
val data = getData()
if (data.size == 1) {
data[0].hint?.let { editText1.hint = getString(it) }
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText1.addTextChangedListener { value = it?.toString() ?: "" }
editText1.setText((data[0].defaultValue ?: "").toString())
}
}
}

@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -20,6 +22,7 @@ enum class BottomSheetType {
DOUBLE_LIST,
GRID,
EDIT_TEXT,
EDIT_TEXT_MULTI_LINES,
DOUBLE_EDIT_TEXT,
SUM
}
@ -52,6 +55,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
BottomSheetType.GRID -> BottomSheetTableSizeGridFragment()
BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment()
BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment()
BottomSheetType.EDIT_TEXT_MULTI_LINES -> BottomSheetEditTextMultiLinesFragment()
BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment()
BottomSheetType.SUM -> BottomSheetSumFragment()
else -> BottomSheetFragment()
@ -74,11 +78,10 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
initUI()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
// To display correctly the keyboard
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
@SuppressLint("RestrictedApi")
override fun setupDialog(dialog: Dialog?, style: Int) {
super.setupDialog(dialog, style)
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
/**

@ -0,0 +1,33 @@
package net.pokeranalytics.android.ui.view
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
/**
* Poker Analytics ViewPager
*/
class PokerAnalyticsViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var enablePaging: Boolean = false
init {
this.enablePaging = false
}
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (this.enablePaging) {
super.onTouchEvent(event)
} else false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return if (this.enablePaging) {
super.onInterceptTouchEvent(event)
} else false
}
}

@ -29,13 +29,6 @@ interface Displayable : Localizable {
return 0
}
/**
* The type of bottom sheet displayed when the row is clicked on
*/
val bottomSheetType: BottomSheetType
get() {
return BottomSheetType.NONE
}
val relatedResultsRepresentable: LiveData?
get() {
@ -47,6 +40,11 @@ interface Displayable : Localizable {
return false
}
val bottomSheetType: BottomSheetType
get() {
return BottomSheetType.NONE
}
val displayHeader: Boolean
get() {
return false
@ -56,7 +54,6 @@ interface Displayable : Localizable {
get() {
return ArrayList<String>()
}
}
/**
@ -82,6 +79,3 @@ interface Localizable {
return "LOCALISATION NOT FOUND"
}
}

@ -1,6 +1,5 @@
package net.pokeranalytics.android.ui.view
import android.text.InputType
import io.realm.RealmResults
/**
@ -9,6 +8,6 @@ import io.realm.RealmResults
class RowRepresentableEditDescriptor(
var defaultValue: Any? = null,
var hint: Int? = null,
var inputType: Int? = InputType.TYPE_CLASS_TEXT,
var inputType: Int? = null,
var data: RealmResults<*>? = null
)

@ -35,6 +35,7 @@ enum class RowViewType {
HEADER,
HEADER_TITLE_VALUE,
HEADER_TITLE_AMOUNT,
HEADER_TITLE_AMOUNT_BIG,
EDIT_TEXT,
TITLE,
TITLE_VALUE,
@ -65,6 +66,13 @@ enum class RowViewType {
false
)
)
HEADER_TITLE_AMOUNT_BIG -> HeaderTitleAmountViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_header_title_amount_big,
parent,
false
)
)
TITLE -> TitleViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.row_title,
@ -208,19 +216,20 @@ enum class RowViewType {
BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
itemView.rowTitleSwitch_title.text = row.localizedTitle(itemView.context)
adapter.dataSource.let {
itemView.rowTitleSwitch_switch.isChecked = it.boolForRow(row)
itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { _, b ->
adapter.delegate?.onRowValueChanged(b, row)
itemView.rowTitleSwitch_switch.setOnCheckedChangeListener { buttonView, isChecked ->
adapter.delegate?.onRowValueChanged(isChecked, row)
}
}
val listener = View.OnClickListener {
itemView.rowTitleSwitch_switch.isChecked = !itemView.rowTitleSwitch_switch.isChecked
adapter.delegate?.onRowValueChanged(itemView.rowTitleSwitch_switch.isChecked, row)
}
itemView.rowTitleSwitch_container.setOnClickListener(listener)
itemView.rowTitleSwitch_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE
}
}
@ -289,5 +298,4 @@ enum class RowViewType {
}
}
}

@ -32,4 +32,5 @@ enum class BankrollRow : RowRepresentable {
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -11,7 +11,7 @@ enum class SettingRow : RowRepresentable {
BANKROLL,
GAME,
LOCATION,
TOURNAMENT_FEATURE,
TOURNAMENT_TYPE,
TRANSACTION_TYPE;
override val resId: Int?
@ -34,12 +34,9 @@ enum class SettingRow : RowRepresentable {
BANKROLL -> LiveData.BANKROLL
GAME -> LiveData.GAME
LOCATION -> LiveData.LOCATION
TOURNAMENT_FEATURE -> LiveData.TOURNAMENT_FEATURE
TOURNAMENT_TYPE -> LiveData.TOURNAMENT_TYPE
TRANSACTION_TYPE -> LiveData.TRANSACTION_TYPE
else -> null
}
}
override var displayHeader: Boolean = false
override var headerValues: ArrayList<String> = ArrayList()
}

@ -2,5 +2,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white_transparent"/>
<size android:height="0.5dp"/>
<size android:height="1dp"/>
</shape>

@ -1,13 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/dataListFragment"
android:name="net.pokeranalytics.android.ui.fragment.DataListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="net.pokeranalytics.android.ui.fragment.DataListFragment" />
tools:layout="@layout/fragment_data_list" />
</LinearLayout>

@ -1,13 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<fragment
android:id="@+id/editableDataFragment"
android:name="net.pokeranalytics.android.ui.fragment.EditableDataFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="net.pokeranalytics.android.ui.fragment.EditableDataFragment" />
tools:layout="@layout/fragment_editable_data" />
</LinearLayout>

@ -15,6 +15,7 @@
app:layout_constraintTop_toTopOf="parent"
app:title="@string/app_name" />
<!--
<FrameLayout
android:id="@+id/container"
android:layout_width="0dp"
@ -22,6 +23,15 @@
app:layout_constraintBottom_toTopOf="@+id/navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" /> -->
<net.pokeranalytics.android.ui.view.PokerAnalyticsViewPager
android:id="@+id/viewPager"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
<com.google.android.material.bottomnavigation.BottomNavigationView

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/newSessionFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="net.pokeranalytics.android.ui.fragment.SessionFragment" />
</LinearLayout>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<fragment
android:id="@+id/newSessionFragment"
android:name="net.pokeranalytics.android.ui.fragment.SessionFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_session" />
</LinearLayout>

@ -0,0 +1,28 @@
<?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/gray_darker">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/editText1"
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="top|start"
android:inputType="textMultiLine"
android:minLines="10"
android:maxLines="10"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="10" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,36 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout 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="match_parent">
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
tools:text="Data List"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="8dp"
android:clipToPadding="false"
android:paddingBottom="96dp"
tools:listitem="@layout/row_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title" />
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="128dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:collapsedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.CollapsedTitleAppearance"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleGravity="bottom"
app:expandedTitleMarginStart="72dp"
app:expandedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.ExpandedTitleAppearance"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:title="Poker Analytics"
app:titleTextColor="@color/white" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/addButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:src="@drawable/ic_add"
@ -39,4 +75,4 @@
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -135,12 +135,10 @@
app:titleTextColor="@color/white"
tools:title="Poker Analytics" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floatingActionButton"
android:layout_width="wrap_content"

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rowHeaderTitleAmount.container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="48dp"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
@ -19,7 +19,6 @@
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:fontFamily="@font/roboto_medium"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
@ -34,7 +33,6 @@
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:ellipsize="end"
android:fontFamily="@font/roboto_medium"
android:gravity="end"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="parent"

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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:id="@+id/rowHeaderTitleAmount.container"
android:layout_width="match_parent"
android:layout_height="56dp"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/green_header">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rowHeaderTitleAmount.title"
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:fontFamily="@font/roboto_medium"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
tools:text="Title" />
<net.pokeranalytics.android.ui.view.PokerAnalyticsTextView
android:id="@+id/rowHeaderTitleAmount.value"
style="@style/PokerAnalyticsTheme.TextView.RowValue"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:ellipsize="end"
android:fontFamily="@font/roboto_medium"
android:textSize="20sp"
android:gravity="end"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintStart_toEndOf="@+id/rowHeaderTitleAmount.title"
app:layout_constraintTop_toTopOf="parent"
tools:text="Value" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/rowHeaderTitleAmount.separator"
android:layout_width="match_parent"
android:layout_height="16dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
</androidx.appcompat.widget.LinearLayoutCompat>

@ -4,12 +4,12 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rowHeaderTitleValue.container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="48dp"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:background="@color/green_header">
<androidx.appcompat.widget.AppCompatTextView
@ -17,8 +17,6 @@
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
@ -30,8 +28,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"

@ -11,13 +11,15 @@
android:id="@+id/rowTitleSwitch.title"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/PokerAnalyticsTheme.TextView.RowTitle"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="16dp"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintEnd_toStartOf="@+id/rowTitleSwitch.switch"
app:layout_constraintStart_toStartOf="@+id/guidelineStart"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
tools:text="Data Type Title" />
<androidx.constraintlayout.widget.Guideline
@ -33,13 +35,14 @@
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
<Switch
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/rowTitleSwitch.switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/rowTitleSwitch.switch"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/rowTitleSwitch.title"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="356dp"/>
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guidelineEnd"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/rowTitleSwitch.separator"

@ -16,6 +16,7 @@
<color name="dark_clear">#40000000</color>
<color name="green">#58C473</color>
<color name="green_transparent">#2558C473</color>
<color name="green_light">#65FF82</color>
<color name="green_lighter_gradient">#282e29</color>
<color name="green_diamond_dark">#2E8148</color>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="google_places_api" translatable="false">AIzaSyCg-vgW4YnFsQ_s1iWjgzSq2vT0te3R1Hw</string>
</resources>

@ -8,6 +8,7 @@
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/gray_dark</item>
<item name="android:navigationBarColor">@color/colorPrimary</item>
<item name="colorControlHighlight">@color/green_transparent</item>
<item name="bottomNavigationStyle">@style/PokerAnalyticsTheme.BottomNavigationView</item>
<item name="toolbarStyle">@style/PokerAnalyticsTheme.Toolbar</item>

Loading…
Cancel
Save