diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8ef69191..c5824c37 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -98,6 +98,16 @@
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
index 045b55cf..f4a0d7e3 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
@@ -17,11 +17,12 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.util.extensions.endOfDay
import net.pokeranalytics.android.util.extensions.startOfDay
+import java.text.DateFormatSymbols
import java.util.*
import kotlin.collections.ArrayList
fun List.name() : String {
- return this.map { it.id }.joinToString(" / ")
+ return this.map { it.label() }.joinToString(" / ")
}
//inline fun List.query(realm: Realm): RealmQuery {
@@ -43,7 +44,11 @@ inline fun List.queryWith(query: RealmQ
* A new type should also set the expected numericValues required in the [filterValuesExpectedKeys]
*/
-sealed class QueryCondition : FilterElementRow {
+interface Labelable {
+ fun label() : String
+}
+
+sealed class QueryCondition : FilterElementRow, Labelable {
interface Valuable > {
var values: ArrayList?
@@ -107,6 +112,14 @@ sealed class QueryCondition : FilterElementRow {
}
}
+ override fun label(): String {
+ return when (this) {
+ is YEAR -> "$intValue"
+ is MONTH -> DateFormatSymbols.getInstance(Locale.getDefault()).months[intValue]
+ else -> baseId
+ }
+ }
+
override var filterSectionRow: FilterSectionRow = FilterSectionRow.CASH_TOURNAMENT
open class OperationQueryCondition : QueryCondition(), asDoubleValue {
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
index f0638976..106831ba 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
@@ -93,6 +93,12 @@ open class Filter : RealmObject() {
}
}
+ fun remove(filterCategoryRow: FilterCategoryRow) {
+ val sections = filterCategoryRow.filterSectionRows.map { it.name }
+ val savedSections = filterConditions.filter { sections.contains(it.sectionName) }
+ this.filterConditions.removeAll(savedSections)
+ }
+
fun countBy(filterCategoryRow: FilterCategoryRow): Int {
val sections = filterCategoryRow.filterSectionRows.map { it.name }
println("list of sections $sections")
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
index a067ebb3..10647782 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
@@ -11,6 +11,7 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatTextView
import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.content.ContextCompat
+import androidx.core.content.FileProvider
import androidx.core.view.isVisible
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R
@@ -19,6 +20,11 @@ import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.util.DeviceUtils
import net.pokeranalytics.android.util.URL
+import java.io.File
+
+
+
+
// Sizes
@@ -63,20 +69,33 @@ fun PokerAnalyticsActivity.openPlayStorePage() {
}
// Open email for "Contact us"
-fun PokerAnalyticsActivity.openContactMail(subjectStringRes: Int) {
+fun PokerAnalyticsActivity.openContactMail(subjectStringRes: Int, filePath: String?= null) {
val info = "v${BuildConfig.VERSION_NAME}(${BuildConfig.VERSION_CODE}), Android ${android.os.Build.VERSION.SDK_INT}, ${DeviceUtils.getDeviceName()}"
- val intent = Intent(Intent.ACTION_SENDTO)
- intent.data = Uri.parse("mailto:${URL.SUPPORT_EMAIL.value}")
- intent.putExtra(Intent.EXTRA_SUBJECT, getString(subjectStringRes))
- intent.putExtra(Intent.EXTRA_EMAIL, URL.SUPPORT_EMAIL.value)
- intent.putExtra(Intent.EXTRA_TEXT, "\n\n$info")
- startActivity(Intent.createChooser(intent, getString(R.string.contact)))
+
+ val emailIntent = Intent(Intent.ACTION_SEND)
+
+ filePath?.let {
+ val databaseFile = File(it)
+ val contentUri = FileProvider.getUriForFile(this, "net.pokeranalytics.android.fileprovider", databaseFile)
+ if (contentUri != null) {
+ emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ emailIntent.setDataAndType(contentUri, contentResolver.getType(contentUri))
+ emailIntent.putExtra(Intent.EXTRA_STREAM, contentUri)
+ }
+ }
+
+ emailIntent.type = "message/rfc822"
+ emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(subjectStringRes))
+ emailIntent.putExtra(Intent.EXTRA_TEXT, "\n\n$info")
+ emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(URL.SUPPORT_EMAIL.value))
+
+ startActivity(Intent.createChooser(emailIntent, getString(R.string.contact)))
}
// Open custom tab
fun PokerAnalyticsActivity.openUrl(url: String) {
val builder: CustomTabsIntent.Builder = CustomTabsIntent.Builder()
- builder.setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary))
+ builder.setToolbarColor(ContextCompat.getColor(this, net.pokeranalytics.android.R.color.colorPrimary))
val customTabsIntent = builder.build()
customTabsIntent.launchUrl(this, Uri.parse(url))
}
@@ -102,7 +121,7 @@ fun showAlertDialog(context: Context, title: Int? = null, message: Int? = null)
message?.let {
builder.setMessage(message)
}
- builder.setPositiveButton(R.string.ok, null)
+ builder.setPositiveButton(net.pokeranalytics.android.R.string.ok, null)
builder.show()
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
index 6dcc9294..a88f35d6 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
@@ -240,6 +240,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Compute data per YEAR and MONTH
+ println(">>>> ${Comparator.MONTH_OF_YEAR.queryConditions.map { it.id }}")
+
val monthConditions = when (sessionTypeCondition) {
QueryCondition.CASH -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.CASH).combined()
QueryCondition.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.TOURNAMENT).combined()
@@ -255,7 +257,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
conditions.forEach { condition ->
when (condition) {
is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValue)
- is QueryCondition.MONTH -> calendar.set(Calendar.YEAR, condition.intValue)
+ is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.intValue)
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
index 7dbc53a1..80c89ba8 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
@@ -38,14 +38,14 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
lateinit var parentActivity: PokerAnalyticsActivity
lateinit var rowRepresentableAdapter: RowRepresentableAdapter
+ private lateinit var primaryKey: String
+ private lateinit var filterCategoryRow: FilterCategoryRow
private var currentFilter: Filter? = null
private var rows: ArrayList = ArrayList()
private var rowsForFilterSubcategoryRow: HashMap> = HashMap()
- private var primaryKey: String? = null
private var filterMenu: Menu? = null
- private var filterCategoryRow: FilterCategoryRow? = null
private val selectedRows = ArrayList()
private var isUpdating = false
private var shouldOpenKeyboard = true
@@ -174,17 +174,14 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
*/
private fun initData() {
- primaryKey?.let {
- currentFilter = Filter.getFilterBydId(getRealm(), it)
- }
+ currentFilter = Filter.getFilterBydId(getRealm(), primaryKey)
- filterCategoryRow?.let {
- this.appBar.toolbar.title = it.localizedTitle(requireContext())
+ this.appBar.toolbar.title = filterCategoryRow.localizedTitle(requireContext())
this.rows.clear()
this.rowsForFilterSubcategoryRow.clear()
- this.rows.addAll(it.filterElements)
+ this.rows.addAll(filterCategoryRow.filterElements)
this.rows.forEach { element ->
if (element is QueryCondition && currentFilter?.contains(element) == true) {
@@ -195,7 +192,6 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
this.recyclerView.adapter = rowRepresentableAdapter
- }
}
/**
@@ -238,6 +234,7 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
val realm = getRealm()
realm.beginTransaction()
+ currentFilter?.remove(filterCategoryRow)
currentFilter?.createOrUpdateFilterConditions(selectedRows)
realm.commitTransaction()
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
index 68c32e28..aee99f2c 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
@@ -18,7 +18,6 @@ import net.pokeranalytics.android.ui.activity.ReportDetailsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
-import net.pokeranalytics.android.ui.fragment.components.LoaderDialogFragment
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.ReportRow
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 c1a8d738..69f5115c 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
@@ -43,8 +43,9 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
private val refreshTimer: Runnable = object : Runnable {
override fun run() {
// Refresh header each 30 seconds
+ currentSession.updateRowRepresentation()
sessionAdapter.notifyItemChanged(0)
- handler.postDelayed(this, 30000)
+ handler.postDelayed(this, 60000)
}
}
@@ -181,7 +182,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate {
floatingActionButton.animate().scaleX(1f).scaleY(1f).alpha(1f)
.setDuration(animationDuration)
.setInterpolator(OvershootInterpolator()).start()
- handler.postDelayed(refreshTimer, 30000)
+ handler.postDelayed(refreshTimer, 60000)
}
SessionState.PAUSED -> {
sessionMenu?.findItem(R.id.restart)?.isVisible = true
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
index 782b6de8..b396874f 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
@@ -11,7 +11,6 @@ import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_settings.*
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R
-import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.CurrenciesActivity
import net.pokeranalytics.android.ui.activity.DataListActivity
@@ -20,15 +19,15 @@ import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
+import net.pokeranalytics.android.ui.extensions.openContactMail
+import net.pokeranalytics.android.ui.extensions.openPlayStorePage
+import net.pokeranalytics.android.ui.extensions.openUrl
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.URL
import net.pokeranalytics.android.util.UserDefaults
-import net.pokeranalytics.android.ui.extensions.openContactMail
-import net.pokeranalytics.android.ui.extensions.openPlayStorePage
-import net.pokeranalytics.android.ui.extensions.openUrl
import java.util.*
@@ -98,11 +97,10 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
}
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
-
when (row) {
SettingRow.RATE_APP -> parentActivity.openPlayStorePage()
SettingRow.CONTACT_US -> parentActivity.openContactMail(R.string.contact)
- SettingRow.BUG_REPORT -> parentActivity.openContactMail(R.string.bug_report_subject)
+ SettingRow.BUG_REPORT -> parentActivity.openContactMail(R.string.bug_report_subject, Realm.getDefaultInstance().path)
SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, REQUEST_CODE_CURRENCY)
SettingRow.FOLLOW_US -> {
when (position) {
diff --git a/app/src/main/res/layout/fragment_loader.xml b/app/src/main/res/layout/fragment_loader.xml
index 0a2390f5..c2371f04 100644
--- a/app/src/main/res/layout/fragment_loader.xml
+++ b/app/src/main/res/layout/fragment_loader.xml
@@ -1,18 +1,11 @@
-
-
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="256dp"
+ android:layout_height="128dp"
+ android:layout_gravity="center"
+ android:background="@color/colorPrimary">
+
+
+ app:layout_constraintTop_toBottomOf="@+id/progressBar"
+ app:layout_constraintVertical_chainStyle="packed" />
\ No newline at end of file
diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml
new file mode 100644
index 00000000..45ed9d3f
--- /dev/null
+++ b/app/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file