package Ġcom . k yle cor ry . trail _ sense . navigation . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . graphics . drawable . to Bitmap Ċ import Ġcom . k yle cor ry . trail _ sense . R Ċ import Ġcom . k yle cor ry . tr ails ense core . domain . geo . Be aring Ċ import Ġcom . k yle cor ry . tr ails ense core . domain . geo . Coordinate Ċ import Ġcom . k yle cor ry . tr ails ense core . domain . math . delta Angle Ċ import Ġcom . k yle cor ry . tr ails ense core . infrastructure . system . Ui Utils Ċ import Ġkotlin . math .* ĊĊ Ċ class ĠRound Comp ass View Ġ: ĠView , ĠI Comp ass View Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpaint : ĠPaint ĊĠĠĠ Ġprivate Ġval Ġicons Ġ= Ġmutable Map Of < Int , ĠBitmap >() ĊĠĠĠ Ġprivate Ġvar Ġindicators Ġ= ĠlistOf < Be aring Indicator >() ĊĠĠĠ Ġprivate Ġvar Ġcomp ass : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Init Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġaz imuth Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdestination : ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġvar Ġdestination Color : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġicon Size Ġ= Ġ 0 ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , Ġ 2 4 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . display Metrics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp ass Size Ġ= Ġmin ( height , Ġwidth ) Ġ- Ġ 2 Ġ* Ġicon Size Ġ- Ġ 2 Ġ* Ġdp ( 2 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Init Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp ass Drawable Ġ= ĠUi Utils . drawable ( context , ĠR . drawable . compass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp ass Ġ= Ġcomp ass Drawable ?. to Bitmap ( compass Size , Ġcomp ass Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . draw Color ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ Ġdraw Az imuth ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġcanvas . rotate (- az imuth , Ġwidth Ġ/ Ġ 2 f , Ġheight Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠ Ġdraw Comp ass ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Be ar ings ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Destination ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Destination ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdestination Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġdestination Color Ġ?: ĠUi Utils . color ( context , ĠR . color . color Primary ) ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġdp 2 Ġ= Ġdp ( 2 f ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size . toFloat () Ġ+ Ġdp 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size . toFloat () Ġ+ Ġdp 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġicon Size . toFloat () Ġ- Ġdp 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġicon Size . toFloat () Ġ- Ġdp 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 7 0 f Ġ+ Ġaz imuth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Angle ( az imuth , Ġdestination !! ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Az imuth ( az imuth : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . az imuth Ġ= Ġaz imuth ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Location ( location : ĠCoordinate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Indicators ( indicators : ĠList < Be aring Indicator >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . indicators Ġ= Ġindicators ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Destination ( be aring : ĠFloat ?, Ġ@ Color Int Ġcolor : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdestination Ġ= Ġbe aring ĊĠĠĠĠĠĠĠ Ġdestination Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Az imuth ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPort er D uff Color Filter ( Ui Utils . android TextColor Primary ( context ), ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bitmap ( R . drawable . ic _ arrow _ target ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ/ Ġ 2 f Ġ- Ġicon Size Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Comp ass ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp ass !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size . toFloat () Ġ+ Ġdp ( 2 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size . toFloat () Ġ+ Ġdp ( 2 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Be ar ings ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( indicator Ġin Ġindicators ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġif Ġ( indicator . tint Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort er D uff Color Filter ( indicator . tint , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġ( 2 5 5 Ġ* Ġindicator . opacity ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . rotate ( indicator . be aring , Ġwidth Ġ/ Ġ 2 f , Ġheight Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġget Bitmap ( indicator . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ/ Ġ 2 f Ġ- Ġicon Size Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġ 2 5 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Decl ination ( decl ination : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing Ġfor Ġnow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap (@ Drawable Res Ġid : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġif Ġ( icons . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons [ id ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠUi Utils . drawable ( context , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbm Ġ= Ġdrawable ?. to Bitmap ( icon Size , Ġicon Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons [ id ] Ġ= Ġbm !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons [ id ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdp ( size : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , Ġsize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊ Ċ }