package Ġcom . world sn as . star player . view . music _ list Ċ Ċ import Ġandroid . Manifest . permission . READ _ EXTERNAL _ STORAGE Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . world sn as . star player . App Ċ import Ġcom . world sn as . star player . Const Values Ċ import Ġcom . world sn as . star player . Exo Player Service Ċ import Ġcom . world sn as . star player . databinding . Fragment Music List Binding Ċ import Ġcom . world sn as . star player . di . components . D agger Music List Component Ċ import Ġcom . world sn as . star player . di . components . Music List Component Ċ import Ġcom . world sn as . star player . model . Music Ċ import Ġcom . world sn as . star player . model . Music Repo Model Ċ import Ġcom . world sn as . star player . utils . Resource Ċ import Ġcom . world sn as . star player . utils . show Toast Ċ import Ġcom . world sn as . star player . view . ViewModel Factory Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠMusic List Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory ĊĊĊĠĠĠ Ġprivate Ġval Ġmusic List ViewModel Ġby ĊĠĠĠ Ġview Models < Music List ViewModel > Ġ{ ĠviewModel Factory Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmusic List : ĠArrayList < Music > ĊĊĠĠĠ Ġprivate Ġval Ġmusic ListAdapter Ġ= ĊĠĠĠĠĠĠĠ ĠMusic ListAdapter Ġ{ Ġitem Ġ-> Ġstart Ex op layer Service ( item , Ġmusic List ) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Music List Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmusic List Component : ĠMusic List Component ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Music List Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġdagger Setup () ĊĠĠĠĠĠĠĠ Ġstorage Permission Check () ĊĊĠĠĠĠĠĠĠ Ġbinding . recyclerview . adapter Ġ= Ġmusic ListAdapter ĊĊĠĠĠĠĠĠĠ Ġmusic List ViewModel . getM us ics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlive Data Setup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmusic Observer Ġ= ĠObserver < Resource < List < Music Repo Model >>> Ġ{ Ġresponse Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( response . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Music List . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . recyclerview . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Music List . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . recyclerview . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmusic ListAdapter . submit List ( response . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit M us ics For Exo Player Service ( response . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . recyclerview . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Music List . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( response . message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmusic List ViewModel . local Music List . observe ( view Lifecycle Owner , Ġmusic Observer ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit M us ics For Exo Player Service ( data : ĠList < Music Repo Model > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmusic List Ġ= Ġdata ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMusic ( it . id , Ġit . title , Ġit . artist , Ġit . album , Ġit . genre , Ġit . address ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠArrayList < Music > ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdagger Setup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmusic List Component Ġ= ĠD agger Music List Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Component (( activity !!. application Ġas ĠApp ). app Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġmusic List Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstorage Permission Check () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Self Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Already ĠGr anted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Setup () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Self Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREAD _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( READ _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConst Values . READ _ EXTERNAL _ STORAGE _ REQUEST _ CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConst Values . READ _ EXTERNAL _ STORAGE _ REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Setup () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisable Ġfunction Ġdid Ġnot Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Need ĠPermission Ġto ĠAccess ĠS ongs ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Ex op layer Service ( music : ĠMusic ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠM us ics List Fragment Directions . action M us ics List Fragment To Player Fragment ( music ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĊĠĠĠĠĠĠĠ ĠEx o Player Service . action Start ( context !! , Ġmusic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Ex op layer Service ( music : ĠMusic , Ġmusic List : ĠArrayList < Music >) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠEx o Player Service . action Start ( context !! , Ġmusic List , Ġmusic List . indexOf ( music )) ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ