package Ġcom . luc as jos ino . on _ audio _ query . query Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . luc as jos ino . on _ audio _ query . types . check Aud ios Uri Type Ċ import Ġcom . luc as jos ino . on _ audio _ query . types . check S ongs ByType Ċ import Ġcom . luc as jos ino . on _ audio _ query . types . song Projection Ċ import Ġcom . luc as jos ino . on _ audio _ query . utils . get Extra Info Ċ import Ġcom . luc as jos ino . on _ audio _ query . utils . load Artwork Ċ 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 Ċ Ċ class ĠOn Aud ios By Query Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// Main Ġparameters ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuri : ĠUri ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresolver : ĠContent Resolver ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġwhere : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġwhere Val : ĠArrayList < String > ĊĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġfun Ġquery S ongs By ( context : ĠContext , Ġresult : ĠMethod Channel . Result , Ġcall : ĠMethod Call ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext Ġ; Ġthis . resolver Ġ= Ġcontext . content Resolver ĊĊĠĠĠĠĠĠĠ Ġuri Ġ= Ġcheck Aud ios Uri Type ( call . argument < Int >(" uri ") !! ) ĊĠĠĠĠĠĠĠ Ġwhere Ġ= Ġcheck S ongs ByType ( call . argument < Int >(" by ") !! ) ĊĠĠĠĠĠĠĠ Ġwhere Val Ġ= Ġcall . argument (" values ") !! ĊĊĠĠĠĠĠĠĠ Ġ// Query Ġeverything Ġin Ġthe ĠBackground Ġit 's Ġnecessary Ġfor Ġbetter Ġperformance ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Start Ġquerying ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult S ongs By List Ġ= Ġload S ongs By () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Flutter ĠUI Ġwill Ġstart , Ġbut , Ġinformation Ġstill Ġloading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( result S ongs By List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġload S ongs By () Ġ: ĠArrayList < Mutable Map < String , ĠAny >> Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsong By List : ĠArrayList < Mutable Map < String , ĠAny >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġwhere Val ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġresolver . query ( uri , Ġsong Projection , Ġwhere , ĠarrayOf ( value ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor Ġ!= Ġnull Ġ&& Ġcursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsongs By Data : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( audio Media Ġin Ġcursor . column Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor . getString ( cursor . getColumnIndex ( audio Media )) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsongs By Data [ audio Media ] Ġ= Ġcursor . getString ( cursor . getColumnIndex ( audio Media )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġsongs By Data [ audio Media ] Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Artwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġart Ġ= Ġload Artwork ( context , Ġsongs By Data [" album "]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( art . isNotEmpty ()) Ġsongs By Data [" art work "] Ġ= Ġart ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Extra Ġinformation Ġfrom Ġsong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextra Info Ġ= Ġget Extra Info ( songs By Data [" _ data "]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsongs By Data . put All ( extra Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠContent U ris . with App ended Id ( uri , Ġsongs By Data [" _ id "]. toString (). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsongs By Data [" _ uri "] Ġ= Ġuri . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong By List . add ( songs By Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġsong By List ĊĠĠĠ Ġ} Ċ }