diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 87f7b9b4..7b8c3557 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -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 { @@ -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() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt index 3b492ebd..54119d48 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt @@ -5,46 +5,45 @@ 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"), - } - - companion object { - fun newInstance(context: Context, dataType: Int) { - val intent = Intent(context, DataListActivity::class.java) - intent.putExtra(IntentKey.DATATYPE.keyName, dataType) - context.startActivity(intent) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_data_list) - - initUI() - } - - /** - * Init UI - */ - private fun initUI() { - - val dataType = intent.getIntExtra(IntentKey.DATATYPE.keyName, 0) - val fragment = dataListFragment as DataListFragment - fragment.setData(dataType) - } - - /** - * Init data - */ - private fun initData() { - - - - } + enum class IntentKey(val keyName: String) { + DATA_TYPE("DATA_TYPE"), + } + + companion object { + fun newInstance(context: Context, dataType: Int) { + val intent = Intent(context, DataListActivity::class.java) + intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType) + context.startActivity(intent) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_data_list) + + initUI() + } + + /** + * Init UI + */ + private fun initUI() { + + val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0) + val fragment = dataListFragment as DataListFragment + fragment.setData(dataType) + } + + /** + * Init data + */ + private fun initData() { + + + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt index 28b7f8ff..4a1c5224 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt @@ -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) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index b1c395b9..87f5f11c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -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) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt index 0017d653..12be0c7d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt @@ -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() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt index d6d582bf..895c1c48 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt @@ -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, 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() + } + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt new file mode 100644 index 00000000..41cc6926 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt @@ -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>() + + 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 + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index 3a51110b..c3a14d29 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -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,13 +45,16 @@ 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) - } + notifyItemChanged(index) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index 4ec1441d..bc2bdb2b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -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,14 +19,14 @@ 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 { private lateinit var dataType: SettingRow - private lateinit var items: RealmResults<*> + private lateinit var items: RealmResults<*> override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_data_list, container, false) @@ -55,18 +56,31 @@ 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() + ) } } - private fun initData() { - } + private fun initData() { + } /** * Init UI */ 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() } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index 878d5fdf..8d57f8a3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -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 @@ -36,7 +38,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott private var sessionMenu: Menu? = null private val oldRows: ArrayList = ArrayList() private val handler: Handler = Handler() - private val refreshTimer: Runnable = object: Runnable { + private val refreshTimer: Runnable = object : Runnable { override fun run() { sessionAdapter.notifyItemChanged(0) handler.postDelayed(this, 30000) @@ -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) } @@ -94,7 +96,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott this, currentSession.timeFrame?.endDate ) - else -> BottomSheetFragment.create(fragmentManager, row,this, data) + else -> BottomSheetFragment.create(fragmentManager, row, this, data) } } @@ -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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index 21a38c0a..044082ba 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -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() + 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, _ -> diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index b3a137d7..a6027e34 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -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()) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt new file mode 100644 index 00000000..3787218f --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextMultiLinesFragment.kt @@ -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()) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt index 0fce18a5..1f7a2760 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt @@ -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) } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt new file mode 100644 index 00000000..830ed374 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt @@ -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 + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index 1fad8382..b7aa3730 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -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() } - } /** @@ -82,6 +79,3 @@ interface Localizable { return "LOCALISATION NOT FOUND" } } - - - diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt index d9fb8fd8..212580fe 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentableEditDescriptor.kt @@ -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 ) \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 3c57373a..e64e1aed 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -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 { } } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt index 5a60d65a..905925f3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt @@ -32,4 +32,5 @@ enum class BankrollRow : RowRepresentable { override var displayHeader: Boolean = false override var headerValues: ArrayList = ArrayList() + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt index 1d286a6a..fe8a02a3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt @@ -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 = ArrayList() } \ No newline at end of file diff --git a/app/src/main/res/drawable/separator.xml b/app/src/main/res/drawable/separator.xml index 0af99c11..d2658897 100644 --- a/app/src/main/res/drawable/separator.xml +++ b/app/src/main/res/drawable/separator.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_data_list.xml b/app/src/main/res/layout/activity_data_list.xml index 2911b5ae..83171e1b 100644 --- a/app/src/main/res/layout/activity_data_list.xml +++ b/app/src/main/res/layout/activity_data_list.xml @@ -1,13 +1,15 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/dataListFragment" + android:name="net.pokeranalytics.android.ui.fragment.DataListFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:layout="@layout/fragment_data_list" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_editable_data.xml b/app/src/main/res/layout/activity_editable_data.xml index 479e51ea..d8f373b8 100644 --- a/app/src/main/res/layout/activity_editable_data.xml +++ b/app/src/main/res/layout/activity_editable_data.xml @@ -1,13 +1,15 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools" + android:orientation="vertical"> + android:id="@+id/editableDataFragment" + android:name="net.pokeranalytics.android.ui.fragment.EditableDataFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:layout="@layout/fragment_editable_data" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index a56b0b25..670ad70c 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -15,6 +15,7 @@ app:layout_constraintTop_toTopOf="parent" app:title="@string/app_name" /> + + + - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_session.xml b/app/src/main/res/layout/activity_session.xml new file mode 100644 index 00000000..66d4c60a --- /dev/null +++ b/app/src/main/res/layout/activity_session.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml b/app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml new file mode 100644 index 00000000..766adff7 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_edit_text_multi_lines.xml @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_data_list.xml b/app/src/main/res/layout/fragment_data_list.xml index c2fd9428..8aaf3bd3 100644 --- a/app/src/main/res/layout/fragment_data_list.xml +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -1,36 +1,72 @@ - + android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools"> + + + + + + + + + + + + + + + + + + + + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_session.xml b/app/src/main/res/layout/fragment_session.xml index 9baeaa3b..bbe0d2f0 100644 --- a/app/src/main/res/layout/fragment_session.xml +++ b/app/src/main/res/layout/fragment_session.xml @@ -135,12 +135,10 @@ app:titleTextColor="@color/white" tools:title="Poker Analytics" /> - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_header_title_value.xml b/app/src/main/res/layout/row_header_title_value.xml index 67b27389..d9f427a8 100644 --- a/app/src/main/res/layout/row_header_title_value.xml +++ b/app/src/main/res/layout/row_header_title_value.xml @@ -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"> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/rowTitleSwitch.container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?selectableItemBackground"> + 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" + app:layout_constraintBottom_toBottomOf="parent" + 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" /> + android:id="@+id/guidelineStart" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_begin="16dp" /> - + android:id="@+id/guidelineEnd" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_end="16dp" /> + + + android:id="@+id/rowTitleSwitch.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"> + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_gravity="center" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + android:background="@color/kaki" /> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f5d08d56..320151df 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -16,6 +16,7 @@ #40000000 #58C473 + #2558C473 #65FF82 #282e29 #2E8148 diff --git a/app/src/main/res/values/secrets.xml b/app/src/main/res/values/secrets.xml new file mode 100644 index 00000000..77732c57 --- /dev/null +++ b/app/src/main/res/values/secrets.xml @@ -0,0 +1,4 @@ + + + AIzaSyCg-vgW4YnFsQ_s1iWjgzSq2vT0te3R1Hw + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8848770a..dec0a790 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,7 @@ @color/colorAccent @color/gray_dark @color/colorPrimary + @color/green_transparent @style/PokerAnalyticsTheme.BottomNavigationView @style/PokerAnalyticsTheme.Toolbar