Fixes a crash when creating a custom progress reprot

od
Laurent 6 years ago
parent 909c9d8b50
commit daf567e716
  1. 30
      app/src/main/java/net/pokeranalytics/android/ui/activity/ProgressReportActivity.kt
  2. 18
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/ReportActivity.kt
  3. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt
  4. 17
      app/src/main/java/net/pokeranalytics/android/ui/viewmodel/ReportViewModel.kt

@ -21,13 +21,16 @@ class ProgressReportActivity : ReportActivity() {
* Default constructor * Default constructor
*/ */
fun newInstance(context: Context, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) { fun newInstance(context: Context, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) {
ReportViewModel.parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices)
val parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices)
ReportViewModel.defineParameters(parameters)
val intent = Intent(context, ProgressReportActivity::class.java) val intent = Intent(context, ProgressReportActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
} }
fun newInstanceForResult(fragment: Fragment, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) { fun newInstanceForResult(fragment: Fragment, report: Report, title: String, stat: Stat? = null, displayAggregationChoices: Boolean = true) {
ReportViewModel.parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices) val parameters = ReportParameters(report, title, stat, showAggregationChoices = displayAggregationChoices)
ReportViewModel.defineParameters(parameters)
val intent = Intent(fragment.context, ProgressReportActivity::class.java) val intent = Intent(fragment.context, ProgressReportActivity::class.java)
fragment.startActivityForResult(intent, RequestCode.DEFAULT.value) fragment.startActivityForResult(intent, RequestCode.DEFAULT.value)
} }
@ -45,28 +48,9 @@ class ProgressReportActivity : ReportActivity() {
*/ */
private fun initUI() { private fun initUI() {
ReportViewModel.parameters?.let { val progressFragment = ProgressReportFragment()
this.viewModel.report = it.report
this.viewModel.title = it.title
this.viewModel.stat = it.stat ?: it.report.options.stats.first()
this.viewModel.showAggregationChoices = it.showAggregationChoices
}
ReportViewModel.parameters = null
//
// parameters?.let {
// val report = it.report
// val stat = it.stat ?: report.options.stats.first()
// statisticDetailsFragment.setData(report, stat, it.showAggregationChoices, it.title)
// parameters = null
// } ?: run {
// throw PAIllegalStateException("Request to show Progress Activity with null ReportParameters")
// }
val statisticDetailsFragment = ProgressReportFragment()
val fragmentTransaction = supportFragmentManager.beginTransaction() val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.add(R.id.statisticDetailsContainer, statisticDetailsFragment) fragmentTransaction.add(R.id.statisticDetailsContainer, progressFragment)
fragmentTransaction.commit() fragmentTransaction.commit()
} }

@ -24,14 +24,16 @@ abstract class ReportActivity : PokerAnalyticsActivity() {
*/ */
fun newInstance(context: Context, report: Report, reportTitle: String, stat: Stat? = null) { fun newInstance(context: Context, report: Report, reportTitle: String, stat: Stat? = null) {
val options = report.options val options = report.options
ReportViewModel.parameters = ReportParameters(report, reportTitle, stat) val parameters = ReportParameters(report, reportTitle, stat)
ReportViewModel.defineParameters(parameters)
val intent = Intent(context, options.display.activityClass) val intent = Intent(context, options.display.activityClass)
context.startActivity(intent) context.startActivity(intent)
} }
fun newInstanceForResult(fragment: Fragment, report: Report, reportTitle: String, stat: Stat? = null) { fun newInstanceForResult(fragment: Fragment, report: Report, reportTitle: String, stat: Stat? = null) {
val options = report.options val options = report.options
ReportViewModel.parameters = ReportParameters(report, reportTitle, stat) val parameters = ReportParameters(report, reportTitle, stat)
ReportViewModel.defineParameters(parameters)
val intent = Intent(fragment.requireContext(), options.display.activityClass) val intent = Intent(fragment.requireContext(), options.display.activityClass)
fragment.startActivityForResult(intent, RequestCode.DEFAULT.value) fragment.startActivityForResult(intent, RequestCode.DEFAULT.value)
} }
@ -40,17 +42,19 @@ abstract class ReportActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
this.initViewModelWithParameters()
}
fun initViewModelWithParameters() {
ReportViewModel.parameters?.let { ReportViewModel.parameters?.let {
this.viewModel.report = it.report this.viewModel.report = it.report
this.viewModel.title = it.title this.viewModel.title = it.title
this.viewModel.stat = it.stat this.viewModel.stat = it.stat ?: it.report.options.stats.first()
this.viewModel.showAggregationChoices = it.showAggregationChoices this.viewModel.showAggregationChoices = it.showAggregationChoices
}
ReportViewModel.parameters = null
ReportViewModel.resetParameters()
}
} }
} }

@ -31,9 +31,9 @@ abstract class AbstractReportFragment : DataManagerFragment() {
} }
val stat: Stat val stat: Stat
get() { get() {
return this.viewModel.stat!! return this.viewModel.stat!!
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -62,7 +62,8 @@ abstract class AbstractReportFragment : DataManagerFragment() {
// Inflate and set the layout for the dialog // Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout // Pass null as the parent view because its going in the dialog layout
val view = inflater.inflate(net.pokeranalytics.android.R.layout.dialog_edit_text, null) val view = inflater.inflate(net.pokeranalytics.android.R.layout.dialog_edit_text, null)
val nameEditText = view.findViewById<EditText>(net.pokeranalytics.android.R.id.reportName) val nameEditText =
view.findViewById<EditText>(net.pokeranalytics.android.R.id.reportName)
nameEditText.inputType = InputType.TYPE_TEXT_FLAG_CAP_SENTENCES nameEditText.inputType = InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
this.primaryKey?.let { id -> this.primaryKey?.let { id ->
@ -84,12 +85,14 @@ abstract class AbstractReportFragment : DataManagerFragment() {
val dialog = builder.create() val dialog = builder.create()
dialog.setOnShowListener { dialog.setOnShowListener {
nameEditText.requestFocus() nameEditText.requestFocus()
val s = ContextCompat.getSystemService(requireContext(), InputMethodManager::class.java) val s =
ContextCompat.getSystemService(requireContext(), InputMethodManager::class.java)
s?.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0) s?.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
} }
dialog.setOnDismissListener { dialog.setOnDismissListener {
val s = ContextCompat.getSystemService(requireContext(), InputMethodManager::class.java) val s =
ContextCompat.getSystemService(requireContext(), InputMethodManager::class.java)
s?.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0) s?.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
} }

@ -8,8 +8,23 @@ import net.pokeranalytics.android.ui.activity.components.ReportParameters
class ReportViewModel : ViewModel() { class ReportViewModel : ViewModel() {
companion object { companion object {
// Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects // Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects
var parameters: ReportParameters? = null private var _parameters: ReportParameters? = null
val parameters: ReportParameters?
get() {
return this._parameters
}
fun defineParameters(parameters: ReportParameters) {
this._parameters = parameters
}
fun resetParameters() {
this._parameters = null
}
} }
var report: Report? = null var report: Report? = null

Loading…
Cancel
Save