/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . we ar . watch face Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . icu . util . Calendar Ċ import Ġandroid . support . we arable . comp lications . Comp lication Data Ċ import Ġandroidx . annotation . Ui Thread Ċ import Ġandroidx . we ar . comp lications . System Providers Ċ import Ġandroidx . we ar . comp lications . rendering . Comp lication Drawable Ċ Ċ /** ĠCommon Ġinterface Ġfor Ġrendering Ġcomp lications . Ġ*/ Ċ interface ĠComp lication Renderer Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe ĠComp lication Renderer Ġatt aches Ġto Ġa Ġ{@ link ĠComp lication }. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun Ġon Attach ( comp lication : ĠComp lication ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe ĠComp lication Renderer Ġdet aches Ġfrom Ġa Ġ{@ link ĠComp lication }. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun Ġon Detach () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDraw s Ġthe Ġcomp lication Ġinto Ġthe Ġcanvas Ġwith Ġthe Ġspecified Ġbounds . ĠThis Ġwill Ġusually Ġbe ĊĠĠĠĠ Ġ* Ġcalled Ġby Ġuser Ġwatch Ġface Ġdrawing Ġcode , Ġbut Ġthe Ġsystem Ġmay Ġalso Ġcall Ġit Ġfor Ġcomp lication ĊĠĠĠĠ Ġ* Ġselection ĠUI Ġrendering . ĠThe Ġwidth Ġand Ġheight Ġwill Ġbe Ġthe Ġsame Ġas Ġthat Ġcomputed Ġby ĊĠĠĠĠ Ġ* Ġcompute Bounds Ġbut Ġthe Ġtranslation Ġand Ġcanvas Ġsize Ġmay Ġdiffer . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas ĠThe Ġ{@ link ĠCanvas } Ġto Ġrender Ġinto ĊĠĠĠĠ Ġ* Ġ@ param Ġbounds ĠA Ġ{@ link ĠRect } Ġdescribing Ġthe Ġbounds Ġof Ġthe Ġcomp lication ĊĠĠĠĠ Ġ* Ġ@ param Ġcalendar ĠThe Ġcurrent Ġ{@ link ĠCalendar } ĊĠĠĠĠ Ġ* Ġ@ param Ġdraw Mode ĠThe Ġcurrent Ġ{@ link ĠDraw Mode } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun Ġon Draw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġbounds : ĠRect , ĊĠĠĠĠĠĠĠ Ġcalendar : ĠCalendar , ĊĠĠĠĠĠĠĠ Ġ@ Draw Mode Ġdraw Mode : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġwhether Ġthe Ġcomp lication Ġshould Ġbe Ġdrawn Ġhighlighted . ĠThis Ġis Ġto Ġprovide Ġvisual ĊĠĠĠĠ Ġ* Ġfeedback Ġwhen Ġthe Ġuser Ġt aps Ġon Ġa Ġcomp lication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhighlight ĠWhether Ġor Ġnot Ġthe Ġcomp lication Ġshould Ġbe Ġdrawn Ġhighlighted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun ĠsetIs Highlight ed ( highlight : ĠBoolean ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcurrent Ġ{@ link ĠComp lication Data }. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠThe Ġ{@ link ĠComp lication Data } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun ĠsetData ( data : ĠComp lication Data ?) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcurrent Ġ{@ link ĠComp lication Data } Ġassociated Ġwith Ġthe ĠComp lication Renderer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun ĠgetData (): ĠComp lication Data ? ĊĊĠĠĠ Ġinterface ĠIn validate Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠRequests Ġredraw . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Ui Thread ĊĠĠĠĠĠĠĠ Ġfun Ġon Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby Ġthe Ġ{@ link ĠWatch Face } ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠThe Ġ{@ link ĠIn validate Callback } Ġto Ġregister ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġ@ Suppress Lint (" Executor Registration ") ĊĠĠĠ Ġfun Ġset Invalidate Callback ( callback : ĠIn validate Callback ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġcomp lication Ġrendered Ġwith Ġ{@ link ĠComp lication Drawable } Ġwhich Ġrenders Ġcomp lications Ġin Ġa Ċ Ġ* Ġmaterial Ġdesign Ġstyle . ĠThis Ġrenderer Ġcan 't Ġbe Ġshared Ġby Ġmultiple Ġcomp lications . Ċ Ġ*/ Ċ open Ġclass ĠComp lication Drawable Renderer ( ĊĠĠĠ Ġ/** ĠThe Ġactual Ġcomp lication . Ġ*/ ĊĠĠĠ Ġdrawable : ĠComp lication Drawable , ĊĊĠĠĠ Ġprivate Ġval Ġwatch State : ĠWatch State Ċ ) Ġ: ĠComp lication Renderer Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ drawable Ġ= Ġdrawable ĊĊĠĠĠ Ġvar Ġdrawable : ĠComp lication Drawable ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ drawable ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ drawable Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ drawable . in Ambient Mode Ġ= Ġwatch State . is Ambient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ drawable . low Bit Ambient Ġ= Ġwatch State . has Low Bit Ambient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ drawable . set Burn In Protection ( watch State . has Burn In Protection ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġattached Comp lication ?. schedule Update Active Comp lications () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSystem State Listener Ġ: ĠWatch State . Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Ambient Mode Changed ( is Ambient : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . in Ambient Mode Ġ= Ġis Ambient ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsystem State Listener Ġ= ĠSystem State Listener () ĊĠĠĠ Ġprivate Ġvar Ġattached Comp lication : ĠComp lication ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcomp lication Data : ĠComp lication Data ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( comp lication : ĠComp lication ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattached Comp lication Ġ= Ġcomp lication ĊĠĠĠĠĠĠĠ Ġdrawable . in Ambient Mode Ġ= Ġwatch State . is Ambient ĊĠĠĠĠĠĠĠ Ġdrawable . low Bit Ambient Ġ= Ġwatch State . has Low Bit Ambient ĊĠĠĠĠĠĠĠ Ġdrawable . set Burn In Protection ( watch State . has Burn In Protection ) ĊĊĠĠĠĠĠĠĠ Ġwatch State . addListener ( system State Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġwatch State . remove Listener ( system State Listener ) ĊĠĠĠĠĠĠĠ Ġattached Comp lication Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Draw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġbounds : ĠRect , ĊĠĠĠĠĠĠĠ Ġcalendar : ĠCalendar , ĊĠĠĠĠĠĠĠ Ġ@ Draw Mode Ġdraw Mode : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawable . bounds Ġ= Ġbounds ĊĠĠĠĠĠĠĠ Ġdrawable . currentTimeMillis Ġ= Ġcalendar . time In Millis ĊĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠsetIs Highlight ed ( highlight : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawable . highlighted Ġ= Ġhighlight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠsetData ( data : ĠComp lication Data ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawable . comp lication Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcomp lication Data Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetData () Ġ= Ġcomp lication Data ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Executor Registration ") ĊĠĠĠ Ġoverride Ġfun Ġset Invalidate Callback ( callback : ĠComp lication Renderer . Invalidate Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawable . callback Ġ= Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDrawable . Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġun schedule Drawable ( who : ĠDrawable , Ġwhat : ĠRunnable ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvalidate Drawable ( who : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġschedule Drawable ( who : ĠDrawable , Ġwhat : ĠRunnable , Ġ` when `: ĠLong ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġindividual Ġcomp lication Ġon Ġthe Ġscreen . ĠThe Ġnumber Ġof Ġcomp lications Ġis Ġfixed Ċ Ġ* Ġ( see Ġ{@ link ĠComp lications Holder }) Ġbut Ġcomp lications Ġcan Ġbe Ġenabled Ġor Ġdisabled Ġas Ġneeded . Ċ Ġ*/ Ċ class ĠComp lication Ġinternal Ġconstructor ( ĊĠĠĠ Ġinternal Ġval Ġid : ĠInt , ĊĠĠĠ Ġ@ Comp lication Bounds Type Ġinternal Ġval Ġbounds Type : ĠInt , ĊĠĠĠ Ġval Ġunit Square Bounds : ĠRect F , ĊĠĠĠ Ġrenderer : ĠComp lication Renderer , ĊĠĠĠ Ġinternal Ġval Ġsupported Types : ĠInt Array , ĊĠĠĠ Ġinternal Ġval Ġdefault Provider Policy : ĠDefault Comp lication Provider Policy , ĊĠĠĠ Ġinternal Ġval Ġdefault Provider Type : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġunit Square Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġ 1 f , Ġ 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġwatch Ġface 's ĠID Ġfor Ġthis Ġcomp lication . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġid : ĠInt , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġrenderer Ġfor Ġthis ĠComp lication . ĠRender ers Ġmay Ġnot Ġbe Ġsh arable Ġbetween Ġcomp lications . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrenderer : ĠComp lication Renderer , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġtypes Ġof Ġcomp lication Ġsupported Ġby Ġthis ĠComp lication . ĠP assed Ġinto Ġ{@ link ĊĠĠĠĠĠĠĠĠ Ġ* ĠComp lication Helper Activity # create Provider Chooser Helper Intent } Ġduring Ġcomp lication ĊĠĠĠĠĠĠĠĠ Ġ* Ġconfiguration . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsupported Types : ĠInt Array , ĊĊĠĠĠĠĠĠĠ Ġ/** ĠDefault Ġcomp lication Ġprovider . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Provider Policy : ĠDefault Comp lication Provider Policy ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Comp lication Bounds Type ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġbounds Type : ĠInt Ġ= ĠComp lication Bounds Type . ROUND _ RECT ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġunit Square Bounds : ĠRect F ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdefault Provider Type : ĠInt Ġ= ĠWatch Face . DEFAULT _ PROVIDER _ TYPE _ NONE ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġdefault Ġcomp lication Ġprovider Ġdata Ġtype . Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠsetDefault Provider Type ( default Provider Type : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . default Provider Type Ġ= Ġdefault Provider Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFraction al Ġbounds Ġfor Ġthe Ġcomp lication , Ġclamp ed Ġto Ġthe Ġunit Ġsquare Ġ[ 0 .. 1 ], Ġwhich Ġget ĊĠĠĠĠĠĠĠĠ Ġ* Ġconverted Ġto Ġscreen Ġspace Ġcoordinates . ĠNB Ġ 0 Ġand Ġ 1 Ġare Ġincluded Ġin Ġthe Ġunit Ġsquare . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Unit Square Bounds ( unit Square Bounds : ĠRect F ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds Type Ġ= ĠComp lication Bounds Type . ROUND _ RECT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . unit Square Bounds Ġ= ĠRect F (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Intersect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Square Bounds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Square ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġbackground Ġcomp lication Ġis Ġfor Ġwatch Ġfaces Ġthat Ġwish Ġto Ġhave Ġa Ġfull Ġscreen Ġuser ĊĠĠĠĠĠĠĠĠ Ġ* Ġselect able Ġback drop . ĠThis Ġsort Ġof Ġcomp lication Ġisn 't Ġclick able Ġand Ġat Ġmost Ġone Ġmay Ġbe ĊĠĠĠĠĠĠĠĠ Ġ* Ġpresent Ġin Ġthe Ġlist Ġof Ġcomp lications . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Background Comp lication (): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds Type Ġ= ĠComp lication Bounds Type . BACKGROUND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . unit Square Bounds Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġ 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ= ĠComp lication ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunit Square Bounds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupported Types , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Provider Policy , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Provider Type ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrenderer . on Attach ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġwatch Ġface Ġmay Ġwish Ġto Ġtry Ġand Ġset Ġone Ġor Ġmore Ġnon - system Ġproviders Ġas Ġthe Ġdefault Ġprovider ĊĠĠĠĠ Ġ* Ġfor Ġa Ġcomp lication . ĠIf Ġa Ġprovider Ġcan 't Ġbe Ġused Ġfor Ġsome Ġreason Ġ( e . g . Ġit Ġisn 't Ġinstalled Ġor ĊĠĠĠĠ Ġ* Ġit Ġdoesn 't Ġsupport Ġthe Ġrequested Ġtype , Ġor Ġthe Ġwatch Ġface Ġlack s Ġthe Ġnecessary Ġpermission ) ĊĠĠĠĠ Ġ* Ġthen Ġthe Ġnext Ġone Ġwill Ġbe Ġtried . ĠA Ġsystem Ġprovider Ġacts Ġas Ġa Ġfinal Ġfallback Ġin Ġcase Ġno ĊĠĠĠĠ Ġ* Ġnon - system Ġproviders Ġcan Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe ĠDefault Comp lication Provider Policy Ġis Ġempty Ġthen Ġno Ġdefault Ġis Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠDefault Comp lication Provider Policy ( ĊĠĠĠĠĠĠĠ Ġ/** ĠList Ġof Ġup Ġto Ġtwo Ġnon - system Ġproviders Ġto Ġbe Ġtried Ġin Ġturn . ĠThis Ġmay Ġbe Ġempty . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġproviders : ĠList < Component Name > Ġ= ĠlistOf (), ĊĊĠĠĠĠĠĠĠ Ġ/** ĠF allback Ġin Ġcase Ġnone Ġof Ġthe Ġnon - system Ġproviders Ġcould Ġbe Ġused . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ System Providers . Provider Id Ġval Ġsystem Provider Fallback : ĠInt Ġ= ĠWatch Face . NO _ DEFAULT _ PROVIDER ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( system Provider Fallback : ĠInt ) Ġ: Ġthis ( listOf (), Ġsystem Provider Fallback ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠisEmpty () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . isEmpty () Ġ&& Ġsystem Provider Fallback Ġ== ĠWatch Face . NO _ DEFAULT _ PROVIDER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcomp lications Holder : ĠComp lications Holder ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinvalidate Callback : ĠComp lication Renderer . Invalidate Callback ĊĠĠĠ Ġprivate Ġvar Ġ_ enabled Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġenabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" isEnabled ") ĊĠĠĠĠĠĠĠ Ġ@ Ui Thread ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ enabled ĊĠĠĠĠĠĠĠ Ġ@ Ui Thread ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ enabled Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcaller Ġmight Ġenable / disable Ġa Ġnumber Ġof Ġcomp lications . ĠFor Ġefficiency Ġwe Ġneed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġco alesce Ġthese Ġinto Ġone Ġupdate Ġtask . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp lications Holder . schedule Update Active Comp lications () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ renderer Ġ= Ġrenderer ĊĊĠĠĠ Ġvar Ġrenderer : ĠComp lication Renderer ĊĠĠĠĠĠĠĠ Ġ@ Ui Thread ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ renderer ĊĠĠĠĠĠĠĠ Ġ@ Ui Thread ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . on Detach () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . setData ( renderer . getData ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ renderer Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . on Attach ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Renderer () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWatch Ġfaces Ġshould Ġuse Ġthis Ġmethod Ġto Ġrender Ġa Ġcomp lication . ĠNote Ġthe Ġsystem Ġmay Ġcall Ġthis . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas ĠThe Ġ{@ link ĠCanvas } Ġto Ġrender Ġinto ĊĠĠĠĠ Ġ* Ġ@ param Ġcalendar ĠThe Ġcurrent Ġ{@ link ĠCalendar } ĊĠĠĠĠ Ġ* Ġ@ param Ġdraw Mode ĠThe Ġcurrent Ġ{@ link ĠDraw Mode } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Ui Thread ĊĠĠĠ Ġfun Ġdraw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġcalendar : ĠCalendar , ĊĠĠĠĠĠĠĠ Ġ@ Draw Mode Ġdraw Mode : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġcompute Bounds ( Rect ( 0 , Ġ 0 , Ġcanvas . width , Ġcanvas . height )) ĊĠĠĠĠĠĠĠ Ġrenderer . on Draw ( canvas , Ġbounds , Ġcalendar , Ġdraw Mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġwhether Ġthe Ġcomp lication Ġshould Ġbe Ġdrawn Ġhighlighted Ġor Ġnot . ĠThis Ġis Ġto Ġprovide Ġvisual ĊĠĠĠĠ Ġ* Ġfeedback Ġwhen Ġthe Ġuser Ġt aps Ġon Ġa Ġcomp lication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhighlight ĠWhether Ġor Ġnot Ġthe Ġcomp lication Ġshould Ġbe Ġdrawn Ġhighlighted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun ĠsetIs Highlight ed ( highlight : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrenderer . setIs Highlight ed ( highlight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Renderer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRender ers Ġmay Ġregister Ġa Ġuser Ġstyle Ġlistener Ġduring Ġtheir Ġinitializer Ġwhich Ġcan Ġcall ĊĠĠĠĠĠĠĠ Ġ// Ġset Comp lication Renderer () Ġbefore Ġcomp lication Invalidate Callback Ġhas Ġbeen Ġinitialized . ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: invalidate Callback . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . set Invalidate Callback ( invalidate Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinit ( ĊĠĠĠĠĠĠĠ Ġcomp lications Holder : ĠComp lications Holder , ĊĠĠĠĠĠĠĠ Ġinvalidate Callback : ĠComp lication Renderer . Invalidate Callback ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . comp lications Holder Ġ= Ġcomp lications Holder ĊĠĠĠĠĠĠĠ Ġthis . invalidate Callback Ġ= Ġinvalidate Callback ĊĠĠĠĠĠĠĠ Ġinit Renderer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġschedule Update Active Comp lications () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġtests Ġthis Ġmay Ġnot Ġbe Ġinitialized . ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: comp lications Holder . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġactive Ġcomp lications Ġto Ġensure Ġaccessibility Ġdata Ġis Ġup Ġto Ġdate . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp lications Holder . schedule Update Active Comp lications () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠComputes Ġthe Ġbounds Ġof Ġthe Ġcomp lication Ġby Ġconverting Ġthe Ġunit Square Bounds Ġto Ġpixels . Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġcompute Bounds ( screen : ĠRect ) Ġ= ĊĠĠĠĠĠĠĠ ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( unit Square Bounds . left Ġ* Ġscreen . width ()). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( unit Square Bounds . top Ġ* Ġscreen . height ()). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( unit Square Bounds . right Ġ* Ġscreen . width ()). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( unit Square Bounds . bottom Ġ* Ġscreen . height ()). toInt () ĊĠĠĠĠĠĠĠ Ġ) Ċ } Ċ