/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠInc . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ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 Ġio . github . g math i . no vel library . service . tts Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 4 . media . session . Media Controller Compat Ċ import Ġandroid . support . v 4 . media . session . Media Session Compat Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġio . github . g math i . no vel library . R Ċ import Ġio . github . g math i . no vel library . extensions . is Playing ĊĊ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġto Ġencaps ulate Ġcode Ġfor Ġbuilding Ġnotifications . Ċ Ġ*/ Ċ class ĠT TS Notification Builder ( private Ġval Ġcontext : ĠContext , Ġpending Intent s : ĠHashMap < String , ĠPending Intent >) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠT TS _ CHANNEL _ ID : ĠString Ġ= Ġ" io . github . g math i . no vel library . tts " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval ĠT TS _ NOTIFICATION _ ID : ĠInt Ġ= Ġio . github . g math i . no vel library . util . Utils . get Unique Notification Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġnotification Manager Ġ= ĠNotification Manager Compat . from ( context ) ĊĊĠĠĠ Ġprivate Ġval Ġskip To Previous Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ skip _ previous _ white , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . previous _ chapter ), ĊĠĠĠĠĠĠĠ Ġpending Intent s [ TT S Service . ACTION _ PREVIOUS ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġplay Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ play _ white , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . play ), ĊĠĠĠĠĠĠĠ Ġpending Intent s [ TT S Service . ACTION _ PLAY ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġpause Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ pause _ white , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pause ), ĊĠĠĠĠĠĠĠ Ġpending Intent s [ TT S Service . ACTION _ PAUSE ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġskip To Next Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ skip _ next _ white , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . next _ chapter ), ĊĠĠĠĠĠĠĠ Ġpending Intent s [ TT S Service . ACTION _ NEXT ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġstop Pending Intent Ġ= ĊĠĠĠĠĠĠĠ Ġpending Intent s [ TT S Service . ACTION _ STOP ] ĊĊĠĠĠ Ġfun Ġbuild Notification ( session Token : ĠMedia Session Compat . Token ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Create Now Playing Channel ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Now Playing Channel ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠMedia Controller Compat ( context , Ġsession Token ) ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġcontroller . metadata . description ĊĠĠĠĠĠĠĠ Ġval Ġplayback State Ġ= Ġcontroller . playback State ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠNotification Compat . Builder ( context , ĠT TS _ CHANNEL _ ID ) ĊĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( skip To Previous Action ) ĊĠĠĠĠĠĠĠ Ġif Ġ( playback State . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addAction ( pause Action ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addAction ( play Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( skip To Next Action ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠAppCompat Resources . get Drawable ( context , ĠR . mip map . ic _ launcher ) ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Large Icon ( drawable . bitmap ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Style Ġ= Ġandroidx . media . app . Notification Compat . Media Style () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel Button Intent ( stop Pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Session ( session Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Actions In Compact View ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Cancel Button ( true ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . setContent Intent ( controller . session Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( description . subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( description . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Delete Intent ( stop Pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Large Icon ( description . icon Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Only Alert Once ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ queue _ music _ white _ vector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setStyle ( media Style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setVisibility ( Notification Compat . VIS IBILITY _ PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Create Now Playing Channel () Ġ= ĊĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O Ġ&& Ġ! now Playing Channel Exists () ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġnow Playing Channel Exists () Ġ= ĊĠĠĠĠĠĠĠ Ġnotification Manager . get Notification Channel ( TT S _ CHANNEL _ ID ) Ġ!= Ġnull ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Now Playing Channel ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT TS _ CHANNEL _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . tts _ notification _ channel _ name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġcontext . getString ( R . string . tts _ notification _ channel _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Sound ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable V ibration ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } ĊĊĊ