/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . compose . ui . focus Ċ Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . remember Updated State Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . composed Ċ import Ġandroidx . compose . ui . modifier . Modifier Local Consumer Ċ import Ġandroidx . compose . ui . modifier . Modifier Local Provider Ċ import Ġandroidx . compose . ui . modifier . Modifier Local Read Scope Ċ import Ġandroidx . compose . ui . modifier . modifier Local Of Ċ import Ġandroidx . compose . ui . node . Modified Focus Node Ċ import Ġandroidx . compose . ui . platform . debug Inspector Info Ċ Ċ /** Ċ Ġ* ĠA ĠModifier Ġlocal Ġthat Ġstores Ġ[ Focus Properties ] Ġfor Ġa Ġsub - hierarchy . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ focus Properties ] Ċ Ġ*/ Ċ internal Ġval ĠModifier Local Focus Properties Ġ= Ġmodifier Local Of Ġ{ Ġdefault Focus Properties Ġ} Ċ Ċ internal Ġval Ġdefault Focus Properties : ĠFocus Properties Ġ= ĠFocus Properties Impl ( can Focus Ġ= Ġtrue ) Ċ Ċ /** Ċ Ġ* ĠProperties Ġthat Ġare Ġapplied Ġto Ġ[ focus Target ] s Ġthat Ġcan Ġread Ġthe Ġ[ Modifier Local Focus Properties ] Ċ Ġ* ĠModifier ĠLocal . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ focus Properties ] Ċ Ġ*/ Ċ interface ĠFocus Properties Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġset Ġto Ġfalse , Ġindicates Ġthat Ġthe Ġ[ focus Target ] Ġthat Ġthis Ġis Ġapplied Ġto Ġcan Ġno Ġlonger ĊĠĠĠĠ Ġ* Ġtake Ġfocus . ĠIf Ġthe Ġ[ focus Target ] Ġis Ġcurrently Ġfocused , Ġsetting Ġthis Ġproperty Ġto Ġfalse Ġwill ĊĠĠĠĠ Ġ* Ġend Ġup Ġclearing Ġfocus . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcan Focus : ĠBoolean Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġmodifier Ġallows Ġyou Ġto Ġspecify Ġproperties Ġthat Ġare Ġaccessible Ġto Ġ[ focus Target ] s Ġfurther Ċ Ġ* Ġdown Ġthe Ġmodifier Ġchain Ġor Ġon Ġchild Ġlayout Ġnodes . Ċ Ġ* Ċ Ġ* Ġ@ sample Ġandroidx . compose . ui . samples . Focus Properties Sample Ċ Ġ*/ Ċ fun ĠModifier . focus Properties ( scope : ĠFocus Properties . () Ġ-> ĠUnit ): ĠModifier Ġ= Ġcomposed ( ĊĠĠĠ Ġdebug Inspector Info Ġ{ ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" focus Properties " ĊĠĠĠĠĠĠĠ Ġproperties [" scope "] Ġ= Ġscope ĊĠĠĠ Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġval Ġremember ed Scope Ġby Ġremember Updated State ( scope ) ĊĠĠĠ Ġremember Ġ{ ĠFocus Properties Modifier ( focus Properties Scope Ġ= Ġremember ed Scope ) Ġ} Ċ } Ċ Ċ internal Ġclass ĠFocus Properties Modifier ( ĊĠĠĠ Ġval Ġfocus Properties Scope : ĠFocus Properties . () Ġ-> ĠUnit Ċ ) Ġ: ĠModifier Local Consumer , ĠModifier Local Provider < Focus Properties > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġparent Focus Properties : ĠFocus Properties ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Modifier Local s Updated ( scope : ĠModifier Local Read Scope ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Focus Properties Ġ= Ġscope . run Ġ{ ĠModifier Local Focus Properties . current Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġkey Ġ= ĠModifier Local Focus Properties ĊĊĠĠĠ Ġoverride Ġval Ġvalue : ĠFocus Properties ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdefault Focus Properties . copy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġwith Ġthe Ġspecified Ġfocus Ġproperties . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ( focus Properties Scope ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcurrent Ġvalue Ġfor Ġde activated Ġcan Ġbe Ġoverridden Ġby Ġa Ġparent 's Ġvalue . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Focus Properties ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġdefault Focus Properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Focus Ġ= Ġit . can Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠModified Focus Node . set Updated Properties ( properties : ĠFocus Properties ) Ġ{ ĊĠĠĠ Ġif Ġ( properties . can Focus ) Ġactivate Node () Ġelse Ġdeactivate Node () Ċ } Ċ Ċ private Ġclass ĠFocus Properties Impl ( override Ġvar Ġcan Focus : ĠBoolean ) Ġ: ĠFocus Properties Ċ Ċ private Ġfun ĠFocus Properties . copy ( scope : ĠFocus Properties . () Ġ-> ĠUnit ): ĠFocus Properties Ġ{ ĊĠĠĠ Ġreturn ĠFocus Properties Impl ( can Focus Ġ= Ġcan Focus ). apply ( scope ) Ċ }