/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 Ġcom . example . android . u amp . media Ċ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . support . v 4 . media . session . Media Controller Compat Ċ import Ġandroid . support . v 4 . media . session . Media Session Compat Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . example . android . u amp . Music Application Ċ import Ġcom . google . android . ex op layer 2 . Player Ċ import Ġcom . google . android . ex op layer 2 . ui . Player Notification Manager Ċ import Ġcom . google . android . ex op layer 2 . ui . Player Notification Manager . Media Description Adapter Ċ import Ġcom . google . android . ex op layer 2 . util . Notification Util Ċ import Ġcom . google . android . ex op layer 2 . util . Notification Util . IMPORT ANCE _ LOW Ċ import Ġcom . google . android . ex op layer 2 . util . Notification Util . Import ance Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . util . Arrays Ċ import Ġjava . util . HashMap ĊĊ Ċ const Ġval ĠNOW _ PLAY ING _ CHANNEL _ ID Ġ= Ġ" com . simple _ player . NOW _ PLAY ING " Ċ const Ġval ĠNOW _ PLAY ING _ NOTIFICATION _ ID Ġ= Ġ 0 xb 3 3 9 Ġ// ĠAr bitrary Ġnumber Ġused Ġto Ġidentify Ġour Ġnotification Ċ Ċ /** Ċ Ġ* ĠA Ġwrapper Ġclass Ġfor ĠEx o Player 's ĠPlayer Notification Manager . ĠIt Ġsets Ġup Ġthe Ġnotification Ġshown Ġto Ċ Ġ* Ġthe Ġuser Ġduring Ġaudio Ġplayback Ġand Ġprovides Ġtrack Ġmetadata , Ġsuch Ġas Ġtrack Ġtitle Ġand Ġicon Ġimage . Ċ Ġ*/ Ċ class ĠU amp Notification Manager ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġsession Token : ĠMedia Session Compat . Token , ĊĠĠĠ Ġnotification Listener : ĠPlayer Notification Manager . Notification Listener Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠPlayer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġservice Job Ġ= ĠSuper visor Job () ĊĠĠĠ Ġprivate Ġval Ġservice Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ Ġservice Job ) ĊĠĠĠ Ġprivate Ġval Ġnotification Manager : ĠPlayer Notification Manager ĊĠĠĠ Ġprivate Ġval Ġplatform Notification Manager : ĠNotification Manager Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Controller Ġ= ĠMedia Controller Compat ( context , Ġsession Token ) ĊĊĊĊĠĠĠĠĠĠĠ Ġnotification Manager Ġ= Ġcreate With Notification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOW _ PLAY ING _ CHANNEL _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . notification _ channel , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . notification _ channel _ description , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOW _ PLAY ING _ NOTIFICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDescription Adapter ( media Controller ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCat Action Receiver ( media Controller ) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Media Session Token ( session Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( R . drawable . ic _ notification ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġdisplay Ġthe Ġre wind Ġor Ġfast - forward Ġbuttons . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Rew ind Increment Ms ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Fast Forward Increment Ms ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Use Navigation Actions In Compact View ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCat Action Receiver ( val Ġmedia Controller : ĠMedia Controller Compat ) Ġ: ĠPlayer Notification Manager . Custom Action Receiver Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Custom Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Id : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠMap < String , ĠNotification Compat . Action > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret : ĠMutable Map < String , ĠNotification Compat . Action > Ġ= ĠHashMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent Ġ= ĠIntent ( STEP _ FORWARD ). set Package ( context . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġinstance Id , Ġintent , ĠPending Intent . FLAG _ CANCEL _ CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent 2 : ĠIntent Ġ= ĠIntent ( STEP _ BACK ). set Package ( context . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent 2 Ġ= ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġinstance Id , Ġintent 2 , ĠPending Intent . FLAG _ CANCEL _ CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġret [ STEP _ FORWARD ] Ġ= ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . exo _ icon _ fast forward , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġin Ġwe arable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret [ STEP _ BACK ] Ġ= ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . exo _ icon _ rewind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġin Ġwe arable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Intent 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Custom Actions ( player : ĠPlayer ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcustom Actions ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Custom Action ( player : ĠPlayer , Ġaction : ĠString , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTEP _ FORWARD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Controller . transport Controls . fast Forward () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTEP _ BACK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Controller . transport Controls . rewind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSTEP _ BACK Ġ= Ġ" Back " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSTEP _ FORWARD Ġ= Ġ" Forward " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Actions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . asList ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTEP _ BACK , ĠSTEP _ FORWARD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate With Notification Channel ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġchannel Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġchannel Name : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġchannel Description : ĠInt , ĊĠĠĠĠĠĠĠ Ġnotification Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġmedia Description Adapter : ĠMedia Description Adapter ?, ĊĠĠĠĠĠĠĠ Ġnotification Listener : ĠPlayer Notification Manager . Notification Listener ?, ĊĠĠĠĠĠĠĠ Ġcustom Action Receiver : ĠPlayer Notification Manager . Custom Action Receiver ? ĊĠĠĠ Ġ): ĠPlayer Notification Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 2 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( channelId , Ġcontext . getString ( channel Name ), ĠNotification Manager . IMPORT ANCE _ LOW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( channel Description Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . description Ġ= Ġcontext . getString ( channel Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . set Show Badge ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . set Sound ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġreturn ĠPlayer Notification Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !! , Ġchannel Id !! , Ġnotification Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Description Adapter !! , Ġnotification Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Action Receiver ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Manager . set Player ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Notification For Player ( player : ĠPlayer ){ ĊĠĠĠĠĠĠĠ Ġnotification Manager . set Player ( player ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠDescription Adapter ( private Ġval Ġcontroller : ĠMedia Controller Compat ) Ġ: ĊĠĠĠĠĠĠĠ ĠPlayer Notification Manager . Media Description Adapter Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Icon Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Bitmap : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Current Content Intent ( player : ĠPlayer ): ĠPending Intent ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . session Activity ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetCurrent Content Text ( player : ĠPlayer ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . metadata . description . subtitle . toString () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetCurrent Content Title ( player : ĠPlayer ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . metadata . description . title . toString () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetCurrent Large Icon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : ĠPlayer Notification Manager . Bitmap Callback ĊĠĠĠĠĠĠĠ Ġ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Bitmap From Vector Drawable ( Music Application . getInstance (), ĠR . drawable . ic _ album ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* val Ġicon Uri Ġ= Ġcontroller . metadata . description . icon Uri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Icon Uri Ġ!= Ġicon Uri Ġ|| Ġcurrent Bitmap Ġ== Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCache Ġthe Ġbitmap Ġfor Ġthe Ġcurrent Ġsong Ġso Ġthat Ġsuccess ive Ġcalls Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ` getCurrent Large Icon ` Ġdon 't Ġcause Ġthe Ġbitmap Ġto Ġbe Ġre created . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Icon Uri Ġ= Ġicon Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Bitmap Ġ= Ġicon Uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Uri As Bitmap ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Bitmap ?. let Ġ{ Ġcallback . on Bitmap ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Bitmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Bitmap From Vector Drawable ( context : ĠContext ?, Ġdrawable Id : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdrawable : ĠDrawable ? Ġ= Ġcontext ?. let Ġ{ ĠContext Compat . get Drawable ( it , Ġdrawable Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable !!. intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable !!. intrinsic Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġcanvas . getWidth (), Ġcanvas . getHeight ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġsuspend Ġfun Ġresolve Uri As Bitmap ( uri : ĠUri ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBlock Ġon Ġdownloading Ġart work . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( context ). apply Default RequestOptions ( glide Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ album ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. submit ( NOTIFICATION _ LARGE _ ICON _ SIZE , ĠNOT IFICATION _ LARGE _ ICON _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ const Ġval ĠNOT IFICATION _ LARGE _ ICON _ SIZE Ġ= Ġ 1 4 4 Ġ// Ġpx Ċ Ċ private Ġval Ġg lide Options Ġ= ĠRequest Options () ĊĠĠĠ Ġ. fallback ( R . drawable . default _ art ) ĊĠĠĠ Ġ. disk Cache Strategy ( Disk Cache Strategy . DATA ) Ċ Ċ private Ġconst Ġval ĠMODE _ READ _ ONLY Ġ= Ġ" r " Ċ