/* Ċ Ġ* ĠAd ĠFree Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ġby Ġab ert sch i , Ġwww . ab ert sch i . ch Ċ Ġ* ĠSee Ġthe Ġfile Ġ" LICENSE " Ġfor Ġthe Ġfull Ġlicense Ġgoverning Ġthis Ġcode . Ċ Ġ*/ Ċ Ċ package Ġch . ab ert sch i . ad free . plugin . local music Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . View Ċ import Ġch . ab ert sch i . ad free . Ad Free Application Ċ import Ġch . ab ert sch i . ad free . Audio Controller Ċ import Ġch . ab ert sch i . ad free . model . Preferences Factory Ċ import Ġch . ab ert sch i . ad free . model . Yes No Model Ċ import Ġch . ab ert sch i . ad free . plugin . Ad Plugin Ċ import Ġch . ab ert sch i . ad free . plugin . Audio Player Ċ import Ġch . ab ert sch i . ad free . plugin . Plugin Activity Action Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . jetbrains . ank o . An ko Logger Ċ import Ġorg . jetbrains . ank o . error Ċ import Ġorg . jetbrains . ank o . info Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġab ert sch i Ġon Ġ 0 1 . 0 5 . 1 7 . Ċ Ġ*/ Ċ class ĠLocal Music Plugin ( val Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs : ĠPreferences Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Controller : ĠAudio Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyes No Model : ĠYes No Model ) Ġ: ĠAd Plugin , ĠAn ko Logger Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsupported File Ext Ġ= ĠlistOf (". mp 3 ", Ġ". wav ", Ġ". m 4 a ") ĊĠĠĠ Ġprivate Ġvar Ġview : ĠLocal Music View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠAudio Player Ġ= ĠAudio Player ( context , Ġprefs , Ġaudio Controller ) ĊĊĠĠĠ Ġoverride Ġfun Ġhas Settings View (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġsettings View ( context : ĠContext , Ġaction : ĠPlugin Activity Action ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġview Ġ= Ġview Ġ?: ĠLocal Music View ( context , Ġaction ) ĊĠĠĠĠĠĠĠ Ġval Ġsettings View Ġ= Ġview !!. onCreate ( this ) ĊĠĠĠĠĠĠĠ Ġload Play Until End Flag () ĊĠĠĠĠĠĠĠ Ġreturn Ġsettings View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠgetRandom Track from Uri ( prefs . getLocal Music Directory ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġview ?. show No Audio Tracks Found Message () ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" playing Ġ" Ġ+ Ġfile . absolute Path Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġad Ġ= Ġcontext . application Context Ġas ĠAd Free Application ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfile . absolute Path . split ("/ "). last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun And Catch Exception Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . play ( file . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( true ). delay ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()). subscribe Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġwhen Ġ( prefs . get Play Until End ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ" playing Ġuntil Ġend Ġ- Ġtouch Ġto Ġstop " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" touch Ġto Ġun mute Ġad " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad . notification Channel . update Ad Notification ( title Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay Trial () Ġ{ ĊĠĠĠĠĠĠĠ Ġplay () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Stop ( on Stop ed : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun And Catch Exception ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . request Stop ( on Stop ed ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġforce Stop ( on Stop ed : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun And Catch Exception ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . force Stop ( on Stop ed ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Plugin Loaded () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Plugin Activated () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Plugin De activated () Ġ{ ĊĠĠĠĠĠĠĠ Ġforce Stop ({}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( on Stop ed : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . get Play Until End ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Stop ( on Stop ed ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun And Catch Exception ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . stop ( on Stop ed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtitle (): ĠString Ġ= Ġ" local Ġmusic " ĊĊĠĠĠ Ġprivate Ġfun ĠgetRandom Track from Uri ( path : ĠString ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmusic Dir Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġall Files Ġ= ĠArrayList < File >() ĊĠĠĠĠĠĠĠ Ġval Ġdirs Ġ= ĠLinkedList < File >() ĊĠĠĠĠĠĠĠ Ġdirs . add ( music Dir ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! dirs . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Files Ġ= Ġdirs . poll (). list Files () Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġlist Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirs . add ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( f . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ext : ĠString Ġin Ġsupported File Ext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f . absolute File . toString (). endsWith ( ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Files . add ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( all Files . size Ġ== Ġ 0 ) Ġnull Ġelse Ġall Files [( Math . random () Ġ* Ġall Files . size ). toInt ()] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfigure Audio Volume () Ġ{ ĊĠĠĠĠĠĠĠ Ġaudio Controller . show Voice Call Volume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchoose Directory () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠFile ("/") ĊĠĠĠĠĠĠĠ Ġview ?. show Folder Selection Dialog ( f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Directory Selected ( files : ĠMutable List < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfiles ?. first OrNull (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . set Local Music Directory ( it !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun And Catch Exception ( function : Ġ() Ġ-> ĠUnit ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Audio Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Play Until End Flag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġprefs . get Play Until End () ĊĠĠĠĠĠĠĠ Ġprefs . set Play Until End (! status ) ĊĠĠĠĠĠĠĠ Ġload Play Until End Flag () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Play Until End Flag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġprefs . get Play Until End () ĊĠĠĠĠĠĠĠ Ġval Ġkeyword Ġ= Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġyes No Model . getRandom Yes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġyes No Model . getRandom No () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview ?. set Play Until End To ( keyword ) ĊĠĠĠ Ġ} Ċ } Ċ