/** Ċ Ġ* Ġ@ author ĠCreated Ġby Ġq i ye i 2 0 1 5 Ġon Ġ 2 0 2 0 / 4 / 6 . Ċ Ġ* Ġ@ version : Ġ 1 . 0 Ċ Ġ* Ġ@ email : Ġ 1 2 7 3 4 8 2 1 2 4 @ qq . com Ċ Ġ* Ġ@ description : ĠAudio Controller Ċ Ġ*/ Ċ package Ġcom . qi ye i . audio . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . location . Location Manager Compat Ċ import Ġcom . qi ye i . audio . exception . Audio Status Exception Ċ import Ġcom . qi ye i . audio . model . Audio Bean Ċ import Ġkotlin . random . Random Ċ Ċ class ĠAudio Controller ( private Ġval ĠmContext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Audio Controller " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éŁ³ é¢ĳ æĴŃæĶ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Player : ĠAudio Player Ġ= ĠAudio Player ( mContext ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æŃĮ æĽ² éĺŁåĪĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Queue : ĠMutable List < Audio Bean > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ Ĵ Ń æĶ¾ æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Mode : ĠPlay Mode ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ Ĵ Ń æĶ¾ ç´¢å¼ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Index : ĠInt Ġ= Ġ 0 ; ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Mode Ġ= ĠPlay Mode . REPEAT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł æīĢæľī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Queue ( beans : List < Audio Bean > ){ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG ," add Queue Ġbe ans =$ beans ") ĊĠĠĠĠĠĠĠ Ġm Queue . addAll ( beans ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł åĪ° æĴŃæĶ¾ éĺŁåĪĹ ä¸Ń ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Queue ( bean : ĠAudio Bean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Queue . add ( bean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ éĺŁåĪĹ ä¸ŃçļĦ æŃĮ æĽ² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Queue ( index : Int ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Queue . remove At ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ħ ç©º æĴŃæĶ¾ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Queue (){ ĊĠĠĠĠĠĠĠ Ġm Queue . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Queue (): Mutable List < Audio Bean >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Queue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æĴŃæĶ¾ æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Play Mode (): Play Mode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Mode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĴŃæĶ¾ æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Play Mode ( mode : ĠPlay Mode ){ ĊĠĠĠĠĠĠĠ Ġm Mode Ġ= Ġmode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ Ĵ Ń æĶ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġplay () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG ," play Ġbean =${ m Queue [ m Index ]} ") ĊĠĠĠĠĠĠĠ Ġm Player . load ( m Queue [ m Index ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĴŃæĶ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Play (): Boolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Player . getStatus () Ġ== ĠStatus . STARTED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸ĭ ä¸Ģ é¦ĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbean Ġ= ĠgetNext Play () ĊĠĠĠĠĠĠĠ Ġm Player . load ( bean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸Ĭ ä¸Ģ é¦ĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprev () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbean Ġ= Ġget Prev Play () ĊĠĠĠĠĠĠĠ Ġm Player . load ( bean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ ļ Ĥ åģľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player . pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩįæĸ° æĴŃæĶ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player . resume () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠgetCurrent Play (): ĠAudio Bean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Queue [ m Index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¸ĭ ä¸Ģ é¦ĸ è¦ģ æĴŃæĶ¾ çļĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetNext Play (): ĠAudio Bean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( m Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . REPEAT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index Ġ= Ġm Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . LOOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Index Ġ== Ġm Queue . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . RANDOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index Ġ= ĠRandom . nextInt ( 0 , Ġm Queue . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Queue [ m Index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¸Ĭ ä¸Ģ é¦ĸ æĴŃæĶ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Prev Play (): ĠAudio Bean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( m Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . REPEAT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index Ġ= Ġm Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . LOOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index Ġ= Ġm Queue . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . RANDOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Index Ġ= ĠRandom . nextInt ( 0 , Ġm Queue . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Queue [ m Index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Audio Status Listener ( listener : I Audio Status Listener ){ ĊĠĠĠĠĠĠĠ Ġm Player . add Audio Status Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Audio Status Listener ( listener : ĠI Audio Status Listener ){ ĊĠĠĠĠĠĠĠ Ġm Player . remove Audio Status Listener ( listener ) ĊĠĠĠ Ġ} Ċ }