Added RequestCode and ResultCode to pass values from activities + import improvement

dev
Laurent 7 years ago
parent ebe660de49
commit 46f65f1bb3
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt
  3. 16
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  4. 9
      app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
  5. 3
      app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt
  6. 5
      app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
  7. 11
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt
  8. 4
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt
  9. 11
      app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
  10. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  11. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  12. 26
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt
  13. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  14. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt
  15. 10
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt

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

@ -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 {

@ -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)
})
}

@ -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() {

@ -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)
}
}

@ -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

@ -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)
}

@ -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)
}
}

@ -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()
}

@ -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
// }

@ -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()
}

@ -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()
}
}
}
}
}

@ -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<ReportSetup>
private var adapterRows = mutableListOf<RowRepresentable>()
@ -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) {

@ -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)
}
}
}

@ -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")
}

Loading…
Cancel
Save