package Ġorg . ire ader . domain . services . tts _ service . media _ player Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ 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 Ġandroid . support . v 4 . media . session . Playback State Compat Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . media . session . Media Button Receiver Ċ import Ġorg . ire ader . domain . R Ċ import Ġorg . ire ader . domain . notification . Notifications Ċ import Ġorg . ire ader . domain . notification . Notifications . CHANNEL _ TT S Ċ import Ġorg . ire ader . domain . notification . flags Ċ import Ġorg . ire ader . domain . notification . set Large Icon Ċ import Ġorg . ire ader . domain . services . tts _ service . Player Ċ import Ġorg . ire ader . domain . services . tts _ service . media _ player . TT S Service . Companion . ACTION _ CANCEL Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġto Ġencaps ulate Ġcode Ġfor Ġbuilding Ġnotifications . Ċ Ġ*/ Ċ Ċ class ĠT TS Notification Builder Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġm br Component : ĠComponent Name , Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġnotification Manager Ġ= ĠNotification Manager Compat . from ( context ) ĊĠĠĠ Ġprivate Ġval Ġpending Intent Flags Ġ= ĊĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ IM MUT ABLE Ġor ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĊĠĠĠ Ġval Ġskip Prev ActionButton Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ skip _ previous , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . previous _ chapter ), ĊĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay back State Compat . ACTION _ SKIP _ TO _ PREVIOUS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġre wind Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ fast _ rewind , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . previous _ paragraph ), ĊĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay back State Compat . ACTION _ RE W IND ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġpause Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ pause , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pause ), ĊĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( context , ĠPlay back State Compat . ACTION _ STOP ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġplay Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ play _ arrow , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . play ), ĊĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( context , ĠPlay back State Compat . ACTION _ PLAY ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġnext Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ fast _ forward , ĊĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . next _ chapter ), ĊĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay back State Compat . ACTION _ FAST _ FORWARD ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġskip Next Ġ= ĊĠĠĠĠĠĠĠ ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ skip _ next , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . next _ chapter ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay back State Compat . ACTION _ SKIP _ TO _ NEXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġopen TT SS creen ( ĊĠĠĠĠĠĠĠ Ġbook Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġsource Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġchapter Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġprogress : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . ic _ baseline _ open _ in _ new _ 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . next _ chapter ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Reader Screen Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter Id Ġ= Ġchapter Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġbook Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Id Ġ= Ġsource Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Reading Paragraph Ġ= Ġprogress . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġclose Ġ= ĊĠĠĠĠĠĠĠ ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . ire ader . core . R . drawable . baseline _ close _ 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . close ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel MediaPlayer () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġcancel MediaPlayer (): ĠPending Intent Ġ= ĊĠĠĠĠĠĠĠ ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . CANCEL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT TS Service :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠACTION _ CANCEL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Intent Flags ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Suppress Lint (" Wrong Constant ") ĊĠĠĠ Ġsuspend Ġ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 Ġcover Ġ= Ġcontroller . metadata ?. getString (" Cover ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠNotification Compat . Builder ( context , ĠCHAN NEL _ TT S ) ĊĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( skip Prev ActionButton ) ĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( rewind Action ) ĊĠĠĠĠĠĠĠ Ġif Ġ( playback State ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addAction ( pause Action ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addAction ( play ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( next ) ĊĠĠĠĠĠĠĠ Ġbuilder . addAction ( skip Next ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Style Ġ= Ġandroidx . media . app . Notification Compat . Decorated Media Custom View Style () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel Button Intent ( cancel MediaPlayer ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Session ( session Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Actions In Compact View ( 2 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Cancel Button ( true ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . setContent Intent ( controller . session Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setStyle ( media Style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ infinity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text ( description ?. subtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( description ?. title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Delete Intent ( cancel MediaPlayer ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Large Icon ( context , Ġcover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Only Alert Once ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set O ngo ing ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setVisibility ( Notification Compat . VIS IBILITY _ PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Reader Screen Deep Link ( ĊĠĠĠĠĠĠĠ Ġbook Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġsource Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġchapter Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġreading Paragraph : ĠLong , ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" https :// www . ire ader . org / tts _ screen _ route /$ book Id /$ chapter Id /$ source Id /$ reading Paragraph " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Reader Screen Intent ( ĊĠĠĠĠĠĠĠ Ġbook Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġsource Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġchapter Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġcurrent Reading Paragraph : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ): ĠPending Intent Ġ= ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠ Ġorg . ire ader . common _ extensions . launch MainActivity Intent ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠIntent . ACTION _ VIEW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġbuild Reader Screen Deep Link ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġbook Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter Id Ġ= Ġchapter Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Id Ġ= Ġsource Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Paragraph Ġ= Ġcurrent Reading Paragraph . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Uri () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġflags ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġsuspend Ġfun Ġbuild TT S Notification ( ĊĠĠĠĠĠĠĠ Ġmedia Session Compat : ĠMedia Session Compat , ĊĠĠĠ Ġ): ĠNotification Compat . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠMedia Controller Compat ( context , Ġmedia Session Compat . session Token ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbook Name Ġ= Ġcontroller . metadata . getText ( TT S Service . NO VEL _ TITLE ) ĊĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġcontroller . metadata . getLong ( TT S Service . NO VEL _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġfavorite Ġ= Ġcontroller . metadata . getLong ( TT S Service . FA V OR ITE ) ĊĠĠĠĠĠĠĠ Ġval Ġsource Id Ġ= Ġcontroller . metadata . getLong ( TT S Service . SOURCE _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġchapter Title Ġ= Ġcontroller . metadata . getText ( TT S Service . CH AP TER _ TITLE ) ĊĠĠĠĠĠĠĠ Ġval Ġchapter Id Ġ= Ġcontroller . metadata . getLong ( TT S Service . CH AP TER _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġcover Ġ= Ġcontroller . metadata . getText ( TT S Service . NO VEL _ COVER ) ĊĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġcontroller . metadata . getLong ( TT S Service . PROGRESS ) ĊĠĠĠĠĠĠĠ Ġval Ġlast Par Ġ= Ġcontroller . metadata . getLong ( TT S Service . LAST _ PAR AG R APH ) ĊĠĠĠĠĠĠĠ Ġval ĠisLoading : ĠBoolean Ġ= Ġcontroller . metadata . getLong ( TT S Service . IS _ LOADING ) Ġ== Ġ 1 L ĊĠĠĠĠĠĠĠ Ġval Ġis Error : ĠBoolean Ġ= Ġcontroller . metadata . getLong ( TT S Service . ERROR ) Ġ== Ġ 1 L ĊĊĠĠĠĠĠĠĠ Ġval Ġplayback State Ġ= Ġcontroller . playback State ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ-> Ġ" Loading ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ-> Ġ" ERROR " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"${ progress Ġ+ Ġ 1 }/${ last Par Ġ+ Ġ 1 }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . CHANNEL _ TT S ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title ( chapter Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Text ( content Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( org . ire ader . core . R . drawable . ic _ infinity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Only Alert Once ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( Notification Compat . VIS IBILITY _ PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Large Icon ( context , Ġcover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠNotification Compat . PRIORITY _ LOW ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġset Progress ( last Par . toInt (), Ġprogress . toInt (), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ticker ( content Text ) Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Intent ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Reader Screen Intent ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter Id Ġ= Ġchapter Id , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġbook Id , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Id Ġ= Ġsource Id , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Reading Paragraph Ġ= Ġprogress . toInt () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Delete Intent ( cancel MediaPlayer ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġadd Action ( skip Prev ActionButton ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( rewind Action ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( playback State ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( pause Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( play ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġadd Action ( skip Next ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( close ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( open TT SS creen ( book Id , Ġsource Id , Ġchapter Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Style ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . media . app . Notification Compat . Media Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Session ( media Session Compat . session Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Cancel Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel Button Intent ( cancel MediaPlayer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Actions In Compact View ( 0 , 1 , 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Sub Text ( book Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Auto Cancel ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Color ized ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset O ngo ing ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ( Notifications . CHANNEL _ TT S ) Ġ!= Ġnull ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Now Playing Channel ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . CHANNEL _ TT S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHAN NEL _ TT S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Sound ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable V ibration ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ