package Ġcom . ko ara . key o . Fragments Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . ko ara . key o . databinding . Fragment Utility Binding Ċ Ċ /* ĊĠĠĠ ĠGenerates ĠPassword Ċ */ Ċ class ĠUtility Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding Ġ: ĠFragment Utility Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclip Board Ġ: ĠClip board Manager ĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Utility Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġclip Board Ġ= Ġrequire Activity (). getSystem Service ( Context . CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġbinding . password Length Seek Bar ĊĠĠĠĠĠĠĠ Ġ// Set Ġmax Ġand Ġmin Ġof Ġseek Ġbar Ġ-> ĠPassword ĠLength ĊĠĠĠĠĠĠĠ Ġlength . min Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġlength . max Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġvar Ġpassword Length : ĠInt ĊĠĠĠĠĠĠĠ Ġlength . setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( length : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . length Text Editor . setText ( length . progress . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( length : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwrite Ġcustom Ġcode Ġfor Ġprogress Ġis Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( length : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Length Ġ= Ġlength . progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// Generate Ġpassword Ġbutton ĊĠĠĠĠĠĠĠ Ġbinding . generate Password Button . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Length Ġ= Ġbinding . length Text Editor . text . toString (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Password ( password Length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Copy Ġgenerated Ġpassword ĊĠĠĠĠĠĠĠ Ġbinding . copy Generated Password . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpassword Ġ Ġ= Ġbinding . generated Password . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword . sub Sequence ( 1 0 , password . length ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclip Ġ= ĠClip Data . new Plain Text (" username ", password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclip Board . set Primary Clip ( clip ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), " password Ġcopied ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Gener ates Ġthe Ġpassword ĊĠĠĠ Ġprivate Ġfun Ġrandom Password ( length Ġ: ĠInt Ġ, Ġrange Ġ: ĠList < Char >): ĠString Ġ= ĠList ( length ) Ġ{ Ġrange Ġ. random () Ġ}. join ToString ("") ĊĊĠĠĠ Ġ// Handles Ġtype Ġof Ġpassword ĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġprivate Ġfun Ġgenerate Password ( password Length Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġlower Ġ= Ġbinding . lower Case CheckBox . isChecked ĊĠĠĠĠĠĠĠ Ġval Ġupper Ġ= Ġbinding . upper Case CheckBox . isChecked ĊĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġbinding . number Case CheckBox . isChecked ĊĠĠĠĠĠĠĠ Ġval Ġsymbol Ġ= Ġbinding . special Case CheckBox . isChecked ĊĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġupper Ġ&& Ġnum Ġ&& Ġsymbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' A ' .. ' Z ') + (' 0 ' .. ' 9 ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( upper Ġ&& Ġnum Ġ&& Ġsymbol )-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' A ' .. ' Z ') + (' 0 ' .. ' 9 ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġnum Ġ&& Ġsymbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' 0 ' .. ' 9 ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġupper Ġ&& Ġsymbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' A ' .. ' Z ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġnum Ġ&& Ġupper )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' 0 ' .. ' 9 ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( num Ġ&& Ġsymbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' 0 ' .. ' 9 ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( upper Ġ&& Ġsymbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' A ' .. ' Z ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġsymbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( upper Ġ&& Ġnum )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' A ' .. ' Z ') + (' 0 ' .. ' 9 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġnum )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' 0 ' .. ' 9 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower Ġ&& Ġupper )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' z ') + (' A ' .. ' Z ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( symbol )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' !' .. '/ ') + (' :' .. ' @ ') + (' [' .. '` ') + (' {' .. ' ~ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( num )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' 0 ' .. ' 5 ') + (' 6 ' .. ' 9 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( upper )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' A ' .. ' X ') + (' Y ' .. ' Z ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lower )-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ(' a ' .. ' x ') + (' y ' .. ' z ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . generated Password . text Ġ= Ġ" password Ġ: Ġ"+ random Password ( password Length , chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ