package Ġcom . per q in . he yn ext Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . service . notification . Notification Listener Service Ċ import Ġandroid . service . notification . StatusBar Notification Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroidx . preference . Preference Manager Ċ Ċ class ĠBand Notification Listener Service Ġ: ĠNotification Listener Service () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaction No Action : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaction Next : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaction Previous : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsp : ĠSharedPreferences ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaction Handler : ĠHandler ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" onCreate ") ĊĠĠĠĠĠĠĠ Ġaction No Action Ġ= ĠgetString ( R . string . sp v _ action No Action ) ĊĠĠĠĠĠĠĠ Ġaction Next Ġ= ĠgetString ( R . string . sp v _ action Next ) ĊĠĠĠĠĠĠĠ Ġaction Previous Ġ= ĠgetString ( R . string . sp v _ action Previous ) ĊĠĠĠĠĠĠĠ Ġsp Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġhandler Thread Ġ= ĠHandler Thread (" media Action ") ĊĠĠĠĠĠĠĠ Ġhandler Thread . start () ĊĠĠĠĠĠĠĠ Ġaction Handler Ġ= ĠHandler ( handler Thread . lo oper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Destroy ") ĊĠĠĠĠĠĠĠ Ġ( action Handler . lo oper . thread Ġas ĠHandler Thread ). quit S af ely () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Notification Posted ( sb n : ĠStatus Bar Notification ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sb n . packageName Ġ== ĠP N _ HE Y _ PLUS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Text Ġ= Ġsb n . notification . extras . get ( Notification . EXTRA _ TEXT ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Notification Posted : ĠReceived Ġnotification Ġfrom ĠHey Plus : Ġ$ notification Text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( notification Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEXT _ RUNNING Ġ-> ĠgetString ( R . string . sp k _ running Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEXT _ RID ING Ġ-> ĠgetString ( R . string . sp k _ riding Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEXT _ V 2 _ EX ER CI SE Ġ-> ĠgetString ( R . string . sp k _ v 2 Exercise Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn @ run On Ui Thread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġaction Ġfor Ġthis Ġtype Ġof Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp . getString ( it , Ġaction No Action ) ?: action No Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Action ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Action ( action : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" perform Action : Ġ$ action ") ĊĠĠĠĠĠĠĠ Ġval ĠkeyCode Ġ= Ġwhen ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Next Ġ-> ĠKeyEvent . KEYCODE _ MEDIA _ NEXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Previous Ġ-> ĠKeyEvent . KEYCODE _ MEDIA _ PREVIOUS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ( getSystem Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Media KeyEvent ( KeyEvent ( KeyEvent . ACTION _ DOWN , ĠkeyCode )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Media KeyEvent ( KeyEvent ( KeyEvent . ACTION _ UP , ĠkeyCode )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Band Not i Service " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ RUNNING Ġ= Ġ" è· ĳ æŃ¥ å®ļä½į ä¸Ń " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ RID ING Ġ= Ġ" éª ĳ è¡Į å®ļä½į ä¸Ń " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ V 2 _ EX ER CI SE Ġ= Ġ" è¿Ĳ åĬ¨ å®ļä½į ä¸Ń ..." ĊĠĠĠ Ġ} Ċ }