package Ġde . j ep fa . y apm . ui . credential Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . core . view . set Padding Ċ import Ġcom . google . android . material . app bar . AppBar Layout Ċ import Ġcom . google . android . material . app bar . Col lap sing Toolbar Layout Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . google . android . material . chip . Chip Group Ċ import Ġde . j ep fa . y apm . R Ċ import Ġde . j ep fa . y apm . model . encrypted . Enc Credential Ċ import Ġde . j ep fa . y apm . model . secret . Key Ċ import Ġde . j ep fa . y apm . model . secret . Password Ċ import Ġde . j ep fa . y apm . model . secret . SecretKey Holder Ċ import Ġde . j ep fa . y apm . model . session . Session Ċ import Ġde . j ep fa . y apm . service . Preference Service Ċ import Ġde . j ep fa . y apm . service . Preference Service . PRE F _ ENABLE _ COPY _ PASSWORD Ċ import Ġde . j ep fa . y apm . service . Preference Service . PRE F _ ENABLE _ OVER LAY _ FEATURE Ċ import Ġde . j ep fa . y apm . service . Preference Service . PRE F _ MASK _ PASSWORD Ċ import Ġde . j ep fa . y apm . service . Preference Service . PRE F _ PASS WD _ WORDS _ ON _ NL Ċ import Ġde . j ep fa . y apm . service . aut ofill . Aut ofill Credential Holder Ċ import Ġde . j ep fa . y apm . service . label . Label Service Ċ import Ġde . j ep fa . y apm . service . overlay . Detach Helper Ċ import Ġde . j ep fa . y apm . service . secret . Secret Service . decrypt Common String Ċ import Ġde . j ep fa . y apm . service . secret . Secret Service . decrypt Password Ċ import Ġde . j ep fa . y apm . ui . Secure Activity Ċ import Ġde . j ep fa . y apm . ui . edit credential . Edit Credential Activity Ċ import Ġde . j ep fa . y apm . ui . label . Label Ċ import Ġde . j ep fa . y apm . ui . label . Label Dialog s Ċ import Ġde . j ep fa . y apm . use case . credential . Export Credential UseCase Ċ import Ġde . j ep fa . y apm . use case . credential . Import Credential UseCase Ċ import Ġde . j ep fa . y apm . use case . vault . Lock Vault UseCase Ċ import Ġde . j ep fa . y apm . util .* Ċ import Ġde . j ep fa . y apm . util . Password Color izer . span nable Ob f usable And Mask able String ĊĊ Ċ class ĠShow Credential Activity Ġ: ĠSecure Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠMode Ġ{ NORMAL , ĠNORMAL _ READ ONLY , ĠEXTER NAL _ FROM _ RECORD , ĠEXTER NAL _ FROM _ FILE } ĊĊĠĠĠ Ġval Ġupdate Credential Activity Request Code Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġvar Ġmode Ġ= ĠMode . NORMAL ĊĠĠĠ Ġprivate Ġvar Ġpassword Presentation Ġ= ĠPassword . Formatting Style . DEFAULT ĊĠĠĠ Ġprivate Ġvar Ġmask Password Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġmulti Line Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis AppBar Adjust ed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġob fusc ation Key : ĠKey ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcredential : ĠEn c Credential ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtool Bar Layout : ĠCol lap sing Toolbar Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp Bar Layout : ĠApp Bar Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtitle Layout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoolbar Chip Group : ĠCh ip Group ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpassword TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġwebsite TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadditional Info TextView : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġoptions Menu : ĠMenu ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġenable Back Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ show _ credential ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtoolbar : ĠToolbar Ġ= ĠfindViewById ( R . id . activity _ credential _ detail _ toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġtitle Layout Ġ= ĠfindViewById ( R . id . coll ap sing _ toolbar _ layout _ title ) ĊĠĠĠĠĠĠĠ Ġtoolbar Chip Group Ġ= ĠfindViewById ( R . id . toolbar _ chip _ group ) ĊĠĠĠĠĠĠĠ Ġtitle Layout . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġimportant Ġto Ġensure Ġlabels Ġare Ġfa ded Ġout Ġwhen Ġcol lap sing Ġthe Ġapp Ġbar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġtoolbar . layout Params Ġas ĠCol lap sing Toolbar Layout . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġtitle Layout . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġid Extra Ġ= Ġintent . getInt Extra ( Enc Credential . EXTRA _ CRED ENTIAL _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġwhen Ġ( intent . getString Extra ( EXTRA _ MODE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ MODE _ SHOW _ EXTERNAL _ FROM _ RECORD Ġ-> ĠMode . EXTERNAL _ FROM _ RECORD ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ MODE _ SHOW _ EXTERNAL _ FROM _ VA ULT _ FILE Ġ-> ĠMode . EXTERNAL _ FROM _ FILE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ MODE _ SHOW _ NORMAL _ READ ONLY Ġ-> ĠMode . NORMAL _ READ ONLY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMode . NORMAL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmask Password Ġ= ĠPreference Service . getAs Bool ( PRE F _ MASK _ PASSWORD , Ġthis ) ĊĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Service . getAs Bool ( Preference Service . PRE F _ PASS WD _ SHOW _ FORMAT TED , Ġthis ) ĊĠĠĠĠĠĠĠ Ġmulti Line Ġ= ĠPreference Service . getAs Bool ( PRE F _ PASS WD _ WORDS _ ON _ NL , Ġthis ) ĊĠĠĠĠĠĠĠ Ġpassword Presentation Ġ= ĠPassword . Formatting Style . createFrom Flags ( multi Line , Ġformatted ) ĊĊĠĠĠĠĠĠĠ Ġtool Bar Layout Ġ= ĠfindViewById ( R . id . credential _ detail _ toolbar _ layout ) ĊĠĠĠĠĠĠĠ Ġapp Bar Layout Ġ= ĠfindViewById ( R . id . credential _ detail _ app bar _ layout ) ĊĊĠĠĠĠĠĠĠ Ġuser TextView Ġ= ĠfindViewById ( R . id . user ) ĊĠĠĠĠĠĠĠ Ġwebsite TextView Ġ= ĠfindViewById ( R . id . website ) ĊĠĠĠĠĠĠĠ Ġadditional Info TextView Ġ= ĠfindViewById ( R . id . additional _ info ) ĊĠĠĠĠĠĠĠ Ġpassword TextView Ġ= ĠfindViewById ( R . id . passwd ) ĊĊĠĠĠĠĠĠĠ Ġpassword TextView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask Password ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Password Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Presentation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multi Line ) Ġpassword Presentation . prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġpassword Presentation . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaster SecretKey ?. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ?. let Ġ{ Ġcredential Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Password TextView ( key , Ġcredential , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ!= ĠMode . NORMAL ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredential Ġ= ĠEn c Credential . from Intent ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Password View ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ViewModel . getById ( id Extra ). observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Password View ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġcredential ?. let Ġ{ ĠAut ofill Credential Holder . update ( it , Ġob fusc ation Key ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Reload Ġ= ĠPreference Service . getAs Bool ( Preference Service . STATE _ REQUEST _ CRED ENTIAL _ LIST _ RE LOAD , Ġapplication Context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Reload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Service . delete ( Preference Service . STATE _ REQUEST _ CRED ENTIAL _ LIST _ RE LOAD , Ġapplication Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠMode . EXTERNAL _ FROM _ FILE Ġ|| Ġmode Ġ== ĠMode . NORMAL _ READ ONLY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ credential _ detail _ raw , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( mode Ġ== ĠMode . EXTERNAL _ FROM _ RECORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ credential _ detail _ import , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ credential _ detail , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġenable Copy Password Ġ= ĠPreference Service . getAs Bool ( PRE F _ ENABLE _ COPY _ PASSWORD , Ġthis ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! enable Copy Password ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ copy _ credential )?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġenable Overlay Feature Ġ= ĠPreference Service . getAs Bool ( PRE F _ ENABLE _ OVER LAY _ FEATURE , Ġthis ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! enable Overlay Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ detach _ credential )?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ de ob fusc ate _ password )?. isVisible Ġ= Ġcredential ?. is Obfuscated Ġ?: Ġfalse ĊĊĊĠĠĠĠĠĠĠ Ġoptions Menu Ġ= Ġmenu ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Session . is Denied ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLock Vault UseCase . execute ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcredential ?. let Ġ{ Ġcredential Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ export _ credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExport Credential UseCase . open Start Export Dialog ( credential , Ġob fusc ation Key , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ import _ credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠImport Credential UseCase . Input ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġup Intent Ġ= ĠIntent ( this , ĠList Credentials Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Up To ( up Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImport Credential UseCase . execute ( input , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ lock _ items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Vault UseCase . execute ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ detach _ credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDet ach Helper . detach Password ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential . user , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential . password , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Presentation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ copy _ credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClip board Util . copy Enc Password With Check ( credential . password , Ġob fusc ation Key , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ change _ credential ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠEdit Credential Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Enc Credential . EXTRA _ CRED ENTIAL _ ID , Ġcredential . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , Ġupdate Credential Activity Request Code ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ delete _ credential ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster SecretKey ?. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdec Name Ġ= Ġdecrypt Common String ( key , Ġcredential . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġen rich Id ( this , Ġdec Name , Ġcredential . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . title _ delete _ credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . message _ delete _ credential , Ġname )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( android . R . drawable . ic _ dialog _ alert ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . yes ) Ġ{ Ġdialog , Ġwhich Button Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ViewModel . delete ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Text ( this , ĠR . string . credential _ deleted ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġup Intent Ġ= ĠIntent ( this , ĠList Credentials Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Up To ( up Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . no , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ de ob fusc ate _ password ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster SecretKey ?. let Ġ{ Ġkey Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ob fusc ation Key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAut ofill Credential Holder . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Password TextView ( key , Ġcredential , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Text ( this , ĠR . string . de ob fusc ate _ restore d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDe ob fusc ation Dialog . open De ob fusc ation Dialog ( this ) Ġ{ Ġde ob fusc ation Key Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Password Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key Ġ= Ġde ob fusc ation Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword For De ob fusc ation Ġ= Ġdecrypt Password ( key , Ġcredential . password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword For De ob fusc ation . de ob fusc ate ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsp anned String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able Ob f usable And Mask able String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword For De ob fusc ation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Presentation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Password , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Obfuscated ( credential ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword For De ob fusc ation . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword TextView . text Ġ= Ġsp anned String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAut ofill Credential Holder . update ( credential , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Text ( this , ĠR . string . password _ de ob fuscated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ details ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . add Formatted Line ( getString ( R . string . identifier ), Ġcredential . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster SecretKey ?. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġdecrypt Common String ( key , Ġcredential . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . add Formatted Line ( getString ( R . string . name ), Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMode . EXTERNAL _ FROM _ FILE Ġ-> Ġsb . add Formatted Line ( getString ( R . string . source ), ĠgetString ( R . string . source _ from _ vault _ file )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMode . EXTERNAL _ FROM _ RECORD Ġ-> Ġsb . add Formatted Line ( getString ( R . string . source ), ĠgetString ( R . string . source _ from _ record )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMode . NORMAL _ READ ONLY Ġ-> Ġsb . add Formatted Line ( getString ( R . string . source ), ĠgetString ( R . string . source _ from _ the _ app )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential . modify Timestamp ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ> Ġ 1 0 0 0 ) Ġ// Ġmodify Timestamp Ġis Ġthe Ġcredential ĠId Ġafter Ġrunning Ġdb Ġmigration , Ġassume Ġids Ġare Ġlower Ġthan Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . add Formatted Line ( getString ( R . string . last _ modified ), ĠConstants . SD F _ DT _ MEDIUM . format ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . title _ credential _ details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( sb . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġupdate Credential Activity Request Code Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠEn c Credential . from Intent ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( credential . is Persistent ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Menu ?. find Item ( R . id . menu _ de ob fusc ate _ password )?. isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ViewModel . update ( credential , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlock () Ġ{ ĊĠĠĠĠĠĠĠ Ġob fusc ation Key ?. clear () ĊĠĠĠĠĠĠĠ Ġob fusc ation Key Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmask Password Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġob fusc ation Key ?. clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Obfuscated ( credential : ĠEn c Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcredential . is Obfuscated Ġ&& Ġob fusc ation Key Ġ== Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupdate Password View ( credential : ĠEn c Credential ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmaster SecretKey ?. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdec Name Ġ= Ġdecrypt Common String ( key , Ġcredential . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġen rich Id ( this , Ġdec Name , Ġcredential . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġdecrypt Common String ( key , Ġcredential . user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwebsite Ġ= Ġdecrypt Common String ( key , Ġcredential . website ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadditional Info Ġ= Ġdecrypt Common String ( key , Ġcredential . additional Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtool Bar Layout . title Ġ= Ġname ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Chip Group . removeAll Views () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Holder Ġ= Ġif Ġ( mode Ġ== ĠMode . EXTERNAL _ FROM _ FILE ) ĠLabel Service . external Holder Ġelse ĠLabel Service . default Holder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabels For Credential Ġ= Ġlabel Holder . decrypt Labels For Credential ( key , Ġcredential ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( labels For Credential . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġth inner Ġ= Ġshould Make Label Th inner ( labels For Credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabels For Credential . forEach Indexed Ġ{ Ġidx , Ġlabel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Ġ= Ġcreate And Add Label Chip ( label , Ġtoolbar Chip Group , Ġth inner , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Change Label Button Ġ= Ġmode Ġ== ĠMode . NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLabel Dialog s . open Label Overview Dialog ( this , Ġlabel , Ġshow Change Label Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġblind Ġlabel Ġto Ġensure Ġlayout ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblind View Ġ= ĠTextView ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblind View . set Padding ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Layout . addView ( bl ind View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is AppBar Adjust ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Bar Layout . layout Params . height Ġ-= Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis AppBar Adjust ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser View : ĠImageView Ġ= ĠfindViewById ( R . id . user _ image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser View . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser TextView . text Ġ= Ġuser ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwebsite View : ĠImageView Ġ= ĠfindViewById ( R . id . website _ image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwebsite TextView . text Ġ= Ġwebsite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( website . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwebsite View . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwebsite View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink ify ( website TextView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Info TextView . text Ġ= Ġadditional Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Password TextView ( key , Ġcredential , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Menu ?. find Item ( R . id . menu _ de ob fusc ate _ password )?. isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential . is Obfuscated ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Debug Info . isDebug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword TextView . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠAlertDialog . Builder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon : ĠDrawable Ġ= Ġapplication Info . load Icon ( package Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Ids Ġ= Ġtoolbar Chip Group . children ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit Ġas ? ĠCh ip Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . tag Ġas ? ĠInt Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġcredential . toString () Ġ+ ĠSystem . line Separator () Ġ+ Ġ" Label Ids : Ġ" Ġ+ Ġlabel Ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle ( R . string . debug ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAut ofill Credential Holder . update ( credential , Ġob fusc ation Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Password TextView ( ĊĠĠĠĠĠĠĠ Ġkey : ĠSecret Key Holder , ĊĠĠĠĠĠĠĠ Ġcredential : ĠEn c Credential , ĊĠĠĠĠĠĠĠ Ġallow De ob fusc ate : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġdecrypt Password ( key , Ġcredential . password ) ĊĠĠĠĠĠĠĠ Ġif Ġ( allow De ob fusc ate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Key ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . de ob fusc ate ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġsp anned String Ġ= Ġsp ann able Ob f usable And Mask able String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Presentation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask Password , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Obfuscated ( credential ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpassword TextView . text Ġ= Ġsp anned String ĊĠĠĠĠĠĠĠ Ġpassword . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Make Label Th inner ( labels : ĠList < Label >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtotal Labels Length Ġ= Ġlabels . map Ġ{ Ġit . name . length Ġ}. sum () ĊĠĠĠĠĠĠĠ Ġval Ġmax Label Length Ġ= Ġresources . getInteger ( R . integer . max _ label _ name _ length ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal Labels Length Ġ> Ġmax Label Length Ġ* Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ MODE Ġ= Ġ" de . j ep fa . y apm . ui . Show Credential Activity . mode " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ MODE _ SHOW _ NORMAL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" de . j ep fa . y apm . ui . Show Credential Activity . mode . show _ normal " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ MODE _ SHOW _ NORMAL _ READ ONLY Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" de . j ep fa . y apm . ui . Show Credential Activity . mode . show _ normal _ readonly " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ MODE _ SHOW _ EXTERNAL _ FROM _ RECORD Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" de . j ep fa . y apm . ui . Show Credential Activity . mode . show _ external _ from _ record " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ MODE _ SHOW _ EXTERNAL _ FROM _ VA ULT _ FILE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" de . j ep fa . y apm . ui . Show Credential Activity . m de . show _ external _ from _ vault _ file " ĊĠĠĠ Ġ} Ċ Ċ }