/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠTensorFlow ĠAuthors . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . tensorflow . lite . examples . sound classifier Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġorg . tensorflow . lite . examples . sound classifier . databinding . Activity Main Binding Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠ Ġprivate Ġval Ġprobabilities Adapter Ġby Ġlazy Ġ{ ĠProb abilities Adapter () Ġ} ĊĊĠ Ġprivate Ġlateinit Ġvar Ġsound Classifier : ĠSound Classifier ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠ Ġval Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠ Ġsound Classifier Ġ= ĠSound Classifier ( this , ĠSound Classifier . Options ()). also Ġ{ ĊĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġprobabilities Adapter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlabel List Ġ= Ġsound Classifier . label List ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġkeep Screen On ( input Switch . isChecked ) ĊĠĠĠĠĠ Ġinput Switch . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠ Ġsound Classifier . is Paused Ġ= Ġ! isChecked ĊĠĠĠĠĠĠĠ Ġkeep Screen On ( isChecked ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverlap Factor Slider . value Ġ= Ġsound Classifier . overlap Factor ĊĠĠĠĠĠ Ġoverlap Factor Slider . add On ChangeListener Ġ{ Ġ_, Ġvalue , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġsound Classifier . overlap Factor Ġ= Ġvalue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsound Classifier . prob abilities . observe ( this ) Ġ{ Ġresult Map Ġ-> ĊĠĠĠĠĠ Ġif Ġ( result Map . isEmpty () Ġ|| Ġresult Map . size Ġ> Ġsound Classifier . label List . size ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Invalid Ġsize Ġof Ġprobability Ġoutput ! Ġ( size : Ġ${ result Map . size }) ") ĊĠĠĠĠĠĠĠ Ġreturn @ observe ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġprobabilities Adapter . probability Map Ġ= Ġresult Map ĊĠĠĠĠĠ Ġprobabilities Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠ Ġrequest Micro phone Permission () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsound Classifier . start () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Top Res umed Activity Changed ( is Top Res umed Activity : ĠBoolean ) Ġ{ ĊĠĠĠ Ġ// ĠHandles Ġ" top " Ġres umed Ġevent Ġon Ġmulti - window Ġenvironment ĊĠĠĠ Ġif Ġ( is Top Res umed Activity ) Ġ{ ĊĠĠĠĠĠ Ġsound Classifier . start () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsound Classifier . stop () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠ Ġgrant Results : ĠInt Array ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ RECORD _ AUDIO ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Audio Ġpermission Ġgranted Ġ:) ") ĊĠĠĠĠĠĠĠ Ġsound Classifier . start () ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Audio Ġpermission Ġnot Ġgranted Ġ: (" ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠ Ġprivate Ġfun Ġrequest Micro phone Permission () Ġ{ ĊĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠ ĠManifest . permission . RECORD _ AUDIO ĊĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġsound Classifier . start () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . RECORD _ AUDIO ), ĠREQUEST _ RECORD _ AUDIO ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġkeep Screen On ( enable : ĠBoolean ) Ġ= ĊĠĠĠ Ġif Ġ( enable ) Ġ{ ĊĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠREQUEST _ RECORD _ AUDIO Ġ= Ġ 1 3 3 7 ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Audio Demo " ĊĠ Ġ} Ċ } Ċ