package Ġcom . bh soft . baidu ime i Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġpub . dev rel . eas yper missions . After Permission Granted Ċ import Ġpub . dev rel . eas yper missions . AppSettings Dialog Ċ import Ġpub . dev rel . eas yper missions . Easy Permissions Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . nio . charset . Charset Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . spec . Iv Parameter Spec Ċ import Ġjavax . crypto . spec . SecretKey Spec ĊĊ Ċ @ Experimental Std lib Api Ċ class ĠMainActivity ( val Ġscope : ĠCor outine Scope Ġ= ĠMain Scope ()) Ġ: ĠAppCompatActivity (), ĊĠĠĠ ĠCor outine Scope Ġby Ġscope , ĠEasy Permissions . Permission Callbacks Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġ ime i Text . text Ġ= Ġ" IME I ĠLoading ..." ĊĊĠĠĠĠĠĠĠ Ġcheck B aid u FileContent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Permission Granted ( req Storage Permission ) ĊĠĠĠ Ġfun Ġcheck B aid u FileContent () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġperms Ġ= ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Easy Permissions . has Permissions ( this , Ġ* perms )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġget B aid u FileContent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ime i Text . text Ġ= Ġ" Found Ġba idu Ġdata :\ n \ n $ result " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ime i Text . text Ġ= Ġ" Re jo ice , Ġno Ġba idu Ġhidden Ġfile Ġwas Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ime i Text . text Ġ= Ġ" B aid u Ġfile Ġexists Ġbut Ġit 's Ġempty " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Storage Ġread Ġpermission Ġis Ġrequired Ġto Ġaccess Ġba idu Ġgenerated Ġfile ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq Storage Permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* perms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget B aid u FileContent (): ĠString Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( Environment . get External Storage Directory (). absolute Path Ġ+ ĠfilePath ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFileNotFoundException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfile Contents Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ Ġif Ġ( file Contents . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Expected Ġfile Ġwas Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdecoded Bytes Ġ= Ġdecode Base 6 4 ( file Contents ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠString ( dec ipher ( decoded Bytes ), ĠCharset . default Charset ()) ĊĊĠĠĠĠĠĠĠ Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecode Base 6 4 ( input : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . decode ( input , ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdec ipher ( data : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs key Spec Ġ= ĠSecret KeySpec ( key , Ġ" AES ") ĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance (" AES / CBC / PKCS 7 Padding ") ĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . DE CRYPT _ MODE , Ġs key Spec , ĠI v Parameter Spec ( iv )) ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . do Final ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġscope . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠForward Ġresults Ġto ĠEasy Permissions ĊĠĠĠĠĠĠĠ ĠEasy Permissions . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permissions Denied ( request Code : ĠInt , Ġperms : ĠMutable List < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Easy Permissions . some Permission Per manently Denied ( this , Ġperms )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Settings Dialog . Builder ( this ). build (). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ ime i Text . text Ġ= Ġ" Storage Ġread Ġpermission Ġrequired " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permissions Granted ( request Code : ĠInt , Ġperms : ĠMutable List < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġused ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġreq Storage Permission Ġ= Ġ 5 9 8 6 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠfilePath Ġ= Ġ"/ backups /. System Config /. c uid 2 " ĊĠĠĠĠĠĠĠ Ġvar Ġiv Ġ= Ġ" 3 0 2 1 2 1 0 2 dic udi ab ". encode To ByteArray () Ġ// . to HexString () ĊĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= Ġ" 3 0 2 1 2 1 0 2 dic udi ab ". encode To ByteArray () Ġ// . to HexString () ĊĠĠĠ Ġ} Ċ } Ċ