ContentConsumptionTracker
Tracks valid main content consumption and publishes AdFrequencyEvent domain events.
Holds a WeakReference to Player to avoid retaining player or view hierarchies. Consumption is counted only during active content playback:
PlaybackState must be PlaybackState.STARTED.
Buffering must be BufferingState.INACTIVE.
Seeking must be SeekingState.INACTIVE.
AdComposedPlayer.playerContext must be PlayerContext.MAIN, which excludes both PlayerContext.AD and PlayerContext.PROMO time.
Position deltas from onProgressUpdate are validated against elapsed monotonic time using Player.playbackRateFactor, but the value applied is the elapsed monotonic time, so playback speed cannot accelerate or slow the required watched-content interval.
Stopping one playback and starting another preserves the global AFC counter: stop never resets consumption.