package Ġcom . nex mo . push _ notifications . utils Ċ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . Ring tone Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Notification Compat Ċ import Ġandroid . util . Log Ċ import Ġcom . nex mo . push _ notifications . R Ċ import Ġcom . nex mo . sdk . conversation . client . Image Ċ import Ġcom . nex mo . sdk . conversation . client . Member Ċ import Ġcom . nex mo . sdk . conversation . client . Text Ċ import Ġcom . nex mo . sdk . conversation . push . Push Notification Ċ import Ġcom . nex mo . sdk . conversation . push . Push Notification .* Ċ import Ġcom . nex mo . sdk . conversation . client . event . container . Invitation ĊĊĊĊ Ċ const Ġval ĠNOT IFICATION _ CHANNEL _ ID Ġ= Ġ" misc " Ċ const Ġval ĠNOT IFICATION _ CHANNEL _ NAME Ġ= Ġ" Mis cellaneous " Ċ const Ġval ĠNOT IFICATION _ ID Ġ= Ġ 1 Ċ Ċ class ĠSt itch Push Receiver Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠSt itch Push Receiver :: class . java . simple Name ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Receive ") ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġintent ?. extras ĊĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull Ġ&& Ġbundle Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġintent . action Ġ== ĠPush Notification . CONVER S ATION _ PUSH _ ACTION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġbundle . containsKey ( Push Notification . CONVER S ATION _ PUSH _ TYPE )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Push ( bundle , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Push ( bundle : ĠBundle ?, Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġbundle ?. getString ( Push Notification . CONVER S ATION _ PUSH _ TYPE ) ĊĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPush Notification . ACTION _ TYPE _ IMAGE Ġ-> Ġhandle Image ( bundle , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPush Notification . ACTION _ TYPE _ TEXT Ġ-> Ġhandle Text ( bundle , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPush Notification . ACTION _ TYPE _ INV ITE Ġ-> Ġhandle Invite ( bundle , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġthrow ĠIllegalArgumentException (" un handled Ġpush Ġnotification Ġtype ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Invite ( bundle : ĠBundle , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinv itation Ġ= ĠPush Invitation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Member Id Ġ= Ġbundle . getString ( Push Notification . ACTION _ TYPE _ INV IT ED _ BY _ MEMBER _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconversation Name Ġ= Ġ Ġbundle . getString ( Push Notification . ACTION _ TYPE _ INV ITE _ CONVER S ATION _ NAME ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Username Ġ= Ġbundle . getString ( Push Notification . ACTION _ TYPE _ INV IT ED _ BY _ USERNAME ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv ited Member Ġ= Ġ Ġbundle . get Parcelable ( Member :: class . java . simple Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconversation Id Ġ= Ġ Ġbundle . getString ( Push Notification . ACTION _ TYPE _ INV ITE _ CONVER S ATION _ ID ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġshow Notification ( context , Ġ" Invitation Ġfrom Ġ${ inv itation . sender Username } Ġto Ġ${ inv itation . conversation Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Text ( bundle : ĠBundle , Ġcontext : ĠContext ){ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbundle . get Parcelable ( Text :: class . java . simple Name ) Ġas ĠText ĊĠĠĠĠĠĠĠ Ġshow Notification ( context , Ġ"${ text . member . name }: Ġ${ text . text }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Image ( bundle : ĠBundle , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġbundle . get Parcelable ( Image :: class . java . simple Name ) Ġas ĠImage ĊĠĠĠĠĠĠĠ Ġshow Notification ( context , Ġ" New Ġimage Ġfrom Ġ${ image . member . name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Notification ( context : ĠContext , Ġpayload : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Manager Ġ= Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= ĠNotification Compat . Builder ( context , ĠNOT IFICATION _ CHANNEL _ ID ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title (" N ex mo ĠSt itch ĠNotification ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// max Ġcharacters Ġfor Ġa Ġpush Ġnotification Ġis Ġ 4 KB Ġor Ġabout Ġ 1 0 0 0 Ġcharacters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Text ( payload . substring ( 0 , ĠMath . min ( 1 0 0 0 , Ġpayload . length ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Auto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset V ibrate ( long ArrayOf ( 0 , Ġ 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Sound ( Ring tone Manager . getDefault Uri ( Ring tone Manager . TYPE _ NOTIFICATION )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( R . drawable . ic _ send _ black _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// On ĠAndroid Ġversions Ġstarting Ġwith ĠO re o Ġ( SDK Ġversion Ġ 2 6 ), Ġany Ġlocal Ġnotification Ġyour Ġapp Ġis Ġtrying Ġto Ġbuild Ġneeds Ġto Ġbe Ġattached Ġto Ġa ĠNotification Channel ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Channel Ġ= ĠNotification Channel ( NOTIFICATION _ CHANNEL _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNOT IFICATION _ CHANNEL _ NAME , ĠNotification Manager . IMPORT ANCE _ DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( notification Channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġand Ġissue Ġthe Ġnotification . ĠAll Ġpending Ġnotifications Ġwith Ġsame Ġid Ġwill Ġbe Ġcanceled . ĊĠĠĠĠĠĠĠ Ġnotification Manager . notify ( NOTIFICATION _ ID , Ġnotification Builder . build ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠPush Invitation Ġconstructor ( val Ġsender Member Id : ĠString , Ġval Ġconversation Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender Username : ĠString , Ġval Ġinv ited Member : ĠMember , Ġval Ġconversation Id : ĠString )