/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . notification channels Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Task Stack Builder Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context Wrapper Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . annotation . Requires Api Ċ import Ġandroid . support . v 4 . app . Notification Compat Ċ Ċ import Ġjava . util . Random Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġto Ġmanage Ġnotification Ġchannels , Ġand Ġcreate Ġnotifications . Ċ Ġ*/ Ċ internal Ġclass ĠNotification Helper Ġ( context : ĠContext ) Ġ: ĠContext Wrapper ( context ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠFOL LOW ERS _ CHANNEL Ġ= Ġ" follow er " ĊĠĠĠĠĠĠĠ Ġval ĠDIRECT _ MESSAGE _ CHANNEL Ġ= Ġ" direct _ message " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Notification Manager : ĠNotification Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġnotification Ġchannels , Ġwhich Ġcan Ġbe Ġused Ġlater Ġby Ġindividual Ġnotifications . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġfun Ġcreate channels () Ġ{ ĊĊĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġchannel Ġobject Ġwith Ġthe Ġunique ĠID ĠFOL LOW ERS _ CHANNEL ĊĠĠĠĠĠĠĠ Ġval Ġfollow ers Channel Ġ= ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFOL LOW ERS _ CHANNEL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . notification _ channel _ followers ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ DEFAULT ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfigure Ġthe Ġchannel 's Ġinitial Ġsettings ĊĠĠĠĠĠĠĠ Ġfollow ers Channel . light Color Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠ Ġfollow ers Channel . vi br ation Pattern Ġ= Ġlong ArrayOf ( 1 0 0 , Ġ 2 0 0 , Ġ 3 0 0 , Ġ 4 0 0 , Ġ 5 0 0 , Ġ 4 0 0 , Ġ 5 0 0 , Ġ 2 0 0 , Ġ 5 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSubmit Ġthe Ġnotification Ġchannel Ġobject Ġto Ġthe Ġnotification Ġmanager ĊĠĠĠĠĠĠĠ Ġm Notification Manager . create Notification Channel ( followers Channel ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdm Channel Ġ= ĠNotification Channel ( DIRECT _ MESSAGE _ CHANNEL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . notification _ channel _ direct _ message ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ HIGH ) ĊĊĠĠĠĠĠĠĠ Ġdm Channel . light Color Ġ= ĠColor . BLUE ĊĠĠĠĠĠĠĠ Ġm Notification Manager . create Notification Channel ( dm Channel ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġfollow / un - follow Ġnotification ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠProvide Ġthe Ġbuilder Ġrather Ġthan Ġthe Ġnotification Ġit 's Ġself Ġas Ġuseful Ġfor Ġmaking ĊĠĠĠĠ Ġ* Ġnotification Ġchanges . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġtitle Ġthe Ġtitle Ġof Ġthe Ġnotification ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġ Ġthe Ġbody Ġtext Ġfor Ġthe Ġnotification ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA ĠNotification . Builder Ġconfigured Ġwith Ġthe Ġselected Ġchannel Ġand Ġdetails ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Notification Follower ( title : ĠString , Ġbody : ĠString ): ĠNotification . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification . Builder ( application Context , ĠFOL LOW ERS _ CHANNEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( small Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Notification Follower Low API ( title : ĠString , Ġbody : ĠString ): ĠNotification Compat . Builder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Builder ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( small Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġdirect Ġmessage Ġnotification ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠProvide Ġthe Ġbuilder Ġrather Ġthan Ġthe Ġnotification Ġit 's Ġself Ġas Ġuseful Ġfor Ġmaking ĊĠĠĠĠ Ġ* Ġnotification Ġchanges . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġtitle ĠTitle Ġfor Ġnotification . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbody Ġ ĠMessage Ġfor Ġnotification . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA ĠNotification . Builder Ġconfigured Ġwith Ġthe Ġselected Ġchannel Ġand Ġdetails ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Notification DM ( title : ĠString , Ġbody : ĠString ): ĠNotification . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification . Builder ( application Context , ĠDIRECT _ MESSAGE _ CHANNEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( small Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Notification D ML ow API ( title : ĠString , Ġbody : ĠString ): ĠNotification Compat . Builder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Builder ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( small Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa ĠPending Intent Ġfor Ġopening Ġup Ġthe ĠMainActivity Ġwhen Ġthe Ġnotification Ġis Ġpressed ĊĊĠĠĠĠ Ġ* Ġ@ return ĠA ĠPending Intent Ġthat Ġopens Ġthe ĠMainActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġ// ĠThe Ġstack Ġbuilder Ġobject Ġwill Ġcontain Ġan Ġart ificial Ġback Ġstack Ġfor Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstarted ĠActivity . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġensures Ġthat Ġnavig ating Ġbackward Ġfrom Ġthe ĠActivity Ġleads Ġout Ġof ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġyour Ġapplication Ġto Ġthe ĠHome Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdds Ġthe Ġback Ġstack Ġfor Ġthe ĠIntent Ġ( but Ġnot Ġthe ĠIntent Ġitself ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdds Ġthe ĠIntent Ġthat Ġstarts Ġthe ĠActivity Ġto Ġthe Ġtop Ġof Ġthe Ġstack ĊĠĠĠ Ġval Ġpending Intent : ĠPending Intent ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopen Main Intent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Builder Ġ= ĠTask Stack Builder . create ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Builder . add Parent Stack ( MainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Builder . add Next Intent ( open Main Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstack Builder . get Pending Intent ( 0 , ĠPending Intent . FLAG _ ONE _ SHOT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend Ġa Ġnotification . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠĠĠĠĠĠĠĠĠĠ ĠThe ĠID Ġof Ġthe Ġnotification ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnotification ĠThe Ġnotification Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnotify ( id : ĠInt , Ġnotification : ĠNotification . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Notification Manager . notify ( id , Ġnotification . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify ( id : ĠInt , Ġnotification : ĠNotification Compat . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Notification Manager . notify ( id , Ġnotification . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġsmall Ġicon Ġfor Ġthis Ġapp ĊĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġsmall Ġicon Ġresource Ġid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsmall Icon : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġandroid . R . drawable . stat _ notify _ chat ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġrandom Ġname Ġstring Ġfrom Ġresources Ġto Ġadd Ġpersonal ization Ġto Ġthe Ġnotification ĊĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġrandom Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrandom Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnames Ġ= Ġapplication Context . resources . getString Array ( R . array . names _ array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnames [ Random (). nextInt ( names . size )] ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ } Ċ