package Ġcom . k ronos . sample Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . util . S parseInt Array Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ Ġ@ Author ĠLi AB ao Ċ Ġ* Ġ Ġ@ Since Ġ 2 0 2 1 / 1 0 / 1 4 Ċ Ġ* Ċ Ġ*/ Ċ class ĠNotification Id Manager Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmap Ġ= ĠS parseInt Array () ĊĠĠĠ Ġprivate Ġval Ġkey Map Ġ= ĠSparse Array < HashSet < Int >>() ĊĊĠĠĠ Ġfun Ġcreate Notification Id ( code : ĠBUSINESS ): ĠPair < String , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmap [ code . ordinal ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġmap . put ( code . ordinal , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetId By Size ( code , Ġvalue ) Ġto Ġget Int By Size ( code , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Notification Id By Custom ( code : ĠBUSINESS , ĠhashCode : ĠInt ): ĠPair < String , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġkey Map [ code . ordinal ] Ġ?: Ġhash Set Of () ĊĠĠĠĠĠĠĠ Ġvalue . add ( hashCode ) ĊĠĠĠĠĠĠĠ Ġkey Map . put ( code . ordinal , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetId By Size ( code , ĠhashCode ) Ġto Ġget Int By Size ( code , ĠhashCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Notification Id ( code : ĠBUSINESS ): ĠPair < String , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmap [ code . ordinal ] ĊĠĠĠĠĠĠĠ Ġreturn ĠgetId By Size ( code , Ġvalue ) Ġto Ġget Int By Size ( code , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Notification Id By Custom ( code : ĠBUSINESS , ĠhashCode : ĠInt ): ĠPair < String , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġkey Map [ code . ordinal ] Ġ?: Ġhash Set Of () ĊĠĠĠĠĠĠĠ Ġvalue . add ( hashCode ) ĊĠĠĠĠĠĠĠ Ġkey Map . put ( code . ordinal , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetId By Size ( code , ĠhashCode ) Ġto Ġget Int By Size ( code , ĠhashCode ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠgetAll Id By Business ( code : ĠBUSINESS ): ĠMutable List < Pair < String , ĠInt >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmap [ code . ordinal ] ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Pair < String , ĠInt >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( getId By Size ( code , Ġi Ġ+ Ġ 1 ) Ġto Ġget Int By Size ( code , Ġi Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġclear Id By Business ( code : ĠBUSINESS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . put ( code . ordinal , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Int By Size ( code : ĠBUSINESS , Ġvalue : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠnewValue Ġ= Ġ(( code . ordinal Ġ+ Ġ 1 ) Ġ* Ġ 1 0 0 0 Ġ+ Ġvalue ). to Long () ĊĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ>= ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewValue Ġ-= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠnewValue . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetId By Size ( code : ĠBUSINESS , Ġvalue : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" business _${ code . name }_ id _${ value }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠINSTANCE Ġby Ġlazy ( Lazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Id Manager () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠBUSINESS Ġ{ ĊĠĠĠ ĠMAIN , ĠGAME , ĠO GV Ċ } ĊĊ Ċ fun ĠNotification . notify ( context : ĠContext , Ġcode : ĠBUSINESS ) Ġ{ ĊĠĠĠ ĠNotification Manager Compat . from ( context ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= ĠNotification Id Manager . INSTANCE . create Notification Id ( code ) ĊĠĠĠĠĠĠĠ Ġit . notify ( pair . first , Ġpair . second , Ġthis @ notify ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠNotification . notify ( context : ĠContext , Ġcode : ĠBUSINESS , Ġcustom : ĠInt ) Ġ{ ĊĠĠĠ ĠNotification Manager Compat . from ( context ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= ĠNotification Id Manager . INSTANCE . create Notification Id By Custom ( code , Ġcustom ) ĊĠĠĠĠĠĠĠ Ġit . notify ( pair . first , Ġpair . second , Ġthis @ notify ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠNotification Manager . cancel ( code : ĠBUSINESS ) Ġ{ ĊĠĠĠ Ġval Ġpair Ġ= ĠNotification Id Manager . INSTANCE . get Notification Id ( code ) ĊĠĠĠ Ġcancel ( pair . first , Ġpair . second ) Ċ } ĊĊ Ċ fun ĠNotification Manager . cancel ( code : ĠBUSINESS , Ġcustom : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġpair Ġ= ĠNotification Id Manager . INSTANCE . get Notification Id By Custom ( code , Ġcustom ) ĊĠĠĠ Ġcancel ( pair . first , Ġpair . second ) Ċ } ĊĊ Ċ fun ĠNotification Manager . cancel All ( code : ĠBUSINESS ) Ġ{ ĊĠĠĠ ĠNotification Id Manager . INSTANCE . getAll Id By Business ( code ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel ( it . first , Ġit . second ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠNotification Id Manager . INSTANCE . clear Id By Business ( code ) Ċ }