package Ġio . github . tak us an 2 3 . tat im id roid . nico login . compose Ċ Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġio . github . tak us an 2 3 . tat im id roid . R Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nico api . login . N ico Login Data Class Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nico login . view model . N ico Two Factor Login ViewModel Ċ Ċ /** Ċ Ġ* Ġãĥ ĭ ãĤ³ ãĥĭ ãĤ³ ãģ® äºĮ æ®µ éļ İ èªį è¨¼ ãģ® ãĥ¯ ãĥ³ ãĤ¿ãĤ¤ ãĥł ãĥĳ ãĤ¹ ãĥ¯ ãĥ¼ãĥī åħ¥åĬĽ çĶ» éĿ¢ Ċ Ġ* Ċ Ġ* Ġ@ param ĠviewModel Ġ äºĮ æ®µ éļ İ èªį è¨¼ çĶ» éĿ¢ ViewModel Ċ Ġ* Ġ@ param Ġn ico Login Data Class Ġ äºĮ æ®µ éļ İ èªį è¨¼ ãģ§ ä½¿ ãģĨ ãĥĩãĥ¼ãĤ¿ ãĤ¯ãĥ©ãĤ¹ Ċ Ġ* Ġ*/ Ċ @ Composable Ċ fun ĠN ico Two Factor Login Screen ( viewModel : ĠN ico Two Factor Login ViewModel , Ġn ico Login Data Class : ĠN ico Login Data Class ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ¯ ãĥ³ ãĤ¿ãĤ¤ ãĥł ãĥĳ ãĤ¹ ãĥ¯ ãĥ¼ãĥī ĊĠĠĠĠĠĠĠ Ġval Ġkey Visual Ar ts Ġ= ĠviewModel . otp LiveData . observe As State ( initial Ġ= Ġ"") ĊĠĠĠĠĠĠĠ Ġ// Ġãĥĩ ãĥĲãĤ¤ ãĤ¹ ãĤĴ ä¿¡ éł ¼ ãģĻãĤĭ ãģĭ ĊĠĠĠĠĠĠĠ Ġval Ġis Trust Device Ġ= Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¢ãĥĹãĥª éĸĭ ãģĦãģ¦ ãģ Ń ãģ¨ ãģĭ ãģ® æĸĩåŃĹ ĊĠĠĠĠĠĠĠ ĠN ico Two Factor Login Message () ĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ¯ ãĥ³ ãĤ¿ãĤ¤ ãĥł ãĥĳ ãĤ¹ ãĥ¯ ãĥ¼ãĥī åħ¥åĬĽ æ¬ Ħ ĊĠĠĠĠĠĠĠ ĠOut lined TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 5 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġkey Visual Ar ts . value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĠviewModel . set OTP ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . two _ factor _ auth _ code )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ( keyboard Type Ġ= ĠKeyboard Type . Number ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ä¿¡ éł ¼ ãģĻãĤĭ ãģĭ ĊĠĠĠĠĠĠĠ ĠN ico Two Factor Trust Checkbox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Trust Ġ= Ġis Trust Device . value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Trust Change Ġ= Ġ{ Ġis Trust Device . value Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ èªį è¨¼ ãĥľ ãĤ¿ ãĥ³ ĊĠĠĠĠĠĠĠ ĠOut lined Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . start Two Factor Login ( nico Login Data Class Ġ= Ġn ico Login Data Class , Ġo tp Ġ= Ġkey Visual Ar ts . value , Ġis Trust Device Ġ= Ġis Trust Device . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ lock _ outline _ black _ 2 4 dp ), Ġcontent Description Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . two _ factor _ auth _ start )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ äºĮ æ®µ éļ İ èªį è¨¼ ãģĮ å¿ħè¦ģ ãĥ¡ ãĥĥãĤ»ãĥ¼ãĤ¸ ãĤĴ è¡¨ç¤º ãģĻãĤĭ Ċ Ġ* Ġ*/ Ċ @ Composable Ċ private Ġfun ĠN ico Two Factor Login Message () Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 0 . dp ), ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ security ), Ġcontent Description Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . two _ factor _ auth ), ĠfontSize Ġ= Ġ 2 4 . sp ) ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . need _ two _ factor _ auth )) ĊĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . how _ to _ get _ two _ factor _ auth _ code )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġãģĵãģ® ãĥĩ ãĥĲãĤ¤ ãĤ¹ ãĤĴ ä¿¡ éł ¼ ãģĻãĤĭ ãĥģ ãĤ§ ãĥĥãĤ¯ ãĥľ ãĥĥãĤ¯ãĤ¹ Ċ Ġ* Ġ@ param Ġis Trust Ġ ä¿¡ éł ¼ ãģĻãĤĭ åł´åĲĪãģ¯ true Ċ Ġ* Ġ@ param Ġon Trust Change Ġãĥ ģ ãĤ§ ãĥĥãĤ¯ ãĥľ ãĥĥãĤ¯ãĤ¹ ãģ® åĢ¤ ãģĮ å¤ī ãĤı ãģ£ãģŁ ãĤī åĳ¼ ãģ° ãĤĮãĤĭ Ċ Ġ* Ġ*/ Ċ @ Composable Ċ private Ġfun ĠN ico Two Factor Trust Checkbox ( ĊĠĠĠ Ġis Trust : ĠBoolean , ĊĠĠĠ Ġon Trust Change : Ġ( Boolean ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . click able Ġ{ Ġon Trust Change (! is Trust ) Ġ}, ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( id Ġ= ĠR . string . two _ factor _ auth _ trust _ device ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 5 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠCheckbox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 5 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Ġ= Ġis Trust , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġ{ Ġon Trust Change (! is Trust ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }