package Ġde . coder ed dev . word up example . view model Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġde . coder ed dev . word up . database . Word Ċ import Ġde . coder ed dev . word up . database . Word Dao Ċ import Ġde . coder ed dev . word up . player . Local Word Up Player Ċ import Ġde . coder ed dev . word up . util . Storage Utils Ċ import Ġde . coder ed dev . word up . util . Uri Utils Ċ import Ġde . coder ed dev . word up example . R Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ abstract Ġclass ĠWord List ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġabstract Ġval Ġword List : ĠMutable LiveData < List < Word >> ĊĠĠĠ Ġabstract Ġval Ġevents : ĠMutable LiveData < Event > ĊĠĠĠ Ġabstract Ġval Ġintent s : ĠMutable LiveData < Intent > ĊĠĠĠ Ġabstract Ġval Ġpermission Requests : ĠMutable LiveData < Permission Request > ĊĊĠĠĠ Ġabstract Ġfun Ġon Word Click ( word : ĠWord ) ĊĊĠĠĠ Ġabstract Ġfun Ġon MenuItem Selected ( word : ĠWord , ĠitemId : ĠInt ) ĊĊĠĠĠ Ġabstract Ġfun Ġon Permission Result ( permission Request : ĠPermission Request , Ġgranted : ĠBoolean ) ĊĊĠĠĠ Ġenum Ġclass ĠEvent Ġ{ ĊĠĠĠĠĠĠĠ ĠPER MISSION _ WRITE _ SETTINGS , ĊĠĠĠĠĠĠĠ ĠSYSTEM _ SOUND _ SET , ĊĠĠĠĠĠĠĠ ĠWORD _ SA VED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPermission Request ( ĊĠĠĠĠĠĠĠ Ġval Ġpermission : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġaction : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġword : ĠWord ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġsystem Sound Option : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ SAVE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ SET _ SYSTEM _ SOUND Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠWord List ViewModel Impl ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġword Dao : ĠWord Dao Ċ ) Ġ: ĠWord List ViewModel () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġword List : ĠMutable LiveData < List < Word >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġword List Observer : ĠObserver < List < Word >> Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ Ġword List . post Value ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġevents : ĠMutable LiveData < Event > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġoverride Ġval Ġintent s : ĠMutable LiveData < Intent > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġoverride Ġval Ġpermission Requests : ĠMutable LiveData < Permission Request > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġprivate Ġval Ġword up Player Ġ= ĠLocal Word Up Player ( context ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġword Dao . getAll Words Live (). observe Fore ver ( word List Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MenuItem Selected ( word : ĠWord , ĠitemId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri Utils . get Uri For Word ( context , Ġword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ STREAM , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" audio / mp 3 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent s . post Value ( share Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Requests . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ SAVE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . System . can Write ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġwhen Ġ( itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ set _ ring tone Ġ-> ĠMedia Store . Audio . Media . IS _ RING T ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ set _ notification Ġ-> ĠMedia Store . Audio . Media . IS _ NOTIFICATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMedia Store . Audio . Media . IS _ ALARM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Requests . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ SET _ SYSTEM _ SOUND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . post Value ( Event . PERMISSION _ WRITE _ SETTINGS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Word Click ( word : ĠWord ) Ġ{ ĊĠĠĠĠĠĠĠ Ġword up Player . play ( context , Ġword ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġoverride Ġfun Ġon Permission Result ( permission Request : ĠPermission Request , Ġgranted : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( permission Request . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ SAVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gr anted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStorage Utils . store Word ( context , Ġpermission Request . word !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . post Value ( Event . WORD _ SA VED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ SET _ SYSTEM _ SOUND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gr anted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStorage Utils . set As System Sound ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Request . word !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( permission Request . system Sound Option !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . post Value ( Event . SYSTEM _ SOUND _ SET ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġword Dao . getAll Words Live (). remove Observer ( word List Observer ) ĊĠĠĠĠĠĠĠ Ġword up Player . release () ĊĠĠĠ Ġ} Ċ } Ċ