package Ġcom . luc as jos ino . on _ audio _ query . query Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . luc as jos ino . on _ audio _ query . On Audio Query Plugin Ċ import Ġcom . luc as jos ino . on _ audio _ query . query . helper . On Audio Helper Ċ import Ġcom . luc as jos ino . on _ audio _ query . types . check Play lists Uri Type Ċ import Ġcom . luc as jos ino . on _ audio _ query . types . sort types . check Genre Sort Type Ċ import Ġcom . luc as jos ino . on _ audio _ query . utils . playlist Projection Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** ĠOn Playlist Query Ġ*/ Ċ class ĠOn Playlist Query Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// Main Ġparameters ĊĠĠĠ Ġprivate Ġval Ġhelper Ġ= ĠOn Audio Helper () ĊĊĠĠĠ Ġ// ĠNone Ġof Ġthis Ġmethods Ġcan Ġbe Ġnull . ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuri : ĠUri ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresolver : ĠContent Resolver ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsort Type : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġ" query " Ġall Ġplay lists . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠParameters : ĊĠĠĠĠ Ġ* ĠĠ Ġ* Ġ[ context ] ĊĠĠĠĠ Ġ* ĠĠ Ġ* Ġ[ result ] ĊĠĠĠĠ Ġ* ĠĠ Ġ* Ġ[ call ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġquery Play lists ( context : ĠContext , Ġresult : ĠMethod Channel . Result , Ġcall : ĠMethod Call ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresolver Ġ= Ġcontext . content Resolver ĊĊĠĠĠĠĠĠĠ Ġ// ĠSort : ĠType Ġand ĠOrder . ĊĠĠĠĠĠĠĠ Ġsort Type Ġ= Ġcheck Genre Sort Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . argument < Int >(" sort Type ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . argument < Int >(" order Type ") !! ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġuri : ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġ* Ġ[ 0 ]: ĠExternal . ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġ* Ġ[ 1 ]: ĠInternal . ĊĠĠĠĠĠĠĠ Ġuri Ġ= Ġcheck Play lists Uri Type ( call . argument < Int >(" uri ") !! ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠQuery Ġeverything Ġin Ġbackground Ġfor Ġa Ġbetter Ġperformance . ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRequest Ġpermission Ġstatus Ġfrom Ġthe Ġmain Ġmethod . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Permission Ġ= ĠOn Audio Query Plugin (). on Permission Status ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEmpty Ġlist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Playlist List Ġ= ĠArrayList < Mutable Map < String , ĠAny ? >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcannot Ġ" query " Ġwithout Ġpermission Ġso , Ġjust Ġreturn Ġa Ġempty Ġlist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġquerying ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Playlist List Ġ= Ġload Play lists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Flutter ĠUI Ġwill Ġstart , Ġbut , Ġinformation Ġstill Ġloading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( result Playlist List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Loading Ġin ĠBackground ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġload Play lists (): ĠArrayList < Mutable Map < String , ĠAny ? >> Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup Ġthe Ġcursor Ġwith Ġ[ uri ] Ġand Ġ[ projection ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġresolver . query ( uri , Ġplaylist Projection , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEmpty Ġlist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist List : ĠArrayList < Mutable Map < String , ĠAny ? >> Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġeach Ġitem ( playlist ) Ġinside Ġthis Ġ" cursor ", Ġtake Ġone Ġand Ġ" format " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinto Ġa Ġ[ Map < String , Ġdynamic > ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor Ġ!= Ġnull Ġ&& Ġcursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Data : ĠMutable Map < String , ĠAny ?> Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( playlist Media Ġin Ġcursor . column Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Data [ playlist Media ] Ġ= Ġhelper . load Playlist Item ( playlist Media , Ġcursor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Members Audio Ids : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor 2 Ġ= Ġresolver . query ( Media Store . Audio . Play lists . Members . getContent Uri (" external ", cursor . getLong ( 1 )), array Of ( Media Store . Audio . Play lists . Members . AUDIO _ ID ), null , null , null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( cursor 2 Ġ!= Ġnull Ġ&& Ġcursor 2 . moveTo Next ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Members Audio Ids . add ( cursor 2 . getString ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Data [" member IDs "] Ġ= Ġplaylist Members Audio Ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist List . add ( playlist Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor 2 ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġplaylist List ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ // Extras : Ċ Ċ // I / On Playlist Cursor [ All / Audio ]: Ġ[ Ċ // Ġ_ data Ċ // Ġ_ id Ċ // Ġdate _ added Ċ // Ġdate _ modified Ċ // Ġname Ċ // Ġ] Ċ