package Ġcom . pe ch uro . bs uir schedule . feature . settings Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġcom . bs uir . pe ch uro . bs uir schedule . Build Config Ċ import Ġcom . bs uir . pe ch uro . bs uir schedule . R Ċ import Ġcom . pe ch uro . bs uir schedule . common . App Analytics Ċ import Ġcom . pe ch uro . bs uir schedule . common . App Analytics Event Ċ import Ġcom . pe ch uro . bs uir schedule . common . base . Base Fragment Ċ import Ġcom . pe ch uro . bs uir schedule . domain . entity . App Theme Ċ import Ġcom . pe ch uro . bs uir schedule . ext . formatted String Res Ċ import Ġcom . pe ch uro . bs uir schedule . ext . get Callback OrNull Ċ import Ġcom . pe ch uro . bs uir schedule . ext . non Null Ċ import Ġcom . pe ch uro . bs uir schedule . ext . observe Ċ import Ġcom . pe ch uro . bs uir schedule . ext . set Safe ClickListener Ċ import Ġcom . pe ch uro . bs uir schedule . ext . setVisible With Alpha Ċ import Ġcom . pe ch uro . bs uir schedule . feature . option dialog . Option Dialog Ċ import Ġcom . pe ch uro . bs uir schedule . feature . option dialog . Option Dialog Button Data Ċ import Ġkotlinx . android . synt hetic . main . fragment _ settings .* Ċ import Ġjava . util .* Ċ Ċ class ĠSettings Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġinterface ĠAction Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Settings Theme Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Settings Fragment " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠSettings Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id Ġ= ĠR . layout . fragment _ settings ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ViewModel ( Settings ViewModel :: class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġaction Callback : ĠAction Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġaction Callback Ġ= Ġget Callback OrNull () ĊĠĠĠĠĠĠĠ ĠApp Analytics . report ( App Analytics Event . Settings . Opened ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġobserve Data () ĊĠĠĠĠĠĠĠ Ġset View Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġaction Callback Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Back Pressed () Ġ= ĠviewModel . set Normal State () ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings Toolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Theme Ġ= ĠgetString ( viewModel . getCurrent App Theme (). formatted String Res ). toLowerCase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġsettings Theme Button . text Ġ= ĠgetString ( R . string . settings _ action _ change _ theme , Ġcurrent Theme ) ĊĠĠĠĠĠĠĠ Ġsettings Version Text . setMessage ( Build Config . VERSION _ NAME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . state Data . non Null (). observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Layout State ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . theme Changed Event . non Null (). observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Callback ?. on Settings Theme Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Layout State ( state : ĠSettings ViewModel . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSettings ViewModel . State . Idle Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetting Action Parent View . setVisible With Alpha ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Info Load Loader View . setVisible With Alpha ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Info Load Error Parent View . setVisible With Alpha ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSettings ViewModel . State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetting Action Parent View . setVisible With Alpha ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Info Load Loader View . setVisible With Alpha ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Info Load Error Parent View . setVisible With Alpha ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSettings ViewModel . State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetting Action Parent View . setVisible With Alpha ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Info Load Loader View . setVisible With Alpha ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Info Load Error Parent View . setVisible With Alpha ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset View Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings Theme Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Theme () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings Update Info Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Info () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings Info Load Error Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Info () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings Rate App Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Analytics . report ( App Analytics Event . Settings . Rate App Opened ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Rate App () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrate App ( it . context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings Send Feedback Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Analytics . report ( App Analytics Event . Settings . Send Feedback Opened ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Feedback ( it . context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings Privacy Pol ice Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Analytics . report ( App Analytics Event . Settings . Privacy Pol ice Opened ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Privacy Pol ice ( it . context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrate App ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplay Store Intent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . app Uri Provider . play Store App Uri ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġplay Store Intent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġweb Intent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . app Uri Provider . play Store Web Uri ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Intent Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Store Intent . resolve Activity ( context . package Manager ) Ġ!= Ġnull Ġ-> Ġplay Store Intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Intent . resolve Activity ( context . package Manager ) Ġ!= Ġnull Ġ-> Ġweb Intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( result Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Privacy Pol ice ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠviewModel . app Uri Provider . privacy Pol ice Uri ) ĊĠĠĠĠĠĠĠ Ġintent . resolve Activity ( context . package Manager )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Feedback ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND TO , ĠviewModel . app Uri Provider . email Feedback Uri ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Address Ġ= Ġcontext . getString ( R . string . settings _ feedback _ email _ address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġcontext . getString ( R . string . settings _ feedback _ email _ subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ EMAIL , ĠarrayOf ( email Address )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ SUBJECT , Ġsubject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġintent . resolve Activity ( context . package Manager )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Theme () Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Analytics . report ( App Analytics Event . Settings . Themes Opened ) ĊĠĠĠĠĠĠĠ Ġval Ġavailable Themes Ġ= ĠApp Theme . get Available () ĊĠĠĠĠĠĠĠ Ġval Ġselected Theme Ġ= ĠviewModel . getCurrent App Theme () ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġavailable Themes . map Ġ{ Ġtheme Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOption Dialog Button Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠgetString ( theme . formatted String Res ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġtheme Ġ== Ġselected Theme ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠOption Dialog . Option Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Theme Ġ= Ġavailable Themes [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Theme Ġ!= Ġselected Theme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Analytics . report ( App Analytics Event . Settings . Theme Changed ( new Theme )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set App Theme ( new Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString ( R . string . settings _ title _ select _ theme ) ĊĠĠĠĠĠĠĠ ĠOption Dialog . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Actions ( options , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( child FragmentManager , ĠOption Dialog . TAG ) ĊĠĠĠ Ġ} Ċ }