/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠI van ĠMol to Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnet . iv an mol to . music . ui . song Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . databinding . Data Binding Component Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . transition . Transition Inflater Ċ import Ġcom . google . android . ex op layer 2 .* Ċ import Ġcom . google . android . ex op layer 2 . ui . Player View Ċ import Ġnet . iv an mol to . music . App Executors Ċ import Ġnet . iv an mol to . music . R Ċ import Ġnet . iv an mol to . music . binding . Fragment Data Binding Component Ċ import Ġnet . iv an mol to . music . databinding . Song Fragment Binding Ċ import Ġnet . iv an mol to . music . di . Injectable Ċ import Ġnet . iv an mol to . music . ui . common . Retry Callback Ċ import Ġnet . iv an mol to . music . util . auto Cle ared Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠThe ĠUI Ġfor Ġdisplaying Ġthe Ġsong Ġinfo Ċ Ġ*/ Ċ class ĠSong Fragment Ġ: ĠFragment (), ĠInjectable Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapp Executors : ĠApp Executors ĊĊĠĠĠ Ġvar Ġbinding Ġby Ġauto Cle ared < Song Fragment Binding >() ĊĠĠĠ Ġvar Ġdata Binding Component : ĠData Binding Component Ġ= ĠFragment Data Binding Component ( this ) ĊĊĠĠĠ Ġprivate Ġval Ġsong ViewModel : ĠSong ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġex o Player : ĠEx o Player ĊĠĠĠ Ġlateinit Ġvar Ġplayer View : ĠPlayer View ĊĠĠĠ Ġprivate Ġval Ġparams Ġby Ġnav Args < Song Fragment Args >() ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Binding Ġ= ĠData Binding Util . inflate < Song Fragment Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . song _ fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Binding Component ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdata Binding . retry Callback Ġ= Ġobject Ġ: ĠRetry Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġretry () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong ViewModel . retry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġdata Binding ĊĠĠĠĠĠĠĠ Ġshared Element Return Transition Ġ= ĠTransition Inflater . from ( context ). inflate Transition ( R . transition . move ) ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdata Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsong ViewModel . setId ( params . id ) ĊĠĠĠĠĠĠĠ Ġsong ViewModel . set Url Music ( params . url Music ) ĊĠĠĠĠĠĠĠ Ġbinding . args Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġbinding . song Ġ= Ġsong ViewModel . song ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĊĠĠĠĠĠĠĠ Ġex o Player Ġ= Ġsong ViewModel . get MediaPlayer (). getPlayer ( context !! ) ĊĠĠĠĠĠĠĠ Ġplayer View Ġ= Ġbinding . mp layer ĊĠĠĠĠĠĠĠ Ġplayer View . player Ġ= Ġex o Player ĊĠĠĠĠĠĠĠ Ġsong ViewModel . play ( params . url Music ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsong ViewModel . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsong ViewModel . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠShare ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ music , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Share Intent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHelper Ġfunction Ġfor Ġcalling Ġa Ġshare Ġfunctionality . ĊĠĠĠ Ġ// ĠShould Ġbe Ġused Ġwhen Ġuser Ġp resses Ġa Ġshare Ġbutton / menu Ġitem . ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġcreate Share Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshare Text Ġ= Ġsong ViewModel . song . value . let Ġ{ Ġsong Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( song Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . share _ text _ song , Ġsong . track ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠShare Compat . Intent Builder . from ( context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( share Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Chooser Intent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ DOCUMENT Ġor ĠIntent . FLAG _ ACTIVITY _ MULTIPLE _ TASK ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( share Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġ*/ Ċ } Ċ