package Ġcom . applic aster . firebase push plugin android . notification Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . media . Ring tone Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . text . TextUtils Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġcom . applic aster . firebase push plugin android . push . Push Message Ċ import Ġcom . applic aster . util . AP Logger Ċ import Ġcom . applic aster . util . StringUtil Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Remote Views Ċ import Ġcom . applic aster . app . Custom Application Ċ import Ġcom . applic aster . util . OS Util Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Down sample Strategy Ċ Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġjava . text . SimpleDateFormat ĊĊ Ċ class ĠNotification Util Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠNotification Util :: class . java . canonical Name ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCUSTOM _ SOUND _ KEY Ġ= Ġ" custom Ġsound " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ S ND Ġ= Ġ" system _ default " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS IL ENT _ PUSH _ KEY Ġ= Ġ" silent " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ DIMENSION S Ġ= Ġ 1 0 2 4 ĊĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Custom View Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Message : ĠPush Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon Id : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġpush Message . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Text Ġ= Ġpush Message . content Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsound Ġ= Ġpush Message . sound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Url Ġ= Ġpush Message . icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġpush Message . message Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlarge Icon Bitmap : ĠBitmap ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Url . isNotEmpty () Ġ-> Ġfetch Image ( context , Ġicon Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Bitmap : ĠBitmap ? Ġ= Ġpush Message . image ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Image With Resize ( context , Ġpush Message . image . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= ĠNotification Compat . Builder ( context , Ġpush Message . channel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( notification Icon Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Large Icon ( large Icon Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis miss ĠNotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Auto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġalert Ġto Ġalert Ġonly Ġonce ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Only Alert Once ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġdefaults Ġfor Ġlights Ġand Ġvi br ations . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Defaults ( Notification Compat . DEFAULT _ ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġthe Ġsound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Sound ( sound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġcontent Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġcontent Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Text ( content Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġthe Ġcontent Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Intent ( getContent Intent ( context )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġimage Bitmap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Large Icon ( image Bitmap ) Ġ// Ġoverride Ġlarge Ġicon Ġwith Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Style ( Notification Compat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Big Picture Style ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. big Picture ( image Bitmap )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! TextUtils . isEmpty ( push Message . click Action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( push Message . click Action )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Intent ( Pending Intent . getActivity ( context , Ġ 0 , Ġnotification Intent , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnotification Builder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfetch Image ( context : ĠContext , Ġurl : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠG lide . with ( context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. submit (). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Failed Ġto Ġfetch Ġimage Ġ$ url ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfetch Image With Resize ( context : ĠContext , Ġurl : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠG lide . with ( context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Options (). override ( MAX _ DIMENSION S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. down sample ( Down sample Strategy . AT _ MO ST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. submit (). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAP Logger . error ( TAG , Ġ" Failed Ġto Ġfetch Ġimage Ġ$ url ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Push Sound ( message : ĠPush Message , Ġcontext : ĠContext ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// no Ġsound Ġpush ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Sil ent ( message )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// custom Ġsound Ġpush ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Ġ= Ġget Sound Uri ByName ( CUSTOM _ SOUND _ KEY , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcustom Ġ?: ĠRing tone Manager . getDefault Uri ( Ring tone Manager . TYPE _ NOTIFICATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Sil ent ( message : ĠPush Message ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS IL ENT _ PUSH _ KEY . equals ( CUSTOM _ SOUND _ KEY , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Sound Uri ( sound : ĠString ?, Ġcontext : ĠContext ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( StringUtil . isEmpty ( sound ) Ġ|| ĠDEFAULT _ S ND . equals ( sound , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSettings . System . DEFAULT _ NOTIFICATION _ URI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// no Ġsound Ġpush ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SIL ENT _ PUSH _ KEY . equals ( sound , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// custom Ġsound Ġpush ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom : ĠUri ? Ġ= Ġget Sound Uri ByName ( sound !! , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcustom Ġ?: ĠSettings . System . DEFAULT _ NOTIFICATION _ URI ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Sound Uri ByName ( sound Name : ĠString , Ġcontext : ĠContext ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġres : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( StringUtil . isEmpty ( sound Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcontext . resources . getIdentifier ( sound Name , Ġ" raw ", Ġcontext . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= ĠUri . parse (" android . resource ://${ context . packageName }/ $ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetContent Intent ( context : ĠContext ): ĠPending Intent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġcontext . package Manager . get Launch Intent For Package ( context . packageName )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPending Intent . getActivity ( context , Ġ 0 , Ġintent , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Custom View Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Message : ĠPush Message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Notification Icon Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification GroupId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Custom Layout : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Custom Big Layout : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġpush Message . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġpush Message . content Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsound Ġ= Ġpush Message . sound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġpush Message . channel ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnormal Remote Views Ġ= Ġget Notification View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Notification Icon Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Custom Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Remote Views Ġ= Ġget Notification View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Notification Icon Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Custom Big Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= ĠNotification Compat . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ// ĠSet ĠIcon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( notification Icon Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Large Icon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ// ĠDis miss ĠNotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) Ġ// ĠSet ĠRemote Views Ġinto ĠNotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent ( normal Remote Views ) Ġ// ĠSet Ġthe Ġalert Ġto Ġalert Ġonly Ġonce ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Only Alert Once ( true ) Ġ// set Ġdefaults Ġfor Ġlights Ġand Ġvi br ations . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Defaults ( Notification . DEFAULT _ LIGHT S Ġor ĠNotification . DEFAULT _ V IB RATE ) Ġ// set Ġthe Ġsound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Sound ( sound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( getContent Intent ( context )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification GroupId ?. let Ġ{ Ġnotification Builder . set Group ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Builder . set Custom Big ContentView ( big Remote Views ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Builder . color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . getColor ( OS Util . getColor Resource Identifier (" notification _ icon _ background ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Custom Image If Ne cessary ( push Message , Ġcontext , Ġnormal Remote Views , Ġbig Remote Views ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! TextUtils . isEmpty ( push Message . click Action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( push Message . click Action )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Builder . setContent Intent ( Pending Intent . getActivity ( context , Ġ 0 , Ġnotification Intent , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnotification Builder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Group Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Message : ĠPush Message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification GroupId : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġpush Message . channel ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( notification Icon Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Group ( notification GroupId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġthis Ġnotification Ġas Ġthe Ġsummary Ġfor Ġthe Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Group Summary ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġload Custom Image If Ne cessary ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Message : ĠPush Message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Remote Views : ĠRemote Views , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig Remote Views : ĠRemote Views ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Bitmap : ĠBitmap ? Ġ= Ġpush Message . image ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Image With Resize ( context , Ġpush Message . image . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent ImageView Id Ġ= ĠOS Util . getResource Id (" custom _ notification _ image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Remote Views . setView Visibility ( content ImageView Id , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Remote Views . setView Visibility ( content ImageView Id , ĠView . VISIBLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Remote Views . set ImageView Bitmap ( content ImageView Id , Ġimage Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Remote Views . set ImageView Bitmap ( content ImageView Id , Ġimage Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Notification View ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Layout : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠRemote Views Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Views Ġ= ĠRemote Views ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Util . get PackageName (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Util . get Layout Resource Identifier ( notification Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . set ImageView Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Util . getResource Id (" custom _ notification _ app _ icon "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( title )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle TextView Id Ġ= ĠOS Util . getResource Id (" custom _ notification _ title ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setView Visibility ( title TextView Id , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setText View Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle TextView Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setText View Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Util . getResource Id (" custom _ notification _ description "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġ" HH : mm " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠSimpleDateFormat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Application . getApplication Locale () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). format ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views . setText View Text ( ĠOS Util . getResource Id (" custom _ notification _ time "), ĠcurrentTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġremote Views ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }