package Ġcom . il ab . you get mob iled l . utils Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Settings Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġdev . utils . Log Print Utils Ċ import Ġdev . utils . app . Path Utils Ċ import Ġdev . utils . app . Resource Utils . getContent Resolver Ċ import Ġdev . utils . app . image . Bitmap Utils Ċ import Ġdev . utils . app . image . Image Utils Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ object ĠApp Util Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Last Click : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠ Ġ// ĠåĪ¤æĸŃ adb è°ĥè¯ķ æ¨¡å¼ı æĺ¯åĲ¦ æīĵå¼Ģ ĊĠĠĠ Ġfun Ġis AD B Enable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSettings . Secure . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetContent Resolver (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . Secure . AD B _ ENABLED , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Url ( str : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġ"( https ?| http ) :// [- A - Za - z 0 - 9 + & @ # /% ?= ~ _| !: ,. ; ]+ [- A - Za - z 0 - 9 + & @ # /% = ~ _| ]" ĊĠĠĠĠĠĠĠ Ġval Ġmatch ers Ġ= ĠPattern . compile ( pattern ). matcher ( str ) ĊĠĠĠĠĠĠĠ Ġif Ġ( matchers . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmatch ers . group ( 0 ) Ġ=== Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget SD Card Path (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsd Card Exist Ġ= ĠEnvironment . get External Storage State (). equals ( Environment . MEDIA _ MOUNT ED ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sd Card Exist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPath Utils . getApp External (). app Download Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġjson Ġ åŃĹç¬¦ä¸² Ġ-> Ġå¯¹è±¡ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġfrom Json ( json : ĠString ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġobject Ġ: ĠType Token < T >() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( json , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġå¯¹è±¡ Ġ-> Ġjson Ġ åŃĹç¬¦ä¸² ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > ĠtoJson ( obj : ĠT ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgson . toJson ( obj ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åĢĴ è®¡ æĹ¶ ĊĠĠĠ Ġfun Ġcount Down Cor outines ( ĊĠĠĠĠĠĠĠ Ġtotal : ĠInt Ġ= Ġ 4 , Ġon Tick : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{}, Ġon Finish : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġscope : ĠCor outine Scope Ġ= ĠGlobal Scope ĊĠĠĠ Ġ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtotal Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. flow On ( Dispatch ers . Default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ Ġon Finish . invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġon Tick . invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . Main ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ è¾ĵåħ¥ æĲľç´¢ ĊĠĠĠ Ġfun Ġ< T , ĠR > Ġsearch Filter ( ĊĠĠĠĠĠĠĠ Ġstate Flow : ĠMutable State Flow < T >, ĊĠĠĠĠĠĠĠ Ġfilter : Ġ( T ) Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠ Ġflat Map : Ġ( T ) Ġ-> ĠFlow < R >, ĊĠĠĠĠĠĠĠ Ġon Result : Ġ( R ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġscope : ĠCor outine Scope ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġfilter . invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ Ġflat Map . invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĠLog Print Utils . e ("${ it . message }") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . Default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġon Result . invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . Main ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ æķ°ç»Ħ æ·± æĭ · è´Ŀ ĊĠĠĠ Ġfun ĠArray <* >. copy (): ĠArray < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . copyOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åŃĹç¬¦ä¸² æ·± æĭ · è´Ŀ ĊĠĠĠ Ġfun ĠString . copy (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ+ Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġèİ·åıĸ ĠTAG ĊĠĠĠ Ġfun ĠAny . TAG (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġinterval Ġ å®ļæĹ¶ åĻ¨ ĊĠĠĠ Ġfun Ġticker Flow () Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. flow On ( Dispatch ers . IO ) ĊĊĠĠĠ Ġ// Ġåĩ½æķ° èĬĤ æµģ ĊĠĠĠ Ġfun Ġfunc Throttle ( milli Seconds : ĠLong Ġ= Ġ 5 0 0 ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ- Ġm Last Click Ġ<= Ġmilli Seconds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Last Click Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åĮ¹éħį æĺ¯åĲ¦ ä¸º æķ°åŃĹ ĊĠĠĠ Ġfun Ġis Numeric ( str : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è¯¥ æŃ£ åĪĻ è¡¨è¾¾å¼ı åı¯ä»¥ åĮ¹éħį æīĢæľīçļĦ æķ°åŃĹ Ġ åĮħæĭ¬ è´Ł æķ° ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ("- ?[ 0 - 9 ]+ (\\ .[ 0 - 9 ]+ )? ") ĊĠĠĠĠĠĠĠ Ġval Ġbig Str Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal ( str ). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse Ġ// å¼Ĥå¸¸ Ġ è¯´æĺİ åĮħåĲ« éĿŀ æķ°åŃĹ ãĢĤ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġis Num Ġ= Ġpattern . matcher ( big Str ) Ġ// Ġmatcher æĺ¯ åħ¨ åĮ¹éħį ĊĠĠĠĠĠĠĠ Ġreturn Ġis Num . matches () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠ Ġfun Ġconvert Timestamp 2 Date ( time : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple DateFormat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm : ss ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsimple DateFormat . format ( Date ( time )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* Ġèİ·åıĸ url åıĤæķ° åĪĹè¡¨ ; ĊĠĠĠĠ Ġ* Ġ@ param Ġurl ĊĠĠĠĠ Ġ* Ġ@ return ĠMap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUrl Params Map ( url : ĠString ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġurl . substring After (' ?') ĊĠĠĠĠĠĠĠ Ġval Ġkey Values Ġ= Ġparams . split ("& "). to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġkey Values . forEach Ġ{ Ġkey Value Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Split Ġ= Ġkey Value . split (" =" ). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ str Split [ 0 ]] Ġ= Ġstr Split [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å°ģ éĿ¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Cover ( path : ĠString , Ġname : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Utils . get Video Thumbnail ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġcover Path Ġ= Ġ"${ get SD Card Path () }/ temp /${ name }. png " ĊĠĠĠĠĠĠĠ ĠImage Utils . save Bitmap To SD Card PNG ( bitmap , Ġcover Path ) ĊĠĠĠĠĠĠĠ Ġbitmap . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġcover Path ĊĠĠĠ Ġ} Ċ }