package Ġcom . js . voice Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . media . Media Metadata Retriever Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity ; Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġio . story chat . util . J SA udio Player Ċ Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . content _ main .* Ċ import Ġjava . io . File Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ PERMISSION _ CODE Ġ= Ġ 1 2 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREC ORD _ DURATION _ M ILL IS Ġ= Ġ 6 0 Ġ* Ġ 1 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġjs Audio Recorder : ĠJ SA udio Recorder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġjs Audio Player : ĠJ SA udio Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġjs Count Down Recorder Timer : ĠJS Count Down Timer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġjs Count Down Player Timer : ĠJS Count Down Timer ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĊĠĠĠĠĠĠĠ Ġcontent _ main _ record _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Manifest . permission . RECORD _ AUDIO ), ĠREQUEST _ PERMISSION _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontent _ main _ record _ stop _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Recorder Timer ?. cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontent _ main _ player _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! File ( cacheDir . absolute Path Ġ+ Ġ"/ Audio Recording . mp 4 "). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Not Ġexists Ġfile ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Player ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Player Ġ= ĠJ SA udio Player ( this , ĠMedia Player . On Prepared Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Player Timer ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġget Audio Duration ( cacheDir . absolute Path Ġ+ Ġ"/ Audio Recording . mp 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Player Timer Ġ= ĠJS Count Down Timer ( duration , Ġ 1 0 0 , Ġobject Ġ: ĠJS Count Down Timer . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Player ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent _ main _ player _ time . text Ġ= ĠSimpleDateFormat (" mm : ss ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. format ( duration Ġ- Ġmillis Until Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Player Timer ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠMedia Player . On Completion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Player Timer ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Player ?. prepare And Start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontent _ main _ player _ stop _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Player ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Player Timer ?. cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. stop () ĊĠĠĠĠĠĠĠ Ġjs Audio Player ?. pause () ĊĠĠĠĠĠĠĠ Ġjs Count Down Recorder Timer ?. cancel () ĊĠĠĠĠĠĠĠ Ġjs Count Down Player Timer ?. cancel () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. stop () ĊĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. release () ĊĠĠĠĠĠĠĠ Ġjs Audio Player ?. stop () ĊĠĠĠĠĠĠĠ Ġjs Audio Player ?. release () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ PERMISSION _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results . find Ġ{ Ġit Ġ== ĠPackage Manager . PERMISSION _ DEN IED Ġ} ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Need ĠAudio Ġrecord Ġpermission ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Recorder Ġ= ĠJ SA udio Recorder ( this @ MainActivity , ĠREC ORD _ DURATION _ M ILL IS . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Recorder Timer ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Recorder Timer Ġ= ĠJS Count Down Timer ( RECORD _ DURATION _ M ILL IS , Ġ 1 0 0 , Ġobject Ġ: ĠJS Count Down Timer . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Audio Recorder ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent _ main _ record _ time . text Ġ= ĠSimpleDateFormat (" mm : ss ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. format ( RECORD _ DURATION _ M ILL IS Ġ- Ġmillis Until Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Count Down Recorder Timer ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Audio Duration ( path : ĠString ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġretrie ver Ġ= ĠMedia Metadata Retriever () ĊĠĠĠĠĠĠĠ Ġvar Ġduration : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrie ver . set DataSource ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġretrie ver . extract Metadata ( Media Metadata Retriever . METADATA _ KEY _ DURATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġjava . lang . Long . parse Long ( time ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġe . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrie ver . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġduration ĊĠĠĠ Ġ} Ċ } Ċ