/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠA det un ji ĠD ahun si Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . main street code . team mate . notifications ĊĊ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Pending Intent . FLAG _ UPDATE _ CURRENT Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . media . Ring tone Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build . VERSION . SDK _ INT Ċ import Ġandroid . os . Build . VERSION _ CODES . O Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Remote Input Ċ import Ġcom . main street code . team mate . R Ċ import Ġcom . main street code . team mate . model . Chat Ċ import Ġcom . main street code . team mate . model . Team Ċ import Ġcom . main street code . team mate . repository . Chat Repo Ċ import Ġcom . main street code . team mate . repository . Model Repo Ċ import Ġcom . main street code . team mate . repository . Repo Provider Ċ import Ġcom . main street code . team mate . repository . User Repo Ċ import Ġcom . main street code . team mate . util . ErrorHandler Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers . main Thread Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġkotlin . math . min ĊĊ Ċ class ĠChat Notifier Ġinternal Ġconstructor () Ġ: ĠNot ifier < Chat >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvisible Chat Map Ġ= ĠHashMap < Team , ĠBoolean >() ĊĊĠĠĠ Ġoverride Ġval Ġnotify Id : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠFeed Item . CHAT ĊĊĠĠĠ Ġoverride Ġval Ġrepository : ĠModel Repo < Chat > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠRepo Provider . for Model ( Chat :: class . java ) ĊĊĠĠĠ Ġoverride Ġval Ġnotification Channels : ĠArray < Notification Channel >? ĊĠĠĠĠĠĠĠ Ġ@ Target Api ( O ) ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġbuild Notification Channel ( Feed Item . CHAT , ĠR . string . ch ats , ĠR . string . ch ats _ notifier _ description , ĠNotification Manager . IMPORT ANCE _ HIGH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . light Color Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . enable V ibration ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( ACTION _ MARK _ AS _ READ ) ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( ACTION _ REPLY ) ĊĊĠĠĠĠĠĠĠ Ġapp . register Receiver ( Notification Action Receiver (), Ġfilter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter Notifications ( item : ĠChat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvisible Ġ= Ġvisible Chat Map [ item . team ] ĊĠĠĠĠĠĠĠ Ġreturn Ġvisible Ġ== Ġnull Ġ|| Ġ! visible ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Notification Tag ( model : ĠChat ): ĠString Ġ= Ġmodel . team . id ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Notification ( item : ĠFeed Item < Chat >) Ġ= Ġaggregate Con versations ( item , Ġitem . model ) ĊĊĠĠĠ Ġfun Ġset Chat Visibility ( team : ĠTeam , Ġvisible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisible Chat Map [ team ] Ġ= Ġvisible ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġaggregate Con versations ( item : ĠFeed Item < Chat > ?, Ġreceived : ĠChat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepo Provider . for Repo ( Chat Repo :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠAtomicInteger ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġrepository [ received ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġrepository . fetch Un read Ch ats () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġcount . increment AndGet () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġunread Ch ats Ġ-> Ġbuild Notification ( item , Ġunread Ch ats , Ġcount . get ()) Ġto Ġunread Ch ats [ 0 ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġnotification Chat Pair Ġ-> Ġsend Notification ( notification Chat Pair . first , Ġnotification Chat Pair . second ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Handler . EMPTY :: invoke , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġbuild Summary ( item , Ġcount . get ()) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Notification ( item : ĠFeed Item < Chat > ?, Ġch ats : ĠList < Chat >, Ġcount : ĠInt ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġch ats . size ĊĠĠĠĠĠĠĠ Ġval Ġlatest Ġ= Ġch ats [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġteam Name Ġ= Ġlatest . team . name ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= Ġget Notification Builder ( item !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( get Deep Link Intent ( latest )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ notification ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAction ( get Reply Action ( item , Ġlatest )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAction ( get Mark As Read Action ( latest )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Group ( NOTIFICATION _ GROUP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĊĠĠĠĠĠĠĠ Ġnotification Builder . set Sound ( get Notification Sound ( count )) ĊĠĠĠĠĠĠĠ Ġset Group Alert Summary ( notification Builder ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ< Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnotification Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( app . getString ( R . string . ch ats _ notification _ title , Ġteam Name , Ġlatest . user . firstName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( latest . content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġmin ( size Ġ- Ġ 1 , ĠMAX _ LINES ) ĊĠĠĠĠĠĠĠ Ġval Ġstyle Ġ= ĠNotification Compat . Inbox Style () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmin Ġdown To Ġ 0 ) Ġstyle . add Line ( get Chat Line ( ch ats [ i ])) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ> ĠMAX _ LINES ) Ġstyle . set Summary Text ( app . getString ( R . string . chat _ notification _ mult iline _ summary , Ġsize Ġ- ĠMAX _ LINES )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnotification Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( app . getString ( R . string . chat _ notification _ mult iline _ title , Ġsize , Ġteam Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( get Chat Line ( latest )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setStyle ( style ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Summary ( item : ĠFeed Item < Chat > ?, Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= Ġget Notification Builder ( item !! ) ĊĊĠĠĠĠĠĠĠ Ġset Group Alert Summary ( notification Builder ) ĊĊĠĠĠĠĠĠĠ Ġsend Notification ( notification Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( app . getString ( R . string . chat _ notification _ group _ summary , Ġcount )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( app . getString ( R . string . chat _ notification _ group _ summary , Ġcount )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ notification ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Group ( NOTIFICATION _ GROUP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Group Summary ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĠChat . empty ()) Ġ// ĠEmpty Ġchat Ġas Ġthe Ġsummary Ġis Ġit 's Ġown Ġnotification ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Group Alert Summary ( builder : ĠNotification Compat . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( SDK _ INT Ġ>= ĠO ) Ġbuilder . set Group Alert Behavior ( Notification Compat . GROUP _ ALERT _ SUM MARY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Notification Sound ( count : ĠInt ): ĠUri Ġ= Ġwhen Ġ( count ) Ġ{ ĊĠĠĠĠĠĠĠĠ 1 Ġ-> ĠRing tone Manager . getDefault Uri ( Ring tone Manager . TYPE _ NOTIFICATION ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUri . parse (" android . resource ://" Ġ+ Ġapp . packageName Ġ+ Ġ"/" Ġ+ ĠR . raw . silent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Chat Line ( chat : ĠChat ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfirstName Ġ= Ġchat . user . firstName ĊĠĠĠĠĠĠĠ Ġreturn Ġapp . getString ( R . string . chat _ notification _ mult iline _ item , ĠfirstName , Ġchat . content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Reply Action ( item : ĠFeed Item < Chat >, Ġlatest : ĠChat ): ĠNotification Compat . Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreply Label Ġ= Ġapp . resources . getString ( R . string . chat _ reply _ label ) ĊĠĠĠĠĠĠĠ Ġval Ġpending Ġ= Ġget Notification Action Intent ( latest , ĠACTION _ REPLY ) Ġ{ Ġintent Ġ-> Ġintent . putExtra ( EXTRA _ FEED _ ITEM , Ġitem ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Action . Builder ( R . drawable . ic _ notification , Ġreply Label , Ġpending ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Remote Input ( Remote Input . Builder ( KEY _ TEXT _ REPLY ). setLabel ( reply Label ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Mark As Read Action ( latest : ĠChat ): ĠNotification Compat . Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmark Label Ġ= Ġapp . resources . getString ( R . string . chat _ mark _ as _ read _ label ) ĊĠĠĠĠĠĠĠ Ġval Ġpending Ġ= Ġget Notification Action Intent ( latest , ĠACTION _ MARK _ AS _ READ ) Ġ{ Ġintent Ġ-> Ġintent . putExtra ( EXTRA _ CHAT , Ġlatest ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Action . Builder ( R . drawable . ic _ notification , Ġmark Label , Ġpending ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Notification Action Intent ( latest : ĠChat , Ġaction : ĠString , Ġintent Consumer : Ġ( Intent ) Ġ-> ĠUnit ): ĠPending Intent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpending Ġ= ĠIntent ( app , ĠNotification Action Receiver :: class . java ). setAction ( action ) ĊĠĠĠĠĠĠĠ Ġadd Notification Id ( pending ) ĊĊĠĠĠĠĠĠĠ Ġintent Consumer . invoke ( pending ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPending Intent . get Broadcast ( app , Ġlatest . team . hashCode (), Ġpending , ĠFLAG _ UPDATE _ CURRENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠNotification Action Receiver Ġ: ĠBroadcast Receiver () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepo Provider . for Repo ( Chat Repo :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot ifier Ġ= ĠChat Notifier () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent . action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Ġ?: Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ REPLY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Input Ġ= ĠRemote Input . get Results From Intent ( intent ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġremote Input . get CharSequence ( KEY _ TEXT _ REPLY ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Ġ= Ġintent . get Parcelable Extra < Feed Item < Chat >>( EXTRA _ FEED _ ITEM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Send Ġ= ĠChat . chat ( message , ĠRepo Provider . for Repo ( User Repo :: class . java ). currentUser , Ġreceived . model . team ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . create OrUpdate ( to Send ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġnot ifier . aggregate Con versations ( received , Ġto Send ) Ġ}, ĠError Handler . EMPTY :: invoke ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ MARK _ AS _ READ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġintent . get Parcelable Extra < Chat >( EXTRA _ CHAT ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . update Last Seen ( read . team ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . fetch Un read Ch ats (). count (). subscribe Ġ{ Ġcount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ifier . clear Notifications ( read ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ< Ġ 1 ) Ġnot ifier . clear Notifications ( Chat . empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT IFICATION _ GROUP Ġ= Ġ" com . main street code . team m ates . notifications . Chat Notifier " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TEXT _ REPLY Ġ= Ġ" KEY _ TEXT _ REPLY " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ MARK _ AS _ READ Ġ= Ġ" MARK _ AS _ READ " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ REPLY Ġ= Ġ" REPLY " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ FEED _ ITEM Ġ= Ġ" FEED _ ITEM " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ CHAT Ġ= Ġ" CHAT " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ LINES Ġ= Ġ 5 ĊĠĠĠ Ġ} Ċ } Ċ