package Ġcc . xia ob aic z . safe . fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . add Callback Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcc . xia ob aic z . safe . R Ċ import Ġcc . xia ob aic z . safe . databinding . Fragment Account Detail Binding Ċ import Ġcc . xia ob aic z . safe . db . entity . Account Ċ import Ġcc . xia ob aic z . safe . model . Account Detail ViewModel Ċ import Ġcc . xia ob aic z . safe . util . getText Ċ import Ġcc . xia ob aic z . safe . util . setOn Interval ClickListener Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ è´¦æĪ· è¯¦æĥħ Ċ Ġ* ĠåĪĽå»º Ġ/ Ġä¿®æĶ¹ Ġ/ ĠæŁ¥ çľĭ Ċ Ġ*/ Ċ class ĠAccount Detail Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvm Ġby Ġview Models < Account Detail ViewModel >() ĊĊĠĠĠ Ġprivate Ġval Ġbind Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFragment Account Detail Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbind . model Ġ= Ġvm ĊĠĠĠĠĠĠĠ Ġreturn Ġbind . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// è®¾ å®ļ çĽ®æłĩ è´¦æĪ· ĊĠĠĠĠĠĠĠ Ġvm . target ( arguments ?. get Parcelable < Account ?> (" account "), Ġvm Global . password ) ĊĊĠĠĠĠĠĠĠ Ġ// æŁ¥çľĭ çĬ¶æĢģ åı¯ åĪłéĻ¤ ĊĠĠĠĠĠĠĠ Ġbind . btn Delete . is G one Ġ= Ġvm . is Create ĊĠĠĠĠĠĠĠ Ġbind . layer Last Time . is G one Ġ= Ġvm . is Create ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Config View ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® å®īåħ¨ åĮºåŁŁ ĊĠĠĠĠĠĠĠ Ġsafe Region ( bind . toolbar ) ĊĊĠĠĠĠĠĠĠ Ġ// çĽ®æłĩ è´¦æĪ· ç»ĳå®ļ è§ĨåĽ¾ ĊĠĠĠĠĠĠĠ Ġvm . account . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Domain . setText ( it . domain ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Account . setText ( it . account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Password . setText ( it . password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Last Time . setText ( SimpleDateFormat . get DateTime Instance ( DateFormat . SHORT , ĠDate Format . SHORT ). format ( Date ( it . last Time ))) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ç¼ĸè¾ĳ çĬ¶æĢģ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠ Ġvm . edit . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . btn Edit . isSelected Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Domain . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Account . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind . et Password . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Action . is Show Edit Action ( vm )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , ĠgetString ( R . string . sn ackbar _ editable )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// æĵįä½ľ ç»ĵæŀľ ĊĠĠĠĠĠĠĠ Ġvm . result . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , Ġif Ġ( it ) ĠgetString ( R . string . sn ackbar _ save _ success ) Ġelse ĠgetString ( R . string . sn ackbar _ save _ fail d )) Ġ{ Ġbar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĵįä½ľ æĪĲåĬŁ ĠæıĲ ä¾Ľ è¿ĶåĽŀ æĵįä½ľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar . setAction ( getString ( R . string . action _ back )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// åĪłéĻ¤ ĊĠĠĠĠĠĠĠ Ġvm . delete . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// è§£ å¯Ĩ å¼Ĥå¸¸ ĊĠĠĠĠĠĠĠ Ġvm . decode Error . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , ĠgetString ( R . string . sn ackbar _ decrypt _ fail d )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// åĬłå¯Ĩ å¼Ĥå¸¸ ĊĠĠĠĠĠĠĠ Ġvm . encode Error . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , ĠgetString ( R . string . sn ackbar _ encrypt _ fail d )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Set Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// è¿ĶåĽŀ ä¸Ĭ ä¸Ģ å±Ĥ ĊĠĠĠĠĠĠĠ Ġbind . toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ç¼ĸè¾ĳ Ġor Ġ ä¿ĿåŃĺ ĊĠĠĠĠĠĠĠ Ġbind . btn Edit . setOn Interval ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vm . is Edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , ĠgetString ( R . string . sn ackbar _ save _ data ), ĠSn ackbar . LENGTH _ IN DEFIN ITE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setAction ( getString ( R . string . action _ save )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åı¯ ç¼ĸè¾ĳ çĬ¶æĢģ ä¿ĿåŃĺ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . save ( bind . et Domain . getText , Ġbind . et Account . getText , Ġbind . et Password . getText , Ġvm Global . password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . is Edit Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä¸įåı¯ ç¼ĸè¾ĳ çĬ¶æĢģ è½¬æį¢ åı¯ ç¼ĸè¾ĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . is Edit Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// åĪłéĻ¤ ĊĠĠĠĠĠĠĠ Ġbind . btn Delete . setOn Interval ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , ĠgetString ( R . string . sn ackbar _ delete )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setAction ( getString ( R . string . action _ delete )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// éĢĢåĩº è¯¢ éĹ® æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// éĢĢåĩº æĵįä½ľ ĊĠĠĠ Ġprivate Ġfun Ġon Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Action . is Back Interceptor ( vm )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç¼ĸè¾ĳ çĬ¶æĢģ è¯¢ éĹ® æĺ¯åĲ¦ åıĸæ¶Ī ä¿ĿåŃĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( bind . container , ĠgetString ( R . string . sn ackbar _ cancel )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setAction ( getString ( R . string . action _ cancel )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// å·® å¼Ĥ æĵįä½ľ Ġ æĸ°å»º Ġor Ġ ç¼ĸè¾ĳ ĊĠĠĠ Ġprivate Ġval Ġm Action Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( vm . is Create ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction . Create Action ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction . Detail Action ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å·® å¼Ĥ æĵįä½ľ æİ¥åı£ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġsealed Ġclass ĠAction Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĭ ¦ æĪª è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġis Back Interceptor ( vm : ĠAccount Detail ViewModel ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĺ¾ç¤º ç¼ĸè¾ĳ çĬ¶æĢģ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġis Show Edit Action ( vm : ĠAccount Detail ViewModel ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æĸ°å»º æĵįä½ľ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġobject ĠCreate Action Ġ: ĠAction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Back Interceptor ( vm : ĠAccount Detail ViewModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Show Edit Action ( vm : ĠAccount Detail ViewModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è¯¦æĥħ æĵįä½ľ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġobject ĠDetail Action Ġ: ĠAction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Back Interceptor ( vm : ĠAccount Detail ViewModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvm . is Edit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Show Edit Action ( vm : ĠAccount Detail ViewModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvm . is Edit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }