package Ġcom . sim form . audio _ wave forms Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . media . Media Recorder Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . annotation . Requires Api Ċ Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Aware Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Plugin Binding Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* ĊĊ Ċ /** ĠAudio Wave forms Plugin Ġ*/ Ċ class ĠAudio Wave forms Plugin Ġ: ĠFlutter Plugin , ĠMethod Call Handler , ĠActivity Aware Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchannel : ĠMethod Channel ĊĠĠĠ Ġprivate Ġvar Ġrecorder : ĠMedia Recorder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaudio Recorder : ĠAudio Recorder ĊĠĠĠ Ġprivate Ġvar Ġpath : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġencoder : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġoutput Format : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġsample Rate : ĠInt Ġ= Ġ 1 6 0 0 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapplication Context : ĠContext ĊĊĠĠĠ Ġ// Todo : Ġbit rate ĊĠĠĠ Ġprivate Ġvar Ġaudio Players Ġ= Ġmutable Map Of < String , ĠAudio Player ?> () ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine (@ NonNull Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( flutter Plugin Binding . binary Messenger , ĠConstants . method Channel Name ) ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( this ) ĊĠĠĠĠĠĠĠ Ġaudio Recorder Ġ= ĠAudio Recorder () ĊĠĠĠĠĠĠĠ Ġapplication Context Ġ= Ġflutter Plugin Binding . application Context ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) ĊĠĠĠ Ġoverride Ġfun Ġon MethodCall (@ NonNull Ġcall : ĠMethod Call , Ġ@ NonNull Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . init Recorder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġcall . argument ( Constants . path ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoder Ġ= Ġ( call . argument ( Constants . encoder ) Ġas ĠInt ?) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Format Ġ= Ġ( call . argument ( Constants . output Format ) Ġas ĠInt ?) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Rate Ġ= Ġ( call . argument ( Constants . sample Rate ) Ġas ĠInt ?) Ġ?: Ġ 1 6 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Path And Initial ise Recorder ( result , Ġencoder , Ġoutput Format , Ġsample Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . start Recording Ġ-> Ġaudio Recorder . start Recorder ( result , Ġrecorder ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . stop Recording Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Recorder . stop Recording ( result , Ġrecorder , Ġpath !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . pause Recording Ġ-> Ġaudio Recorder . pause Recording ( result , Ġrecorder ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . resume Recording Ġ-> Ġaudio Recorder . resume Recording ( result , Ġrecorder ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . get Dec ib el Ġ-> Ġaudio Recorder . get Dec ib el ( result , Ġrecorder ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . check Permission Ġ-> Ġaudio Recorder . check Permission ( result , Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . prepare Player Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Path Ġ= Ġcall . argument ( Constants . path ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume Ġ= Ġcall . argument ( Constants . volume ) Ġas ĠDouble ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Player ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. prepare Player ( result , Ġaudio Path , Ġvolume ?. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . start Player Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinish Mode Ġ= Ġcall . argument ( Constants . finish Mode ) Ġas ĠInt ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Mode Ġ?: Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . stop Player Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. stop ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . pause Player Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. pause ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . seek To Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġcall . argument ( Constants . progress ) Ġas ĠInt ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. seek To Position ( result , Ġprogress ?. to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . LOG _ TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Minimum Ġandroid ĠO Ġis Ġrequired Ġfor Ġseek To Ġfunction Ġto Ġworks " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . set Volume Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume Ġ= Ġcall . argument ( Constants . volume ) Ġas ĠFloat ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. set Volume ( volume , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . get Duration Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( call . argument ( Constants . duration Type ) Ġas ĠInt ?) Ġ== Ġ 0 ) ĠDuration Type . Current Ġelse ĠDuration Type . Max ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcall . argument ( Constants . player Key ) Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. get Duration ( result , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( Constants . LOG _ TAG , Ġ" Player Ġkey Ġcan 't Ġbe Ġnull ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . stop All Players Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġ_) Ġin Ġaudio Players ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ]?. stop ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ key ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresult . not Implemented () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġcheck Path And Initial ise Recorder ( ĊĠĠĠĠĠĠĠ Ġresult : ĠResult , ĊĠĠĠĠĠĠĠ Ġencoder : ĠInt , ĊĠĠĠĠĠĠĠ Ġoutput Format : ĠInt , ĊĠĠĠĠĠĠĠ Ġsample Rate : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder Ġ= ĠMedia Recorder () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Constants . LOG _ TAG , Ġ" Failed Ġto Ġinitialise ĠRec order ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Dir Ġ= Ġactivity ?. cacheDir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputFile : ĠFile ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateTime Instance Ġ= ĠSimpleDateFormat ( Constants . fileName Format , ĠLocale . US ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= ĠdateTime Instance . format ( Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile Ġ= ĠFile . create TempFile ( current Date , Ġ". aac ", Ġoutput Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= ĠoutputFile . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Recorder . init Recorder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Rate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Constants . LOG _ TAG , Ġ" Failed Ġto Ġcreate Ġfile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Recorder . init Recorder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Rate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Player ( player Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( audio Players [ player Key ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Player Ġ= ĠAudio Player ( application Context , Ġchannel , Ġplayer Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Players [ player Key ] Ġ= Ġnew Player ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine (@ NonNull Ġbinding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Activity ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġbinding . activity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity For Config Changes () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re attached To Activity For Config Changes ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġbinding . activity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecorder ?. release () ĊĠĠĠĠĠĠĠ Ġrecorder Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ