package Ġcom . letter . socket assistant . utils Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . Reader Ċ Ċ /** Ċ Ġ* Ġ æī©å±ķ æĸ¹æ³ķ Ċ Ġ* Ċ Ġ* Ġ@ author ĠLetter ( never mind zz t @ gmail . com ) Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Utils " Ċ Ċ /** Ċ Ġ* ĠToast Ċ Ġ* Ġ@ receiver ĠContext Ċ Ġ* Ġ@ param Ġmessage ĠString Ġæ ¶ Ī æģ¯ Ċ Ġ* Ġ@ param Ġduration ĠInt ĠæıĲ ç¤º æĹ¶ éķ¿ Ċ Ġ*/ Ċ fun ĠContext . toast ( message : ĠString , Ġduration : ĠInt Ġ= ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠ Ġ= ĠToast . makeText ( this , Ġmessage , Ġduration ). show () Ċ Ċ /** Ċ Ġ* ĠToast Ċ Ġ* Ġ@ receiver ĠContext Ċ Ġ* Ġ@ param Ġres Id ĠInt Ġ æĸĩæľ¬ èµĦæºĲ id Ċ Ġ* Ġ@ param Ġduration ĠInt ĠæıĲ ç¤º æĹ¶ éķ¿ Ċ Ġ*/ Ċ fun ĠContext . toast (@ String Res Ġres Id : ĠInt , Ġduration : ĠInt Ġ= ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠ Ġ= ĠToast . makeText ( this , Ġresources . getText ( res Id ), Ġduration ). show () Ċ Ċ /** Ċ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ ä¸º æļ Ĺ é»ĳ æ¨¡å¼ı Ċ Ġ* Ġ@ receiver ĠContext Ġcontext Ċ Ġ* Ġ@ return ĠBoolean Ġ{@ code Ġtrue } æļ Ĺ é»ĳ æ¨¡å¼ı Ġ{@ code Ġfalse } ä¸įæĺ¯ æļ Ĺ é»ĳ æ¨¡å¼ı Ċ Ġ*/ Ċ fun ĠContext . is Dark Theme (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġflag Ġ= Ġresources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK ĊĠĠĠ Ġreturn Ġflag Ġ== ĠConfiguration . UI _ MODE _ N IGHT _ YES Ċ } Ċ Ċ /** Ċ Ġ* ĠToast Ċ Ġ* Ġ@ receiver ĠAndroid ViewModel Ċ Ġ* Ġ@ param Ġmessage ĠString Ġæ ¶ Ī æģ¯ Ċ Ġ* Ġ@ param Ġduration ĠInt ĠæıĲ ç¤º æĹ¶ éķ¿ Ċ Ġ*/ Ċ fun ĠAndroid ViewModel . toast ( message : ĠString , Ġduration : ĠInt Ġ= ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠ Ġ= ĠToast . makeText ( getApplication (), Ġmessage , Ġduration ). show () Ċ Ċ /** Ċ Ġ* ĠToast Ċ Ġ* Ġ@ receiver ĠAndroid ViewModel Ċ Ġ* Ġ@ param Ġres Id ĠInt Ġ æĸĩæľ¬ èµĦæºĲ id Ċ Ġ* Ġ@ param Ġduration ĠInt ĠæıĲ ç¤º æĹ¶ éķ¿ Ċ Ġ*/ Ċ fun ĠAndroid ViewModel . toast (@ String Res Ġres Id : ĠInt , Ġduration : ĠInt Ġ= ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠ Ġ= ĠToast . makeText ( getContext (), ĠgetContext (). resources . getText ( res Id ), Ġduration ). show () Ċ Ċ /** Ċ Ġ* Ġèİ·åıĸ Context Ċ Ġ* Ġ@ receiver ĠAndroid ViewModel Ċ Ġ* Ġ@ return ĠContext ĠContext Ċ Ġ*/ Ċ fun ĠAndroid ViewModel . getContext (): ĠContext ĊĠĠĠĠĠĠĠ Ġ= Ġget Application () Ċ Ċ /** Ċ Ġ* Ġèİ·åıĸ åŃĹç¬¦ä¸² Ċ Ġ* Ġ@ receiver ĠAndroid ViewModel Ċ Ġ* Ġ@ param Ġres Id ĠInt Ġ èµĦæºĲ id Ċ Ġ* Ġ@ return ĠString Ġ åŃĹç¬¦ä¸² Ċ Ġ*/ Ċ fun ĠAndroid ViewModel . getString (@ String Res Ġres Id : ĠInt ) ĊĠĠĠĠĠĠĠ Ġ= ĠgetContext (). getString ( res Id ) Ċ Ċ /** Ċ Ġ* Ġ å°Ŀè¯ķ ä»İ InputStream ä¸Ń è¯»åıĸ ä¸Ģå®ļ å¤§å°ı çļĦæķ°æį® Ċ Ġ* Ġ@ receiver ĠReader Ċ Ġ* Ġ@ param ĠbyteArray ĠByteArray Ġæķ°æį® Ċ Ġ* Ġ@ param ĠmaxLength ĠInt Ġ æľĢå¤§ æķ°æį® éķ¿åº¦ Ċ Ġ* Ġ@ param Ġtimeout ĠLong Ġ è¶ħæĹ¶ æĹ¶éĹ´ Ċ Ġ* Ġ@ return ĠInt Ġ è¯»åıĸ åĪ° çļĦæķ°æį® éķ¿åº¦ Ċ Ġ*/ Ċ fun ĠInputStream . try Read ( byteArray : ĠByteArray , ĠmaxLength : ĠInt Ġ= ĠbyteArray . size , Ġtimeout : ĠLong Ġ= Ġ 1 0 0 ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġwhile Ġ( available () Ġ< ĠmaxLength ĊĠĠĠĠĠĠĠ Ġ&& ĠSystem . currentTimeMillis () Ġ- Ġtime Ġ< Ġtimeout ) Ġ{ ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlength Ġ= Ġif Ġ( available () Ġ>= ĠmaxLength ) ĠmaxLength Ġelse Ġavailable () ĊĠĠĠ Ġreturn Ġread ( byteArray , Ġ 0 , Ġlength ) Ċ } Ċ Ċ /** Ċ Ġ* ĠByteArray Ġ è½¬ 1 6 è¿ĽåĪ¶ åŃĹç¬¦ä¸² Ċ Ġ* Ġ@ receiver ĠByteArray Ċ Ġ* Ġ@ return ĠString Ġ 1 6 è¿ĽåĪ¶ åŃĹç¬¦ä¸² Ċ Ġ*/ Ċ fun ĠByteArray . to HexString (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġjoin ToString (" Ġ") Ġ{ ĊĠĠĠĠĠĠĠ Ġ"% 0 2 x ". format ( it . toInt () Ġand Ġ 0 xFF ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ 1 6 è¿ĽåĪ¶ åŃĹç¬¦ä¸² è½¬ ByteArray Ċ Ġ* Ġ@ receiver ĠString Ċ Ġ* Ġ@ return ĠByteArray Ġ è½¬æį¢ åĲİ æķ°æį® Ċ Ġ*/ Ċ fun ĠString . to Hex ByteArray ( de limiters : ĠString Ġ= Ġ" Ġ" ): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġbyte List Ġ= Ġmutable ListOf < Byte >() ĊĠĠĠ Ġval Ġwords Ġ= Ġsplit ( de limiters ) ĊĠĠĠ Ġwords . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte List . add ( it . toInt ( 1 6 ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ"", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbyte List . toByteArray () Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĲ¯åĬ¨ æ´»åĬ¨ Ċ Ġ* Ġ@ receiver ĠActivity Ċ Ġ* Ġ@ param Ġclazz ĠClass < Activity > Ġæ ´ » åĬ¨ Ċ Ġ*/ Ċ fun Ġ< T : ĠActivity > ĠActivity . startActivity ( clazz : ĠClass < T >) Ġ{ ĊĠĠĠ ĠstartActivity ( Intent ( this , Ġclazz )) Ċ } Ċ