package Ġir . me h di y ari . f allery . utils Ċ Ċ import Ġandroid . database . Content Observer Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Handler Ċ import Ġandroid . provider . Media Store Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ internal Ġclass ĠMedia Store Observer Ġconstructor ( ĊĠĠĠ Ġis Media Observer Enabled : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġhandler : ĠHandler , ĊĠĠĠ Ġval Ġcontext : ĠWeak Reference < Fragment Activity > Ċ ) Ġ: ĠContent Observer ( handler ), ĠLifecycle Observer Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ external Storage Change State Ġ= ĠSingle Live Event < Uri ?> () ĊĠĠĠ Ġval Ġexternal Storage Change State : ĠLive Data < Uri ?> Ġ= Ġ_ external Storage Change State ĊĠĠĠ Ġprivate Ġvar Ġlatest URI : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpost Value Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEL AY _ FOR _ NOTIFY _ OB SERVER S Ġ= Ġ 2 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Media Observer Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get ()?. lifecycle ?. add Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ CREATE ) ĊĠĠĠ Ġfun Ġregister Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . get ()?. content Resolver ?. register Content Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġtrue , Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext . get ()?. content Resolver ?. register Content Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . INTERNAL _ CONTENT _ URI , Ġtrue , Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext . get ()?. content Resolver ?. register Content Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . EXTERNAL _ CONTENT _ URI , Ġtrue , Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext . get ()?. content Resolver ?. register Content Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Video . Media . INTERNAL _ CONTENT _ URI , Ġtrue , Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChange ( self Change : ĠBoolean , Ġuri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( latest URI Ġ== Ġuri ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġpost Value Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġpost Value Job Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġpost Value Job Ġ= ĠGlobal Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( DELAY _ FOR _ NOTIFY _ OB SERVER S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ external Storage Change State . post Value ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest URI Ġ= Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġfun Ġunregister Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġpost Value Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġpost Value Job Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlatest URI Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcontext . get ()?. lifecycle ?. remove Observer ( this ) ĊĠĠĠĠĠĠĠ Ġcontext . get ()?. content Resolver ?. unregister Content Observer ( this ) ĊĠĠĠ Ġ} Ċ }