package Ġcom . k ier on qu inn . app . t apt ap . repositories . backup restore Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroidx . document file . provider . Document File Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json ParseException Ċ import Ġcom . k ier on qu inn . app . t apt ap . Build Config Ċ import Ġcom . k ier on qu inn . app . t apt ap . components . col umb us . sensors . Tap Tap Gesture Sensor Impl Ċ import Ġcom . k ier on qu inn . app . t apt ap . components . settings . SETTINGS _ VERSION Ċ import Ġcom . k ier on qu inn . app . t apt ap . components . settings . Tap Model Ċ import Ġcom . k ier on qu inn . app . t apt ap . components . settings . Tap Tap Settings Ċ import Ġcom . k ier on qu inn . app . t apt ap . models . action . Action Requirement Ċ import Ġcom . k ier on qu inn . app . t apt ap . models . action . Tap Tap Action Directory Ċ import Ġcom . k ier on qu inn . app . t apt ap . models . backup . Backup Ċ import Ġcom . k ier on qu inn . app . t apt ap . models . backup . Legacy Backup Ċ import Ġcom . k ier on qu inn . app . t apt ap . models . gate . Gate Requirement Ċ import Ġcom . k ier on qu inn . app . t apt ap . models . gate . Tap Tap Gate Directory Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . actions . Actions Repository Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . backup restore . legacy . Legacy Backup Repository Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . g ates . G ates Repository Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . room . actions . Double Tap Action Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . room . actions . Triple Tap Action Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . room . g ates . Gate Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . room . wh eng ates . When Gate Double Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . room . wh eng ates . When Gate Triple Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . wh eng ates . When G ates Repository Double Ċ import Ġcom . k ier on qu inn . app . t apt ap . repositories . wh eng ates . When G ates Repository Triple Ċ import Ġcom . k ier on qu inn . app . t apt ap . utils . extensions . ung zip Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠRestore Repository Ġ{ ĊĊĠĠĠ Ġabstract Ġsuspend Ġfun Ġload Restore Candidate ( context : ĠContext , Ġuri : ĠUri ): ĠRestore Candidate ? ĊĠĠĠ Ġabstract Ġsuspend Ġfun Ġperform Restore ( candidate : ĠRestore Candidate , Ġignore Requirements : ĠBoolean Ġ= Ġfalse ): ĠBoolean ĊĠĠĠ Ġabstract Ġsuspend Ġfun Ġupgrade Settings ( context : ĠContext ) ĊĠĠĠ Ġabstract Ġsuspend Ġfun Ġshould Upgrade ( context : ĠContext ): ĠBoolean ĊĊĠĠĠ Ġdata Ġclass ĠRestore Action ( ĊĠĠĠĠĠĠĠ Ġval Ġuuid : ĠString Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠ Ġval Ġaction : ĠBackup . Action , ĊĠĠĠĠĠĠĠ Ġvar Ġaction Requirements : ĠArray < Action Requirement > ?, ĊĠĠĠĠĠĠĠ Ġvar Ġsupported : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġvar Ġskipped : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠRestore Gate ( ĊĠĠĠĠĠĠĠ Ġval Ġuuid : ĠString Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠ Ġval Ġgate : ĠBackup . Gate , ĊĠĠĠĠĠĠĠ Ġvar Ġgate Requirements : ĠArray < Gate Requirement > ?, ĊĠĠĠĠĠĠĠ Ġvar Ġsupported : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġvar Ġskipped : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠRestore When Gate ( ĊĠĠĠĠĠĠĠ Ġval Ġuuid : ĠString Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠ Ġval Ġgate : ĠBackup . When Gate , ĊĠĠĠĠĠĠĠ Ġvar Ġgate Requirements : ĠArray < Gate Requirement > ?, ĊĠĠĠĠĠĠĠ Ġvar Ġsupported : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġvar Ġskipped : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠRestore Candidate ( ĊĠĠĠĠĠĠĠ Ġval Ġfilename : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsettings : ĠBackup . Settings , ĊĠĠĠĠĠĠĠ Ġval Ġdouble Tap Actions : ĠList < Restore Action >, ĊĠĠĠĠĠĠĠ Ġval Ġtriple Tap Actions : ĠList < Restore Action >, ĊĠĠĠĠĠĠĠ Ġval Ġg ates : ĠList < Restore Gate >, ĊĠĠĠĠĠĠĠ Ġval Ġwhen G ates Double : ĠList < Restore When Gate >, ĊĠĠĠĠĠĠĠ Ġval Ġwhen G ates Triple : ĠList < Restore When Gate > ĊĠĠĠ Ġ) Ċ Ċ } Ċ Ċ class ĠRestore Repository Impl ( ĊĠĠĠ Ġprivate Ġval Ġactions Repository : ĠActions Repository , ĊĠĠĠ Ġprivate Ġval Ġg ates Repository : ĠG ates Repository , ĊĠĠĠ Ġprivate Ġval Ġwhen G ates Repository Double : ĠWhen G ates Repository Double <* >, ĊĠĠĠ Ġprivate Ġval Ġwhen G ates Repository Triple : ĠWhen G ates Repository Triple <* >, ĊĠĠĠ Ġprivate Ġval Ġtap Tap Settings : ĠT ap Tap Settings , ĊĠĠĠ Ġprivate Ġval Ġlegacy Backup Repository : ĠLegacy Backup Repository , ĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson Ċ ) Ġ: ĠRestore Repository () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLE G ACY _ FILES Ġ= ĠarrayOf (" actions . json ", Ġ" actions _ triple . json ", Ġ" g ates . json ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Restore Candidate ( context : ĠContext , Ġuri : ĠUri ): ĠRestore Candidate ? Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= ĠDocument File . from Single Uri ( context , Ġuri )?. name Ġ?: Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Input Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . open InputStream ( uri ) Ġ?: Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Json Ġ= Ġfile Input . use Ġ{ Ġit . read Bytes (). ung zip () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Ġ= Ġload Backup ( raw Json ) Ġ?: Ġload Legacy Backup ( raw Json ) Ġ?: Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( backup . metadata ?. backup Version Ġ!= ĠBackup . BACKUP _ VERSION ) Ġreturn @ with Context Ġnull Ġ// Reject Ġunknown Ġbackups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Restore Candidate ( context , Ġfilename , Ġbackup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġperform Restore ( candidate : ĠRestore Candidate , Ġignore Requirements : ĠBoolean ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdouble Tap Actions Ġ= Ġcandidate . double Tap Actions . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (( it . skipped Ġ|| Ġ! it . supported Ġ|| Ġit . action Requirements ?. isNotEmpty () Ġ== Ġtrue ) Ġ&& Ġ! ignore Requirements ) Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Tap Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Id Ġ= Ġit . action . id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . action . name Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġit . action . index Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Data Ġ= Ġit . action . extra Data Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Repository . clear Double Tap Actions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Actions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions Repository . add Double Tap Action ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtriple Tap Actions Ġ= Ġcandidate . triple Tap Actions . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (( it . skipped Ġ|| Ġ! it . supported Ġ|| Ġit . action Requirements ?. isNotEmpty () Ġ== Ġtrue ) Ġ&& Ġ! ignore Requirements ) Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le Tap Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Id Ġ= Ġit . action . id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . action . name Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġit . action . index Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Data Ġ= Ġit . action . extra Data Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Repository . clear Triple Tap Actions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriple Tap Actions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions Repository . add Triple Tap Action ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg ates Ġ= Ġcandidate . g ates . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (( it . skipped Ġ|| Ġ! it . supported Ġ|| Ġit . gate Requirements ?. isNotEmpty () Ġ== Ġtrue ) Ġ&& Ġ! ignore Requirements ) Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgate Id Ġ= Ġit . gate . id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . gate . name Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġit . gate . enabled Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġit . gate . index Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Data Ġ= Ġit . gate . extra Data Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg ates Repository . clear All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg ates . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg ates Repository . add Gate ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhen G ates Double Ġ= Ġcandidate . when G ates Double . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (( it . skipped Ġ|| Ġ! it . supported Ġ|| Ġit . gate Requirements ?. isNotEmpty () Ġ== Ġtrue ) Ġ&& Ġ! ignore Requirements ) Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWhen Gate Double ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Gate Id Ġ= Ġit . gate . id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Id Ġ= Ġit . gate . action Id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . gate . name Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvert Ġ= Ġit . gate . invert Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġit . gate . index Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Data Ġ= Ġit . gate . extra Data Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Repository Double . clear All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Double . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Repository Double . add When Gate ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhen G ates Triple Ġ= Ġcandidate . when G ates Triple . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (( it . skipped Ġ|| Ġ! it . supported Ġ|| Ġit . gate Requirements ?. isNotEmpty () Ġ== Ġtrue ) Ġ&& Ġ! ignore Requirements ) Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWhen Gate Triple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Gate Id Ġ= Ġit . gate . id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Id Ġ= Ġit . gate . action Id Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . gate . name Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvert Ġ= Ġit . gate . invert Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġit . gate . index Ġ?: Ġreturn @ map NotNull Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Data Ġ= Ġit . gate . extra Data Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Repository Triple . clear All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 5 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Triple . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Repository Triple . add When Gate ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtap Tap Settings . restore Settings ( candidate . settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Restore Candidate ( context : ĠContext , Ġfilename : ĠString , Ġbackup : ĠBackup ): ĠRestore Candidate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdouble Tap Actions Ġ= Ġbackup . double Tap Actions ?. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠT ap Tap Action Directory . value For ( it . name Ġ?: Ġreturn @ map NotNull Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= Ġif Ġ(! actions Repository . is Action Requirement Satisf ied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġaction . action Requirement Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Ġ= Ġactions Repository . is Action Supported ( context , Ġaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRestore Action ( action Ġ= Ġit , Ġaction Requirements Ġ= Ġrequirements , Ġsupported Ġ= Ġsupported ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġtriple Tap Actions Ġ= Ġbackup . triple Tap Actions ?. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠT ap Tap Action Directory . value For ( it . name Ġ?: Ġreturn @ map NotNull Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= Ġif Ġ(! actions Repository . is Action Requirement Satisf ied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġaction . action Requirement Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Ġ= Ġactions Repository . is Action Supported ( context , Ġaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRestore Action ( action Ġ= Ġit , Ġaction Requirements Ġ= Ġrequirements , Ġsupported Ġ= Ġsupported ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġg ates Ġ= Ġbackup . g ates ?. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgate Ġ= ĠT ap Tap Gate Directory . value For ( it . name Ġ?: Ġreturn @ map NotNull Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= Ġif Ġ(! g ates Repository . is Gate Requirement Satisf ied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġgate . gate Requirement Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Ġ= Ġg ates Repository . is Gate Supported ( context , Ġgate ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRestore Gate ( gate Ġ= Ġit , Ġgate Requirements Ġ= Ġrequirements , Ġsupported Ġ= Ġsupported ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġwhen G ates Double Ġ= Ġbackup . when G ates Double ?. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgate Ġ= ĠT ap Tap Gate Directory . value For ( it . name Ġ?: Ġreturn @ map NotNull Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= Ġif Ġ(! g ates Repository . is Gate Requirement Satisf ied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġgate . gate Requirement Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Ġ= Ġg ates Repository . is Gate Supported ( context , Ġgate ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRestore When Gate ( gate Ġ= Ġit , Ġgate Requirements Ġ= Ġrequirements , Ġsupported Ġ= Ġsupported ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġwhen G ates Triple Ġ= Ġbackup . when G ates Triple ?. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgate Ġ= ĠT ap Tap Gate Directory . value For ( it . name Ġ?: Ġreturn @ map NotNull Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequirements Ġ= Ġif Ġ(! g ates Repository . is Gate Requirement Satisf ied ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġgate . gate Requirement Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Ġ= Ġg ates Repository . is Gate Supported ( context , Ġgate ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRestore When Gate ( gate Ġ= Ġit , Ġgate Requirements Ġ= Ġrequirements , Ġsupported Ġ= Ġsupported ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġreturn ĠRestore Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilename , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . settings Ġ?: Ġreturn Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Actions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriple Tap Actions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg ates , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Double , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen G ates Triple ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Backup ( raw Json : ĠString ): ĠBackup ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( raw Json , ĠBackup :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠJson ParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Legacy Backup ( raw Json : ĠString ): ĠBackup ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlegacy Backup Ġ= Ġgson . fromJson ( raw Json , ĠLegacy Backup :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Convert Ġformat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Ġ= ĠBackup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdouble Tap Actions Ġ= Ġlegacy Backup . getDouble Tap Actions ( gson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtriple Tap Actions Ġ= Ġlegacy Backup . get Triple Tap Actions ( gson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . double Tap Actions Ġ= Ġdouble Tap Actions ?. convert Legacy Backup Actions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . triple Tap Actions Ġ= Ġtriple Tap Actions ?. convert Legacy Backup Actions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . g ates Ġ= Ġlegacy Backup . get G ates ( gson )?. convert Legacy Backup G ates () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . when G ates Double Ġ= Ġdouble Tap Actions ?. convert Legacy Backup When G ates () Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . when G ates Triple Ġ= Ġtriple Tap Actions ?. convert Legacy Backup When G ates () Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠlistOf NotNull ( legacy Backup . settings , Ġlegacy Backup . legacy Settings ). flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . settings Ġ= Ġsettings . convert Legacy Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . metadata Ġ= ĠBackup . Metadata () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbackup ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠJson ParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠArray < Legacy Backup . Action >. convert Legacy Backup Actions (): ĠList < Backup . Action > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Indexed NotNull Ġ{ Ġindex , Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBackup . Action (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġaction . name Ġ?: Ġreturn @ map Indexed NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . extra Data Ġ= Ġaction . extra Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠArray < Legacy Backup . Gate >. convert Legacy Backup G ates (): ĠList < Backup . Gate > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Indexed NotNull Ġ{ Ġindex , Ġgate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBackup . Gate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġgate . name Ġ?: Ġreturn @ map Indexed NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . enabled Ġ= Ġgate . is Activated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . extra Data Ġ= Ġgate . extra Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠArray < Legacy Backup . Action >. convert Legacy Backup When G ates (): ĠList < Backup . When Gate > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Indexed NotNull Ġ{ Ġindex , Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( action . when G ates . isNull OrEmpty ()) Ġreturn @ map Indexed NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( index , Ġaction . when G ates ) ĊĠĠĠĠĠĠĠ Ġ}. flatMap Indexed Ġ{ Ġindex : ĠInt , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . second . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackup . When Gate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . action Id Ġ= Ġitem . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . extra Data Ġ= Ġit . extra Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . invert Ġ= Ġit . isIn verted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Legacy Backup . Setting >. convert Legacy Settings (): ĠBackup . Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBackup . Settings (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it . key ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" main _ enabled " Ġ-> Ġservice Enabled Ġ= Ġit . value ?. to Boolean Strict OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" triple _ tap _ enabled " Ġ-> Ġactions Triple Tap Enabled Ġ= Ġit . value ?. to Boolean Strict OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" model " Ġ-> Ġcol umb us Tap Model Ġ= ĠT ap Model . values (). first OrNull Ġ{ Ġmodel Ġ-> Ġmodel . name Ġ== Ġit . value Ġ} ?. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" feedback _ vi br ate " Ġ-> Ġfeedback V ibrate Ġ= Ġit . value ?. to Boolean Strict OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" feedback _ wake " Ġ-> Ġfeedback Wake Device Ġ= Ġit . value ?. to Boolean Strict OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" feedback _ override _ d nd " Ġ-> Ġfeedback V ibrate D ND Ġ= Ġit . value ?. to Boolean Strict OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" advanced _ restart _ service " Ġ-> Ġadvanced Auto Restart Ġ= Ġit . value ?. to Boolean Strict OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" s ensitivity " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . value ?. toFloat OrNull () Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreset Sensitivity Ġ= ĠT ap Tap Gesture Sensor Impl . S ENS IT IVITY _ VALUES . indexOf ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( preset Sensitivity Ġ== Ġ- 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol umb us Custom Sensitivity Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol umb us Sensitivity Level Ġ= Ġpreset Sensitivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠT ap Tap Settings . restore Settings ( settings : ĠBackup . Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings . service Enabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Enabled . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . low Power Mode ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlow Power Mode . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . col umb us CH RE Low Sensitivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol umb us CH RE Low Sensitivity . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . col umb us Sensitivity Level ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol umb us Sensitivity Level . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . col umb us Tap Model ?. let Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol umb us Tap Model . set ( Tap Model . values (). first OrNull Ġ{ Ġit . name Ġ== Ġname Ġ} Ġ?: Ġreturn @ let ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . reach ability Left H anded ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreach ability Left H anded . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . feedback V ibrate ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback V ibrate . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . feedback V ibrate D ND ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback V ibrate D ND . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . feedback Wake Device ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback Wake Device . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . advanced Legacy Wake ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadvanced Legacy Wake . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . advanced Auto Restart ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadvanced Auto Restart . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . advanced Tensor Low Power ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadvanced Tensor Low Power . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . actions Triple Tap Enabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Triple Tap Enabled . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġshould Upgrade ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLE G ACY _ FILES . any Ġ{ ĠFile ( context . files Dir , Ġit ). exists () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupgrade Settings ( context : ĠContext ) Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlegacy Backup Json Ġ= Ġlegacy Backup Repository . get Backup Json ( context ) ĊĠĠĠĠĠĠĠ ĠLE G ACY _ FILES . forEach Ġ{ ĠFile ( context . files Dir , Ġit ). delete () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshared Prefs Ġ= Ġcontext . get SharedPreferences ("${ Build Config . APPLICATION _ ID }_ prefs ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġlegacy Shared Prefs Ġ= Ġcontext . get SharedPreferences ("${ Build Config . APPLICATION _ ID }_ preferences ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġlegacy Shared Prefs . edit (). clear (). commit () ĊĠĠĠĠĠĠĠ Ġshared Prefs . edit (). clear (). commit () ĊĠĠĠĠĠĠĠ Ġ// Create Ġdatabase Ġtables Ġby Ġgetting Ġthe Ġdefault Ġvalues ĊĠĠĠĠĠĠĠ Ġactions Repository . get Saved Double Tap Actions () ĊĠĠĠĠĠĠĠ Ġactions Repository . get Saved Triple Tap Actions () ĊĠĠĠĠĠĠĠ Ġg ates Repository . get Saved G ates () ĊĠĠĠĠĠĠĠ Ġwhen G ates Repository Double . get When G ates () ĊĠĠĠĠĠĠĠ Ġwhen G ates Repository Triple . get When G ates () ĊĠĠĠĠĠĠĠ Ġval Ġlegacy Backup Ġ= Ġload Legacy Backup ( legacy Backup Json ) ĊĠĠĠĠĠĠĠ Ġval Ġrestore Candidate Ġ= Ġcreate Restore Candidate ( context , Ġ" legacy ", Ġlegacy Backup Ġ?: Ġreturn @ with Context ) ĊĠĠĠĠĠĠĠ Ġperform Restore ( restore Candidate Ġ?: Ġreturn @ with Context , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ// Allow Ġtime Ġfor Ġsync ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġtap Tap Settings . settings Version . set ( SETTINGS _ VERSION ) ĊĠĠĠĠĠĠĠ Ġtap Tap Settings . has Seen Setup . set ( true ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ