// /* Ċ // Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠN aman ĠD w ived i . Ċ // Ġ* Ċ // Ġ* ĠLicensed Ġunder Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġv 3 Ċ // Ġ* Ċ // Ġ* ĠThis Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ġit Ċ // Ġ* Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ // Ġ* Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ // Ġ* Ċ // Ġ* ĠThis Ġsoftware Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ċ // Ġ* Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ċ // Ġ* ĠSee Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ // Ġ* Ċ // Ġ*/ Ċ // package Ġcom . kafka . player . tim ber . repository Ċ // Ċ // import Ġandroid . content . Content Provider Operation Ċ // import Ġandroid . content . Content Resolver Ċ // import Ġandroid . content . Content Values Ċ // import Ġandroid . content . Operation ApplicationException Ċ // import Ġandroid . database . Cursor Ċ // import Ġandroid . os . Remote Exception Ċ // import Ġandroid . provider . Base Columns Ċ // import Ġandroid . provider . Media Store Ċ // import Ġandroid . provider . Media Store . Audio . Play lists ._ ID Ċ // import Ġcom . kafka . data . entities . Song Ċ // import Ġcom . kafka . player . tim ber . Utils . M US IC _ ONLY _ SELECTION Ċ // import Ġcom . kafka . player . tim ber . extensions . map List Ċ // import Ġcom . kafka . player . tim ber . extensions . value Ċ // import Ġjavax . inject . Inject Ċ // import Ġjavax . inject . Singleton Ċ // import Ġandroid . provider . Media Store . Audio . Play lists . EXTERNAL _ CONTENT _ URI Ġas ĠP LAY LIST S _ URI Ċ // import Ġandroid . provider . Media Store . Audio . Play lists . Members . AUDIO _ ID Ġas ĠP LAY LIST _ AUDIO _ ID Ċ // import Ġandroid . provider . Media Store . Audio . Play lists . Members . PLAY _ ORDER Ġas ĠP LAY LIST _ PLAY _ ORDER Ċ // import Ġandroid . provider . Media Store . Audio . Play lists Columns . NAME Ġas ĠP LAY LIST _ COLUMN _ NAME Ċ // Ċ // private Ġconst Ġval ĠY I ELD _ FREQ UENCY Ġ= Ġ 1 0 0 Ċ // Ċ // interface ĠPlaylist Repository Ġ{ Ċ // Ċ // ĠĠĠ Ġfun Ġcreate Playlist ( name : ĠString ?): ĠLong Ċ // Ċ // ĠĠĠ Ġfun Ġget Play lists ( caller : ĠString ?): ĠList < Playlist > Ċ // Ċ // ĠĠĠ Ġfun ĠaddTo Playlist ( playlist Id : ĠLong , Ġids : ĠLong Array ): ĠInt Ċ // Ċ // ĠĠĠ Ġfun ĠgetS ongs In Playlist ( playlist Id : ĠLong , Ġcaller : ĠString ?): ĠList < Song > Ċ // Ċ // ĠĠĠ Ġfun Ġremove From Playlist ( playlist Id : ĠLong , Ġid : ĠLong ) Ċ // Ċ // ĠĠĠ Ġfun Ġdelete Playlist ( playlist Id : ĠLong ): ĠInt Ċ //} Ċ // Ċ //@ Singleton Ċ // class ĠReal Playlist Repository Ġ@ Inject Ġconstructor ( Ċ // ĠĠĠ Ġprivate Ġval Ġcontent Resolver : ĠContent Resolver Ċ // ) Ġ: ĠPlaylist Repository Ġ{ Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġcreate Playlist ( name : ĠString ?): ĠLong Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( name . isNull OrEmpty ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( PLAY LIST _ COLUMN _ NAME ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġ"$ PLAY LIST _ COLUMN _ NAME Ġ= Ġ? " Ċ // ĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( name ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LAY LIST S _ URI , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ċ // ĠĠĠĠĠĠĠ Ġ) ?. use Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( it . count Ġ<= Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values ( 1 ). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( PLAY LIST _ COLUMN _ NAME , Ġname ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . insert ( PLAY LIST S _ URI , Ġvalues )?. last Path Segment ?. to Long () Ġ?: Ġ- 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Unable Ġto Ġquery Ġ$ PLAY LIST S _ URI , Ġsystem Ġreturned Ġnull .") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġget Play lists ( caller : ĠString ?): ĠList < Playlist > Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠMedia ID . current Caller Ġ= Ġcaller Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġmake Playlist Cursor (). map List ( true ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠLong Ġ= Ġvalue (_ ID ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsong Count Ġ= Ġget Song Count For Playlist ( id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist . from Cursor ( this , Ġsong Count ) Ċ // ĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġit . name . isNotEmpty () Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠaddTo Playlist ( playlist Id : ĠLong , Ġids : ĠLong Array ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf (" max ($ PLAY LIST _ PLAY _ ORDER )") Ċ // ĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠMedia Store . Audio . Play lists . Members . getContent Uri (" external ", Ġplaylist Id ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġbase : ĠInt Ġ= Ġcontent Resolver . query ( uri , Ġprojection , Ġnull , Ġnull , Ġnull )?. use Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . moveTo First ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getInt ( 0 ) Ġ+ Ġ 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Unable Ġto Ġquery Ġ$ uri , Ġsystem Ġreturned Ġnull .") Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvar Ġnum Inserted Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġwhile Ġ( offset Ġ< Ġids . size ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbulk Values Ġ= Ġmake Insert Items ( ids , Ġoffset , Ġ 1 0 0 0 , Ġbase ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnum Inserted Ġ+= Ġcontent Resolver . bulk Insert ( uri , Ġbulk Values ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġ 1 0 0 0 Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnum Inserted Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠgetS ongs In Playlist ( playlist Id : ĠLong , Ġcaller : ĠString ?): ĠList < Song > Ġ= ĠlistOf () Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġremove From Playlist ( playlist Id : ĠLong , Ġid : ĠLong ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠMedia Store . Audio . Play lists . Members . getContent Uri (" external ", Ġplaylist Id ) Ċ // ĠĠĠĠĠĠĠ Ġcontent Resolver . delete ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ PLAY LIST _ AUDIO _ ID Ġ= Ġ?", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( id . toString ()) Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġdelete Playlist ( playlist Id : ĠLong ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġlocal Uri Ġ= ĠMedia Store . Audio . Play lists . EXTERNAL _ CONTENT _ URI Ċ // ĠĠĠĠĠĠĠ Ġval Ġlocal StringBuilder Ġ= ĠStringBuilder (). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("_ id ĠIN Ġ( ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( playlist Id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . delete ( local Uri , Ġlocal StringBuilder . toString (), Ġnull ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġmake Playlist Cursor (): ĠCursor ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( Media Store . Audio . Play lists . EXTERNAL _ CONTENT _ URI , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Base Columns ._ ID , ĠMedia Store . Audio . Play lists Columns . NAME ), Ġnull , Ġnull , ĠMedia Store . Audio . Play lists . DEFAULT _ SORT _ ORDER ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġget Song Count For Playlist ( playlist Id : ĠLong ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠMedia Store . Audio . Play lists . Members . getContent Uri (" external ", Ġplaylist Id ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( uri , ĠarrayOf (_ ID ), ĠM US IC _ ONLY _ SELECTION , Ġnull , Ġnull )?. use Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . moveTo First ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . count Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ 0 Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġcleanup Playlist ( Ċ // ĠĠĠĠĠĠĠ Ġplaylist Id : ĠLong , Ċ // ĠĠĠĠĠĠĠ Ġcursor : ĠCursor , Ċ // ĠĠĠĠĠĠĠ Ġclose Cursor After : ĠBoolean Ċ // ĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġid Col Ġ= Ġcursor . getColumnIndex OrThrow ( Media Store . Audio . Play lists . Members . AUDIO _ ID ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠMedia Store . Audio . Play lists . Members . getContent Uri (" external ", Ġplaylist Id ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġops Ġ= Ġarray ListOf < Content Provider Operation >(). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Content Provider Operation . new Delete ( uri ). build ()) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First () Ġ&& Ġcursor . count Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠContent Provider Operation . new Insert ( uri ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Value ( Media Store . Audio . Play lists . Members . PLAY _ ORDER , Ġcursor . position ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Value ( Media Store . Audio . Play lists . Members . AUDIO _ ID , Ġcursor . getLong ( id Col )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( cursor . position Ġ+ Ġ 1 ) Ġ% ĠY I ELD _ FREQ UENCY Ġ== Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . with Yield Allowed ( true ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġops . add ( builder . build ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( cursor . moveTo Next ()) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . apply Batch ( Media Store . AUTH ORITY , Ġops ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRemoteException ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠOperation ApplicationException ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( close Cursor After ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġcount Playlist ( playlist Id : ĠLong ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members . getContent Uri (" external ", Ġplaylist Id ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Media Store . Audio . Play lists . Members . AUDIO _ ID ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members . DEFAULT _ SORT _ ORDER Ċ // ĠĠĠĠĠĠĠ Ġ) ?. use Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . moveTo First ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . count Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ 0 Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġmake Playlist Song Cursor ( playlist ID : ĠLong ?): ĠCursor ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġselection Ġ= ĠStringBuilder (). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ Media Store . Audio . Audio Columns . IS _ M US IC }= 1 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠAND Ġ${ Media Store . Audio . Audio Columns . TITLE } Ġ!= Ġ'' ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members ._ ID , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members . AUDIO _ ID , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . TITLE , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . AR TI ST , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . AL BU M _ ID , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . AR TI ST _ ID , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . AL BU M , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . DURATION , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Audio Columns . TRACK , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members . PLAY _ ORDER Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members . getContent Uri (" external ", Ġplaylist ID !! ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection . toString (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Play lists . Members . DEFAULT _ SORT _ ORDER Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġmake Insert Items ( Ċ // ĠĠĠĠĠĠĠ Ġids : ĠLong Array , Ċ // ĠĠĠĠĠĠĠ Ġoffset : ĠInt , Ċ // ĠĠĠĠĠĠĠ Ġlen : ĠInt , Ċ // ĠĠĠĠĠĠĠ Ġbase : ĠInt Ċ // ĠĠĠ Ġ): ĠArray < Content Values > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġactual Len Ġ= Ġlen Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ+ Ġactual Len Ġ> Ġids . size ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġactual Len Ġ= Ġids . size Ġ- Ġoffset Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġcontent Values List Ġ= Ġmutable ListOf < Content Values >() Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġactual Len ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values (). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( PLAY LIST _ PLAY _ ORDER , Ġbase Ġ+ Ġoffset Ġ+ Ġi ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( PLAY LIST _ AUDIO _ ID , Ġids [ offset Ġ+ Ġi ]) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Values List . add ( values ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġcontent Values List . to Typed Array () Ċ // ĠĠĠ Ġ} Ċ //} Ċ