package Ġcom . coding ch ili . mouse . en igma . presenter Ċ Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Html Ċ import Ġandroid . view .* Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . coding ch ili . mouse . en igma . R Ċ import Ġcom . coding ch ili . mouse . en igma . model .* Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton ĊĊ Ċ /** Ċ Ġ* ĠFragment Ġthat Ġshows Ġinformation Ġabout Ġa Ġsingle Ġcredential . Ċ Ġ*/ Ċ class ĠCredential Info Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcredential : ĠCredential ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Credential ( credential : ĠCredential ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . credential Ġ= Ġcredential ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . credential _ info , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview : ĠView Ġ= Ġinflater . inflate ( R . layout . fragment _ credential _ info , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= Ġview . findViewById < Toolbar >( R . id . bottom _ app _ bar ) ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ). set Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Nav Drawer Fragment Ġ= ĠBottom Navigation Drawer Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav Drawer Fragment . show ( activity ?. support FragmentManager !! , Ġbottom Nav Drawer Fragment . tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtoolbar . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . copy Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠMouse Preferences ( require Activity (). application ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudit Logger . on Copied To Clipboard ( require Context (), Ġcredential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . is Clipboard Warning Shown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy To Clipboard ( credential . password ) Ġ// Ġtodo : Ġexpire Ġclipboard ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Selector . clipboard Warning Dialog Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy To Clipboard ( credential . password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . set Clipboard Warn ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . show Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġcredential . password , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudit Logger . on Password Displayed ( require Context (), Ġcredential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . launch Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse (" https ://${ credential . domain }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . findViewById < Floating ActionButton >( R . id . remove _ credential ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Selector . remove Credential Dialog ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudit Logger . on Removed Credential ( require Context (), Ġcredential ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . findViewById < View >( R . id . cancel ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. support FragmentManager ?. pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . created _ at _ date ). text Ġ= Ġcredential . created ĊĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . username ). text Ġ= Ġcredential . username ĊĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . domain ). text Ġ= Ġcredential . domain ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġview . findViewById < ListView >( R . id . bre ach _ list ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġobject Ġ: ĠArray Adapter < P wn ed Site >( activity ?. application Context !! , ĠR . layout . list _ item _ credential , ĠCredential Bank . pw ns By Domain ( credential . domain )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( position : ĠInt , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem : ĠView ? Ġ= ĠconvertView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( convert View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġlayout Inflater . inflate ( R . layout . list _ domain _ p wn , Ġparent , Ġfalse ) Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġitem !!. findViewById < TextView >( R . id . bre ach _ header ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġitem . findViewById < TextView >( R . id . bre ach _ description ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp wn Ġ= ĠCredential Bank . pw ns By Domain ( credential . domain )[ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . text Ġ= ĠString . format ( header . text . toString (), Ġp wn . dis covered ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . text Ġ= ĠHtml . from Html ( p wn . description , ĠHtml . FROM _ HTML _ MODE _ COMP ACT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! p wn . ack nowled ged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . setTextColor ( context . getColor ( R . color . accent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . setTextColor ( context . getColor ( R . color . text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCredential Bank . ack nowledge ( p wn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCredential Bank . store ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠgetString ( R . string . credential _ un mark _ p wn ed ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ ĠF av icon Loader ( require Activity (). application Context ). get ( credential . domain , Ġ{ Ġbitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < ImageView >( R . id . logo ). setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġimage Ġavailable . ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy To Clipboard ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclipboard : ĠClip board Manager ? Ġ= Ġ( require Context (). getSystem Service ( Context . CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ?) ĊĠĠĠĠĠĠĠ Ġif Ġ( clipboard Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclip Ġ= ĠClip Data . new Plain Text (" pwd ", Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclipboard . set Primary Clip ( clip ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠgetString ( R . string . clipboard _ success ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠgetString ( R . string . clipboard _ failed ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ