package Ġcom . tr if ork . tim android . authenticated Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . flow With Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . tr if ork . tim android . R Ċ import Ġcom . tr if ork . tim android . databinding . Fragment Authenticated Binding Ċ import Ġcom . tr if ork . tim android . token . TokenType Ċ import Ġcom . tr if ork . tim android . util . Authenticated Users Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠAuth enticated Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠFragment Authenticated Binding ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠAuth enticated ViewModel ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġauthenticated Users : ĠAuth enticated Users ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠAuth enticated Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Authenticated Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġbinding ?. userName ?. text Ġ= Ġcontext ?. getString ( R . string . fragment _ authenticated _ text _ view _ user _ name )?. replace ("% 1 ", Ġauthenticated Users . getName ( args . userId ) Ġ?: Ġargs . userId ) ĊĠĠĠĠĠĠĠ Ġbinding ?. textView UserId ?. text Ġ= Ġcontext ?. getString ( R . string . fragment _ authenticated _ text _ view _ user _ id )?. replace ("% 1 ", Ġargs . userId ) ĊĠĠĠĠĠĠĠ ĠviewModel . on UserId Change ( args . userId ) ĊĊĠĠĠĠĠĠĠ Ġinit Listeners () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding ?. root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding ?. button AccessToken ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Token Fragment ( TokenType . Access ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding ?. button RefreshToken ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Token Fragment ( TokenType . Refresh ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding ?. button Log Out ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . logout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding ?. button Delete ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete User () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Are Ġwe Ġnot Ġalready Ġbio metric Ġauthenticated ? ĠThen Ġmake Ġit Ġpossible Ġto Ġdo Ġso ĊĠĠĠĠĠĠĠ Ġif (! viewModel . bio metric Authentication ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. button Bio metric Settings ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Bio metric Settings Fragment ( viewModel . getUserId ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. textView Bio metric Settings ?. text Ġ= Ġcontext ?. getString ( R . string . fragment _ authenticated _ text _ view _ bio metric _ available _ not _ configured ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. button Bio metric Settings ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( viewModel . bio metric Available ( this . require Context ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. textView Bio metric Settings ?. text Ġ= Ġcontext ?. getString ( R . string . fragment _ authenticated _ text _ view _ bio metric _ enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. textView Bio metric Settings ?. text Ġ= Ġcontext ?. getString ( R . string . fragment _ authenticated _ text _ view _ bio metric _ not _ available ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . events Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow With Lifecycle ( view Lifecycle Owner . lifecycle , ĠLifecycle . State . STARTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAuth enticated ViewModel . Event . Navigate To Welcome Ġ-> Ġnavigate To Welcome Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAuth enticated ViewModel . Event . Navigate To Bio metric Settings Ġ-> Ġnavigate To Bio metric Settings Fragment ( it . userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Lifecycle Owner . lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Welcome Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ fragment _ authenticated _ to _ fragment _ welcome , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Token Fragment ( token Type : ĠTokenType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠAuth enticated Fragment Directions . action Fragment Authenticated To Fragment Token ( token Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Bio metric Settings Fragment ( userId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠAuth enticated Fragment Directions . action Fragment Authenticated To Fragment Bio metric Settings ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }