/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġ ĠST Micro electron ics ĠâĢĵ ĠAll Ġrights Ġreserved Ċ Ġ* ĠThe ĠST Micro electron ics Ġcorpor ate Ġlogo Ġis Ġa Ġtrade mark Ġof ĠST Micro electron ics Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ġmodification , Ċ Ġ* Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ċ Ġ* ĠĠ Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ċ Ġ* ĠĠ Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ċ Ġ* ĠĠ Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ- ĠNeither Ġthe Ġname Ġnor Ġtrade marks Ġof ĠST Micro electron ics ĠInternational ĠN . V . Ġnor Ġany Ġother Ċ Ġ* ĠĠ ĠST Micro electron ics Ġcompany Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ċ Ġ* ĠĠ Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ- ĠAll Ġof Ġthe Ġicons , Ġpictures , Ġlog os Ġand Ġother Ġimages Ġthat Ġare Ġprovided Ġwith Ġthe Ġsource Ġcode Ċ Ġ* ĠĠ Ġin Ġa Ġdirectory Ġwhose Ġtitle Ġbegins Ġwith Ġst _ images Ġmay Ġonly Ġbe Ġused Ġfor Ġinternal Ġpurposes Ġand Ċ Ġ* ĠĠ Ġshall Ġnot Ġbe Ġre distributed Ġto Ġany Ġthird Ġparty Ġor Ġmodified Ġin Ġany Ġway . Ċ Ġ* Ċ Ġ* Ġ- ĠAny Ġre distributions Ġin Ġbinary Ġform Ġshall Ġnot Ġinclude Ġthe Ġcapability Ġto Ġdisplay Ġany Ġof Ġthe Ċ Ġ* ĠĠ Ġicons , Ġpictures , Ġlog os Ġand Ġother Ġimages Ġthat Ġare Ġprovided Ġwith Ġthe Ġsource Ġcode Ġin Ġa Ġdirectory Ċ Ġ* ĠĠ Ġwhose Ġtitle Ġbegins Ġwith Ġst _ images . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY Ċ Ġ* ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER Ċ Ġ* ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ Ġ* ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR Ċ Ġ* ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY Ċ Ġ* ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . st . Blue MS . demos . plot Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . InputType Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . preference .* Ċ import Ġcom . st . Blue MS . R Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . minutes Ċ import Ġkotlin . time . seconds Ċ Ċ @ Experimental Time Ċ private Ġclass ĠData Storage Mapper ( private Ġval ĠviewModel : ĠPlot Settings ViewModel ) Ġ: ĠPreference DataStore (){ ĊĊĠĠĠ Ġoverride Ġfun Ġget Boolean ( key : ĠString ?, Ġdef Value : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( key Ġ== ĠAUTO SCALE _ KEY ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewModel . plot Boundary . value ?. enable AutoScale Ġ?: Ġdef Value ĊĠĠĠĠĠĠĠ Ġ}// else ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . getBoolean ( key , Ġdef Value ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠgetString ( key : ĠString ?, Ġdef Value : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( key ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMIN IMUM _ Y _ KEY Ġ-> ĠviewModel . plot Boundary . value ?. min ?. to Format String () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAX IMUM _ Y _ KEY Ġ-> ĠviewModel . plot Boundary . value ?. max ?. to Format String () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTIME _ TO _ PLOT _ KEY Ġ-> ĠviewModel . plot Duration . value ?. in Seconds ?. toInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput String ( key : ĠString ?, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( key ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMIN IMUM _ Y _ KEY Ġ-> ĠviewModel . change M im imum Y Value ( value ?. toFloat OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAX IMUM _ Y _ KEY Ġ-> ĠviewModel . change Maximum Y Value ( value ?. toFloat OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTIME _ TO _ PLOT _ KEY -> ĠviewModel . change Plot Duration ( value ?. toInt ()?. seconds ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Boolean ( key : ĠString ?, Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( key Ġ== ĠAUTO SCALE _ KEY Ġ&& Ġvalue ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable AutoScale () ĊĠĠĠĠĠĠĠ Ġ}// else ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Int ( key : ĠString ?, Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( key Ġ== ĠTIME _ TO _ PLOT _ KEY ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . change Plot Duration ( value . minutes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Int ( key : ĠString ?, Ġdef Value : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( key Ġ== ĠTIME _ TO _ PLOT _ KEY ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewModel . plot Duration . value ?. in Seconds ?. toInt () Ġ?: Ġdef Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . getInt ( key , Ġdef Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAUTO SCALE _ KEY Ġ= Ġ" plot Feature Settings _ autos cale " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMIN IMUM _ Y _ KEY Ġ= Ġ" plot Feature Settings _ min um um Y " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX IMUM _ Y _ KEY Ġ= Ġ" plot Feature Settings _ maximum Y " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTIME _ TO _ PLOT _ KEY Ġ= Ġ" plot Feature Settings _ time Stamp Range " ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġfun ĠFloat . to Format String (): String { ĊĠĠĠ Ġreturn ĠString . format ("% . 2 f ", this ) Ċ } Ċ Ċ @ Experimental Time Ċ internal Ġclass ĠPlot Preference Fragment Ġ: ĠPreference Fragment Compat (){ ĊĊĠĠĠ Ġprivate Ġval Ġsettings ViewModel Ġby Ġactivity ViewModels < Plot Settings ViewModel >() ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ plot _ feature , Ġroot Key ) ĊĊĠĠĠĠĠĠĠ Ġpreference Manager . preference DataStore Ġ= ĠData Storage Mapper ( settings ViewModel ) ĊĠĠĠĠĠĠĠ Ġval Ġmin Preference Ġ= Ġfind Preference < EditText Preference >( Data Storage Mapper . MIN IMUM _ Y _ KEY ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Preference Ġ= Ġfind Preference < EditText Preference >( Data Storage Mapper . MAXIMUM _ Y _ KEY ) ĊĠĠĠĠĠĠĠ Ġval Ġautos cale IsEnabled Ġ= Ġsettings ViewModel . plot Boundary . value ?. enable AutoScale Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġfind Preference < CheckBox Preference >( Data Storage Mapper . AUTO SCALE _ KEY )?. let Ġ{ Ġauto Scale Preference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Scale Preference . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference , Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Aut os cale Ġ= Ġvalue Ġas ĠBoolean ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Preference ?. isEnabled Ġ= Ġ! has Aut os cale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Preference ?. isEnabled Ġ= Ġ! has Aut os cale ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Preference ChangeListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Scale Preference . isChecked Ġ= Ġautos cale IsEnabled ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġmin Preference ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Text Edit Preference ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isEnabled Ġ= Ġ! autos cale IsEnabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Ġ= Ġsettings ViewModel . plot Boundary . value ?. min ?. to Format String () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmax Preference ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Text Edit Preference ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isEnabled Ġ= Ġ! autos cale IsEnabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Ġ= Ġsettings ViewModel . plot Boundary . value ?. max ?. to Format String () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfind Preference < List Preference >( Data Storage Mapper . TIME _ TO _ PLOT _ KEY )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . summary Provider Ġ= ĠList Preference . Simple Summary Provider . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . value Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setValue Index ( selectedIndex ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselected Index () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġsettings ViewModel . plot Duration . value ?. in Seconds ?. toInt (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġresources . getString Array ( R . array . plot Feature Settings _ seconds To Plot Value ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalues . indexOf ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Text Edit Preference ( preference : ĠEditText Preference ){ ĊĠĠĠĠĠĠĠ Ġpreference . setOn Bind EditText Listener Ġ{ Ġedit Text Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . input Type Ġ= ĠInput Type . TYPE _ CLASS _ NUMBER Ġor ĠInput Type . TYPE _ NUMBER _ FLAG _ DECIMAL Ġor ĠInput Type . TYPE _ NUMBER _ FLAG _ DECIMAL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpreference . summary Provider Ġ= ĠEditText Preference . Simple Summary Provider . getInstance () ĊĠĠĠ Ġ} Ċ Ċ }