package Ġcom . example . background . workers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġandroidx . work . work Data Of Ċ import Ġcom . example . background . KEY _ IMAGE _ URI Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* Ġ[ android x . work . List enable Worker ] Ġsubclass Ġthat Ġimplements Ġ[ Worker . do Work ] Ġto Ġprovide Ġthe Ġcode Ċ Ġ* Ġfor Ġsaving Ġan ĠImage Ġto ĠMedia Store Ġfilesystem . ĠImage Ġto Ġbe Ġsaved Ġis Ġprovided Ġas Ġ[ Worker Parameters . m InputData ] Ċ Ġ* Ġto Ġthe ĠWorker Ġfrom Ġthe Ġprevious Ġ[ Blur Worker ] Ġin Ġthe Ġchain . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext ĠThe Ġapplication Ġ[ Context ] Ċ Ġ* Ġ@ param Ġworker Parameters ĠParameters Ġto Ġsetup Ġthe Ġinternal Ġstate Ġof Ġthis Ġworker Ċ Ġ* Ċ Ġ* Ġ@ author ĠK a ush ik ĠN ĠSan ji Ċ Ġ*/ Ċ class ĠSave Image ToFile Worker ( context : ĠContext , Ġworker Parameters : ĠWorker Parameters ) Ġ: ĠWorker ( context , Ġworker Parameters ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOverride Ġthis Ġmethod Ġto Ġdo Ġyour Ġactual Ġbackground Ġprocessing . Ġ ĠThis Ġmethod Ġis Ġcalled Ġon Ġa ĊĠĠĠĠ Ġ* Ġbackground Ġthread Ġ- Ġyou Ġare Ġrequired Ġto Ġ** s ynchronously ** Ġdo Ġyour Ġwork Ġand Ġreturn Ġthe ĊĠĠĠĠ Ġ* Ġ[ android x . work . List enable Worker . Result ] Ġfrom Ġthis Ġmethod . Ġ ĠOnce Ġyou Ġreturn Ġfrom Ġthis ĊĠĠĠĠ Ġ* Ġmethod , Ġthe ĠWorker Ġis Ġconsidered Ġto Ġhave Ġfinished Ġwhat Ġits Ġdoing Ġand Ġwill Ġbe Ġdestroyed . ĠIf ĊĠĠĠĠ Ġ* Ġyou Ġneed Ġto Ġdo Ġyour Ġwork Ġasynchronously Ġon Ġa Ġthread Ġof Ġyour Ġown Ġchoice , Ġsee ĊĠĠĠĠ Ġ* Ġ[ android x . work . List enable Worker ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA ĠWorker Ġis Ġgiven Ġa Ġmaximum Ġof Ġten Ġminutes Ġto Ġfinish Ġits Ġexecution Ġand Ġreturn Ġa ĊĠĠĠĠ Ġ* Ġ[ android x . work . List enable Worker . Result ]. ĠAfter Ġthis Ġtime Ġhas Ġexpired , Ġthe ĠWorker Ġwill ĊĠĠĠĠ Ġ* Ġbe Ġsign alled Ġto Ġstop . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ android x . work . List enable Worker . Result ] Ġof Ġthe Ġcomputation ; Ġnote Ġthat ĊĠĠĠĠ Ġ* Ġdependent Ġwork Ġwill Ġnot Ġexecute Ġif Ġyou Ġuse ĊĠĠĠĠ Ġ* Ġ[ android x . work . List enable Worker . Result . failure ] Ġor ĊĠĠĠĠ Ġ* Ġ[ android x . work . List enable Worker . Result . failure ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġa ĠNotification Ġwhen Ġthe Ġwork Ġstarts ĊĠĠĠĠĠĠĠ Ġmake Status Notification ( application Context , Ġ" Saving ĠImage ...") ĊĠĠĠĠĠĠĠ Ġ// ĠS low Ġdown Ġthe Ġstart Ġso Ġthat Ġit Ġis Ġeasier Ġto Ġsee Ġeach ĠWork Request Ġstart ĊĠĠĠĠĠĠĠ Ġsleep () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġsaving Ġthe Ġimage Ġto ĠMedia Store Ġfilesystem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Image To Media ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Data . getString ( KEY _ IMAGE _ URI )) ?. let Ġ{ Ġimage Uri Str : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOn ĠSuccess ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġas Ġsuccessful Ġwith Ġthe Ġoutput ĠData Ġcontaining Ġthe ĠUri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġthe Ġper manently Ġsaved Ġbl urred Ġimage Ġfile , Ġin Ġorder Ġto Ġmake Ġit Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġother Ġworkers Ġfor Ġfurther Ġoperations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( work Data Of ( KEY _ IMAGE _ URI Ġto Ġimage Uri Str )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOn ĠFailure Ġto Ġsave Ġthe Ġimage ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLog Ġthe Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Error : ĠImage Ġcould Ġnot Ġbe Ġsaved Ġto ĠMedia Store ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġas Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLog Ġthe Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( throwable , Ġ" Error Ġoccurred Ġwhile Ġsaving Ġimage Ġto ĠMedia Store ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġas Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }