package Ġcom . or f ium . rx . music player . notification Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . support . v 4 . media . session . Media Session Compat Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . Priority Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Simple Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġcom . or f ium . rx . music player . R Ċ import Ġcom . or f ium . rx . music player . common . Playback State Ċ import Ġcom . or f ium . rx . music player . media . Media Ċ import Ġcom . or f ium . rx . music player . media . Media Service Ċ Ċ internal Ġclass ĠNotification Manager ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠService , ĊĠĠĠ Ġprivate Ġval Ġtoken : ĠMedia Session Compat . Token , ĊĠĠĠ Ġprivate Ġval Ġnotification Manager : ĠNotification Manager Compat Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT IFICATION _ ID Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP LAYER _ PENDING _ INT ENT _ ID Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPA USE _ PENDING _ INT ENT _ ID Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP LAY _ PENDING _ INT ENT _ ID Ġ= Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP LAY _ NEXT _ PENDING _ INT ENT _ ID Ġ= Ġ 4 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP LAY _ PREV _ PENDING _ INT ENT _ ID Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTOP _ PENDING _ INT ENT _ ID Ġ= Ġ 6 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Channels : ĠNotification Channels ĊĠĠĠ Ġprivate Ġvar Ġintent : ĠIntent ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġhas Started : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġhandler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠPlay back State Ġ= ĠPlay back State . Idle ĊĠĠĠ Ġprivate Ġvar Ġmedia : ĠMedia ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Channels Ġ= ĠNotification Channels ( service ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . intent Ġ= Ġintent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Media ( media : ĠMedia ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . media Ġ= Ġmedia ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate State ( state : ĠPlay back State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlay back State . Buffer ing Ġ-> Ġupdate Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlay back State . Playing Ġ-> Ġupdate Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlay back State . Paused Ġ-> Ġpause Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlay back State . Completed Ġ-> Ġpause Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstop Notification () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( service , ĠMedia Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . start Foreground Service ( service , Ġintent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstart Notification () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Notification () ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . stop Foreground ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġhas Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġmedia Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġnotification Manager . cancel ( NOTIFICATION _ ID ) ĊĠĠĠĠĠĠĠ Ġservice . stop Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause ( context : ĠContext ): ĠNotification Compat . Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= Ġget Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPA USE _ PENDING _ INT ENT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Service . ACTION _ PAUSE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Action ( R . drawable . ic _ music _ player _ pause , Ġ" Pause ", Ġpending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext ( context : ĠContext ): ĠNotification Compat . Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= Ġget Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP LAY _ NEXT _ PENDING _ INT ENT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Service . ACTION _ NEXT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Action ( R . drawable . ic _ music _ player _ next , Ġ" Next ", Ġpending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprev ( context : ĠContext ): ĠNotification Compat . Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= Ġget Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP LAY _ PREV _ PENDING _ INT ENT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Service . ACTION _ PREV ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Action ( R . drawable . ic _ music _ player _ prev , Ġ" Previous ", Ġpending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplay ( context : ĠContext ): ĠNotification Compat . Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= Ġget Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP LAY _ PENDING _ INT ENT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Service . ACTION _ PLAY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Action ( R . drawable . ic _ music _ player _ play , Ġ" Start ", Ġpending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdismiss ( context : ĠContext ): ĠPending Intent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTOP _ PENDING _ INT ENT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Service . ACTION _ STOP ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pending Intent ( context : ĠContext , Ġintent Id : ĠInt , Ġaction : ĠString ): ĠPending Intent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Intent Ġ= ĠIntent ( context , ĠMedia Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġprev Intent . action Ġ= Ġaction ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Id , Ġprev Intent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġcreate Builder () ĊĠĠĠĠĠĠĠ ĠG lide . with ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( media ?. image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disk Cache Strategy Of ( Disk Cache Strategy . DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. only Retrieve From Cache ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. priority ( Priority . IM MEDI ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠSimple Target < Bitmap >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠBitmap , Ġtransition : ĠTransition < in ĠBitmap > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Notification ( builder , Ġresource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( error Drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Notification ( builder , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Notification ( builder : ĠNotification Compat . Builder , Ġbitmap : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( media Ġ== Ġnull Ġ|| Ġstate Ġ== ĠPlay back State . Idle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . setStyle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . media . app . Notification Compat . Media Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Session ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Actions In Compact View ( 0 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification . PRIORITY _ MAX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setVisibility ( Notification Compat . VIS IBILITY _ PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Uses Ch ron ometer ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ music _ player _ small _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show When ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Only Alert Once ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( media ?. title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( media ?. artist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Delete Intent ( dismiss ( service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAction ( prev ( service )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠPlay back State . Paused Ġ|| Ġstate Ġis ĠPlay back State . Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addAction ( play ( service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set O ngo ing ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addAction ( pause ( service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set O ngo ing ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( next ( service )) ĊĠĠĠĠĠĠĠ Ġbuilder . set Large Icon ( bitmap ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Intent Ġ= Ġintent Ġ?: ĠIntent () ĊĠĠĠĠĠĠĠ Ġbuilder . setContent Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LAYER _ PENDING _ INT ENT _ ID , Ġnotification Intent , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnotify ( builder . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify ( notification : ĠNotification ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Manager . notify ( NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . start Foreground ( NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Builder (): ĠNotification Compat . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Compat . Builder ( service , Ġnotification Channels . primary Channel ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Compat . Builder ( service ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }