From 46f65f1bb3d24136a17d1b0ffce2ecfa693f7ced Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 24 May 2019 17:51:16 +0200 Subject: [PATCH] Added RequestCode and ResultCode to pass values from activities + import improvement --- .../android/PokerAnalyticsApplication.kt | 2 +- .../android/model/realm/TimeFrame.kt | 4 +-- .../android/ui/activity/HomeActivity.kt | 16 ++++++++++-- .../android/ui/activity/ImportActivity.kt | 9 ++++--- .../ui/activity/ProgressReportActivity.kt | 3 ++- .../ui/activity/ReportCreationActivity.kt | 5 +--- .../android/ui/activity/components/Codes.kt | 11 ++++++++ .../ui/activity/components/ReportActivity.kt | 4 +-- .../android/ui/extensions/UIExtensions.kt | 11 +++++--- .../android/ui/fragment/FeedFragment.kt | 2 +- .../android/ui/fragment/FiltersFragment.kt | 2 +- .../android/ui/fragment/ImportFragment.kt | 26 +++++++++++++++---- .../android/ui/fragment/ReportsFragment.kt | 6 ++--- .../report/ComposableTableReportFragment.kt | 2 +- .../android/util/csv/CSVImporter.kt | 10 ++++--- 15 files changed, 80 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 300616c1..0c9573ab 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -65,7 +65,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") - this.createFakeSessions() +// this.createFakeSessions() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt index f6970a25..f9fe2236 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt @@ -174,7 +174,7 @@ // } // // fun createSessionSet(owner: Session) { -// val set: SessionSet = SessionSet.newInstance(this.realm) +// val set: SessionSet = SessionSet.newInstanceForResult(this.realm) // set.timeFrame?.let { // it.startDate = this.startDate // it.endDate = this.endDate @@ -269,7 +269,7 @@ // sessionSets.deleteAllFromRealm() // // // Create a new sets -// val set: SessionSet = SessionSet.newInstance(this.realm) +// val set: SessionSet = SessionSet.newInstanceForResult(this.realm) // set.timeFrame?.let { // it.setDate(startDate, endDate) // } ?: run { 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 d58ad551..777d4a5f 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 @@ -13,6 +13,8 @@ import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.activity.components.RequestCode +import net.pokeranalytics.android.ui.activity.components.ResultCode import net.pokeranalytics.android.ui.adapter.HomePagerAdapter import net.pokeranalytics.android.ui.extensions.showAlertDialog import net.pokeranalytics.android.util.billing.AppGuard @@ -96,10 +98,20 @@ class HomeActivity : PokerAnalyticsActivity() { Timber.d("Intent ${intent.action} unmanaged") } } - } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + RequestCode.IMPORT.value -> { + if (resultCode == ResultCode.IMPORT_UNRECOGNIZED_FORMAT.value) { + showAlertDialog(this, message = R.string.unknown_import_format_popup_message) + } + } + } } private fun observeRealmObjects() { @@ -157,7 +169,7 @@ class HomeActivity : PokerAnalyticsActivity() { fun requestImportConfirmation(uri: Uri) { showAlertDialog(this, R.string.import_confirmation, showCancelButton = true, positiveAction = { - ImportActivity.newInstance(this, uri) + ImportActivity.newInstanceForResult(this, uri) }) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt index 55b8f7f9..fd9fef8c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt @@ -4,9 +4,11 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle +import androidx.fragment.app.FragmentActivity import io.realm.Realm import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.activity.components.RequestCode import net.pokeranalytics.android.ui.fragment.ImportFragment import timber.log.Timber @@ -23,11 +25,11 @@ class ImportActivity : PokerAnalyticsActivity() { /** * Create a new instance for result */ - fun newInstance(context: Context, uri: Uri) { - context.startActivity(getIntent(context, uri)) + fun newInstanceForResult(context: FragmentActivity, uri: Uri) { + context.startActivityForResult(getIntent(context, uri), RequestCode.IMPORT.value) } - private fun getIntent(context: Context, uri: Uri) : Intent { + private fun getIntent(context: Context, uri: Uri): Intent { val intent = Intent(context, ImportActivity::class.java) intent.putExtra(ImportActivity.IntentKey.URI.keyName, uri) return intent @@ -41,6 +43,7 @@ class ImportActivity : PokerAnalyticsActivity() { setContentView(R.layout.activity_import) initUI() + } override fun onStop() { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt index d11984a4..c6ce7ee1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt @@ -9,6 +9,7 @@ import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.ui.activity.components.ReportActivity import net.pokeranalytics.android.ui.activity.components.ReportParameters +import net.pokeranalytics.android.ui.activity.components.RequestCode import net.pokeranalytics.android.ui.fragment.report.ProgressReportFragment class ProgressReportActivity : ReportActivity() { @@ -29,7 +30,7 @@ class ProgressReportActivity : ReportActivity() { fun newInstanceForResult(fragment: Fragment, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) { parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices) val intent = Intent(fragment.context, ProgressReportActivity::class.java) - fragment.startActivityForResult(intent, DEFAULT_REQUEST_CODE) + fragment.startActivityForResult(intent, RequestCode.DEFAULT.value) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt index 359b2a28..3dce1fd9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt @@ -7,13 +7,10 @@ import androidx.fragment.app.Fragment import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.activity.components.RequestCode class ReportCreationActivity : PokerAnalyticsActivity() { - enum class RequestCode { - NEW_REPORT - } - companion object { var options: Calculator.Options? = null diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt new file mode 100644 index 00000000..9d46a61c --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt @@ -0,0 +1,11 @@ +package net.pokeranalytics.android.ui.activity.components + +enum class RequestCode(var value: Int) { + DEFAULT(1), + NEW_REPORT(800), + IMPORT(900) +} + +enum class ResultCode(var value: Int) { + IMPORT_UNRECOGNIZED_FORMAT(901) +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt index 6d2ea1be..e3c8e51c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt @@ -12,8 +12,6 @@ abstract class ReportActivity : PokerAnalyticsActivity() { companion object { - const val DEFAULT_REQUEST_CODE = 999 - // Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects var parameters: ReportParameters? = null @@ -31,7 +29,7 @@ abstract class ReportActivity : PokerAnalyticsActivity() { val options = report.options this.parameters = ReportParameters(report, reportTitle, stat) val intent = Intent(fragment.requireContext(), options.display.activityClass) - fragment.startActivityForResult(intent, DEFAULT_REQUEST_CODE) + fragment.startActivityForResult(intent, RequestCode.DEFAULT.value) } } 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 6d58bb5c..525741b6 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 @@ -16,10 +16,10 @@ import androidx.core.content.FileProvider import androidx.core.view.isVisible import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R -import net.pokeranalytics.android.util.TextFormat 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.TextFormat import net.pokeranalytics.android.util.URL import net.pokeranalytics.android.util.billing.AppGuard import java.io.File @@ -114,7 +114,7 @@ fun PokerAnalyticsFragment.showAlertDialog(title: Int? = null, message: Int? = n * Create and show an alert dialog */ fun showAlertDialog( - context: Context, title: Int? = null, message: Int? = null, showCancelButton: Boolean = false, + context: Context, title: Int? = null, message: Int? = null, cancelButtonTitle: Int? = null, showCancelButton: Boolean = false, positiveAction: (() -> Unit)? = null, negativeAction: (() -> Unit)? = null ) { val builder = AlertDialog.Builder(context) @@ -127,7 +127,12 @@ fun showAlertDialog( builder.setPositiveButton(net.pokeranalytics.android.R.string.ok) { _, _ -> positiveAction?.invoke() } - if (showCancelButton) { + + if (cancelButtonTitle != null) { + builder.setNegativeButton(cancelButtonTitle) { _, _ -> + negativeAction?.invoke() + } + } else if (showCancelButton) { builder.setNegativeButton(R.string.cancel) { _, _ -> negativeAction?.invoke() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index ce23386b..530da067 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -235,7 +235,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { // val sessionCount = this.feedSessionAdapter.realmResults.size // if (!AppGuard.isProUser && sessionCount >= AppGuard.MAX_SESSIONS_BEFORE_REQUESTING_SUBSCRIPTION) { // && !BuildConfig.DEBUG // Toast.makeText(context, "Please subscribe!", Toast.LENGTH_LONG).show() -// BillingActivity.newInstance(requireContext()) +// BillingActivity.newInstanceForResult(requireContext()) // return // } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt index 3fbbb256..58b16f2d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt @@ -176,7 +176,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, isUpdating = true } ?: run { realm.beginTransaction() - currentFilter = Filter.newInstance(realm, this.filterableType.ordinal) //realm.copyFromRealm(Filter.newInstance(realm, this.filterableType.ordinal)) + currentFilter = Filter.newInstance(realm, this.filterableType.ordinal) //realm.copyFromRealm(Filter.newInstanceForResult(realm, this.filterableType.ordinal)) realm.commitTransaction() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt index 177cd9e9..0727dd0d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt @@ -9,8 +9,10 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async import kotlinx.coroutines.launch import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.components.ResultCode import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.util.csv.CSVImporter +import net.pokeranalytics.android.util.csv.ImportException import timber.log.Timber import java.io.InputStream import java.util.* @@ -29,7 +31,6 @@ class ImportFragment : RealmFragment() { } fun setData(inputStream: InputStream) { - Timber.d("> setData with IS...") this.inputStream = inputStream } @@ -41,28 +42,43 @@ class ImportFragment : RealmFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - Timber.d("> onViewCreated...") this.startImport() } fun startImport() { + var shouldDismissActivity = false + GlobalScope.launch(coroutineContext) { val test = GlobalScope.async { val s = Date() Timber.d(">>> Start Import...") - val csv = CSVImporter(inputStream) - csv.start() - + try { + val csv = CSVImporter(inputStream) + csv.start() + } catch (e: ImportException) { + shouldDismissActivity = true + } val e = Date() val duration = (e.time - s.time) / 1000.0 Timber.d(">>> Import ended in $duration seconds") } test.await() + + if (shouldDismissActivity) { + + activity?.let { + it.setResult(ResultCode.IMPORT_UNRECOGNIZED_FORMAT.value) + it.finish() + } + + } + } + } } \ No newline at end of file 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 9759ec4e..263a1dee 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 @@ -25,6 +25,7 @@ import net.pokeranalytics.android.model.realm.ReportSetup import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.ReportCreationActivity import net.pokeranalytics.android.ui.activity.components.ReportActivity +import net.pokeranalytics.android.ui.activity.components.RequestCode import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource @@ -38,7 +39,6 @@ import java.util.* class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { - // private lateinit var dataListAdapter: RowRepresentableAdapter private lateinit var reportSetups: RealmResults private var adapterRows = mutableListOf() @@ -77,12 +77,12 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if (requestCode == ReportCreationActivity.RequestCode.NEW_REPORT.ordinal && resultCode == Activity.RESULT_OK) { + if (requestCode == RequestCode.NEW_REPORT.ordinal && resultCode == Activity.RESULT_OK) { ReportCreationActivity.options?.let { options -> this.launchReportWithOptions(options, options.getName(requireContext())) } ReportCreationActivity.options = null - } else if (requestCode == ReportActivity.DEFAULT_REQUEST_CODE && resultCode == Activity.RESULT_OK) { + } else if (requestCode == RequestCode.DEFAULT.value && resultCode == Activity.RESULT_OK) { val itemToDeleteId = data?.getStringExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName) itemToDeleteId?.let { id -> GlobalScope.launch(Dispatchers.Main) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt index 7bcfa1c3..04036972 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt @@ -217,7 +217,7 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab ReportActivity.newInstance(requireContext(), it, title, stat) -// ProgressReportActivity.newInstance(requireContext(), stat, it, title = title) +// ProgressReportActivity.newInstanceForResult(requireContext(), stat, it, title = title) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt index 1ac91e55..7a1bfb90 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt @@ -31,7 +31,7 @@ open class CSVImporter(istream: InputStream) { /** * The number of valid record to test for descriptor before throwing a File Format Exception */ - private val VALID_RECORD_ATTEMPTS_BEFORE_THROWING_EXCEPTION = 5 + private val VALID_RECORD_ATTEMPTS_BEFORE_THROWING_EXCEPTION = 4 /** * The path of the CSV file @@ -85,9 +85,12 @@ open class CSVImporter(istream: InputStream) { this.currentDescriptor = this.findDescriptor(record) if (this.currentDescriptor == null) { - this.descriptorFindingAttempts++ - if (record.size() > VALID_RECORD_COLUMNS && this.descriptorFindingAttempts > VALID_RECORD_ATTEMPTS_BEFORE_THROWING_EXCEPTION) { + if (record.size() >= VALID_RECORD_COLUMNS) { + this.descriptorFindingAttempts++ + } + if (this.descriptorFindingAttempts >= VALID_RECORD_ATTEMPTS_BEFORE_THROWING_EXCEPTION) { + realm.cancelTransaction() throw ImportException("This type of file is not supported") } } @@ -110,6 +113,7 @@ open class CSVImporter(istream: InputStream) { it.parse(realm, record) } } ?: run { + realm.cancelTransaction() throw IllegalStateException("CSVDescriptor should never be null here") }