package Ġcom . and or . bottom sheet lock it . core Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ Ċ class ĠMain ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġapp State Stream : ĠMutable LiveData < AppState > Ġ= ĠMutable LiveData ( ĊĠĠĠĠĠĠĠ ĠApp State () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget AppState Stream (): ĠLive Data < AppState > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapp State Stream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Text Focus Changed ( text Focus Type : ĠText Focus Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( text Focus Type Ġ== ĠText Focus Type . Focused Ġ&& Ġtext Focus Type Ġ!= Ġapp State Stream . value !!. focus Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġapp State Stream . value !!. bottom Menu State Ġis ĠBottom Menu State . Visible ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Bottom Sheet () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp State Stream . value Ġ= Ġapp State Stream . value ?. copy ( focus Type Ġ= Ġtext Focus Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Bottom Sheet () Ġ{ ĊĠĠĠĠĠĠĠ Ġapp State Stream . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp State Stream . value ?. copy ( bottom Menu State Ġ= ĠBottom Menu State . In visible ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Bottom Sheet ( bottom Menu State : ĠBottom Menu State . Visible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp State Stream . value Ġ= Ġapp State Stream . value ?. copy ( bottom Menu State Ġ= Ġbottom Menu State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Event ( event : ĠEventType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp State Ġ= Ġapp State Stream . value !! ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEventType . Text . Down Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app State . focus Type Ġ== ĠText Focus Type . Focused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Bottom Sheet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEventType . Text . Selection Changed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app State . focus Type Ġ== ĠText Focus Type . Focused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Bottom Sheet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }