/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠX iz hi ĠZ hu Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġme . x iz zh u . android . j osh ua . settings Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Typed Value Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġme . x iz zh u . android . j osh ua . Navigator Ċ import Ġme . x iz zh u . android . j osh ua . R Ċ import Ġme . x iz zh u . android . j osh ua . databinding . Activity Settings Binding Ċ import Ġme . x iz zh u . android . j osh ua . infra . on Each Ċ import Ġme . x iz zh u . android . j osh ua . infra . Base Activity Ċ import Ġme . x iz zh u . android . j osh ua . infra . Base ViewModel Ċ import Ġme . x iz zh u . android . j osh ua . infra . on Failure Ċ import Ġme . x iz zh u . android . j osh ua . ui . dialog Ċ import Ġme . x iz zh u . android . j osh ua . ui . in determinate Progress Dialog Ċ import Ġme . x iz zh u . android . j osh ua . ui . toast Ċ import Ġme . x iz zh u . android . logger . Log Ċ import Ġkotlin . math . round ToInt Ċ Ċ @ Android EntryPoint Ċ class ĠSettings Activity Ġ: ĠBase Activity < Activity Settings Binding >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCODE _ CREATE _ FILE _ FOR _ BACKUP Ġ= Ġ 9 9 9 9 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCODE _ SELECT _ FILE _ FOR _ REST ORE Ġ= Ġ 9 9 9 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsettings ViewModel : ĠSettings ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Settings ViewData : ĠSettings ViewData ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġin determinate Progress Dialog : ĠAlertDialog ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġobserve Settings () ĊĠĠĠĠĠĠĠ Ġinitialize Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings ViewModel . settings ViewData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Loading Ġ= Ġ{ Ġ/* ĠDo Ġnothing . Ġ*/ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate View ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings ViewData Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ Ġ/* ĠDo Ġnothing . Ġ*/ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate View ( settings ViewData : ĠSettings ViewData ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . decor View . keep Screen On Ġ= Ġsettings ViewData . keep Screen On ĊĊĠĠĠĠĠĠĠ Ġwith ( view Binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize . setDescription ( settings ViewData . font Sizes [ settings ViewData . current FontSize ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Screen On . isChecked Ġ= Ġsettings ViewData . keep Screen On ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnight Mode On . isChecked Ġ= Ġsettings ViewData . night Mode On ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Reading Mode . isChecked Ġ= Ġsettings ViewData . simple Reading Mode On ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Search Button . isChecked Ġ= Ġsettings ViewData . hide Search Button ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcon solid ated Sharing . isChecked Ġ= Ġsettings ViewData . con solid ate Ver ses For Sharing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Highlight Color . setDescription ( settings ViewData . default Highlight Color . label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion . setDescription ( settings ViewData . version ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( settings ViewData . animate FontSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Text Size ( settings ViewData . body Text Size In Pixel , Ġsettings ViewData . caption Text Size In Pixel ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text Size ( settings ViewData . body Text Size In Pixel , Ġsettings ViewData . caption Text Size In Pixel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( settings ViewData . animate Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Color ( settings ViewData . backgroundColor , Ġsettings ViewData . primary TextColor , Ġsettings ViewData . secondary TextColor ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Color ( settings ViewData . backgroundColor , Ġsettings ViewData . primary TextColor , Ġsettings ViewData . secondary TextColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Text Size ( body Text Size In Pixel : ĠFloat , Ġcaption Text Size In Pixel : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 . 0 F , Ġ 1 . 0 F ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Body Text Size In Pixel Ġ= Ġcurrent Settings ViewData !!. body Text Size In Pixel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Caption Text Size In Pixel Ġ= Ġcurrent Settings ViewData !!. caption Text Size In Pixel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanim ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġanim ator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Text Size In Pixel Ġ= Ġfrom Body Text Size In Pixel Ġ+ Ġfraction Ġ* Ġ( body Text Size In Pixel Ġ- Ġfrom Body Text Size In Pixel ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaption Text Size In Pixel Ġ= Ġfrom Caption Text Size In Pixel Ġ+ Ġfraction Ġ* Ġ( caption Text Size In Pixel Ġ- Ġfrom Caption Text Size In Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Text Size ( body Text Size In Pixel : ĠFloat , Ġcaption Text Size In Pixel : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( view Binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay . setText Size ( body Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Screen On . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġbody Text Size In Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnight Mode On . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġbody Text Size In Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreading . setText Size ( body Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Reading Mode . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġbody Text Size In Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Search Button . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġbody Text Size In Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcon solid ated Sharing . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġbody Text Size In Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Highlight Color . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup Restore . setText Size ( body Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestore . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabout . setText Size ( body Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrate . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwebsite . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion . setText Size ( body Text Size In Pixel . round ToInt (), Ġcaption Text Size In Pixel . round ToInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Color (@ Color Int ĠbackgroundColor : ĠInt , Ġ@ Color Int Ġprimary TextColor : ĠInt , Ġ@ Color Int Ġsecondary TextColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 . 0 F , Ġ 1 . 0 F ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg b Evaluator Ġ= ĠArg b Evaluator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom BackgroundColor Ġ= Ġcurrent Settings ViewData !!. backgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Primary TextColor Ġ= Ġcurrent Settings ViewData !!. primary TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Secondary TextColor Ġ= Ġcurrent Settings ViewData !!. secondary TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanim ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġanim ator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġarg b Evaluator . evaluate ( fraction , Ġfrom BackgroundColor , ĠbackgroundColor ) Ġas ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary TextColor Ġ= Ġarg b Evaluator . evaluate ( fraction , Ġfrom Primary TextColor , Ġprimary TextColor ) Ġas ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecondary TextColor Ġ= Ġarg b Evaluator . evaluate ( fraction , Ġfrom Secondary TextColor , Ġsecondary TextColor ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Color (@ Color Int ĠbackgroundColor : ĠInt , Ġ@ Color Int Ġprimary TextColor : ĠInt , Ġ@ Color Int Ġsecondary TextColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . decor View . set BackgroundColor ( backgroundColor ) ĊĊĠĠĠĠĠĠĠ Ġwith ( view Binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Screen On . setTextColor ( primary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnight Mode On . setTextColor ( primary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Reading Mode . setTextColor ( primary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Search Button . setTextColor ( primary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcon solid ated Sharing . setTextColor ( primary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Highlight Color . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackup . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestore . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrate . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwebsite . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion . setTextColor ( primary TextColor , Ġsecondary TextColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Listeners (): ĠUnit Ġ= Ġwith ( view Binding ) Ġ{ ĊĠĠĠĠĠĠĠ ĠfontSize . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings ViewData ?. let Ġ{ Ġsettings Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ( R . string . settings _ title _ font _ size , Ġsettings . font Sizes , Ġsettings . current FontSize ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save FontSize Scale ( which ). on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġkeep Screen On . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save Keep Screen On ( isChecked ). on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnight Mode On . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save Night Mode On ( isChecked ). on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsimple Reading Mode . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save Simple Reading Mode On ( isChecked ). on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhide Search Button . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save Hide Search Button ( isChecked ). on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcon solid ated Sharing . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save Con solid ate Ver ses For Sharing ( isChecked ). on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdefault Highlight Color . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Settings ViewData ?. let Ġ{ Ġsettings Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ( R . string . text _ pick _ highlight _ color , Ġresources . getString Array ( R . array . text _ colors ), Ġsettings . default Highlight Color . ordinal ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . save Default Highlight Color ( Highlight Color ViewData . values ()[ which ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ Ġtoast ( R . string . toast _ unknown _ error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( lifecycle Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbackup . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ CREATE _ DOCUMENT ). setType (" application / json "). add Category ( Intent . CATEGORY _ OP ENABLE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ CREATE _ FILE _ FOR _ BACKUP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( tag , Ġ" Failed Ġto Ġstart Ġactivity Ġto Ġcreate Ġfile Ġfor Ġbackup ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . toast _ unknown _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrestore . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ GET _ CONTENT ). setType ("* /* "). add Category ( Intent . CATEGORY _ OP ENABLE ), ĠgetString ( R . string . text _ restore _ from ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ SELECT _ FILE _ FOR _ REST ORE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrate . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . navigate ( this @ Settings Activity , ĠNavigator . SCREEN _ RATE _ ME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( tag , Ġ" Failed Ġto Ġstart Ġactivity Ġto Ġrate Ġapp ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . toast _ unknown _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwebsite . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . navigate ( this @ Settings Activity , ĠNavigator . SCREEN _ WE BS ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( tag , Ġ" Failed Ġto Ġstart Ġactivity Ġto Ġvisit Ġwebsite ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . toast _ unknown _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ CREATE _ FILE _ FOR _ BACKUP Ġ-> Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġbackup Restore ( settings ViewModel . backup ( data ?. data )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCODE _ SELECT _ FILE _ FOR _ REST ORE Ġ-> Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġbackup Restore ( settings ViewModel . restore ( data ?. data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbackup Restore ( op : ĠFlow < Base ViewModel . ViewData < Int >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġop . on Each ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Loading Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss In determinate Progress Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin determinate Progress Dialog Ġ= Ġin determinate Progress Dialog ( R . string . dialog _ wait ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss In determinate Progress Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss In determinate Progress Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . toast _ unknown _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). launch In ( lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdismiss In determinate Progress Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġin determinate Progress Dialog ?. dismiss () ĊĠĠĠĠĠĠĠ Ġin determinate Progress Dialog Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinf late View Binding (): ĠActivity Settings Binding Ġ= ĠActivity Settings Binding . inflate ( layout Inflater ) Ċ } Ċ