package Ġorg . inter view . jor ge . playback . server Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Ċ import Ġcom . google . android . ex op layer 2 . Player Ċ import Ġcom . google . android . ex op layer 2 . source . Shuffle Order Ċ import Ġcom . google . android . ex op layer 2 . ui . Player Notification Manager Ċ import Ġorg . inter view . jor ge . R Ċ import Ġorg . inter view . jor ge . playback . datasource . Test Track Ċ import Ġorg . inter view . jor ge . playback . datasource . Test Track Media Item Retriever Ċ import Ġjava . util . Collections Ċ Ċ internal Ġclass ĠPlay back Service Custom Action Receiver ( ĊĠ Ġprivate Ġval Ġhardcoded Test Track Media Item Retriever : ĠTest Track Media Item Retriever Ċ ) Ġ: ĠPlayer Notification Manager . Custom Action Receiver Ġ{ ĊĠ Ġprivate Ġvar Ġhas Requested Hard coded Media Items Ġ= Ġfalse ĊĊĠ Ġ@ Suppress Lint (" In lined Api ") Ġ// ĠFLAG _ IM MUT ABLE Ġis Ġa Ġconstant Ġin lined Ġat Ġcompile Ġtime ĊĠ Ġoverride Ġfun Ġcreate Custom Actions ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġinstance Id : ĠInt ĊĠ Ġ) Ġ= Ġmap Of ( ĊĠĠĠ ĠCUSTOM _ ACTION _ SH UFF LE Ġto ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠ ĠR . drawable . ic _ shuffle , ĊĠĠĠĠĠ Ġcontext . getString ( R . string . playback _ service _ custom _ command _ title _ shuffle ), ĊĠĠĠĠĠ ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ ĠIntent ( CUSTOM _ ACTION _ SH UFF LE ). set Package ( context . packageName ), ĊĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ CANCEL _ CURRENT Ġor ĠPending Intent . FLAG _ IM MUT ABLE ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). build (), ĊĠĠĠ ĠCUSTOM _ ACTION _ ADD _ HARD CODE D _ MEDIA _ ITEMS Ġto ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠ ĠR . drawable . ic _ save , ĊĠĠĠĠĠ Ġcontext . getString ( R . string . playback _ service _ custom _ command _ title _ add _ hard coded _ media _ items ), ĊĠĠĠĠĠ ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ ĠIntent ( CUSTOM _ ACTION _ ADD _ HARD CODE D _ MEDIA _ ITEMS ). set Package ( context . packageName ), ĊĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ CANCEL _ CURRENT Ġor ĠPending Intent . FLAG _ IM MUT ABLE ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). build () ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġget Custom Actions ( player : ĠPlayer ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġmutable List Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġif Ġ( player Ġis ĠEx o Player Ġ&& Ġplayer . media ItemCount Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġmutable List . add ( CUSTOM _ ACTION _ SH UFF LE ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! has Requested Hard coded Media Items Ġ&& Ġplayer . media ItemCount Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġmutable List . add ( CUSTOM _ ACTION _ ADD _ HARD CODE D _ MEDIA _ ITEMS ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠCollections . unmodifiable List ( mutable List ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Custom Action ( player : ĠPlayer , Ġaction : ĠString , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠ Ġ( player Ġas ? ĠEx o Player )?. apply Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCUSTOM _ ACTION _ SH UFF LE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! shuffle Mode Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle Mode Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġset Shuffle Order ( Shuffle Order . Default Shuffle Order ( media ItemCount )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠCUSTOM _ ACTION _ ADD _ HARD CODE D _ MEDIA _ ITEMS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġhas Requested Hard coded Media Items Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ ĠTest Track . values (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġfuture Ġis Ġignored , Ġbut Ġit Ġhas Ġno Ġside - effects , Ġit 's Ġtrivial Ġand Ġthe Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Ġcleared Ġby Ġthe Ġservice , Ġso Ġit Ġdoesn 't Ġreally Ġmatter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhardcoded Test Track Media Item Retriever . retrieve Media Item ( it ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unsupported Ġcustom Ġaction Ġ$ action ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġconst Ġval ĠCUSTOM _ ACTION _ SH UFF LE Ġ= Ġ" CUSTOM _ ACTION _ SH UFF LE " ĊĠĠĠ Ġprivate Ġconst Ġval ĠCUSTOM _ ACTION _ ADD _ HARD CODE D _ MEDIA _ ITEMS Ġ= ĊĠĠĠĠĠ Ġ" CUSTOM _ ACTION _ ADD _ HARD CODE D _ MEDIA _ ITEMS " ĊĠ Ġ} Ċ } Ċ