/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 1 9 ĠSol ly u , ĠW on ium Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcn . ma izz . kotlin . extension . kotlin Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . media . Media Metadata Retriever Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroidx . core . content . File Provider Ċ import Ġcn . ma izz . kotlin . extension . android . content . goTo Open File Ċ import Ġorg . apache . commons . codec . binary . Hex Ċ import Ġorg . apache . commons . codec . digest . Digest Utils Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġ éĿĻæĢģ æĸ¹æ³ķ Ġä»İ ä¸Ģä¸ª åŃĹç¬¦ä¸² ä¸Ń éļıæľº åŃĹç¬¦ä¸² Ċ Ġ* Ċ Ġ* Ġ@ param Ġlength Ġ éķ¿åº¦ Ċ Ġ* Ġ@ param Ġorigin Ġ åĨħå®¹ Ċ Ġ* Ġ@ param Ġrandom Ġ ç§į åŃĲ Ċ Ġ*/ Ċ fun ĠString . Companion . random ( length : ĠInt , Ġorigin : ĠString Ġ= Ġ" 0 1 2 3 4 5 6 7 8 9 abcdefgh ijkl mnopqrst uvw xyz ABCDEF GH IJ KL MN OP Q RST UV W XYZ ", Ġrandom : ĠRandom Ġ= ĠRandom ()): ĠString Ġ= Ġ( 1 .. length ). map Ġ{ Ġorigin [ random . nextInt ( origin . length Ġ- Ġ 1 )] Ġ}. join ToString ("") Ċ Ċ /** Ċ Ġ* Ġ åŃĹç¬¦ä¸² æīĵ é©¬ èµĽ åħĭ Ġ ä¾ĭå¦Ĥ ï¼ļ 1 3 2 8 8 8 8 8 8 8 8 Ġ=> Ġ 1 3 2 **** 8 8 8 8 Ċ Ġ* Ċ Ġ* Ġ@ param Ġchar ĠĠĠĠĠĠĠĠĠ Ġ æīĵ çłģ æĺ¾ç¤º çļĦ åŃĹç¬¦ Ċ Ġ* Ġ@ param ĠstartPosition Ġ èµ· å§ĭ ä½įç½® Ċ Ġ* Ġ@ param Ġend Position ĠĠ Ġ ç»ĵæĿŁ æľª çŁ¥ Ċ Ġ*/ Ċ fun ĠString . mosaic ( char : ĠChar Ġ= Ġ'*', ĠstartPosition : ĠInt Ġ= Ġ 1 , Ġend Position : ĠInt Ġ= Ġlength ): ĠString Ġ= ĠStringBuilder (). also Ġ{ ĠstringBuilder Ġ-> Ġ( 0 Ġuntil Ġlength ). forEach Ġ{ Ġi Ġ-> ĠstringBuilder . append ( if Ġ( i Ġin ĠstartPosition .. end Position ) Ġchar Ġelse Ġthis @ mosaic [ i ]) Ġ} Ġ}. toString () Ċ Ċ /** Ċ Ġ* ĠBase 6 4 åĬłå¯Ĩ Ċ Ġ* Ċ Ġ* Ġ@ param Ġcharset Ġ åŃĹç¬¦ éĽĨ Ċ Ġ* Ġ@ param Ġflag Ġ æłĩ å¿Ĺ Ċ Ġ*/ Ċ fun ĠString . base 6 4 Encode ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 , Ġflag : ĠInt Ġ= ĠBase 6 4 . NO _ WRAP ): ĠString Ġ= ĠBase 6 4 . encode ToString ( this . toByteArray ( charset ), Ġflag ) Ċ Ċ /** Ċ Ġ* ĠBase 6 4 è§£ å¯Ĩ Ċ Ġ* Ċ Ġ* Ġ@ param Ġcharset ĠĠ Ġ åŃĹç¬¦ éĽĨ Ċ Ġ* Ġ@ param Ġflag ĠĠĠĠĠ Ġ æłĩ å¿Ĺ Ċ Ġ*/ Ċ fun ĠString . base 6 4 Decode ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 , Ġflag : ĠInt Ġ= ĠBase 6 4 . NO _ WRAP ): ĠString Ġ= ĠString ( Base 6 4 . decode ( this , Ġflag ), Ġcharset ) Ċ Ċ /** Ċ Ġ* ĠMD 5 Ċ Ġ*/ Ċ fun ĠString . md 5 ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ= ĠString ( Hex . encode Hex ( Digest Utils . md 5 ( this . toByteArray ( charset )))) Ċ Ċ /** Ċ Ġ* Ġ è®¡ç®Ĺ æĸĩä»¶ sha 1 Ċ Ġ*/ Ċ fun ĠString . sha 1 ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ= ĠString ( Hex . encode Hex ( Digest Utils . sha 1 ( this . toByteArray ( charset )))) Ċ Ċ /** Ċ Ġ* Ġ è®¡ç®Ĺ æĸĩä»¶çļĦ sha 2 5 6 Ċ Ġ*/ Ċ fun ĠString . sha 2 5 6 ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ= ĠString ( Hex . encode Hex ( Digest Utils . sha 2 5 6 ( this . toByteArray ( charset )))) Ċ Ċ /** Ċ Ġ* Ġ è®¡ç®Ĺ æĸĩä»¶çļĦ sha 3 8 4 Ċ Ġ*/ Ċ fun ĠString . sha 3 8 4 ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ= ĠString ( Hex . encode Hex ( Digest Utils . sha 3 8 4 ( this . toByteArray ( charset )))) Ċ Ċ /** Ċ Ġ* Ġ è®¡ç®Ĺ æĸĩä»¶çļĦ sha 5 1 2 Ċ Ġ*/ Ċ fun ĠString . sha 5 1 2 ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ= ĠString ( Hex . encode Hex ( Digest Utils . sha 5 1 2 ( this . toByteArray ( charset )))) Ċ Ċ /** Ċ Ġ* Ġä½¿çĶ¨ å½ĵåīį åŃĹç¬¦ éĽĨ è¿Ľè¡Į éļıæľº Ċ Ġ* Ċ Ġ* Ġ@ param Ġlength Ġ éķ¿åº¦ Ċ Ġ* Ġ@ param Ġrandom Ġ ç§į åŃĲ Ċ Ġ*/ Ċ fun ĠString . random ( length : ĠInt Ġ= Ġ 1 0 , Ġrandom : ĠRandom Ġ= ĠRandom ()): ĠString Ġ= Ġ( 0 Ġuntil Ġlength ). map Ġ{ Ġthis [ random . nextInt ( this . length )] Ġ}. join ToString ("") Ċ Ċ /** Ċ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ åĮħåĲ« ä¸Ńæĸĩ Ċ Ġ*/ Ċ fun ĠString . is Contain Chinese (): ĠBoolean Ġ= Ġthis . contains ( Pattern . compile ("[ \ u 4 e 0 0 -\ u 9 fa 5 ]"). to Regex ()) Ċ Ċ /** Ċ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ ä¸Ģä¸ª éĤ®ç®± Ċ Ġ*/ Ċ fun ĠString . is Email Valid (): ĠBoolean Ġ= ĠPattern . compile ("^ \\ w + @ \\ w + \\. \\ w { 2 , }\ $ "). matcher ( this ). matches () Ċ Ċ /** Ċ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ ä¸Ģä¸ª ä¸ŃåĽ½ æīĭæľº åı· çłģ Ċ Ġ*/ Ċ fun ĠString . is PhoneNumber (): ĠBoolean Ġ= ĠPattern . compile ("^ (( 1 3 [ 0 - 9 ]) |( 1 5 [^ 4 ]) |( 1 8 [ 0 - 9 ]) |( 1 7 [ 0 - 8 ]) |( 1 4 [ 5 - 9 ]) |( 1 6 6 )| ( 1 9 [ 8 , 9 ]) |) \\ d { 8 }$ "). matcher ( this ). matches () Ċ Ċ /** Ċ Ġ* Ġå½ĵ ä½ľ ä¸Ģä¸ª File å¯¹è±¡ Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ fun ĠString . as File (): ĠFile Ġ= ĠFile ( this ) Ċ Ċ fun ĠString . get FileName (): String { ĊĠĠĠ Ġval Ġstart Ġ= this . lastIndexOf ("/") ĊĠĠĠ Ġreturn Ġif Ġ( start ! =- 1 ){ ĊĠĠĠĠĠĠĠ Ġthis . substring ( start + 1 , this . length ) ĊĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ è¿Ļä¸ª æĸ¹æ³ķ æľī éĹ®é¢ĺ Ċ Ġ*/ Ċ fun ĠString . getFirst Frame ( context : Context ): Bitmap ? { ĊĠĠĠ Ġvar Ġbitmap Ġ: Bitmap ?= null ĊĠĠĠ Ġval Ġretrie ver Ġ= Media Metadata Retriever (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠFileInputStream ( File ( this @ getFirst Frame ). absolute Path ) ĊĊĠĠĠĠĠĠ Ġval Ġurl Ġ= if Ġ( Build . VERSION . SDK _ INT Ġ> ĠBuild . VERSION _ CODES . N ) ĠFile Provider . get Uri For File ( context , Ġcontext . packageName . plus (". provider "), ĠFile ( this @ getFirst Frame )) Ġelse ĠUri . from File ( File ( this @ getFirst Frame )) ĊĊĠĠĠĠĠĠĠ Ġset DataSource ( url . toString ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġbitmap Ġ= retrie ver . frame At Time ?: throw ĠNullPointerException ( this . plus ( other Ġ= Ġ" ç¬¬ä¸Ģ å¸ § èİ·åıĸ å¤±è´¥ , bitmap ä¸º null ")) ĊĠĠĠ Ġ} catch Ġ( e : IllegalArgumentException ){ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} finally Ġ{ ĊĠĠĠĠĠĠĠ Ġretrie ver . release () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbitmap Ċ } Ċ /** Ċ Ġ* Ġå½ĵ ä½ľ ä¸Ģä¸ª åįģ åħŃ è¿ĽåĪ¶ åŃĹç¬¦ä¸² è§£æŀĲ Ċ Ġ* Ċ Ġ* Ġ@ since Ġ 1 . 0 . 2 Ċ Ġ*/ Ċ fun ĠString . as HexString (): ĠByteArray Ġ= ĠHex . decode Hex ( this . toCharArray ()) Ċ Ċ /** Ċ Ġ* Ġå½ĵ ä½ľ ä¸Ģä¸ª åįģ åħŃ è¿ĽåĪ¶ åŃĹç¬¦ä¸² è§£æŀĲ Ċ Ġ* Ċ Ġ* Ġ@ since Ġ 1 . 0 . 2 Ċ Ġ*/ Ċ fun ĠString . decode Hex (): ĠByteArray Ġ= Ġas HexString () Ċ Ċ /** Ċ Ġ* Ġä½¿çĶ¨ gzip åİĭç¼© åŃĹç¬¦ä¸² Ċ Ġ* Ċ Ġ* Ġ@ since Ġ 1 . 0 . 2 Ċ Ġ*/ Ċ fun ĠString . compress G zip ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠByteArray Ġ= Ġthis . toByteArray ( charset ). compress G zip () ĊĊ