package Ġcom . jo co os . flip f lop . sample . vod Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . jo co os . flip f lop .* Ċ import Ġcom . jo co os . flip f lop . api . model . Video Ċ import Ġcom . jo co os . flip f lop . sample . Flip F lop Sample App Ċ import Ġcom . jo co os . flip f lop . sample . Flip F lop Sample App . Companion . KEY _ VIDEO Ċ import Ġcom . jo co os . flip f lop . sample . R Ċ import Ġcom . jo co os . flip f lop . sample . chat ting . Chat Adapter Ċ import Ġcom . jo co os . flip f lop . sample . goods . Goods Info Ċ import Ġcom . jo co os . flip f lop . sample . main . Goods Image ListAdapter Ċ import Ġcom . jo co os . flip f lop . sample . main . Goods Shape Ċ import Ġcom . jo co os . flip f lop . sample . main . Goods Size Ċ import Ġcom . jo co os . flip f lop . sample . main . Main Fragment . Companion . KEY _ GOO DS _ INFO Ċ import Ġcom . jo co os . flip f lop . sample . util . FF Player Lifecycle Wrapper Ċ import Ġcom . jo co os . flip f lop . sample . util . get Dimension Size Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġjp . was ab eef . pic asso . transform ations . Crop Circle Transformation Ċ import Ġkotlinx . android . synt hetic . main . player _ activity .* Ċ Ċ /** Ċ Ġ* Ġview Ġv od Ċ Ġ*/ Ċ class ĠPlayer Activity Ġ: ĠAppCompatActivity (), ĠFF Player Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠChat Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġadapter Data Observer Ġ= Ġobject Ġ: ĠRecyclerView . Adapter Data Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Inserted ( position Start : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Item Range Inserted ( position Start , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chat Message . adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Message . smooth Scroll To Position ( position Start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvideo : ĠVideo ĊĠĠĠ Ġprivate Ġvar Ġgoods Info : ĠGood s Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġgoods Image ListAdapter Ġ= ĠGood s Image ListAdapter ( Goods Shape . CIR CLE , ĠGood s Size . SMALL ) ĊĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠFF Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplayer Lifecycle Wrapper : ĠFF Player Lifecycle Wrapper ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . player _ activity ) ĊĊĠĠĠĠĠĠĠ Ġvideo Ġ= Ġintent . get Parcelable Extra ( KEY _ VIDEO ) !! ĊĠĠĠĠĠĠĠ Ġgoods Info Ġ= Ġintent . get Parcelable Extra ( KEY _ GOO DS _ INFO ) ĊĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Player ( video ) ĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġplayer Lifecycle Wrapper Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġadapter ?. unregister Adapter Data Observer ( adapter Data Observer ) ĊĠĠĠĠĠĠĠ Ġchat Message . adapter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠChat Adapter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Adapter Data Observer ( adapter Data Observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchat Message . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġchat Message . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġif Ġ( video . user Avatar Url Ġ!= Ġnull Ġ&& Ġ! TextUtils . isEmpty ( video . user Avatar Url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġget Dimension Size ( 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( video . user Avatar Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . img _ profile _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform ( Crop Circle Transformation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resize ( radius , Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( profile Image ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Image . setImage Resource ( R . drawable . img _ profile _ default ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Title . text Ġ= Ġvideo . title ĊĠĠĠĠĠĠĠ Ġtext Owner . text Ġ= Ġvideo . userName ĊĊĠĠĠĠĠĠĠ Ġgoods Info ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . goods List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoods List . layout Manager Ġ= ĠLinearLayoutManager ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠRecyclerView . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoods List . adapter Ġ= Ġgoods Image ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoods Image ListAdapter . goods List Ġ= Ġit . goods List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Player ( video : ĠVideo ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= ĠFlip F lop Sample App . flip F lop Instance ?. create Player ( this , Ġvideo )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFF Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġresult . value . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġthis @ Player Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare ( this @ Player Activity , Ġplayer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFF Result . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"${ result . error . code } Ġ${ result . error . message }", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Lifecycle Wrapper Ġ= ĠFF Player Lifecycle Wrapper ( lifecycle , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġinterface ĠFF Player Listener ĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( player : ĠFF Player ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon Prepared ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Started ( player : ĠFF Player ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon Started ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stopped ( player : ĠFF Player ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon Stopped ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Completed ( player : ĠFF Player ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon Completed ") ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Player Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Finished Ġbroadcast ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Seek ( player : ĠFF Player , Ġposition : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon Seek ") ĊĠĠĠĠĠĠĠ Ġadapter ?. removeAll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ChatMessage Received ( player : ĠFF Player , Ġmessage : ĠFF Message ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon ChatMessage Received ") ĊĠĠĠĠĠĠĠ Ġadapter ?. addItem ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Chat Stat Received ( player : ĠFF Player , Ġstat : ĠFF Stat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player Ġon Chat Stat Received ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( player : ĠFF Player , Ġerror : ĠFlip F lop Exception ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( Flip F lop Sample App . TAG , Ġ" player ĠonError ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( error . code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFF ErrorCode . ERROR _ LI VE _ NETWORK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Player Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ëĦ ¤íĬ¸ ìĽĮ íģ¬ ê°Ģ ĠìĽĲ íĻ ľ íķĺì§Ģ ĠìķĬ ìĬµëĭĪëĭ¤ . Ġìŀ ł ìĭľ ĠíĽĦ Ġëĭ¤ ìĭľ Ġìĭľ ëıĦ íķ´ Ġì£¼ ìĦ¸ìļĶ .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Player Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ error . code } Ġ: Ġ${ error . message }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }