package Ġcom . r 4 sh 3 3 d . duplicate contacts remo ver . dialogs . contact backup Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . r 4 sh 3 3 d . duplicate contacts remo ver . model . Contact Ċ import Ġcom . r 4 sh 3 3 d . duplicate contacts remo ver . util . Loading Status Ċ import Ġcom . r 4 sh 3 3 d . duplicate contacts remo ver . util . Loading Status .* Ċ import Ġcom . r 4 sh 3 3 d . duplicate contacts remo ver . util . V cf Exporter Ċ import Ġcom . r 4 sh 3 3 d . duplicate contacts remo ver . util . get Backup File Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠContact s Backup ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġv cf Exporter : ĠV cf Exporter Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĠMutable LiveData < Loading Status >() ĊĊĠĠĠ Ġval Ġstatus : ĠLive Data < Loading Status > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĠĠĠ Ġprivate Ġval Ġ_ progress Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġval Ġprogress : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ progress ĊĊĠĠĠ Ġprivate Ġvar ĠviewModel Job Ġ= ĠJob () ĊĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( viewModel Job Ġ+ ĠDispatch ers . IO ) ĊĊĠĠĠ Ġvar Ġbackup File : ĠFile ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġbackup Contacts ( contacts : ĠArrayList < Contact >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ progress . post Value ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackup File Ġ= Ġget Backup File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv cf Exporter . export Contacts ( backup File !! , Ġcontacts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ progress . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( DONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ progress . post Value ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( FAILED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} Ċ } Ċ