package Ġcom . kk box . yun wen lin . smart Player Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . speech . Recognizer Intent Ċ import Ġandroid . speech . Speech Recognizer Ċ import Ġandroid . support . annotation . Requires Api Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroid . widget .* Ċ import Ġcom . kk box . yun wen lin . smart Player . buttons . Record Button Ċ import Ġcom . kk box . yun wen lin . smart Player . network . Network Ċ import Ġcom . ko ush ik dut ta . ion . Ion Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠREQ _ CODE _ SPE E CH _ INPUT Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġ// ĠRequest ing Ġpermission Ġto ĠREC ORD _ AUDIO ĊĠĠĠ Ġprivate Ġvar Ġpermission To Record Accepted Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġpermissions Ġ= ĠarrayOf ( Manifest . permission . RECORD _ AUDIO ) ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ RECORD _ AUDIO _ PERMISSION Ġ-> Ġpermission To Record Accepted Ġ= Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! permission To Record Accepted ) Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( ic icle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( ic icle ) ĊĠĠĠĠĠĠĠ Ġmain Context Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġmain Activity Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġgenre Station Ġ= ĠGen re Station ( this ) ĊĠĠĠĠĠĠĠ Ġm ood Station Ġ= ĠM ood Station ( this ) ĊĠĠĠĠĠĠĠ Ġnetwork Ġ= ĠNetwork ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRecord Ġto Ġthe Ġexternal Ġcache Ġdirectory Ġfor Ġvisibility ĊĠĠĠĠĠĠĠ Ġm FileName Ġ= Ġexternal Cache Dir !!. absolute Path ĊĠĠĠĠĠĠĠ Ġm FileName Ġ+= Ġ"/ aud i ore cord . am r " ĊĊĠĠĠĠĠĠĠ ĠIon . getDefault ( this ). configure (). set Logging (" My Logs ", ĠLog . DEBUG ) ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions , ĠREQUEST _ RECORD _ AUDIO _ PERMISSION ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( network . check Network ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġaccess Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠ ĠaccessToken Ġ= Ġkk box Client . get AccessToken () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġspeech Ġre cognizer ĊĠĠĠĠĠĠĠ Ġvar Ġlistener Ġ= ĠAndroid Speech Recognizer () ĊĠĠĠĠĠĠĠ Ġspeech Ġ= ĠSpeech Recognizer . create Speech Recognizer ( this ) ĊĠĠĠĠĠĠĠ Ġre cognizer Intent Ġ= ĠIntent ( Recognizer Intent . ACTION _ RE CO GN IZE _ SPE E CH ) ĊĊĠĠĠĠĠĠĠ Ġspeech . set Recognition Listener ( listener ) ĊĠĠĠĠĠĠĠ Ġre cognizer Intent . putExtra ( Recognizer Intent . EXTRA _ LANGUAGE _ PREFER ENCE , Ġ" zh - TW ") ĊĠĠĠĠĠĠĠ Ġre cognizer Intent . putExtra ( Recognizer Intent . EXTRA _ CALL ING _ PACKAGE , Ġthis . packageName ) ĊĠĠĠĠĠĠĠ Ġre cognizer Intent . putExtra ( Recognizer Intent . EXTRA _ LANGUAGE _ MODEL , ĠRe cognizer Intent . LANGUAGE _ MODEL _ WEB _ SEARCH ) ĊĠĠĠĠĠĠĠ Ġre cognizer Intent . putExtra ( Recognizer Intent . EXTRA _ MAX _ RESULTS , Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġelements ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġm Record Button Ġ= ĠfindViewById ( R . id . record _ button ) Ġas ĠRecord Button ĊĠĠĠĠĠĠĠ Ġm Play Button Ġ= ĠfindViewById ( R . id . play _ button ) Ġas ĠPlay Button ĊĠĠĠĠĠĠĠ Ġm Pause Button Ġ= ĠfindViewById ( R . id . pause _ button ) Ġas ĠPause Button ĊĠĠĠĠĠĠĠ Ġm Search Button Ġ= ĠSearch Button ( this ) ĊĠĠĠĠĠĠĠ Ġm Text Ġ= ĠfindViewById ( R . id . title _ text ) Ġas ĠTextView ĊĠĠĠĠĠĠĠ Ġm Image Ġ= ĠfindViewById ( R . id . image ) Ġas ĠImageView ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= ĠfindViewById ( R . id . progress ) Ġas ĠProgress Bar ĊĠĠĠĠĠĠĠ Ġspinner Ġ= ĠfindViewById ( R . id . spinner ) Ġas ĠSp inner ĊĠĠĠĠĠĠĠ ĠwebView Ġ= ĠfindViewById ( R . id . web View ) Ġas ĠWebView ĊĊĠĠĠĠĠĠĠ Ġ// Ġspinner Ġlist Ġelement ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġlist . add (" èı ¯ èªŀ æĸ° æŃĮ ") ĊĠĠĠĠĠĠĠ Ġlist . add (" è¥¿ æ´ ĭ æĸ° æŃĮ ") ĊĠĠĠĠĠĠĠ Ġlist . add (" æĹ¥ éŁ ĵ æĸ° æŃĮ ") ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠArray Adapter ( this , Ġandroid . R . layout . simple _ spinner _ item , Ġlist ) ĊĠĠĠĠĠĠĠ Ġadapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠ Ġspinner . adapter Ġ= ĠMainActivity . adapter ĊĠĠĠĠĠĠĠ Ġspinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( adapter View : ĠAdapter View <* >, Ġview : ĠView , Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spinner Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkk box Station Ġ= ĠHTTP Get Station To KK box () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkk box Station . execute (" Cq Ki 7 k ny 7 nl TW 4 2 w 5 M ", Ġ" TW ", Ġ" mood ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" æĤ¨ éģ¸ æĵ ĩ " Ġ+ Ġadapter View . selected Item . toString (), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( arg 0 : ĠAdapter View <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" æĤ¨ æ² Ĵ æľī éģ¸ æĵ ĩ ä»»ä½ķ éłħ çĽ® ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠwebView ĊĠĠĠĠĠĠĠ Ġvar Ġweb Setting Ġ= ĠwebView . settings ĊĠĠĠĠĠĠĠ Ġweb Setting . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . add Javascript Interface ( Javascript Call (), Ġ" js Object ") ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView , Ġurl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . load Url (" javascript :( function () Ġ{ Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" var Ġaudio Ġ= Ġdocument . getElementById (' audio - player '); " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" audio . addEventListener (' ended ', Ġfunction ( event ) Ġ{" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" window . js Object . play Finish (); " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" }); " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" })(); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . media Playback Requires User Gesture Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQ _ CODE _ SPE E CH _ INPUT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġnull Ġ!= Ġdata ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata . getString ArrayList Extra ( Recognizer Intent . EXTRA _ RESULTS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . transcript Ġ= Ġresult [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . after Record () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" result Ġtext : Ġ", Ġresult [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtxt Speech Input . setText ( result [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠLog . i (" app Ġstate : Ġ", Ġ" on Ġpause ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Play Button !!. m Start Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. on Pause ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Record Button !!. m Start Recording ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Record Button !!. on Record ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠLog . i (" app Ġstate : Ġ", Ġ" on Ġdest ory ") ĊĠĠĠĠĠĠĠ Ġspeech . cancel () ĊĠĠĠĠĠĠĠ Ġspeech . destroy () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( recorder . m Recorder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . m Recorder !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . m Recorder Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer . stop Playing () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOG _ TAG Ġ= Ġ" Smart ĠPlayer " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ RECORD _ AUDIO _ PERMISSION Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġgenre Station : ĠGen re Station ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġm ood Station : ĠM ood Station ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġmain Context : ĠContext ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġmain Activity : ĠActivity ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġspeech : ĠSpeech Recognizer ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġre cognizer Intent : ĠIntent ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠwebView : ĠWebView ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġspinner : ĠSp inner ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġadapter : ĠArray Adapter < String > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġnetwork : ĠNetwork ĊĊĠĠĠĠĠĠĠ Ġvar Ġm FileName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġm Text : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġm Image : ĠImageView ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġm Record Button : ĠRecord Button ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġm Play Button : ĠPlay Button ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġm Search Button : ĠSearch Button ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġm Pause Button : ĠPause Button ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġrecorder Ġ= ĠRec order () ĊĠĠĠĠĠĠĠ Ġvar Ġplayer Ġ= ĠPlayer () ĊĠĠĠĠĠĠĠ Ġvar Ġstation Ġ= ĠCategory () ĊĠĠĠĠĠĠĠ Ġvar Ġui Action Ġ= ĠUI Action () ĊĠĠĠĠĠĠĠ Ġval Ġkk box Client Ġ= ĠK K box Open APIClient () ĊĠĠĠĠĠĠĠ Ġvar Ġspinner Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar ĠaccessToken Ġ= Ġ"" ĊĠĠĠ Ġ} Ċ }