Radioplayer Developer Reference

Migration Guide — SDK Annotations 1.2.x → 2.0.0

Technical reference for Radioplayer partner integrations.

Version
Current
Document type
API / SDK reference
Audience
Radioplayer partner engineering teams

This document covers every breaking and non-breaking change to the annotation API between the 1.2.x series and 2.0.0. Changes are derived solely from the sdkAnnotation module's source history.


Table of Contents

  1. Quick Summary
  2. Removed Annotations
  3. Radio Annotations

  4. Podcast Annotations

  5. Action Annotations

  6. Enum Changes

  7. Unchanged Annotations
  8. Migration Checklist

1. Quick Summary

CategoryChange typeCount
Annotation removedBreaking1 (ActionRating)
Parameter renamedBreaking9
Parameter removedBreaking15+
Parameter added (mandatory)Breaking3
Parameter added (optional)Non-breaking3
Parameter promoted to mandatoryBreakingmany countryCode fields
Enum values replacedBreakingRadioMode.AM_FM
Enum values addedNon-breaking4 new RadioMode values

2. Removed Annotations

@ActionRatingREMOVED

The entire ActionRating annotation has been deleted. No replacement exists.

Action required: remove all usages of @ActionRating from your codebase.

// 1.2.x — DELETE this
@ActionRating(type = "...", uiSource = "...", mediaId = "...",
    mediaType = "...", bearer = "...", like = "...")
public void onRating() { ... }

3. Radio Annotations

@RadioStart

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdrpuidRenamed
bearerbearerUnchanged (mandatory)
countryCode _(optional, default_"UNSPECIFIED")countryCodePromoted to mandatory
radioModeradioModeUnchanged (mandatory)
volume _(mandatory)_volume _(optional, default_"UNSPECIFIED")Made optional
positionRemoved
outputRemoved
syncInfoRemoved
mediaSourceRemoved
// 1.2.x
@RadioStart(
    mediaId    = "{radioStations.get(i).getMediaId()}",
    bearer     = "{radioStations.get(i).getBearers().get(0).getId()}",
    position   = "0",
    output     = "speaker",
    syncInfo   = "",
    mediaSource = "{MediaSource.RADIO_ON_BOARD}",
    radioMode  = "{RadioMode.AM_FM}",
    volume     = "{volume}",
    countryCode = "276"
)

// 2.0.0
@RadioStart(
    rpuid       = "{radioStations.get(i).getMediaId()}",
    bearer      = "{radioStations.get(i).getBearers().get(0).getId()}",
    radioMode   = "{RadioMode.DAB}",
    volume      = "{volume}",
    countryCode = "276"
)

@RadioStop

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdrpuidRenamed
bearerbearerUnchanged (mandatory)
countryCode _(optional, default_"UNSPECIFIED")countryCodePromoted to mandatory
radioModeradioModeUnchanged (mandatory)
volume _(mandatory)_volume _(optional, default_"UNSPECIFIED")Made optional
positionRemoved
outputRemoved
syncInfoRemoved
mediaSourceRemoved
// 1.2.x
@RadioStop(
    mediaId     = "380101",
    bearer      = "dab:ce1.c185.c500.0",
    position    = "100",
    output      = "speaker",
    syncInfo    = "",
    mediaSource = "{MediaSource.RADIO_ON_BOARD}",
    radioMode   = "{RadioMode.DAB}",
    volume      = "{volume}",
    countryCode = "276"
)

// 2.0.0
@RadioStop(
    rpuid       = "380101",
    bearer      = "dab:ce1.c185.c500.0",
    radioMode   = "{RadioMode.DAB}",
    volume      = "{volume}",
    countryCode = "276"
)

@RadioPause

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdrpuidRenamed
bearerbearerUnchanged (mandatory)
countryCode _(optional, default_"UNSPECIFIED")countryCodePromoted to mandatory
positionRemoved
outputRemoved
syncInfoRemoved
// 1.2.x
@RadioPause(mediaId = "380101", bearer = "dab:ce1.c185.c500.0",
    position = "33", output = "speaker", syncInfo = "")

// 2.0.0
@RadioPause(rpuid = "380101", bearer = "dab:ce1.c185.c500.0", countryCode = "528")

@RadioSeek

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdrpuidRenamed
bearerbearerUnchanged (mandatory)
countryCode _(optional, default_"UNSPECIFIED")countryCodePromoted to mandatory
seekType _(optional, default_SeekStatus.FORWARD)seekTypeUnchanged
positionRemoved
outputRemoved
// 1.2.x
@RadioSeek(mediaId = "380101", bearer = "fm:87.5", position = "1000",
    output = "speaker", seekType = "{SeekStatus.FORWARD}")

// 2.0.0
@RadioSeek(rpuid = "380101", bearer = "fm:87.5", countryCode = "276",
    seekType = "{SeekStatus.FORWARD}")

@RadioSkip

This annotation has the most renamed fields in the radio group.

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdnewRpuidRenamed
bearernewBearerRenamed
countryCode _(optional, default_"UNSPECIFIED")countryCodePromoted to mandatory
skipType _(optional, default_SkipStatus.NEXT)skipTypeUnchanged
positionRemoved
outputRemoved
indexRemoved
// 1.2.x
@RadioSkip(mediaId = "380101", bearer = "dab:ce1.c185.c500.0",
    position = "1000", output = "speaker", index = "2",
    skipType = "{SkipStatus.NEXT}")

// 2.0.0
@RadioSkip(newRpuid = "380201", newBearer = "dab:ce1.c185.c501.0",
    countryCode = "276", skipType = "{SkipStatus.NEXT}")

@RadioError

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdrpuidRenamed
reasonreasonUnchanged (mandatory)
bearerbearer _(optional, default_"UNSPECIFIED")Added
positionRemoved
outputRemoved
// 1.2.x
@RadioError(mediaId = "380101", position = "1000",
    output = "speaker", reason = "Stream error")

// 2.0.0
@RadioError(rpuid = "380101", bearer = "dab:ce1.c185.c500.0",
    reason = "Stream error")

4. Podcast Annotations

All podcast annotations share a common pattern of changes:


@PodcastStart

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdcridRenamed
countryCode _(optional)_countryCodePromoted to mandatory
position _(mandatory)_position _(optional, default_"")Made optional
outputRemoved
syncInfoRemoved
// 1.2.x
@PodcastStart(mediaId = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "0", output = "speaker", syncInfo = "")

// 2.0.0
@PodcastStart(crid = "crid://bbc.co.uk/b006qykl", countryCode = "826")

@PodcastStop

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdcridRenamed
countryCode _(optional)_countryCodePromoted to mandatory
position _(mandatory)_position _(optional, default_"")Made optional
outputRemoved
syncInfoRemoved
// 1.2.x
@PodcastStop(mediaId = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "300", output = "speaker", syncInfo = "")

// 2.0.0
@PodcastStop(crid = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "300")

@PodcastPause

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdcridRenamed
countryCode _(optional)_countryCodePromoted to mandatory
position _(mandatory)_position _(optional, default_"")Made optional
outputRemoved
syncInfoRemoved
// 1.2.x
@PodcastPause(mediaId = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "120", output = "speaker", syncInfo = "")

// 2.0.0
@PodcastPause(crid = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "120")

@PodcastSeek

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdcridRenamed
countryCode _(optional)_countryCodePromoted to mandatory
position _(mandatory)_position _(optional, default_"")Made optional
seekType _(optional, default_SeekStatus.FORWARD)seekTypeUnchanged
outputRemoved
// 1.2.x
@PodcastSeek(mediaId = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "1000", output = "speaker",
    seekType = "{SeekStatus.BACKWARD}")

// 2.0.0
@PodcastSeek(crid = "crid://bbc.co.uk/b006qykl", countryCode = "826",
    position = "1000", seekType = "{SeekStatus.BACKWARD}")

@PodcastSkip

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdnewCridRenamed
countryCode _(optional)_countryCodePromoted to mandatory
position _(mandatory)_position _(optional, default_"")Made optional
skipType _(optional, default_SkipStatus.NEXT)skipTypeUnchanged
outputRemoved
indexRemoved
// 1.2.x
@PodcastSkip(mediaId = "crid://bbc.co.uk/b007jfnp", countryCode = "826",
    position = "0", output = "speaker", index = "3",
    skipType = "{SkipStatus.NEXT}")

// 2.0.0
@PodcastSkip(newCrid = "crid://bbc.co.uk/b007jfnp", countryCode = "826",
    skipType = "{SkipStatus.NEXT}")

@PodcastError

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdcridRenamed
reasonreasonUnchanged (mandatory)
position _(mandatory)_position _(optional, default_"")Made optional
outputRemoved
// 1.2.x
@PodcastError(mediaId = "crid://bbc.co.uk/b006qykl", position = "1000",
    output = "speaker", reason = "Buffer underrun")

// 2.0.0
@PodcastError(crid = "crid://bbc.co.uk/b006qykl", reason = "Buffer underrun")

5. Action Annotations

@ActionRecClicked

A new mandatory field clickedRecType has been added.

Parameter (1.2.x)Parameter (2.0.0)Change
typetypeUnchanged
uiSourceuiSourceUnchanged
clickedRecIdclickedRecIdUnchanged
clickedRecTypeAdded (mandatory)

clickedRecType accepts the string "STATION" or "EPISODE".

// 1.2.x
@ActionRecClicked(type = "RecClicked", uiSource = "Recommendation",
    clickedRecId = "1234")

// 2.0.0
@ActionRecClicked(type = "RecClicked", uiSource = "Recommendation",
    clickedRecId = "1234", clickedRecType = "STATION")

@MetadataUpdate

This annotation was significantly extended: two new mandatory fields added and parameter naming aligned to camelCase.

Parameter (1.2.x)Parameter (2.0.0)Change
mediaIdAdded (mandatory)
bearer _(optional, default_"UNSPECIFIED")Added (optional)
artistartistUnchanged
songsongUnchanged
albumalbumUnchanged
showshowUnchanged
schedule_startscheduleStartRenamed (camelCase)
schedule_stopscheduleStopRenamed (camelCase)
// 1.2.x
@MetadataUpdate(
    artist          = "{currentOnAirInfo.getSongArtist()}",
    song            = "{currentOnAirInfo.getSongName()}",
    album           = "{currentOnAirInfo.getAlbum()}",
    show            = "{currentOnAirInfo.getShowName()}",
    schedule_start  = "{currentOnAirInfo.getSongStart()}",
    schedule_stop   = "{currentOnAirInfo.getSongEnd()}"
)

// 2.0.0
@MetadataUpdate(
    mediaId        = "{this.getMediaId()}",
    bearer         = "{this.getBearer()}",
    artist         = "{currentOnAirInfo.getSongArtist()}",
    song           = "{currentOnAirInfo.getSongName()}",
    album          = "{currentOnAirInfo.getAlbum()}",
    show           = "{currentOnAirInfo.getShowName()}",
    scheduleStart  = "{currentOnAirInfo.getSongStart()}",
    scheduleStop   = "{currentOnAirInfo.getSongEnd()}"
)

6. Enum Changes

RadioMode

Value (1.2.x)Value (2.0.0)Change
AM_FMRemoved — split into AM and FM
DABDABUnchanged
IPIPUnchanged
AMAdded
FMAdded
HD_RADIOAdded ("HD radio")
DRMAdded ("DRM")
SIRIUS_XMAdded ("SiriusXM")
// 1.2.x
radioMode = "{RadioMode.AM_FM}"   // covers both AM and FM

// 2.0.0 — choose the specific band
radioMode = "{RadioMode.AM}"

// or
radioMode = "{RadioMode.FM}"

7. Unchanged Annotations

The following annotations received only Javadoc improvements and are fully backward-compatible :

AnnotationNotes
@ActionFavoriteNo parameter changes
@ActionMobileMirroringNo parameter changes
@ActionPlaybackNo parameter changes
@ActionRadioModeNo parameter changes
@ActionRadioPowerNo parameter changes
@ActionRecClickedSearchResultNo parameter changes
@ActionRecSearchNo parameter changes
@ActionScanNo parameter changes
@ActionSourceChangeNo parameter changes
@ActionStationChangeNo parameter changes
@ActionUiFocusNo parameter changes
@ErrorEventNo parameter changes
@SystemEventCallingNo parameter changes
@TrackableNo parameter changes
@SetValueNo parameter changes

8. Migration Checklist

Use this checklist to audit your codebase when upgrading.

Global renames (safe to do with find-and-replace)

Parameters to remove

Parameters to add or make mandatory

Enum audit