Add live per-step form feedback based on joint angles

Extends pose angle tracking with knee bend (hip-knee-ankle), then uses
it alongside the existing elbow/shoulder angles in a new
PoseStageAdvisor to give a short live cue for whichever step of the
approach is in progress: push-away on step 2, downswing on step 3,
backswing on step 4, and knee-bend/arm-extension on the final step.
Thresholds are starting defaults, not measured coaching data, and are
expected to be retuned against real approach footage.

Also fixes a layout bug found while testing this live: the new
feedback text was chained via ConstraintLayout's toBottomOf to the
step banner above it, so whenever that banner was hidden (GONE) the
feedback text rendered at its collapsed zero-height position instead
of staying put, landing on top of the recording indicator. Both now
sit in a plain vertical LinearLayout, which collapses GONE children
correctly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
midnight-masala
2026-09-07 21:22:11 +08:00
co-authored by Claude Sonnet 5
parent 2bb7c6ca7b
commit e7a9c2b140
7 changed files with 230 additions and 38 deletions
@@ -221,6 +221,12 @@ class BowlingCameraActivity : AppCompatActivity(), CameraXController.Callback {
}
}
}
launch {
viewModel.poseStageFeedback.collect { feedback ->
binding.textPoseFeedback.text = feedback
binding.textPoseFeedback.visibility = if (feedback != null) View.VISIBLE else View.GONE
}
}
}
}
}