package Ġa 9 8 apps . ly ric sed ge . notification Ċ Ċ import Ġa 9 8 apps . ly ric sed ge . constants . Actions Ċ import Ġa 9 8 apps . ly ric sed ge . constants . Constants Ċ import Ġa 9 8 apps . ly ric sed ge . edge . C ock tail Ċ import Ġa 9 8 apps . ly ric sed ge . helper . dao . cache . Cache DAO Ċ import Ġa 9 8 apps . ly ric sed ge . network . IL y ric Listener Ċ import Ġa 9 8 apps . ly ric sed ge . network . L yr ics Request Ċ import Ġa 9 8 apps . ly ric sed ge . preferences . Security Preferences Ċ import Ġa 9 8 apps . ly ric sed ge . util . Network Util Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . Media Metadata Ċ import Ġandroid . media . session . Media Controller Ċ import Ġandroid . media . session . Media Session Ċ import Ġandroid . media . session . Playback State Ċ import Ġandroid . service . notification . StatusBar Notification Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Base 6 4 Ċ Ċ class ĠNotification Receiver ( context : ĠContext ) Ġ: ĠBroadcast Receiver (), ĠIL y ric Listener Ċ { ĊĠĠĠ Ġprivate Ġval Ġm L yr ics Request : ĠL yr ics Request Ġ= ĠL yr ics Request ( context , Ġthis ) ĊĠĠĠ Ġprivate Ġval Ġm Callbacks Ġ= ĠHashMap < String , ĠController Callback >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( intent Ġ!= Ġnull Ġ&& Ġcontext Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextras Ġ= Ġintent . extras ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( extras Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// handle Ġactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent . action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( action Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( action Ġ== ĠActions . ACTION _ PULL _ TO _ REFRESH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmusic Id Ġ= Ġextras . getLong (" music _ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Id Ġ= Ġextras . getLong (" artist _ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġextras . getString (" hash ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Ġ= Ġextras . getString (" artist _ name ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġextras . getString (" music _ name ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Artist Hash Ġ= Ġextras . getString (" source _ artist _ hash ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Music Hash Ġ= Ġextras . getString (" source _ music _ hash ") Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! TextUtils . isEmpty ( hash ) Ġ&& Ġ! TextUtils . isEmpty ( artist ) Ġ&& Ġ! TextUtils . isEmpty ( title )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm L yr ics Request . fetch Existing L yr ics ( hash , Ġhash , Ġartist , Ġsource Artist Hash , Ġtitle , Ġsource Music Hash , Ġartist Id , Ġmusic Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Media Session ( context : ĠContext , ĠpackageName : ĠString , Ġmedia Session : ĠAny ?, Ġsb n : ĠStatus Bar Notification ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( media Session Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġmedia Session Ġas ĠMedia Session . Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Controller Ġ= ĠMedia Controller ( context , Ġtoken ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! m Callbacks . containsKey ( packageName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠController Callback ( context , ĠpackageName , Ġmedia Controller , Ġsb n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callbacks [ packageName ] Ġ= Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Controller . register Callback ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Playback StateChanged ( media Controller . playback State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġm Callbacks [ packageName ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( callback Ġ!= Ġnull )// update Ġmedia Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . media Controller Ġ= Ġmedia Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Playback StateChanged ( media Controller . playback State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Media Controller ( context : ĠContext , ĠpackageName : ĠString , Ġmedia Controller : ĠMedia Controller , Ġsb n : ĠStatus Bar Notification ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! m Callbacks . containsKey ( packageName )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠController Callback ( context , ĠpackageName , Ġmedia Controller , Ġsb n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callbacks [ packageName ] Ġ= Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Controller . register Callback ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Playback StateChanged ( media Controller . playback State ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġm Callbacks [ packageName ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( callback Ġ!= Ġnull )// update Ġmedia Controller ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . media Controller Ġ= Ġmedia Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Playback StateChanged ( media Controller . playback State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fetch Started ( context : ĠContext ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠC ock tail . update Panel ( context , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fetch Finished ( context : ĠContext , Ġsuccess : ĠBoolean ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠC ock tail . update Panel ( context , Ġsuccess ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠController Callback ( val Ġcontext : ĠContext , Ġval ĠpackageName : ĠString , Ġvar Ġmedia Controller : ĠMedia Controller , Ġval Ġsb n : ĠStatus Bar Notification ?) Ġ: ĠMedia Controller . Callback () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Destroyed () ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Session Destroyed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m Callbacks . containsKey ( packageName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Controller . unregister Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callbacks . remove ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Playback StateChanged ( playback State : ĠPlay back State ?) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Playback StateChanged ( playback State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( playback State Ġ!= Ġnull Ġ&& Ġplayback State . state Ġ== ĠPlay back State . STATE _ PLAY ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// metadata Ġcan Ġbe Ġnull , Ġif Ġnull Ġthe ĠNotification Info Ġuses Ġthe ĠStatus Bar Notification Ġto Ġget Ġartist Ġand Ġmusic Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmedia Controller . metadata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ly ric ( context , ĠNotification Info ( context , Ġmetadata , Ġsb n )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Metadata Changed ( metadata : ĠMedia Metadata ?) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Metadata Changed ( metadata ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayback State Ġ= Ġmedia Controller . playback State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( playback State Ġ!= Ġnull Ġ&& Ġplayback State . state Ġ== ĠPlay back State . STATE _ PLAY ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// metadata Ġcan Ġbe Ġnull , Ġif Ġnull Ġthe ĠNotification Info Ġuses Ġthe ĠStatus Bar Notification Ġto Ġget Ġartist Ġand Ġmusic Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ly ric ( context , ĠNotification Info ( context , Ġmetadata , Ġsb n )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Ly ric ( context : ĠContext , Ġnotification Info : ĠNotification Info ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartist : ĠString ? Ġ= Ġnotification Info . get Artist () ĊĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString ? Ġ= Ġnotification Info . ge Title () ĊĊĠĠĠĠĠĠĠ Ġif ( artist Ġ!= Ġnull Ġ&& Ġtitle Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠSecurity Preferences ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha Pending Ġ= Ġprefs . get ( Constants . CAP T CHA _ PENDING ) Ġas ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( captcha Pending ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġignore Long Tracks Ġ= Ġprefs . get ( Constants . IGNORE _ LONG _ TRACK ) Ġas ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ignore Long Tracks Ġ&& Ġnotification Info . get Duration () Ġ> Ġ 2 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Artist Hash : ĠString Ġ= ĠBase 6 4 . encode ToString ( artist . encode To ByteArray (), ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Title Hash : ĠString Ġ= ĠBase 6 4 . encode ToString ( title . encode To ByteArray (), ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠBase 6 4 . encode ToString (( artist Ġ+ Ġtitle ). encode To ByteArray (), ĠBase 6 4 . DEFAULT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġa Ġhash Ġhas Ġbeen Ġblocked , Ġit Ġmeans Ġthat Ġthe Ġly ric Ġwas Ġnot Ġfound Ġand Ġprevent Ġthe Ġly ric Ġfrom Ġbeing Ġsearched Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblocked Hash Ġ= Ġprefs . get ( Constants . BLOCK ED _ HASH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( blocked Hash Ġ!= Ġnull Ġ&& Ġblocked Hash Ġ== Ġhash ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( blocked Hash Ġ!= Ġnull Ġ&& Ġblocked Hash Ġ!= Ġhash ) Ġprefs . setDefault ( Constants . BLOCK ED _ HASH ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache DAO Ġ= ĠCache DAO ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Id Ġ= Ġcache DAO . has ( hash ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cache Id Ġ== Ġ- 1 L )// not Ġin Ġcache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Network Util . is Network Available ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Hash Ġ= Ġprefs . get ( Constants . TEMP _ HASH ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( hash Ġ!= Ġtemp Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . set ( Constants . TEMP _ HASH , Ġhash ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm L yr ics Request . fetch L yr ics ( temp Hash , Ġhash , Ġartist , Ġsource Artist Hash , Ġtitle , Ġsource Title Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Index Ġ= Ġprefs . get ( Constants . CACHE _ INDEX ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cache Id Ġ!= Ġcache Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . set ( Constants . CACHE _ INDEX , Ġcache Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . setDefault ( Constants . TRANSL ATE _ TO GGLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// update Ġpanel Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ock tail . update List ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Fetch Finished ( context , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }