updated live feedback
correct the user live - Starting position - Finishing position - Second step
This commit is contained in:
@@ -307,10 +307,17 @@ class BowlingCameraActivity : AppCompatActivity(), CameraXController.Callback {
|
||||
// Combined with poseEnabled (rather than posePhase alone) so
|
||||
// the label can tell "pose off" (hidden) apart from "pose on
|
||||
// but not yet in the target posture" (amber prompt) -- both
|
||||
// cases otherwise report a null phase.
|
||||
// cases otherwise report a null phase. poseCorrection rides
|
||||
// along the same collector (rather than its own, like
|
||||
// poseMetrics below) since it directly changes what
|
||||
// renderPosePhase puts in the label -- see that function.
|
||||
launch {
|
||||
combine(viewModel.poseEnabled, viewModel.posePhase) { enabled, phase -> enabled to phase }
|
||||
.collect { (enabled, phase) -> renderPosePhase(enabled, phase) }
|
||||
combine(
|
||||
viewModel.poseEnabled,
|
||||
viewModel.posePhase,
|
||||
viewModel.poseCorrection,
|
||||
) { enabled, phase, correction -> Triple(enabled, phase, correction) }
|
||||
.collect { (enabled, phase, correction) -> renderPosePhase(enabled, phase, correction) }
|
||||
}
|
||||
// Raw angle readout backing the label above -- its own
|
||||
// collector since it's driven by a separate StateFlow
|
||||
@@ -395,15 +402,24 @@ class BowlingCameraActivity : AppCompatActivity(), CameraXController.Callback {
|
||||
*
|
||||
* @param poseEnabled Whether pose detection is currently on at all.
|
||||
* @param phase The bowler's current delivery phase, or null if none currently validates.
|
||||
* @param correction A specific "here's what to fix" instruction from
|
||||
* [PosePhaseDetector] when [phase] is null and the bowler is
|
||||
* being measured against one of the stationary phases (starting
|
||||
* stance, pushaway, slide & release) -- shown in place of the
|
||||
* generic "waiting" message when present, so the bowler knows
|
||||
* exactly what to adjust instead of just that they're not there yet.
|
||||
*/
|
||||
private fun renderPosePhase(poseEnabled: Boolean, phase: BowlingPhase?) {
|
||||
private fun renderPosePhase(poseEnabled: Boolean, phase: BowlingPhase?, correction: String?) {
|
||||
if (!poseEnabled) {
|
||||
binding.textPoseFeedback.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
binding.textPoseFeedback.visibility = View.VISIBLE
|
||||
// Every other BowlingPhase falls back to the "waiting" message too --
|
||||
// see PosePhaseDetector's class doc, only STARTING_STANCE is detected today.
|
||||
// Every confirmed phase gets its own label/color below; an
|
||||
// unconfirmed one falls back to a specific correction when
|
||||
// PosePhaseDetector has one (see its class doc), otherwise the
|
||||
// generic "waiting" message -- e.g. mid-approach, where per-frame
|
||||
// correction isn't meaningful.
|
||||
when (phase) {
|
||||
BowlingPhase.STARTING_STANCE -> {
|
||||
binding.textPoseFeedback.text = getString(R.string.pose_phase_starting_stance)
|
||||
@@ -430,7 +446,7 @@ class BowlingCameraActivity : AppCompatActivity(), CameraXController.Callback {
|
||||
binding.textPoseFeedback.setBackgroundColor(ContextCompat.getColor(this, R.color.Slide_and_release_ready))
|
||||
}
|
||||
else -> {
|
||||
binding.textPoseFeedback.text = getString(R.string.pose_phase_waiting)
|
||||
binding.textPoseFeedback.text = correction ?: getString(R.string.pose_phase_waiting)
|
||||
binding.textPoseFeedback.setBackgroundColor(ContextCompat.getColor(this, R.color.Starting_stance_waiting))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user