package Ġcom . kim b rel k . android . ham logger . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroidx . core . database . getDouble OrNull Ċ import Ġandroidx . core . database . getInt OrNull Ċ import Ġandroidx . core . database . getLong OrNull Ċ import Ġandroidx . core . database . getString OrNull Ċ import Ġcom . kim b rel k . android . ham logger . data . model . Band Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠUtils Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDF _ FREQ UENCY Ġ= ĠDecimal Format (" ### , ### , ### , ### , ## 0 . #### ") ĊĠĠĠĠĠĠĠ Ġval ĠB AND S : ĠBand . B ands Ġ= ĠBand . B ands () ĊĊĠĠĠĠĠĠĠ Ġfun Ġempty StringTo Null ( str : ĠString ?) Ġ: ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str Ġ== Ġnull Ġ|| Ġstr . isEmpty () Ġ|| Ġstr Ġ== Ġ" null ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġformat Frequency ( freq : ĠDouble ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmeasurement : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġfreq ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfreq Ġ< Ġ 0 . 0 0 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfreq Ġ/ Ġ 0 . 0 0 0 0 0 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasurement Ġ= Ġ" Hz " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfreq Ġ< Ġ 1 . 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfreq Ġ/ Ġ 0 . 0 0 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasurement Ġ= Ġ" k Hz " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfreq Ġ< Ġ 1 0 0 0 . 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfreq Ġ/ Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasurement Ġ= Ġ" MHz " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfreq Ġ< Ġ 1 0 0 0 0 0 0 . 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfreq Ġ/ Ġ 1 0 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasurement Ġ= Ġ" GH z " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfreq Ġ< Ġ 1 0 0 0 0 0 0 0 0 0 . 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfreq Ġ/ Ġ 1 0 0 0 0 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasurement Ġ= Ġ" TH z " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ DF _ FREQ UENCY . format ( value )} Ġ$ measurement " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġformat Date Readable ( timestamp : ĠLong , Ġtime Zone : ĠTime Zone Ġ= ĠTime Zone . getDefault ()) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat . time Zone Ġ= Ġtime Zone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . format ( Date ( timestamp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġformat Time Readable ( timestamp : ĠLong , Ġtime Zone : ĠTime Zone Ġ= ĠTime Zone . getDefault ()) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠDate Format . getTime Instance ( DateFormat . SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat . time Zone Ġ= Ġtime Zone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . format ( Date ( timestamp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget App Version ( context : ĠContext ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Info Ġ= Ġcontext . package Manager . get Package Info ( context . packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp Info . version Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget App Version Code ( context : ĠContext ) Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Info Ġ= Ġcontext . package Manager . get Package Info ( context . packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp Info . version Code ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Cursor Boolean ( cursor : ĠCursor , Ġcol Name : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnIndex Ġ= Ġcursor . getColumnIndex OrThrow ( col Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( cursor . getInt OrNull ( column Index ) Ġ?: Ġ 0 ) Ġ== Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Cursor Double ( cursor : ĠCursor , Ġcol Name : ĠString ) Ġ: ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnIndex Ġ= Ġcursor . getColumnIndex OrThrow ( col Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . getDouble OrNull ( column Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Cursor Long ( cursor : ĠCursor , Ġcol Name : ĠString ) Ġ: ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnIndex Ġ= Ġcursor . getColumnIndex OrThrow ( col Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . getLong OrNull ( column Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Cursor String ( cursor : ĠCursor , Ġcol Name : ĠString ) Ġ: ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnIndex Ġ= Ġcursor . getColumnIndex OrThrow ( col Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . getString OrNull ( column Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Legacy Timestamp ( date : ĠString ?, Ġtime : ĠString ?) Ġ: ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Ġ== Ġnull Ġ|| Ġtime Ġ== Ġnull Ġ|| Ġdate . isEmpty () Ġ|| Ġtime . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġdate . substring ( 0 , Ġ 4 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġdate . substring ( 4 , Ġ 6 ). toInt () Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġdate . substring ( 6 , Ġ 8 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġtime . substring ( 0 , Ġ 2 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġtime . substring ( 2 , Ġ 4 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance ( TimeZone . getTime Zone (" UTC ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . set ( year , Ġmonth , Ġday , Ġhour , Ġmin , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġms In Min Ġ= Ġ 1 0 0 0 Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( calendar . time In Millis Ġ/ Ġms In Min ) Ġ* Ġms In Min ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstring ToDouble ( str : ĠString ?) Ġ: ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstr ?. toDouble OrNull () Ġ?: Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }