/* Ċ Ġ* Ġ* Ċ Ġ* Ġ Ġ* ĠCreated Ġby ĠY ous se f ĠAss ad Ġon Ġ 6 / 2 / 1 8 Ġ 1 1 : 2 2 ĠAM Ċ Ġ* Ġ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġ. ĠAll Ġrights Ġreserved . Ċ Ġ* Ġ Ġ* ĠLast Ġmodified Ġ 6 / 2 / 1 8 Ġ 1 1 : 0 4 ĠAM Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . ring tone . maker . View Hold ers ĊĊ Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . ring tone . maker . U IL application Ċ import Ġcom . ring tone . maker . Models . Music File Ċ import Ġkotlinx . android . synt hetic . main . item _ selection . view .* Ċ import Ġcom . ring tone . maker . Views . aud i ow ave . Thumb Wave View Ċ import Ġjava . io .* Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġa lex Ċ Ġ*/ Ċ Ċ class ĠView holder _ Selection Item ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠ Ġvar Ġplay Button : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġwave : ĠThumb Wave View ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġsong _ title : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġsong _ duration : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġvar ĠAlbum _ art : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġsong : ĠMusic File ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġm Pop Up Menu : ĠImageView ? Ġ= Ġnull ĊĊĊĠĠĠ Ġfun Ġbind ( song : ĠMusic File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Pop Up Menu Ġ= ĠitemView . overflow ĊĠĠĠĠĠĠĠ ĠAlbum _ art Ġ= ĠitemView . Album _ art _ container ĊĠĠĠĠĠĠĠ Ġsong _ duration Ġ= ĠitemView . song _ duration ĊĠĠĠĠĠĠĠ Ġsong _ title Ġ= ĠitemView . song _ title ĊĠĠĠĠĠĠĠ Ġwave Ġ= ĠitemView . audio _ wave ĊĠĠĠĠĠĠĠ Ġplay Button Ġ= ĠitemView . audio _ button _ play ĊĠĠĠĠĠĠĠ Ġsong _ title !!. text Ġ= Ġsong . music Title ĊĠĠĠĠĠĠĠ Ġthis . song Ġ= Ġsong ĊĠĠĠĠĠĠĠ Ġwave !!. is Tou ched Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwave !!. scaled Data Ġ= ĠByteArray ( 0 ) ĊĠĠĠĠĠĠĠ Ġwave !!. progress Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġupdate Duration Text ( song . duration ?. to Long ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġupdate Duration Text ( duration : ĠLong ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġ( duration !! Ġ% Ġ( 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) Ġ/ Ġ( 1 0 0 0 Ġ* Ġ 6 0 )). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġ( duration Ġ% Ġ( 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) Ġ% Ġ( 1 0 0 0 Ġ* Ġ 6 0 ) Ġ/ Ġ 1 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġdivider Ġ= Ġ":" ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġless Ġthan Ġ 1 0 Ġsecs Ġadd Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( seconds Ġ< Ġ 1 0 ) Ġdivider Ġ= Ġ": 0 " ĊĠĠĠĠĠĠĠ Ġsong _ duration !!. text Ġ= Ġ"$ minutes $ divider $ seconds " ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠDisplay Wave Form ( HashCode : ĠInt , Ġwave Width : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠCh uck Width Ġ= Ġwave !!. chunk Spacing Ġ+ Ġwave !!. chunk Width ĊĠĠĠĠĠĠĠ Ġval ĠCh uck Ratio Ġ= Ġwave Width Ġ/ ĠCh uck Width ĊĠĠĠĠĠĠĠ Ġval ĠS ampling Rate Ġ= Ġ( 5 4 0 Ġ/ ĠCh uck Ratio ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġval ĠWave Form File Ġ= ĠFile ( U IL application . instance . cacheDir , ĠHash Code . toString ()) ĊĊĠĠĠĠĠĠĠ ĠRead Wave Form File ( Wave Form File , Ġwave !! , ĠS ampling Rate ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠRead Wave Form File ( Wave Form File : ĠFile , Ġwave : ĠThumb Wave View , Ġsampling Rate : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠHeight Counter Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠArrayList < Byte >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` in `: ĠInputStream ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` in ` Ġ= ĠBuffered InputStream ( FileInputStream ( Wave Form File )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( InputStream Reader (` in `, Ġ" UTF - 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ({ Ġline Ġ= Ġreader . readLine (); Ġline Ġ} () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeight Counter Ġ+= Ġjava . lang . Float . valueOf ( line ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line count Ġ% Ġsampling Rate Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavg height Ġ= ĠHeight Counter Ġ/ Ġsampling Rate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( java . lang . Float . valueOf ( avg height ) !! Ġ* Ġ 1 2 7 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes . add ( height . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeight Counter Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( bytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbytes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġbytes [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ i ] Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwave . scaled Data Ġ= Ġdata ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupported EncodingException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` in `. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ