package Ġio . homeassistant . comp anion . android . n fc Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . n fc . N fc Adapter Ċ import Ġandroid . util . Log Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġio . homeassistant . comp anion . android . common . data . integration . Integration Repository Ċ import Ġio . homeassistant . comp anion . android . util . Navigator Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . as Shared Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util . UUID Ċ import Ġjavax . inject . Inject Ċ import Ġio . homeassistant . comp anion . android . common . R Ġas Ġcommon R Ċ Ċ @ H ilt ViewModel Ċ class ĠN fc ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġintegration UseCase : ĠIntegration Repository , ĊĠĠĠ Ġapplication : ĠApplication Ċ ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" N fc ViewModel " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis N fc Enabled Ġby Ġmutable State Of ( false ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġn fc Tag Identifier Ġby Ġmutable State Of < String ? >( null ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġn fc Identifier Is Editable Ġby Ġmutable State Of ( true ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġn fc Event Should Write Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġnavigator Ġ= ĠNavigator () ĊĊĠĠĠ Ġprivate Ġval Ġ_ n fc Result Snackbar Ġ= ĠMutable Shared Flow < Int >() ĊĠĠĠ Ġvar Ġn fc Result Snackbar Ġ= Ġ_ n fc Result Snackbar . as Shared Flow () ĊĊĠĠĠ Ġfun Ġset Destination ( destination : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġn fc Event Should Write Ġ= Ġn fc Tag Identifier Ġ!= Ġnull Ġ&& Ġdestination Ġ== ĠN fc Setup Activity . NAV _ WRITE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck N fc Enabled () Ġ{ ĊĠĠĠĠĠĠĠ Ġis N fc Enabled Ġ= ĠN fc Adapter . getDefault Adapter ( getApplication ()). isEnabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Tag Identifier ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( n fc Identifier Is Editable Ġ&& Ġvalue . trim (). isNotEmpty ()) Ġn fc Tag Identifier Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite New Tag Simple ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġn fc Tag Identifier Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġn fc Identifier Is Editable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġdon 't Ġneed Ġto Ġperform Ġnavigation Ġhere Ġbecause Ġit Ġwill Ġbe Ġset Ġas Ġthe Ġstart Destination ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite New Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġn fc Tag Identifier Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġn fc Identifier Is Editable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnavigator . navigate To ( N fc Setup Activity . NAV _ WRITE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon N fc Read Success ( identifier : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġn fc Tag Identifier Ġ= Ġidentifier ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . Navigator Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠN fc Setup Activity . NAV _ EDIT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Back stack To Ġ= ĠN fc Setup Activity . NAV _ W EL CO ME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġon N fc Read Empty () Ġ= Ġ_ n fc Result Snackbar . emit ( common R . string . n fc _ invalid _ tag ) ĊĊĠĠĠ Ġsuspend Ġfun Ġon N fc Write Success ( identifier : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ n fc Result Snackbar . emit ( common R . string . n fc _ write _ tag _ success ) ĊĠĠĠĠĠĠĠ Ġn fc Tag Identifier Ġ= Ġidentifier ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . Navigator Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠN fc Setup Activity . NAV _ EDIT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Back stack To Ġ= ĠN fc Setup Activity . NAV _ W EL CO ME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġon N fc Write Failure () Ġ= Ġ_ n fc Result Snackbar . emit ( common R . string . n fc _ write _ tag _ error ) ĊĊĠĠĠ Ġfun Ġduplicate N fc Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġn fc Identifier Is Editable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnavigator . navigate To ( N fc Setup Activity . NAV _ WRITE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfire N fc Tag Event () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn fc Tag Identifier ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintegration UseCase . scan Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash Map Of (" tag _ id " Ġto Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ n fc Result Snackbar . emit ( common R . string . n fc _ event _ f ired _ success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġsend Ġtag Ġto ĠHome ĠAssistant .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ n fc Result Snackbar . emit ( common R . string . n fc _ event _ f ired _ fail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ_ n fc Result Snackbar . emit ( common R . string . n fc _ event _ f ired _ fail ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ