package Ġcom . ew e iss . potential _ divider Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics .* Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . os . Battery Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . support . we arable . watch face . Canvas Watch Face Service Ċ import Ġandroid . support . we arable . watch face . Watch Face Service Ċ import Ġandroid . support . we arable . watch face . Watch Face Style Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroid . widget . Toast Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* ĠUpdates Ġrate Ġin Ġmilliseconds Ġfor Ġinteractive Ġmode . Ċ Ġ*/ Ċ private Ġconst Ġval ĠINTER ACTIVE _ UPDATE _ RATE _ MS Ġ= Ġ 1 0 0 0 Ċ Ċ /** Ċ Ġ* ĠHandler Ġmessage Ġid Ġfor Ġupdating Ġthe Ġtime Ġperiodically Ġin Ġinteractive Ġmode . Ċ Ġ*/ Ċ private Ġconst Ġval ĠMSG _ UPDATE _ TIME Ġ= Ġ 0 Ċ Ċ class ĠPot ential Divider Ġ: ĠCanvas Watch Face Service () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Engine (): ĠEngine Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEngine () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠEngine Handler ( reference : ĠPot ential Divider . Engine ) Ġ: ĠHandler () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Weak Reference : ĠWeak Reference < Potential Divider . Engine > Ġ= ĠWeak Reference ( reference ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Ġ= Ġm Weak Reference . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( engine Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( msg . what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMSG _ UPDATE _ TIME Ġ-> Ġengine . handle UpdateTime Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠEngine Ġ: ĠCanvas Watch Face Service . Engine () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Calendar : ĠCalendar ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Registered TimeZone Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Mute Mode : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Text Paint : ĠPaint ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Background Paint : ĠPaint ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Background Bitmap : ĠBitmap ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Gray Background Bitmap : ĠBitmap ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Ambient : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Low Bit Ambient : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Burn In Protection : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/* ĠHandler Ġto Ġupdate Ġthe Ġtime Ġonce Ġa Ġsecond Ġin Ġinteractive Ġmode . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm UpdateTime Handler Ġ= ĠEngine Handler ( this ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm TimeZone Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Calendar . time Zone Ġ= ĠTime Zone . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( holder ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Watch Face Style ( Watch Face Style . Builder ( this @ Potential Divider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Accept s Tap Events ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Calendar Ġ= ĠCalendar . getInstance () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Background () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Watch Face () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinitialize Background () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Bitmap Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . potential _ divider _ bg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinitialize Watch Face () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= ĠResources . getSystem (). display Metrics . scaled Density ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġscale * 1 4 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype face Ġ= ĠType face . SAN S _ SER IF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= ĠPaint . Cap . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm UpdateTime Handler . remove Messages ( MSG _ UPDATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Properties Changed ( properties : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Properties Changed ( properties ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Low Bit Ambient Ġ= Ġproperties . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWatch Face Service . PROPERTY _ LOW _ BIT _ AM BI ENT , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Burn In Protection Ġ= Ġproperties . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWatch Face Service . PROPERTY _ B URN _ IN _ PRO TE CTION , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Time Tick () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Time Tick () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Ambient Mode Changed ( in Ambient Mode : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Ambient Mode Changed ( in Ambient Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ambient Ġ= Ġin Ambient Mode ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Watch Style () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġand Ġtrigger Ġwhether Ġor Ġnot Ġtimer Ġshould Ġbe Ġrunning Ġ( only Ġin Ġactive Ġmode ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġfun Ġcheck Ch arging () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġch arging Ġanimation ? Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbattery Status : ĠIntent ? Ġ= ĠIntent Filter ( Intent . ACTION _ B ATTER Y _ CHANGED ). let Ġ{ Ġif ilter Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Receiver ( null , Ġif ilter ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus : ĠInt Ġ= Ġbattery Status ?. getInt Extra ( Battery Manager . EXTRA _ STATUS , Ġ- 1 ) Ġ?: Ġ- 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Ch arging : ĠBoolean Ġ= Ġstatus Ġ== ĠB attery Manager . B ATTER Y _ STATUS _ CHAR GING Ġ|| Ġstatus Ġ== ĠB attery Manager . B ATTER Y _ STATUS _ FULL Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Watch Style () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Ambient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . is Anti Alias Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint . alpha Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . alpha Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint . alpha Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . alpha Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Inter ruption Filter Changed ( inter ruption Filter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Inter ruption Filter Changed ( inter ruption Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Mute Mode Ġ= Ġinter ruption Filter Ġ== ĠWatch Face Service . INTERRUP TION _ FILTER _ NONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDim Ġdisplay Ġin Ġmute Ġmode . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Mute Mode Ġ!= Ġin Mute Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Mute Mode Ġ= Ġin Mute Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint . alpha Ġ= Ġif Ġ( in Mute Mode ) Ġ 1 0 0 Ġelse Ġ 2 5 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint . alpha Ġ= Ġif Ġ( in Mute Mode ) Ġ 1 0 0 Ġelse Ġ 2 5 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( holder : ĠSurface Holder , Ġformat : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Surface Changed ( holder , Ġformat , Ġwidth , Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠScale Ġloaded Ġbackground Ġimage Ġ( more Ġefficient ) Ġif Ġsurface Ġdimensions Ġchange . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġwidth . toFloat () Ġ/ Ġm Background Bitmap . width . toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Bitmap Ġ= ĠBitmap . create Scaled Bitmap ( m Background Bitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Background Bitmap . width Ġ* Ġscale ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Background Bitmap . height Ġ* Ġscale ). toInt (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Burn In Protection Ġ&& Ġ! m Low Bit Ambient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Gray Background Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCapt ures Ġtap Ġevent Ġ( and Ġtap Ġtype ). ĠThe Ġ[ Watch Face Service . T AP _ TYPE _ T AP ] Ġcase Ġcan Ġbe ĊĠĠĠĠĠĠĠĠ Ġ* Ġused Ġfor Ġimplementing Ġspecific Ġlogic Ġto Ġhandle Ġthe Ġgesture . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonTap Command ( tap Type : ĠInt , Ġx : ĠInt , Ġy : ĠInt , Ġevent Time : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( tap Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWatch Face Service . T AP _ TYPE _ TO UCH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser Ġhas Ġstarted Ġtouch ing Ġthe Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWatch Face Service . T AP _ TYPE _ TO UCH _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser Ġhas Ġstarted Ġa Ġdifferent Ġgesture Ġor Ġotherwise Ġcancelled Ġthe Ġtap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWatch Face Service . T AP _ TYPE _ T AP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser Ġhas Ġcompleted Ġthe Ġtap Ġgesture . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġcode Ġto Ġhandle Ġthe Ġtap Ġgesture . Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , ĠR . string . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinit Gray Background Bitmap () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Gray Background Bitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Bitmap . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Bitmap . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( m Gray Background Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgray Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Matrix Ġ= ĠColor Matrix () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Matrix . set Sat uration ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠColor Matrix Color Filter ( color Matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgray Paint . color Filter Ġ= Ġfilter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( m Background Bitmap , Ġ 0 f , Ġ 0 f , Ġgray Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas , Ġbounds : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Calendar . time In Millis Ġ= Ġnow ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Color ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Background ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Digital ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdraw Background ( canvas : ĠCanvas ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Ambient Ġ&& Ġm Burn In Protection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( m Gray Background Bitmap , Ġ 2 5 f , Ġ 0 f , Ġm Background Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Ambient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( m Gray Background Bitmap , Ġ 2 5 f , Ġ 0 f , Ġm Background Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( m Background Bitmap , Ġ 2 5 f , Ġ 0 f , Ġm Background Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdraw Digital ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Width Ġ= ĠResources . getSystem (). display Metrics . width Pixels ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Height Ġ= ĠResources . getSystem (). display Metrics . height Pixels Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġm Calendar . get ( Calendar . SECOND ) Ġ+ Ġm Calendar . get ( Calendar . MILLI SECOND ) Ġ/ Ġ 1 0 0 0 f ĠĠĠĠ 2 5 6 0 Ġpixel Ġper imeter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġm Calendar . get ( Calendar . MINUTE ). toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġif (! DateFormat . is 2 4 Hour Format ( application Context ) Ġ&& Ġm Calendar . get ( Calendar . HOUR )== 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Calendar . get ( Calendar . HOUR ). toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġm Calendar . get ( Calendar . DAY _ OF _ MONTH ). toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Out Ġ= Ġminutes . toDouble () /( hours + minutes ). toDouble ()* day . toDouble () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Design ed Ġwith Ġabsolute Ġposition ing Ġon Ġ 3 2 0 x 3 2 0 Ġscreen , Ġscaled Ġbased Ġon Ġdevice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ("$ hours ĠÎ © ", Ġ( screen Width Ġ* Ġ 1 7 5 Ġ/ Ġ 3 2 0 ). toFloat (), Ġ( screen Height Ġ* Ġ 1 2 0 Ġ/ Ġ 3 2 0 ). toFloat (), Ġm Text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ("$ minutes ĠÎ © ", Ġ( screen Width Ġ* Ġ 1 7 5 Ġ/ Ġ 3 2 0 ). toFloat (), Ġ( screen Height Ġ* Ġ 2 1 5 Ġ/ Ġ 3 2 0 ). toFloat (), Ġm Text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ("$ day ĠV ", Ġ( screen Width Ġ* Ġ 1 2 0 Ġ/ Ġ 3 2 0 ). toFloat (), Ġ( screen Height Ġ* Ġ 1 6 2 . 5 Ġ/ Ġ 3 2 0 ). toFloat (), Ġm Text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( String . format ("% . 2 f ", Ġv Out ) Ġ+ Ġ" ĠV ", Ġ( screen Width Ġ* Ġ 2 6 0 Ġ/ Ġ 3 2 0 ). toFloat (), Ġ( screen Height Ġ* Ġ 1 5 0 Ġ/ Ġ 3 2 0 ). toFloat (), Ġm Text Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Visibility Changed ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Visibility Changed ( visible ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Receiver () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠUpdate Ġtime Ġzone Ġin Ġcase Ġit Ġchanged Ġwhile Ġwe Ġweren 't Ġvisible . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Calendar . time Zone Ġ= ĠTime Zone . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Receiver () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġand Ġtrigger Ġwhether Ġor Ġnot Ġtimer Ġshould Ġbe Ġrunning Ġ( only Ġin Ġactive Ġmode ). Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Timer () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Registered TimeZone Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Registered TimeZone Receiver Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter ( Intent . ACTION _ TIME ZONE _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Potential Divider . register Receiver ( m TimeZone Receiver , Ġfilter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġunregister Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Registered TimeZone Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Registered TimeZone Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Potential Divider . unregister Receiver ( m TimeZone Receiver ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ ĠStarts / stops Ġthe Ġ[. m UpdateTime Handler ] Ġtimer Ġbased Ġon Ġthe Ġstate Ġof Ġthe Ġwatch Ġface . ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Timer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm UpdateTime Handler . remove Messages ( MSG _ UPDATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Timer Be Running ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm UpdateTime Handler . send Empty Message ( MSG _ UPDATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠĠĠĠĠ ĠReturns Ġwhether Ġthe Ġ[. m UpdateTime Handler ] Ġtimer Ġshould Ġbe Ġrunning . ĠThe Ġtimer Ċ // ĠĠĠĠĠĠĠ Ġshould Ġonly Ġrun Ġin Ġactive Ġmode . ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshould Timer Be Running (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Visible Ġ&& Ġ! m Ambient ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ ĠHandle Ġupdating Ġthe Ġtime Ġperiodically Ġin Ġinteractive Ġmode . ĊĠĠĠĠĠĠĠ Ġfun Ġhandle UpdateTime Message () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Timer Be Running ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ms Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ms Ġ= ĠINTER ACTIVE _ UPDATE _ RATE _ MS Ġ- Ġtime Ms Ġ% ĠINTER ACTIVE _ UPDATE _ RATE _ MS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm UpdateTime Handler . send Empty Message Delayed ( MSG _ UPDATE _ TIME , Ġdelay Ms ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ