Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev

dev
Laurent 7 years ago
commit 642c290f0c
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 35
      app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt
  3. 10
      app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
  4. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  6. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  7. 85
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  9. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt
  10. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt
  11. 0
      app/src/main/res/layout/activity_report_creation.xml
  12. 13
      app/src/main/res/layout/bottom_sheet_sum.xml
  13. 63
      app/src/main/res/layout/fragment_report_creation.xml
  14. 12
      app/src/main/res/menu/toolbar_report_creation.xml

@ -65,7 +65,7 @@ class PokerAnalyticsApplication : Application() {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
// this.createFakeSessions() this.createFakeSessions()
} }

@ -10,12 +10,13 @@ import net.pokeranalytics.android.ui.fragment.FiltersFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.interfaces.FilterableType
class FiltersActivity : PokerAnalyticsActivity() { class FiltersActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName: String) { enum class IntentKey(val keyName: String) {
FILTER_ID("FILTER_ID"), FILTER_ID("FILTER_ID"),
FILTERABLE_TYPE("FILTERABLE_TYPE"), FILTERABLE_TYPE("FILTERABLE_TYPE"),
; HIDE_MOST_USED_FILTERS("HIDE_MOST_USED_FILTERS"),
;
} }
private lateinit var fragment: FiltersFragment private lateinit var fragment: FiltersFragment
@ -24,18 +25,20 @@ class FiltersActivity : PokerAnalyticsActivity() {
/** /**
* Create a new instance for result * Create a new instance for result
*/ */
fun newInstanceForResult(fragment: Fragment, filterId: String? = null, currentFilterable: FilterableType) { fun newInstanceForResult(fragment: Fragment, filterId: String? = null, currentFilterable: FilterableType, hideMostUsedFilters: Boolean = false) {
fragment.startActivityForResult(getIntent(fragment.requireContext(), filterId, currentFilterable), FilterActivityRequestCode.SELECT_FILTER.ordinal) val intent = getIntent(fragment.requireContext(), filterId, currentFilterable, hideMostUsedFilters)
fragment.startActivityForResult(intent, FilterActivityRequestCode.CREATE_FILTER.ordinal)
} }
private fun getIntent(context:Context, filterId:String?, currentFilterable: FilterableType) : Intent { private fun getIntent(context: Context, filterId: String?, currentFilterable: FilterableType, hideMostUsedFilters: Boolean = false): Intent {
val intent = Intent(context, FiltersActivity::class.java) val intent = Intent(context, FiltersActivity::class.java)
intent.putExtra(IntentKey.FILTERABLE_TYPE.keyName, currentFilterable.ordinal) intent.putExtra(IntentKey.FILTERABLE_TYPE.keyName, currentFilterable.ordinal)
filterId?.let { intent.putExtra(IntentKey.HIDE_MOST_USED_FILTERS.keyName, hideMostUsedFilters)
intent.putExtra(IntentKey.FILTER_ID.keyName, it) filterId?.let {
} intent.putExtra(IntentKey.FILTER_ID.keyName, it)
return intent }
} return intent
}
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -56,13 +59,15 @@ class FiltersActivity : PokerAnalyticsActivity() {
val fragmentManager = supportFragmentManager val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction = fragmentManager.beginTransaction()
val filterId = intent.getStringExtra(IntentKey.FILTER_ID.keyName) val filterId = intent.getStringExtra(IntentKey.FILTER_ID.keyName)
val ordinal = intent.getIntExtra(IntentKey.FILTERABLE_TYPE.keyName, 0) val ordinal = intent.getIntExtra(IntentKey.FILTERABLE_TYPE.keyName, 0)
val filterableType = FilterableType.values()[ordinal] val hideMostUsedFilters = intent.getBooleanExtra(IntentKey.HIDE_MOST_USED_FILTERS.keyName, false)
val filterableType = FilterableType.values()[ordinal]
fragment = FiltersFragment() fragment = FiltersFragment()
fragmentTransaction.add(R.id.container, fragment) fragmentTransaction.add(R.id.container, fragment)
fragmentTransaction.commit() fragmentTransaction.commit()
fragment.setData(filterId, filterableType) fragment.setData(filterId, filterableType)
fragment.updateMostUsedFiltersVisibility(!hideMostUsedFilters)
} }

@ -14,25 +14,19 @@ class ReportCreationActivity : PokerAnalyticsActivity() {
NEW_REPORT NEW_REPORT
} }
companion object { companion object {
var options: Calculator.Options? = null var options: Calculator.Options? = null
// fun newInstance(context: Context) {
// val intent = Intent(context, ReportCreationActivity::class.java)
// context.startActivity(intent)
// }
fun newInstanceForResult(fragment: Fragment, context: Context) { fun newInstanceForResult(fragment: Fragment, context: Context) {
val intent = Intent(context, ReportCreationActivity::class.java) val intent = Intent(context, ReportCreationActivity::class.java)
fragment.startActivityForResult(intent, RequestCode.NEW_REPORT.ordinal) fragment.startActivityForResult(intent, RequestCode.NEW_REPORT.ordinal)
} }
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_reportcreation) setContentView(R.layout.activity_report_creation)
} }
} }

@ -6,6 +6,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults import io.realm.RealmResults
@ -143,11 +144,7 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
* Update UI * Update UI
*/ */
fun updateUI(showAddButton: Boolean) { fun updateUI(showAddButton: Boolean) {
if (showAddButton) { this.addButton.isVisible = showAddButton
this.addButton.show()
} else {
this.addButton.hide()
}
} }
} }

@ -84,7 +84,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
if (data.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false)) { if (data.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false)) {
deleteSelectedTransaction() deleteSelectedTransaction()
} }
} else if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == RESULT_OK) { } else if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == RESULT_OK) {
data?.let { data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)) this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
} }

@ -4,6 +4,7 @@ import android.app.Activity.RESULT_OK
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.fragment_editable_data.appBar import kotlinx.android.synthetic.main.fragment_editable_data.appBar
@ -27,6 +28,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.sorted import net.pokeranalytics.android.util.extensions.sorted
import timber.log.Timber
open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
@ -50,7 +52,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
private var selectedRow: RowRepresentable? = null private var selectedRow: RowRepresentable? = null
private var isUpdating = false private var isUpdating = false
private var isSaved = false private var showMostUsedFiltersLayout = true
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState) super.onCreateView(inflater, container, savedInstanceState)
@ -158,6 +160,8 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
moreFilters.setOnClickListener { moreFilters.setOnClickListener {
DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false) DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false)
} }
mostUsedFiltersLayout.isVisible = showMostUsedFiltersLayout
} }
/** /**
@ -292,4 +296,13 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
this.filterableType = filterableType this.filterableType = filterableType
} }
/**
* Update the most used filters visibility
*/
fun updateMostUsedFiltersVisibility(visible: Boolean) {
Timber.d("updateMostUsedFiltersVisibility: $visible")
showMostUsedFiltersLayout = visible
mostUsedFiltersLayout?.isVisible = visible
}
} }

@ -3,9 +3,7 @@ package net.pokeranalytics.android.ui.fragment
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.*
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_report_creation.* import kotlinx.android.synthetic.main.fragment_report_creation.*
@ -14,11 +12,14 @@ import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.activity.ReportCreationActivity import net.pokeranalytics.android.ui.activity.ReportCreationActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
@ -29,6 +30,7 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
private var assistant = Assistant() private var assistant = Assistant()
private var currentRows: List<RowRepresentable> = listOf() private var currentRows: List<RowRepresentable> = listOf()
private var reportCreationMenu: Menu? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState) super.onCreateView(inflater, container, savedInstanceState)
@ -37,6 +39,47 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
this.initUI()
this.updateUIWithCurrentStep()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
this.updateUIWithCurrentStep()
val selectedFilterId = data?.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)
val filterPosition = currentRows.indexOfFirst { it is Filter && it.id == selectedFilterId }
if (filterPosition != -1) {
onRowSelected(filterPosition, currentRows[filterPosition])
}
}
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
menu?.clear()
inflater?.inflate(R.menu.toolbar_report_creation, menu)
menu?.findItem(R.id.add)?.isVisible = false
reportCreationMenu = menu
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
R.id.add -> {
if (this.assistant.step == Assistant.Step.FILTER) {
FiltersActivity.newInstanceForResult(this, currentFilterable = FilterableType.SESSION, hideMostUsedFilters = true)
}
}
}
return super.onOptionsItemSelected(item)
}
/**
* Init UI
*/
private fun initUI() {
setDisplayHomeAsUpEnabled(true)
this.optionsAdapter = RowRepresentableAdapter(this, this) this.optionsAdapter = RowRepresentableAdapter(this, this)
@ -47,8 +90,6 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
adapter = optionsAdapter adapter = optionsAdapter
} }
this.updateUIWithCurrentStep()
this.next.setOnClickListener { this.next.setOnClickListener {
if (assistant.nextEnabled) { if (assistant.nextEnabled) {
this.assistant.nextStep() this.assistant.nextStep()
@ -68,23 +109,17 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
} }
} }
} }
}
private fun finishActivityWithOptions(options: Calculator.Options) {
ReportCreationActivity.options = options // temp object
val intent = Intent()
activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish()
} }
/**
* Update UI when changing the current step
*/
private fun updateUIWithCurrentStep() { private fun updateUIWithCurrentStep() {
this.next.visibility = if (this.assistant.nextButtonShouldAppear) View.VISIBLE else View.GONE this.next.visibility = if (this.assistant.nextButtonShouldAppear) View.VISIBLE else View.GONE
this.next.text = requireContext().getString(this.assistant.nextButtonTitleResId) this.next.text = requireContext().getString(this.assistant.nextButtonTitleResId)
this.next.isEnabled = this.assistant.nextEnabled this.next.isEnabled = this.assistant.nextEnabled
this.reportCreationMenu?.findItem(R.id.add)?.isVisible = this.assistant.addButtonShouldAppear
val rows = mutableListOf<RowRepresentable>() val rows = mutableListOf<RowRepresentable>()
@ -99,6 +134,17 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
} }
/**
* Finish activity
*/
private fun finishActivityWithOptions(options: Calculator.Options) {
ReportCreationActivity.options = options // temp object
val intent = Intent()
activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish()
}
// RowRepresentableDataSource // RowRepresentableDataSource
override fun adapterRows(): List<RowRepresentable>? { override fun adapterRows(): List<RowRepresentable>? {
@ -261,6 +307,7 @@ class Assistant {
} }
Step.COMPARATOR -> Criteria.all Step.COMPARATOR -> Criteria.all
Step.FILTER -> { Step.FILTER -> {
val data = ArrayList<RowRepresentable>()
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val filters = Filter.sortedByUsage(realm) val filters = Filter.sortedByUsage(realm)
realm.close() realm.close()
@ -296,4 +343,12 @@ class Assistant {
} }
} }
val addButtonShouldAppear: Boolean
get() {
return when (this.step) {
Step.FILTER -> true
else -> false
}
}
} }

@ -90,7 +90,7 @@ class StatisticsFragment : FilterableFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == Activity.RESULT_OK) { if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
data?.let { data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)) this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
} }

@ -36,6 +36,7 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
* Init data * Init data
*/ */
private fun initData() { private fun initData() {
valueHasPlaceholder = true
} }
/** /**
@ -61,13 +62,20 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
} }
data[0].defaultValue?.let { data[0].defaultValue?.let {
if (it is Double || it is Long) { val valueString = if (it is Double || it is Long) {
val formatter = NumberFormat.getNumberInstance() val formatter = NumberFormat.getNumberInstance()
formatter.maximumFractionDigits = 6 formatter.maximumFractionDigits = 6
formatter.isGroupingUsed = false formatter.isGroupingUsed = false
editText1.setText(formatter.format(it)) formatter.format(it)
} else { } else {
editText1.setText(it.toString()) it.toString()
}
if (valueHasPlaceholder) {
this.value = it.toString().toDoubleOrNull()
editText1.hint = valueString
} else {
editText1.setText(valueString)
} }
} }

@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import com.ibm.icu.text.NumberFormat
import kotlinx.android.synthetic.main.bottom_sheet_sum.* import kotlinx.android.synthetic.main.bottom_sheet_sum.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
@ -63,7 +64,10 @@ class BottomSheetSumFragment : BottomSheetFragment() {
0.0 0.0
} }
currentValue.text = currentDefaultValue.toCurrency(currentCurrency) val formatter = NumberFormat.getNumberInstance()
formatter.maximumFractionDigits = 6
formatter.isGroupingUsed = false
currentValue.text = formatter.format(currentDefaultValue)
// First value // First value
val defaultValue1 = try { val defaultValue1 = try {

@ -15,12 +15,12 @@
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:text="+ 1000 $"
app:layout_constraintEnd_toStartOf="@+id/button2" app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
android:text="+ 1000 $" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:id="@+id/button2" android:id="@+id/button2"
@ -30,11 +30,11 @@
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:text="+ 2000 $"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button1" app:layout_constraintStart_toEndOf="@+id/button1"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
android:text="+ 2000 $" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/currentValue" android:id="@+id/currentValue"
@ -44,6 +44,11 @@
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:gravity="center" android:gravity="center"
android:lines="1"
app:autoSizeMaxTextSize="22sp"
app:autoSizeMinTextSize="12sp"
app:autoSizeStepGranularity="2sp"
app:autoSizeTextType="uniform"
app:layout_constraintBottom_toBottomOf="@+id/editText1" app:layout_constraintBottom_toBottomOf="@+id/editText1"
app:layout_constraintEnd_toStartOf="@+id/more" app:layout_constraintEnd_toStartOf="@+id/more"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"

@ -1,37 +1,40 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="match_parent"
android:layout_height="match_parent"> android:orientation="vertical">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
app:title="@string/new_report" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:title="@string/new_report" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/toolbar" android:clipToPadding="false"
app:layout_constraintBottom_toTopOf="@+id/next" android:paddingBottom="72dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
tools:listitem="@layout/row_title" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/next" android:id="@+id/next"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="8dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
tools:text="Next" /> tools:text="Next" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/add"
android:icon="@drawable/ic_add"
android:title="@string/new_str"
android:iconTint="@color/white"
app:showAsAction="ifRoom" />
</menu>
Loading…
Cancel
Save