package Ġcom . fs ck . k 9 m _ m . notification ĊĊ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Channel Group Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . fs ck . k 9 m _ m . Account Ċ import Ġcom . fs ck . k 9 m _ m . Preferences Ċ import Ġjava . util . concurrent . Executor Ċ Ċ class ĠNotification Channel Manager ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreferences : ĠPreferences , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbackground Executor : ĠExecutor , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnotification Manager : ĠNotification Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġresource Provider : ĠNotification Resource Provider Ċ ) Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠChannel Type Ġ{ ĊĠĠĠĠĠĠĠ ĠMESS AGES , ĠMIS CELL AN EO US ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpreferences . add On Accounts ChangeListener ( this :: update Channels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Channels () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbackground Executor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccounts Ġ= Ġpreferences . accounts ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Channels For Non Existing Or Changed Accounts ( notification Manager , Ġaccounts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Channels For Accounts ( notification Manager , Ġaccounts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġadd Channels For Accounts ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager : ĠNotification Manager , Ġaccounts : ĠList < Account >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( account Ġin Ġaccounts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= Ġaccount . uuid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= ĠNotification Channel Group ( groupId , Ġaccount . displayName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Messages Ġ= Ġget Channel Messages ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Mis cellaneous Ġ= Ġget Channel Mis cellaneous ( account ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel Group ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel Mis cellaneous ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġremove Channels For Non Existing Or Changed Accounts ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager : ĠNotification Manager , Ġaccounts : ĠList < Account >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Accounts Ġ= ĠHashMap < String , ĠAccount >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( account Ġin Ġaccounts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Accounts [ account . uuid ] Ġ= Ġaccount ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġnotification Manager . notification Channel Groups ĊĠĠĠĠĠĠĠ Ġfor Ġ( group Ġin Ġgroups ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= Ġgroup . id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshould Delete Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! existing Accounts . containsKey ( groupId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Delete Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( existing Accounts [ groupId ]?. displayName Ġ!= Ġgroup . name . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThere Ġis Ġno Ġway Ġto Ġchange Ġgroup Ġnames . ĠDe leting Ġgroup , Ġso Ġit Ġis Ġre - generated . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Delete Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Delete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . delete Notification Channel Group ( groupId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġget Channel Messages ( account : ĠAccount ): ĠNotification Channel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Name Ġ= Ġresource Provider . messages Channel Name ĊĠĠĠĠĠĠĠ Ġval Ġchannel Description Ġ= Ġresource Provider . messages Channel Description ĊĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġget Channel Id For ( account , ĠChannel Type . MESSAGES ) ĊĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠ Ġval Ġchannel GroupId Ġ= Ġaccount . uuid ĊĊĠĠĠĠĠĠĠ Ġval Ġmessages Channel Ġ= ĠNotification Channel ( channelId , Ġchannel Name , Ġimportance ) ĊĠĠĠĠĠĠĠ Ġmessages Channel . description Ġ= Ġchannel Description ĊĠĠĠĠĠĠĠ Ġmessages Channel . group Ġ= Ġchannel GroupId ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmessages Channel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġget Channel Mis cellaneous ( account : ĠAccount ): ĠNotification Channel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Name Ġ= Ġresource Provider . mis cellaneous Channel Name ĊĠĠĠĠĠĠĠ Ġval Ġchannel Description Ġ= Ġresource Provider . mis cellaneous Channel Description ĊĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġget Channel Id For ( account , ĠChannel Type . MIS CELL AN EO US ) ĊĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ LOW ĊĠĠĠĠĠĠĠ Ġval Ġchannel GroupId Ġ= Ġaccount . uuid ĊĊĠĠĠĠĠĠĠ Ġval Ġmis cellaneous Channel Ġ= ĠNotification Channel ( channelId , Ġchannel Name , Ġimportance ) ĊĠĠĠĠĠĠĠ Ġmis cellaneous Channel . description Ġ= Ġchannel Description ĊĠĠĠĠĠĠĠ Ġmis cellaneous Channel . group Ġ= Ġchannel GroupId ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmis cellaneous Channel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Channel Id For ( account : ĠAccount , Ġchannel Type : ĠChannel Type ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Uuid Ġ= Ġaccount . uuid ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( channel Type Ġ== ĠChannel Type . MESSAGES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" messages _ channel _$ account Uuid " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mis cellaneous _ channel _$ account Uuid " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ