/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠPat rick ĠGold inger Ċ Ġ* Ċ Ġ* Ġ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 Ġdev . pat rick gold . fl or is board . app . devtools Ċ Ċ import Ġandroid . view . text service . Suggestions Info Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Column Scope Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . Local Content Color Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Composition Local Provider Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . platform . Local Layout Direction Ċ import Ġandroidx . compose . ui . text . font . Font Family Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . unit . Layout Direction Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġdev . pat rick gold . fl or is board . app . fl or is Preference Model Ċ import Ġdev . pat rick gold . fl or is board . clipboard Manager Ċ import Ġdev . pat rick gold . fl or is board . editor Instance Ċ import Ġdev . pat rick gold . fl or is board . lib . Fl or is Locale Ċ import Ġdev . pat rick gold . fl or is board . lib . observe As NonNull State Ċ import Ġdev . pat rick gold . fl or is board . spell ing Manager Ċ import Ġdev . pat rick gold . jet pref . datastore . model . observe As State Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ private Ġval ĠCard Background Ġ= ĠColor . Black . copy ( 0 . 6 f ) Ċ private Ġval ĠDate Format Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ' T ' HH - mm - ss ", ĠFl or is Locale . default (). base ) Ċ Ċ @ Composable Ċ fun ĠDev tools Overlay ( modifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ Ġval Ġprefs Ġby Ġfl or is Preference Model () ĊĊĠĠĠ Ġval Ġshow Primary Clip Ġby Ġprefs . devtools . show Primary Clip . observe As State () ĊĠĠĠ Ġval Ġshow Input State Overlay Ġby Ġprefs . devtools . show Input State Overlay . observe As State () ĊĠĠĠ Ġval Ġshow Spell ing Overlay Ġby Ġprefs . devtools . show Spell ing Overlay . observe As State () ĊĊĠĠĠ ĠComp osition Local Provider ( ĊĠĠĠĠĠĠĠ ĠLocal Content Color Ġprovides ĠColor . White , ĊĠĠĠĠĠĠĠ ĠLocal Layout Direction Ġprovides ĠLayout Direction . L tr , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Primary Clip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Clipboard Overlay () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Input State Overlay ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Input State Overlay () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Spell ing Overlay ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Spell ing Overlay () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDev tools Clipboard Overlay () Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġclipboard Manager Ġby Ġcontext . clipboard Manager () ĊĊĠĠĠ ĠDev tools Overlay Box ( title Ġ= Ġ" Clipboard Ġoverlay ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprimary Clip Ġby Ġclipboard Manager . primary Clip . observe As State () ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( bottom Ġ= Ġ 8 . dp , Ġstart Ġ= Ġ 8 . dp , Ġend Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġprimary Clip . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDev tools Input State Overlay () Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġeditor Instance Ġby Ġcontext . editor Instance () ĊĊĠĠĠ Ġval Ġinfo Ġby Ġeditor Instance . active Info Flow . collect As State () ĊĠĠĠ Ġval Ġcontent Ġby Ġeditor Instance . active Content Flow . collect As State () ĊĠĠĠ Ġval Ġselection Ġ= Ġcontent . selection ĊĊĠĠĠ ĠDev tools Overlay Box ( title Ġ= Ġ" Input Ġstate Ġoverlay ") Ġ{ ĊĠĠĠĠĠĠĠ ĠDev tools Sub Group ( title Ġ= Ġ" Editor Info ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" Type =${ info . input Attributes . type } ĠVari ation =${ info . input Attributes . variation } ĠIs Rich =${ info . is Rich Input Editor }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" Initial Selection : Ġ${ info . initial Selection }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDev tools Sub Group ( title Ġ= Ġ" Editor Content ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" Selection : Ġ{ Ġstart =${ selection . start }, Ġend =${ selection . end } Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" Before : Ġ\" ${ content . text Before Selection }\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" Selected : Ġ\" ${ content . selected Text }\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" After : Ġ\" ${ content . text After Selection }\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev tools Text ( text Ġ= Ġ" Comp osing Word : Ġ${ content . comp osing }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Composable Ċ private Ġfun ĠDev tools Spell ing Overlay () Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġspell ing Manager Ġby Ġcontext . spell ing Manager () ĊĊĠĠĠ Ġval Ġdebug Overlay Version Ġby Ġspell ing Manager . debug Overlay Version . observe As NonNull State () ĊĠĠĠ Ġval Ġsuggestions Infos Ġ= Ġremember ( debug Overlay Version ) Ġ{ Ġspell ing Manager . debug Overlay Suggestions Infos . snapshot () Ġ} ĊĊĠĠĠ Ġval Ġsorted Entries Ġ= Ġsuggestions Infos . entries . sorted By Descending Ġ{ Ġit . key Ġ} ĊĠĠĠ ĠDev tools Overlay Box ( title Ġ= Ġ" Spell ing Ġoverlay Ġ(${ sorted Entries . size }) ") Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( timestamp , Ġword Info Pair ) Ġin Ġsorted Entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( word , Ġinfo ) Ġ= Ġword Info Pair ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Ty po Ġ= Ġ( info . suggestions Attributes Ġand ĠSuggest ions Info . RESULT _ ATTR _ LOOK S _ LIKE _ TY PO ) Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggestions Ġ= ĠArray ( info . suggestions Count ) Ġ{ Ġn Ġ-> Ġinfo . get Suggestion At ( n ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 8 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate Format . format ( Date ( timestamp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"$ date Ġ- Ġ\"$ word \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Ġ= ĠFont Family . Mono space , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 2 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetails Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" is Ty po : Ġ$ is Ty po ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ty po ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" pro viding Ġcorre ctions Ġlist Ġof Ġsize Ġn =${ suggestions . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( n , Ġsuggestion ) Ġin Ġsuggestions . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ Ġ[$ n ] Ġ= Ġstring [ ${ suggestion . length }] Ġ{ Ġ\" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( suggestion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line ("\" Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. prepend Indent (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdetails , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Ġ= ĠFont Family . Mono space , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 2 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDev tools Overlay Box ( ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġcontent : Ġ@ Composable ĠColumn Scope . () Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( all Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Card Background ), ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( all Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 4 . sp , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontent () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDev tools Sub Group ( ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġcontent : Ġ@ Composable ĠColumn Scope . () Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( start Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġtitle , ĊĠĠĠĠĠĠĠ ĠfontFamily Ġ= ĠFont Family . Mono space , ĊĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 2 . sp , ĊĠĠĠ Ġ) ĊĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . padding ( start Ġ= Ġ 1 2 . dp , Ġbottom Ġ= Ġ 8 . dp ), Ġcontent Ġ= Ġcontent ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠDev tools Text ( text : ĠString ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠ ĠfontFamily Ġ= ĠFont Family . Mono space , ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 2 . sp , ĊĠĠĠ Ġ) Ċ } Ċ