/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠD uck Duck Go Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . duck duck go . app . accessibility Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . flow With Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . duck duck go . app . browser . databinding . Activity Accessibility Settings Binding Ċ import Ġcom . duck duck go . app . global . Duck Duck Go Activity Ċ import Ġcom . duck duck go . mobile . android . ui . view . quiet ly SetValue Ċ import Ġcom . duck duck go . mobile . android . ui . view binding . view Binding Ċ import Ġcom . google . android . material . slider . Slider Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . text . NumberFormat Ċ Ċ class ĠAccessibility Activity Ġ: ĠD uck Duck Go Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Accessibility Settings Binding Ġby Ġview Binding () ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠAccessibility Settings ViewModel Ġby Ġbind ViewModel () ĊĊĠĠĠ Ġprivate Ġval Ġtoolbar ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding . include Toolbar . toolbar ĊĊĠĠĠ Ġprivate Ġval Ġsystem FontSize ChangeListener Ġ= ĠCompound Button . On Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠ ĠviewModel . on System FontSize Changed ( isChecked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġforce Zoom ChangeListener Ġ= ĠCompound Button . On Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠ ĠviewModel . on Force Zoom Changed ( isChecked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠfontSize ChangeListener Ġ= ĠSlider . On ChangeListener Ġ{ Ġ_, ĠnewValue , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠviewModel . on FontSize Changed ( newValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġsetup Toolbar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠviewModel . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . view State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow With Lifecycle ( lifecycle , ĠLifecycle . State . RE SU MED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Accessibility Act Settings : Ġnew ViewState Ġ$ view State ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender FontSize ( view State . app FontSize , Ġview State . override System FontSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app FontSize Toggle . quiet ly Set Is Checked ( view State . override System FontSize , Ġsystem FontSize ChangeListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . force Zoom Toggle . quiet ly Set Is Checked ( view State . force Zoom , Ġforce Zoom ChangeListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. launch In ( lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender FontSize ( fontSize : ĠFloat , Ġoverride System FontSize : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . v (" Accessibility Act Settings : Ġrender FontSize Ġ$ fontSize ") ĊĊĠĠĠĠĠĠĠ Ġbinding . accessibility Slider . quiet ly SetValue ( fontSize , ĠfontSize ChangeListener ) ĊĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= ĠfontSize Ġ/ Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠNumber Format . get Percent Instance () ĊĠĠĠĠĠĠĠ Ġbinding . accessibility Slider Value . text Ġ= Ġformatter . format ( newValue ) ĊĠĠĠĠĠĠĠ Ġ// ĠAvoid s Ġscaling Ġour ĠSample ĠText Ġwhen Ġoverriding Ġsystem Ġfont Ġsize ĊĠĠĠĠĠĠĠ Ġbinding . accessibility Hint . setText Size ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 1 6 Ġ* ĠnewValue ) ĊĊĠĠĠĠĠĠĠ Ġbinding . fontSize Settings Group . alpha Ġ= Ġif Ġ( override System FontSize ) Ġ 1 . 0 f Ġelse Ġ 0 . 4 0 f ĊĠĠĠĠĠĠĠ Ġbinding . accessibility Slider . isEnabled Ġ= Ġoverride System FontSize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġintent ( context : ĠContext ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIntent ( context , ĠAccessibility Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ