package Ġcom . lo dz . android . core kt . cache Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġjava . io . ByteArray OutputStream ĊĊ Ċ /** Ċ Ġ* Ġ æĹ¶éĹ´ è®¡ç®Ĺ å·¥åħ· ç±» Ċ Ġ* ĠCreated Ġby ĠMichael ĠYang Ġon Ġ 2 0 1 3 / 8 / 7 . Ċ Ġ* Ġupdate Ġby Ġz hou L Ġon Ġ 2 0 1 8 / 1 1 / 7 . Ċ Ġ*/ Ċ internal Ġobject ĠUtils Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠSE PAR ATOR Ġ= Ġ' Ġ' ĊĊĠĠĠ Ġ/** ĠåĪ¤æĸŃ ç¼ĵåŃĺ çļĦæķ°æį® [ str ] æĺ¯åĲ¦ åĪ° æľŁ Ġ*/ ĊĠĠĠ Ġfun Ġis Due ( str : ĠString ): ĠBoolean Ġ= Ġis Due ( str . toByteArray ()) ĊĊĠĠĠ Ġ/** ĠåĪ¤æĸŃ ç¼ĵåŃĺ çļĦæķ°æį® [ data ] æĺ¯åĲ¦ åĪ° æľŁ Ġ*/ ĊĠĠĠ Ġfun Ġis Due ( data : ĠByteArray ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr s Ġ= Ġget Date Info From Date ( data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( strs Ġ!= Ġnull Ġ&& Ġstr s . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsave Time Str Ġ= Ġstr s [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( save Time Str . startsWith (" 0 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Time Str Ġ= Ġsave Time Str . substring ( 1 , Ġsave Time Str . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ> Ġsave Time Str . to Long () Ġ+ Ġstr s [ 1 ]. to Long () Ġ* Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnew String With Date Info ( second : ĠInt , Ġstr Info : ĠString ): ĠString Ġ= Ġcreate Date Info ( second ) Ġ+ Ġstr Info ĊĊĠĠĠ Ġfun Ġnew ByteArray With Date Info ( second : ĠInt , Ġdata 2 : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġcreate Date Info ( second ). toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġret data Ġ= ĠByteArray ( data 1 . size Ġ+ Ġdata 2 . size ) ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( data 1 , Ġ 0 , Ġret data , Ġ 0 , Ġdata 1 . size ) ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( data 2 , Ġ 0 , Ġret data , Ġdata 1 . size , Ġdata 2 . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Date Info ( str Info : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinfo Ġ= Ġstr Info ĊĠĠĠĠĠĠĠ Ġif Ġ( has Date Info ( info . toByteArray ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ= Ġinfo . substring ( info . indexOf ( SEPARATOR ) Ġ+ Ġ 1 , Ġinfo . length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġinfo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Date Info ( data : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Date Info ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcopy Of Range ( data , ĠindexOf ( data , ĠSE PAR ATOR ) Ġ+ Ġ 1 , Ġdata . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Date Info From Date ( data : ĠByteArray ): ĠArray < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Date Info ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Date Ġ= ĠString ( copyOf Range ( data , Ġ 0 , Ġ 1 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete After Ġ= ĠString ( copyOf Range ( data , Ġ 1 4 , ĠindexOf ( data , ĠSE PAR ATOR ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( save Date , Ġdelete After ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Date Info ( data : ĠByteArray ): ĠBoolean Ġ= Ġdata . size Ġ> Ġ 1 5 Ġ&& Ġdata [ 1 3 ] Ġ== Ġ'- '. to Byte () Ġ&& ĠindexOf ( data , ĠSE PAR ATOR ) Ġ> Ġ 1 4 ĊĊĊĠĠĠ Ġprivate Ġfun ĠindexOf ( data : ĠByteArray , Ġc : ĠChar ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data [ i ] Ġ== Ġc . to Byte ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Of Range ( original : ĠByteArray , Ġfrom : ĠInt , Ġto : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Length Ġ= Ġto Ġ- Ġfrom ĊĠĠĠĠĠĠĠ Ġif Ġ( new Length Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ from Ġ> Ġ$ to ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= ĠByteArray ( new Length ) ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( original , Ġfrom , Ġcopy , Ġ 0 , ĠMath . min ( original . size Ġ- Ġfrom , Ġnew Length )) ĊĠĠĠĠĠĠĠ Ġreturn Ġcopy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Date Info ( second : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentTime Ġ= ĠSystem . currentTimeMillis (). toString () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( currentTime . length Ġ< Ġ 1 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġ" 0 $ currentTime " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ currentTime -$ second $ SEPARATOR " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbitmap 2 Bytes ( bitmap : ĠBitmap ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArrayOutputStream (). use Ġ{ Ġba os : ĠByteArrayOutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , Ġba os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġba os . toByteArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbytes 2 B imap ( b : ĠByteArray ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( b . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( b , Ġ 0 , Ġb . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdrawable 2 Bitmap ( drawable : ĠDrawable ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åıĸ Ġdrawable ĠçļĦ éķ¿ å®½ ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġdrawable . intrinsic Width ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġdrawable . intrinsic Height ĊĠĠĠĠĠĠĠ Ġ// Ġ åıĸ Ġdrawable ĠçļĦ é¢ľèī² æł¼å¼ı ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġif Ġ( drawable . opacity Ġ!= ĠPixel Format . OP A QUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . RGB _ 5 6 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ å»ºç«ĭ å¯¹åºĶ Ġbitmap ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( w , Ġh , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġ// Ġ å»ºç«ĭ å¯¹åºĶ Ġbitmap ĠçļĦ çĶ» å¸ĥ ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġw , Ġh ) ĊĠĠĠĠĠĠĠ Ġ// ĠæĬ Ĭ Ġdrawable Ġ åĨħå®¹ çĶ» åĪ° çĶ» å¸ĥ ä¸Ń ĊĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbitmap 2 Drawable ( bitmap : ĠBitmap ): ĠDrawable Ġ= ĠBitmap Drawable ( null , Ġbitmap ) Ċ }