From 444772d97d540f83fea2bfd43e8972207ac4729a Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 09:04:39 +0200 Subject: [PATCH 1/8] Clean import --- .../net/pokeranalytics/android/ui/fragment/ReportsFragment.kt | 1 - 1 file changed, 1 deletion(-) 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 From c1acee8fc90b6707ca430718c3705ade92633265 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 09:39:56 +0200 Subject: [PATCH 2/8] Fix refresh timer --- .../net/pokeranalytics/android/ui/fragment/SessionFragment.kt | 1 + 1 file changed, 1 insertion(+) 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..d9a44d8a 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,6 +43,7 @@ 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) } From 1c6091e007ea436d998ef866b266949f14a0af73 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 09:40:38 +0200 Subject: [PATCH 3/8] Decrease refresh time (60 seconds) --- .../net/pokeranalytics/android/ui/fragment/SessionFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d9a44d8a..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 @@ -45,7 +45,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { // Refresh header each 30 seconds currentSession.updateRowRepresentation() sessionAdapter.notifyItemChanged(0) - handler.postDelayed(this, 30000) + handler.postDelayed(this, 60000) } } @@ -182,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 From cd00e9b45a516403153f77e4a8a2244f60fad419 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 11:32:13 +0200 Subject: [PATCH 4/8] fix issue with filter selection --- .../pokeranalytics/android/model/realm/Filter.kt | 6 ++++++ .../android/ui/fragment/FilterDetailsFragment.kt | 15 ++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) 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/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() From 07acd7a980e5fdc94decd90cbadb666ec18995bf Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 11:57:41 +0200 Subject: [PATCH 5/8] fix issue with calendar display add a new name interface for query condition --- .../android/PokerAnalyticsApplication.kt | 2 +- .../android/model/filter/QueryCondition.kt | 17 +++++++++++++++-- .../android/ui/fragment/CalendarFragment.kt | 4 +++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 1c9b7d94..75c03014 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -52,7 +52,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") - //this.createFakeSessions() + this.createFakeSessions() } Patcher.patchBreaks() 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/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) } } From c708cab4fc24b15bb402a53487395dabf05adb6c Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 12:25:43 +0200 Subject: [PATCH 6/8] Improve loader UI --- app/src/main/res/layout/fragment_loader.xml | 39 +++++++++++++-------- 1 file changed, 25 insertions(+), 14 deletions(-) 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 From 20bf77120fa814eed0c1e7e61241460d63253655 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 12:26:11 +0200 Subject: [PATCH 7/8] Add database for bug report --- app/src/main/AndroidManifest.xml | 10 +++++ .../android/ui/extensions/UIExtensions.kt | 37 ++++++++++++++----- .../android/ui/fragment/SettingsFragment.kt | 10 ++--- app/src/main/res/xml/provider_paths.xml | 6 +++ 4 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/xml/provider_paths.xml 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/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/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/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 From c0159c51557601fcb9c64f3a09cd7cc92df0b642 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 19 Apr 2019 12:32:30 +0200 Subject: [PATCH 8/8] Remove fake sessions creation --- .../net/pokeranalytics/android/PokerAnalyticsApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 75c03014..1c9b7d94 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -52,7 +52,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") - this.createFakeSessions() + //this.createFakeSessions() } Patcher.patchBreaks()