package Ġid . ps w . v sh launcher . views Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . graphics . drawable . to Bitmap Ċ import Ġandroidx . core . graphics . to Rect F Ċ import Ġid . ps w . v sh launcher .* Ċ import Ġid . ps w . v sh launcher . custom types . X MB Stack Ċ import Ġid . ps w . v sh launcher . ic ont ypes .* Ċ import Ġid . ps w . v sh launcher . typography .* Ċ import Ġjava . lang . Exception Ċ import Ġjava . lang . Math .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . Concurrent Modification Exception Ċ import Ġkotlin . math . round ToInt ĊĊ Ċ /** Ċ Ġ* ĠThe ĠX MB ĠScreen Ġ( PS 3 ĠHome ĠScreen ) Ċ Ġ*/ Ċ class ĠV sh View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDe g 2 Rad Ġ= ĠPI Ġ/ Ġ 1 8 0 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRad 2 Deg Ġ= Ġ 1 8 0 f Ġ/ ĠPI ĊĠĠĠĠĠĠĠ Ġvar Ġpadding Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpad Offset Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtransparent Bitmap Ġ= ĠColor Drawable ( Color . arg b ( 0 , 0 , 0 , 0 )). to Bitmap ( 1 , 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġshow FPS Meter Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠDebug Ġonly Ġpurpose ĊĠĠĠĠĠĠĠ Ġvar Ġlaunch Tap Area Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġlaunch Ġoption Ġright Ġin Ġit 's Ġlocation ĊĠĠĠĠĠĠĠ Ġvar Ġoption Launch Area Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠĠĠĠĠ Ġvar Ġcustom Type face Ġ= ĠType face . SAN S _ SER IF ĊĠĠĠĠĠĠĠ Ġvar Ġdelta Time Ġ= Ġ 0 . 0 1 6 f ĊĠĠĠĠĠĠĠ Ġvar Ġhide Clock Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġdescription Separator Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġmenu BackgroundColor Ġ= ĠColor . arg b ( 3 2 , 0 , 0 , 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġalpha Color Ġ= ĠColor . arg b ( 0 , 0 , 0 , 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// Ġregion ĠVariable ĊĠĠĠ Ġprivate Ġvar ĠTAG Ġ= Ġ" V sh View . cpp " ĊĠĠĠ Ġprivate Ġvar Ġframe Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġframe Start Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġpaint Icon Selected Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Menu Text Selected Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Text Selected Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Sub text Selected Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĊĠĠĠ Ġprivate Ġvar Ġpaint Icon Un selected Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Text Un selected Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Sub text Un selected Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĊĠĠĠ Ġprivate Ġvar Ġpaint Status Box Outline Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Misc Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Fill Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Status Box Fill Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġpaint Status Text Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġdebug Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ Ġcolor Ġ= ĠColor . arg b ( 6 4 , 0 , 2 5 5 , 0 ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġrender able Area Ġ= ĠRect ( 0 , 0 , 0 , 0 ) ĊĊĠĠĠ Ġvar Ġselected Xf Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġselected Y f Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġselected X Ġ: ĠInt Ġget () Ġ= Ġindex Stack [ 0 ] Ġ; Ġset ( v ) Ġ{ Ġindex Stack [ 0 ] Ġ= Ġv } ĊĠĠĠ Ġvar Ġselected Y Ġ: ĠInt Ġget () Ġ= Ġdee pe st Sub Content . content Index Ġ; Ġset ( v ){ Ġdee pe st Sub Content . content Index Ġ= Ġv } ĊĊĠĠĠ Ġvar Ġmenu Index Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Interaction Time Ġ= Ġ 0 L ĊĠĠĠ Ġlateinit Ġvar Ġv sh Ġ: ĠV SH ĊĊĠĠĠ Ġlateinit Ġvar Ġitem Root Ġ: ĠX MB Root Icon ĊĠĠĠ Ġvar Ġhide Menu Ġ= Ġfalse ĊĠĠĠ Ġvar Ġbackground Alpha Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġuse P sp Style Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġdensity Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġscaled Density Ġ= Ġ 1 f ĊĊĠĠĠ Ġvar Ġindex Stack Ġ= ĠX MB Stack < Int >() ĊĠĠĠ Ġval Ġis On Root Ġ: ĠBoolean Ġget () Ġ= Ġindex Stack . count Ġ== Ġ 1 ĊĊĠĠĠ Ġ/// Ġend region ĠVariable ĊĊĠĠĠ Ġfun Ġd ( i : Float ): Float { return Ġi Ġ* Ġdensity } ĊĠĠĠ Ġfun Ġd ( i : Int ): Int { return Ġ( i Ġ* Ġdensity ). toInt ()} ĊĠĠĠ Ġfun Ġsd ( i : Float ): Float { return Ġi Ġ* Ġdensity } ĊĠĠĠ Ġfun Ġsd ( i : Int ): Int { return Ġ( i Ġ* Ġscaled Density ). toInt ()} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Paint (){ ĊĠĠĠĠĠĠĠ Ġpaint Text Selected Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ). apply { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġsd ( 1 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Shadow Layer ( sd ( 5 f ), Ġ 0 f , 0 f , ĠColor . arg b ( 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Text Un selected Ġ= ĠText Paint ( paint Text Selected ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 1 2 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġsd ( 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Shadow Layer ( sd ( 2 f ), Ġ 0 f , 0 f , ĠColor . arg b ( 1 2 8 , 0 , 0 , 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Sub text Selected Ġ= ĠText Paint ( paint Text Selected ). apply { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġsd ( 1 2 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Sub text Un selected Ġ= ĠText Paint ( paint Text Selected ). apply { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 1 2 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġsd ( 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Shadow Layer ( sd ( 2 f ), Ġ 0 f , 0 f , ĠColor . arg b ( 1 2 8 , 0 , 0 , 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Menu Text Selected Ġ= ĠText Paint ( paint Text Selected ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġsd ( 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Shadow Layer ( 0 f , 0 f , 0 f , Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Status Text Ġ= ĠText Paint ( paint Menu Text Selected ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġsd ( 1 5 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Status Box Fill Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . arg b ( 6 4 , 2 5 5 , 2 5 5 , 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpaint Status Box Outline Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . arg b ( 1 2 8 , 2 5 5 , 2 5 5 , 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġd ( 1 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Join Ġ= ĠPaint . Join . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= ĠPaint . Cap . ROUND ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Icon Un selected Ġ= ĠText Paint ( paint Icon Selected ). apply Ġ{ Ġalpha Ġ= Ġ 1 2 8 Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Fill . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs , Ġdef Style ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : Context , Ġattrs : ĠAttributeSet ?, Ġdef Style : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĠR . style able . V sh View , Ġdef Style , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġrender able Area Ġ= Ġget System Padding () ĊĠĠĠĠĠĠĠ Ġdensity Ġ= Ġresources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġscaled Density Ġ= Ġresources . display Metrics . scaled Density ĊĠĠĠĠĠĠĠ Ġgenerate Paint () ĊĠĠĠĠĠĠĠ Ġif ( Font Collections . master Font Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx mb Font Ġ= ĠFont Collections . master Font !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġindex Stack . push ( 0 ) ĊĠĠĠĠĠĠĠ Ġitem Root Ġ= ĠX MB Root Icon () ĊĠĠĠĠĠĠĠ Ġfill Category () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Use Compat Loading For Draw ables ") ĊĠĠĠ Ġfun Ġget Drawable ( r : Int ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . get Drawable ( r ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġfill Category (){ ĊĠĠĠĠĠĠĠ Ġval Ġv sh Ġ= Ġcontext Ġas ĠV SH ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . home )) ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . settings )) ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . photo )) ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . music )) ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . video )) ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . apps )) ĊĠĠĠĠĠĠĠ Ġitem Root . add Content ( V sh Category ( v sh , Ġthis , ĠV sh Category . games )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDraw Ġtext Ġfrom Ġit 's Ġtop Ġinstead Ġof Ġbaseline Ġlike ĠJS Ġdoes Ġ: P ĊĠĠĠ Ġprivate Ġfun ĠCanvas . draw Text U ( text : String , Ġx : Float , Ġy : Float , Ġpaint : Text Paint ){ ĊĠĠĠĠĠĠĠ Ġtext . split ("\ n "). forEach Indexed Ġ{ Ġindex , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy m Ġ= Ġy Ġ+ Ġpaint . text Size Ġ+ Ġ( paint . text Size Ġ* Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Text ( s , Ġx , Ġy m , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCanvas . draw Text C ( text : String , Ġx : Float , Ġy : Float , Ġpaint : Text Paint ){ ĊĠĠĠĠĠĠĠ Ġtext . split ("\ n "). forEach Indexed Ġ{ Ġindex , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy m Ġ= Ġy Ġ+ Ġ( paint . text Size / 2 f ) Ġ+ Ġ( paint . text Size Ġ* Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Text ( s , Ġx , Ġy m , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// Ġregion ĠSize ĠChange ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( isIn Edit Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġcall Ġsuper Ġand Ġreturn ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrender able Area Ġ= Ġget System Padding () ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/// Ġend region ĊĊĠĠĠ Ġ/// Ġregion ĠStatus ĠBar ĠRendering ĊĠĠĠ Ġprivate Ġvar Ġupper Clock Bg Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠ Ġvar Ġclock Expand Info Ġ= Ġ"" ĊĠĠĠ Ġvar Ġoperator Name Ġ= Ġ"" ĊĠĠĠ Ġvar Ġuse 2 4 Format Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġlast Clock Expand Info Ġ= Ġ"-" ĊĠĠĠ Ġprivate Ġvar Ġclock Path Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġvar Ġclock Hand Ġ= ĠPoint F ( 0 f , 0 f ) ĊĠĠĠ Ġvar Ġclock As Loading Indicator Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġclock Str Ġ= Ġ" 1 0 : 4 3 " ĊĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠ Ġvar Ġx mb Font Ġ: ĠType face Ġ= Ġcustom Type face ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Text . type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Text Selected . type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Text Un selected . type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Menu Text Selected . type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Sub text Selected . type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Sub text Un selected . type face Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġx mb System Font Ġ: ĠType face Ġ= ĠFont Collections . button Font ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Hand Rotation ( t Ġ: ĠFloat , Ġr Ġ: ĠFloat ){ ĊĠĠĠĠĠĠĠ Ġ// ĠDo Ġrot ating Ġthe Ġclock Ġby Ġframe Ġinstead Ġof Ġclock ĊĠĠĠĠĠĠĠ Ġif ( clock As Loading Indicator ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock Hand . x Ġ= Ġcos ( Ġ( Ġ(( frame Ġ% Ġ 6 0 Ġ/ Ġ 6 0 f ) Ġ* Ġ 3 6 0 ) Ġ- Ġ 9 0 Ġ) Ġ* ĠDe g 2 Rad ). toFloat () Ġ* Ġr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock Hand . y Ġ= Ġsin ( Ġ( Ġ(( frame Ġ% Ġ 6 0 Ġ/ Ġ 6 0 f ) Ġ* Ġ 3 6 0 ) Ġ- Ġ 9 0 Ġ) Ġ* ĠDe g 2 Rad Ġ). toFloat () Ġ* Ġr ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock Hand . x Ġ= Ġcos ( Ġ( Ġ( t Ġ* Ġ 3 6 0 ) Ġ- Ġ 9 0 Ġ) Ġ* ĠDe g 2 Rad ). toFloat () Ġ* Ġr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock Hand . y Ġ= Ġsin ( Ġ( Ġ( t Ġ* Ġ 3 6 0 ) Ġ- Ġ 9 0 Ġ) Ġ* ĠDe g 2 Rad Ġ). toFloat () Ġ* Ġr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Clock ( x : Float , Ġy : Float ){ ĊĠĠĠĠĠĠĠ Ġcal . time In Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġclock Str Ġ= Ġif ( use 2 4 Format ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" dd / MM ĠHH : mm ", ĠLocale . getDefault ()). format ( cal . time ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" dd / MM Ġhh : mm Ġaa ", ĠLocale . getDefault ()). format ( cal . time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġcal . get ( Calendar . HOUR ) ĊĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġcal . get ( Calendar . MINUTE ) ĊĊĠĠĠĠĠĠĠ Ġclock Path . reset () ĊĠĠĠĠĠĠĠ Ġclock Path . add Circle ( x , y , Ġsd ( 1 0 f ), ĠPath . Direction . CW ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnimated ĠClock ĊĠĠĠĠĠĠĠ Ġif ( clock As Loading Indicator ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtt Ġ= Ġframe Ġ% Ġ 6 0 f Ġ/ Ġ 6 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock Path . add Circle ( x , y , sd ( tt Ġ* Ġ 1 2 f ), ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclock Path . moveTo ( x , y ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġhour Ġhand ĊĠĠĠĠĠĠĠ Ġcalculate Hand Rotation (( hour Ġ% Ġ 1 2 Ġ) Ġ/ Ġ 1 2 f , Ġ 5 f ) ĊĠĠĠĠĠĠĠ Ġclock Path . lineTo ( x Ġ+ Ġd ( clock Hand . x ), Ġy Ġ+ Ġd ( clock Hand . y )) ĊĠĠĠĠĠĠĠ Ġclock Path . lineTo ( x , y ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġminute Ġhand ĊĠĠĠĠĠĠĠ Ġcalculate Hand Rotation (( minute Ġ% Ġ 6 0 )/ 6 0 f , Ġ 7 f ) ĊĠĠĠĠĠĠĠ Ġclock Path . lineTo ( x Ġ+ Ġd ( clock Hand . x Ġ), Ġy Ġ+ Ġd ( clock Hand . y )) ĊĠĠĠĠĠĠĠ Ġclock Path . lineTo ( x , y ) ĊĠĠĠĠĠĠĠ Ġclock Path . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre calculate Clock Rect (){ ĊĠĠĠĠĠĠĠ Ġval Ġrender Height Ġ= Ġrender able Area . height () ĊĠĠĠĠĠĠĠ Ġval Ġrender Width Ġ= Ġrender able Area . width () ĊĠĠĠĠĠĠĠ Ġval Ġy Pivot Ġ= Ġrender able Area . top Ġ+ Ġrender Height Ġ* Ġ 0 . 1 f ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġrender Width Ġ- Ġ( d ( 3 0 0 f ) Ġ+ Ġ( render Width Ġ* Ġ 0 . 1 f )) ĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġy Pivot Ġ- Ġsd ( 1 5 f ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġrender Width Ġ* Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġif ( clock Expand Info . isEmpty ()) Ġ 1 0 f Ġelse Ġ 2 5 f ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġy Pivot Ġ+ Ġsd ( height ) ĊĠĠĠĠĠĠĠ Ġupper Clock Bg Ġ= ĠRect F ( l , u , r , d ) ĊĠĠĠĠĠĠĠ Ġval Ġinfo Status X Ġ= Ġrender able Area . right . toFloat () Ġ- Ġd ( 3 0 f ) ĊĠĠĠĠĠĠĠ Ġexpand Info Clip Rect Ġ= ĠRect F ( l , u , info Status X , d ) ĊĠĠĠĠĠĠĠ Ġfull Canvas Rect Ġ= ĠRect F ( 0 f , 0 f , render Width . toFloat (), Ġthis . height . toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlast Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġexpand Info Clip Rect Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠ Ġprivate Ġvar Ġfull Canvas Rect Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠ Ġprivate Ġvar Ġexpand Info Text Rect Ġ= ĠRect ( 0 , 0 , 0 , 0 ) ĊĊĠĠĠ Ġ// TODO : Ġupdate Ġthis Ġfunction Ġto Ġsupport Ġboth ĠPS 3 - style Ġand ĠP SP - style ĠX MB Ġclock ĊĠĠĠ Ġprivate Ġfun Ġl Clock ( canvas : ĠCanvas ){ ĊĠĠĠĠĠĠĠ Ġif ( hide Clock ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif ( clock Expand Info Ġ!= Ġlast Clock Expand Info Ġ|| Ġlast Width Ġ!= Ġwidth Ġ|| Ġlast Height Ġ!= Ġheight Ġ|| Ġexpand Info Clip Rect . isEmpty ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre calculate Clock Rect () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( upper Clock Bg , Ġ 5 f Ġ* Ġdensity , Ġ 5 f Ġ* Ġdensity , Ġpaint Status Box Fill ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( upper Clock Bg , Ġ 5 f Ġ* Ġdensity , Ġ 5 f Ġ* Ġdensity , Ġpaint Status Box Outline ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstatus Text Ġ= Ġ"$ operator Name ĠĠĠĠ Ġ$ clock Str " ĊĠĠĠĠĠĠĠ Ġvar Ġstatus X Ġ= Ġrender able Area . right . toFloat () Ġ- Ġd ( 3 0 f ) ĊĊĠĠĠĠĠĠĠ Ġupdate Clock ( render able Area . right . toFloat () Ġ- Ġd ( 1 5 f ), Ġupper Clock Bg . center Y ()) ĊĊĠĠĠĠĠĠĠ Ġpaint Status Box Fill . color Ġ= ĠColor . arg b ( 6 4 , 0 , 0 , 0 ) ĊĠĠĠĠĠĠĠ Ġpaint Status Box Outline . color Ġ= ĠColor . WHITE ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( clock Path , Ġpaint Status Box Fill ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( clock Path , Ġpaint Status Box Outline ) ĊĊĠĠĠĠĠĠĠ Ġpaint Status Box Fill . color Ġ= ĠColor . arg b ( 6 4 , 2 5 5 , 2 5 5 , 2 5 5 ) ĊĠĠĠĠĠĠĠ Ġpaint Status Box Outline . color Ġ= ĠColor . arg b ( 1 2 8 , 2 5 5 , 2 5 5 , 2 5 5 ) ĊĊĠĠĠĠĠĠĠ Ġlast Clock Expand Info Ġ= Ġclock Expand Info ĊĊĠĠĠĠĠĠĠ Ġif ( clock Expand Info . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text C ( status Text Ġ, Ġstatus X , Ġupper Clock Bg . center Y () Ġ- Ġsd ( 2 f ), Ġpaint Status Text ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( status Text , Ġstatus X , Ġupper Clock Bg . center Y () Ġ- Ġsd ( 2 f ), Ġpaint Status Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Text . getText Bounds ( clock Expand Info , Ġ 0 , Ġclock Expand Info . length , Ġexpand Info Text Rect ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( expand Info Clip Rect . width () Ġ< Ġexpand Info Text Rect . width ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Rect ( expand Info Clip Rect ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus X Ġ-= Ġ( frame Ġ* Ġ 2 ) Ġ% Ġ( expand Info Text Rect . width ()* 2 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Text . textAlign Ġ= ĠPaint . Align . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text U ( clock Expand Info , Ġstatus X , Ġupper Clock Bg . center Y () Ġ- Ġsd ( 2 f ), Ġpaint Status Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Text . textAlign Ġ= ĠPaint . Align . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġrender Ġit Ġas - is ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text U ( clock Expand Info , Ġstatus X , Ġupper Clock Bg . center Y () Ġ- Ġsd ( 2 f ), Ġpaint Status Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/// Ġend region ĊĊĠĠĠ Ġprivate Ġfun Ġl Horizontal Menu ( canvas : Canvas ){ ĊĠĠĠĠĠĠĠ Ġval Ġpivot X Ġ= Ġwidth Ġ* Ġ 0 . 3 f ĊĠĠĠĠĠĠĠ Ġval Ġpivot Y Ġ= Ġheight Ġ* Ġ 0 . 3 f ĊĊĠĠĠĠĠĠĠ Ġitem Root . content . forEach Indexed { Ġindex , Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Paint Ġ= Ġif ( index Ġ== Ġselected X ){ paint Icon Selected } else { paint Icon Un selected } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġif ( index Ġ== Ġselected X ){ data . active Icon } else { data . inactive Icon } ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen X Ġ= Ġ( pivot X Ġ+ Ġ(( index Ġ- Ġselected Xf ) Ġ* Ġd ( 1 0 0 ))) Ġ- Ġ( icon . width Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġrender Ġitem Ġoutside ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( screen X Ġ> Ġ- icon . width Ġ&& Ġscreen X Ġ< Ġwidth + icon . width ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( Ġicon Ġ, screen X , Ġpivot Y Ġ- Ġ( icon . height / 2 f ), Ġicon Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( index Ġ== Ġselected X ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text C ( data . name , Ġscreen X Ġ+ Ġ( icon . width Ġ/ Ġ 2 f ), Ġpivot Y Ġ+ Ġ( icon . height Ġ/ Ġ 2 f ), Ġpaint Menu Text Selected Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġl Vertical Items ( canvas : Canvas ){ ĊĠĠĠĠĠĠĠ Ġval Ġpivot X Ġ= Ġ( width Ġ* Ġ 0 . 3 f ) Ġ- Ġ(( selected X Ġ- Ġselected Xf ) Ġ* Ġd (- 1 0 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġpivot Y Ġ= Ġheight Ġ* Ġ 0 . 3 f ĊĊĠĠĠĠĠĠĠ Ġtry { ĊĊĠĠĠĠĠĠĠ Ġvar Ġitems Ġ: ĠX MB Icon Ġ= Ġitem Root ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getContent ( index Stack [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getContent () ĊĠĠĠĠĠĠĠ Ġval Ġdepth Ġ= Ġindex Stack . count ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 2 Ġuntil Ġdepth ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is On Root ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġitems . getContent ( index Stack [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Stack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġdo Ġany Ġrendering Ġif Ġempty ĊĠĠĠĠĠĠĠ Ġif (! items . has Content ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . forEach Content Indexed Ġ{ Ġindex , Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Selected Ġ= Ġindex Ġ== Ġselected Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Paint Ġ= Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Icon Selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Icon Un selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Paint Ġ= Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Text Selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Text Un selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub text Paint Ġ= Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Sub text Selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Sub text Un selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . active Icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . inactive Icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcenter Y Ġ= Ġpivot Y Ġ+ Ġ(( index Ġ- Ġselected Y f ) Ġ* Ġd ( 6 0 f )) Ġ+ Ġd ( 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscreen Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Y Ġ+ Ġ(( index Ġ- Ġselected Y f ) Ġ* Ġd ( 6 0 f )) Ġ- Ġ( icon . height Ġ/ Ġ 2 f ) Ġ+ Ġd ( 1 0 0 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsel Y Ġ= Ġitems . content Index ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ- Ġsel Y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Y Ġ-= Ġd ( 1 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y Ġ-= Ġd ( 1 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ- Ġsel Y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Y Ġ+= Ġd ( 3 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y Ġ+= Ġd ( 3 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġrender Ġoff screen Ġand Ġset Ġthe Ġvisibility Ġto Ġcall Ġthe Ġon Screen Ġand Ġon Hidden ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis On Screen Ġ= Ġcenter Y Ġ> Ġ- icon . height Ġ&& Ġcenter Y Ġ< Ġheight Ġ+ Ġicon . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . is Coordinate ly Visible Ġ= Ġis On Screen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . isSelected Ġ= Ġis Selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is On Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 8 0 f Ġ: ĠPre serve Ġspace Ġfor ĠX MB - sized Ġ( 2 0 : 1 1 ) Ġicons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġpivot X Ġ+ Ġ( d ( 8 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġscreen Y Ġ+ Ġ( icon . height Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( icon , Ġpivot X Ġ- Ġ( icon . width Ġ/ Ġ 2 f ), Ġscreen Y , Ġicon Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( data . has Description ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( isSelected Ġ&& Ġdescription Separator ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( x , Ġy , Ġwidth Ġ* Ġ 1 f , Ġy , Ġpaint Status Box Outline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( data . name , Ġx , Ġy Ġ- Ġsd ( 2 f ), Ġtext Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text U ( data . description , Ġx , Ġy Ġ+ Ġsd ( 2 f ), Ġsub text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text C ( data . name , Ġx , Ġy , Ġtext Paint Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} catch ( cm fce : Concurrent Modification Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mf ce . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġsub Content Offset Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġarrow Icon Ġ: ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġdee pe st Sub Content Ġ: ĠX MB Icon Ġget (){ ĊĠĠĠĠĠĠĠ Ġvar Ġitems Ġ= Ġitem Root . getContent ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdepth Ġ= Ġindex Stack . count ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 2 Ġuntil Ġdepth ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( items . has Content ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġitems . getContent ( index Stack [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Stack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġl Sub Content Item ( canvas : Canvas ){ ĊĠĠĠĠĠĠĠ Ġval Ġpivot X Ġ= Ġ( width Ġ* Ġ 0 . 3 f ) Ġ- Ġ(( selected X Ġ- Ġselected Xf ) Ġ* Ġd (- 1 0 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġpivot Y Ġ= Ġheight Ġ* Ġ 0 . 3 f ĊĊĠĠĠĠĠĠĠ Ġif ( arrow Icon Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarrow Icon Ġ= Ġget Drawable ( R . drawable . mi pt ex _ arrow ). to Bitmap ( d ( 1 6 ), d ( 1 6 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= Ġdee pe st Sub Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarrow X Ġ= Ġ( pivot X Ġ- Ġsub Content Offset . to Lerp ( d ( 5 0 f ), Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarrow Y Ġ= Ġpivot Y Ġ+ Ġd ( 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarrow Ġ= Ġarrow Icon Ġ?: Ġtransparent Bitmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( arrow , Ġarrow X Ġ- Ġarrow . width / 2 f , Ġarrow Y Ġ- Ġarrow . height / 2 f , Ġpaint Icon Selected ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Icon Ġ= Ġfolder . active Icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen X Ġ= Ġ( pivot X Ġ- Ġsub Content Offset . to Lerp ( d ( 1 0 0 f ), Ġ 0 f )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( folder Icon , Ġscreen X Ġ- Ġ( folder Icon . width / 2 f ), Ġpivot Y Ġ- Ġ( folder Icon . height / 2 f ) Ġ+ Ġd ( 1 0 0 f ), Ġpaint Icon Un selected ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġmain Ġcategory Ġover Ġcurrent Ġfolder Ġif Ġis Ġthe Ġfirst Ġdirectory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is On Root ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcat Ġ= Ġitem Root . getContent ( index Stack [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcat Icon Ġ= Ġcat . active Icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( cat Icon , Ġscreen X Ġ- Ġ( cat Icon . width / 2 f ), Ġpivot Y Ġ- Ġ( cat Icon . height / 2 f ), Ġpaint Icon Un selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} catch ( e : Exception ){ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// Ġregion ĠOptions ĠPopup ĊĠĠĠ Ġvar Ġis On Options Ġ= Ġfalse ĊĠĠĠ Ġvar Ġoptions Rect Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠ Ġvar Ġoption SelectedIndex Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġoption Arrow Path Ġ= ĠPath () ĊĠĠĠ Ġvar Ġoption X Offset Ġ= Ġ 0 . 0 f ĊĊĠĠĠ Ġprivate Ġval Ġoption Text Bound Ġ= ĠRect () ĊĠĠĠ Ġprivate Ġfun Ġl Options ( canvas : Canvas ){ ĊĠĠĠĠĠĠĠ Ġupdate Option Popup Shape () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( options Rect , Ġpaint Status Box Fill ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( options Rect , Ġpaint Status Box Outline ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġcontents ĊĠĠĠĠĠĠĠ Ġif ( is Selection Valid ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġif ( is On Root ) Ġitem Root . getContent ( index Stack [ 0 ]). getContent () Ġelse Ġdee pe st Sub Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( item Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Text Selected . getText Bounds (" M ", 0 , 1 , Ġoption Text Bound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Height Ġ= Ġoption Text Bound . height () Ġ* Ġ 1 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Offset Ġ= Ġ( options Rect . height () Ġ/ Ġ 2 f ) Ġ+ Ġ(( item . menu Count Ġ* Ġ- char Height ) Ġ Ġ/ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Text Offset Ġ= Ġoption Text Bound . width () Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . forEach Menu Indexed Ġ{ Ġindex , Ġv sh Option Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Selected Ġ= Ġindex Ġ== Ġoption SelectedIndex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= Ġif ( isSelected ) Ġpaint Text Selected Ġelse Ġpaint Text Un selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Pos Ġ= Ġ( index Ġ* Ġchar Height )+ Ġy Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( isSelected ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġtriangle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtri R Ġ= Ġoption Text Bound . height () Ġ/ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Pos Ġ= Ġoptions Rect . left Ġ+ Ġ( 0 . 2 5 f Ġ* Ġx Text Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Pos Ġ= Ġoptions Rect . left Ġ+ Ġ( 0 . 7 5 f Ġ* Ġx Text Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( option Arrow Path ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( left Pos , Ġy Pos ); Ġline To ( left Pos , Ġy Pos Ġ- Ġtri R ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( right Pos , Ġy Pos ); Ġline To ( left Pos , Ġy Pos Ġ+ Ġtri R ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( left Pos , Ġy Pos ); Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( option Arrow Path , Ġpaint Fill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( option Arrow Path , Ġpaint Status Box Outline ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Launch Area . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Pos , Ġy Pos Ġ- Ġtri R , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender able Area . right . toFloat (), Ġy Pos Ġ+ tri R ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! v sh Option . selectable ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( v sh Option . name , Ġoptions Rect . left Ġ+ Ġx Text Offset , Ġy Pos , Ġpaint , Ġ- 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Option Popup Shape (){ ĊĠĠĠĠĠĠĠ Ġoption X Offset Ġ= Ġ( 0 . 2 f ). to Lerp ( option X Offset , Ġif ( is On Options ) Ġ 1 . 0 f Ġelse Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġintr insic Width Ġ= Ġ( d ( 2 0 0 f ) Ġ+ Ġpad Offset . right ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġoption X Offset . to Lerp ( d (- 1 0 f ), Ġintr insic Width ) ĊĠĠĠĠĠĠĠ Ġval Ġfurther Width Ġ= Ġoption X Offset . to Lerp ( intrinsic Width , Ġd ( 1 0 f )) ĊĠĠĠĠĠĠĠ Ġoptions Rect . left Ġ= Ġthis . width Ġ- Ġwidth ĊĠĠĠĠĠĠĠ Ġoptions Rect . top Ġ= Ġ- d ( 2 0 f ) ĊĠĠĠĠĠĠĠ Ġoptions Rect . bottom Ġ= Ġheight Ġ+ Ġd ( 3 0 f ) ĊĠĠĠĠĠĠĠ Ġoptions Rect . right Ġ= Ġthis . width Ġ+ Ġfurther Width ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswitch Option Popup Visibility (){ ĊĠĠĠĠĠĠĠ Ġset Option Popup Visibility (! is On Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġis Selection Valid Ġ: ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġretval Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif ( selected X Ġ< Ġitem Root . content Count ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretval Ġ= Ġselected Y Ġ< Ġdee pe st Sub Content . content Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġretval ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Option Popup Visibility ( shown : Boolean ){ ĊĠĠĠĠĠĠĠ Ġif ( is Selection Valid ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġdee pe st Sub Content . getContent ( dee pe st Sub Content . content Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis On Options Ġ= Ġshown Ġ&& Ġitem . has Menu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġoption Ġposition Ġwhen Ġthe Ġitem Ġopens Ġup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is On Options ) Ġoption SelectedIndex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// Ġend region ĊĊĠĠĠ Ġprivate Ġfun Ġm Update (){ ĊĠĠĠĠĠĠĠ Ġselected Y f Ġ= Ġ 0 . 7 5 f . to Lerp ( selected Y . toFloat (), Ġselected Y f ) ĊĠĠĠĠĠĠĠ Ġselected Xf Ġ= Ġ 0 . 7 5 f . to Lerp ( selected X . toFloat (), Ġselected Xf ) ĊĠĠĠĠĠĠĠ Ġbackground Alpha Ġ= Ġ 0 . 1 f . to Lerp ( background Alpha , Ġhide Menu . choose ( 0 f , Ġ 1 f )) ĊĠĠĠĠĠĠĠ Ġframe ++ ĊĊĠĠĠĠĠĠĠ Ġif ( Font Collections . master Font Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx mb Font Ġ= ĠFont Collections . master Font !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsub Content Offset Ġ= Ġ( 0 . 7 5 f ). to Lerp ( sub Content Offset , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ Ġif ( frame Ġ> ĠFloat . MAX _ VALUE Ġ/ 2 f Ġ) Ġframe Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// region ĠF PS ĠMeter ĊĠĠĠ Ġprivate Ġvar Ġfps Rect Ġ= ĠRect F ( 0 f , 0 f , 0 f , 0 f ) ĊĠĠĠ Ġprivate Ġfun Ġl FPS Meter ( canvas : Canvas ){ ĊĠĠĠĠĠĠĠ Ġval Ġms Ġ= ĠSystem . currentTimeMillis () Ġ- Ġframe Start ĊĠĠĠĠĠĠĠ Ġif ( fps Rect . isEmpty Ġ|| Ġlast Width Ġ!= Ġwidth Ġ|| Ġlast Height Ġ!= Ġheight ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfps Rect . left Ġ= Ġsd ( 2 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfps Rect . top Ġ= Ġ( height Ġ* Ġ 0 . 9 f ) Ġ- Ġ( sd ( 1 2 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfps Rect . right Ġ= Ġsd ( 2 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfps Rect . bottom Ġ= Ġfps Rect . top Ġ+ Ġsd ( 2 5 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelta Time Ġ= Ġms Ġ/ Ġ 1 0 0 0 f ĊĊĠĠĠĠĠĠĠ Ġval Ġfps Ġ= Ġ( 1 0 0 0 f Ġ/ Ġms ). round ToInt () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( fps Rect , Ġ 1 0 f , 1 0 f , paint Status Box Fill ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( fps Rect , Ġ 1 0 f , 1 0 f , paint Status Box Outline ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text C ("$ fps ĠF PS Ġ/ Ġ$ ms Ġms ", Ġfps Rect . center X (), Ġfps Rect . center Y (), Ġpaint Menu Text Selected ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/// Ġend region ĊĊĊĠĠĠ Ġprivate Ġfun Ġm Late Update (){ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// Ġregion ĠDebug ĠInfo ĊĠĠĠ Ġvar Ġshow Debug Info Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġfun Ġl Debug Info ( canvas : Canvas ){ ĊĠĠĠĠĠĠĠ Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Start , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Xf , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Box Outline ĊĠĠĠĠĠĠĠ Ġ). forEach Indexed { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex , Ġany Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( any . toString (), Ġd ( 1 0 f ), Ġd ( 7 5 f ) Ġ+ Ġ( d ( 1 5 f )* Ġindex ), Ġpaint Text Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdebug Paint . color Ġ= ĠColor . arg b ( 6 4 , 0 , 2 5 5 , 0 ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( render able Area , Ġdebug Paint ) ĊĠĠĠĠĠĠĠ Ġdebug Paint . color Ġ= ĠColor . arg b ( 6 4 , 2 5 5 , 0 , 0 ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( launch Tap Area , Ġdebug Paint ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/// Ġend region ĠDebug ĠInfo ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġm Update () ĊĠĠĠĠĠĠĠ Ġval ĠbackgroundColor Ġ= Ġbackground Alpha . to Lerp Color ( alpha Color , Ġmenu BackgroundColor ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Color ( backgroundColor ) ĊĠĠĠĠĠĠĠ Ġif (! hide Menu ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl Vertical Items ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( dee pe st Sub Content . has Content ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Sub Content Item ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Horizontal Menu ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġl Clock ( canvas ) ĊĠĠĠĠĠĠĠ Ġm Late Update () ĊĠĠĠĠĠĠĠ Ġl Options ( canvas ) ĊĠĠĠĠĠĠĠ Ġl Button Guide ( canvas ) ĊĠĠĠĠĠĠĠ Ġif ( show FPS Meter ) Ġl FPS Meter ( canvas ) ĊĠĠĠĠĠĠĠ Ġif ( show Debug Info ) Ġl Debug Info ( canvas ) ĊĠĠĠĠĠĠĠ Ġframe Start Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĊĠĠĠĠĠĠĠ Ġlast Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġlast Height Ġ= Ġheight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// Ġregion ĠInput ĊĠĠĠ Ġfun Ġset Selection ( x : Int , Ġy : Int ){ ĊĠĠĠĠĠĠĠ Ġif ( hide Menu ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif (! is On Root ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( x Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( x Ġ< Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Stack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre assign Y Pos ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( is On Options Ġ&& Ġis Selection Valid ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Item Ġ= Ġdee pe st Sub Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġselected Item . menu Count Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( max Ġ< Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Option Ġ= Ġselected Item . get Menu ( selected Item . menu Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoption SelectedIndex Ġ= Ġ( option SelectedIndex Ġ+ Ġy ). coerce In ( 0 , Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile (( ! selected Option . selectable ) Ġ&& Ġoption SelectedIndex Ġ< Ġmax ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption SelectedIndex Ġ= Ġ( option SelectedIndex Ġ+ Ġy ). coerce In ( 0 , Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġselected Ġicon Ġto Ġbe Ġno Ġlonger Ġselected Ġand Ġno Ġlonger Ġon Screen Ġthen ĠSave Ġcurrently Ġselected Ġicon Ġbefore Ġchanging ĊĠĠĠĠĠĠĠ Ġ/* Ġ// ĠOrig nal ĠCode ĊĠĠĠĠĠĠĠ Ġif ( x Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Item Ġ= Ġdee pe st Sub Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( selected Item . content Size Ġ> Ġselected Y ){ Ġselected Item . isSelected Ġ= Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item . content . forEach Ġ{ Ġit . is Coordinate ly Visible Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Root . getContent ( index Stack [ 0 ]). content Index Ġ= Ġselected Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġselected X Ġ= Ġ( selected X Ġ+ Ġx ). coerce In ( 0 , Ġitem Root . getContent (). content Size Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġif ( dee pe st Sub Content . content . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Item Ġ= Ġsub content Stack . peek ()?. getContent Ġ?: Ġcategory [ selected X ]. items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Y Ġ= Ġ( selected Y Ġ+ Ġy ). coerce In ( 0 , Ġselected Item . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory [ selected X ]. item Y Ġ= Ġselected Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( x Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Y Ġ= Ġcategory [ selected X ]. item Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġsl iding Ġanimation Ġwhen Ġchanging Ġbetween Ġcategories ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Y f Ġ= Ġselected Y . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġif ( x Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOn ĠRoot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is On Root ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected X Ġ= Ġ( selected X Ġ+ Ġx ). coerce In ( 0 , Ġitem Root . content Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { Ġ// ĠOn ĠSub - Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( x Ġ< Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Back Signal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( dee pe st Sub Content . content . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġdee pe st Sub Content . content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Y Ġ= Ġ( selected Y Ġ+ Ġy ). coerce In ( 0 , Ġitems . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSkip Ġsl iding Ġanimation ĊĠĠĠĠĠĠĠ Ġif ( x Ġ!= Ġ 0 ){ Ġselected Y f Ġ= Ġselected Y . toFloat () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Selection Abs ( x : Int , Ġy : Int ){ ĊĠĠĠĠĠĠĠ Ġif ( hide Menu ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġselected X Ġ= Ġx . coerce In ( 0 , Ġitem Root . content Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġif ( dee pe st Sub Content . has Content ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Y Ġ= Ġy . coerce In ( 0 , Ġdee pe st Sub Content . content Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSkip Ġvertical Ġsl iding Ġanimation ĊĠĠĠĠĠĠĠ Ġselected Y f Ġ= Ġselected Y . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Back Signal (){ ĊĠĠĠĠĠĠĠ Ġif ( is On Options ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis On Options Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} else Ġif (! is On Root ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Stack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre assign Y Pos ( false ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif (! hide Menu ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Menu Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre assign Y Pos ( open : ĠBoolean ){ ĊĠĠĠĠĠĠĠ Ġval ĠmaxSize Position Ġ= Ġdee pe st Sub Content . content Count ĊĠĠĠĠĠĠĠ Ġselected Xf Ġ+= Ġopen . choose (- 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġsub Content Offset Ġ= Ġopen . choose (- 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġselected Y Ġ= Ġselected Y . coerce In ( 0 , Ġ ĠmaxSize Position Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute Current Item (){ ĊĠĠĠĠĠĠĠ Ġif ( hide Menu ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPress ĠMenu Ġto ĠUn hide ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Menu Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġdee pe st Sub Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( data . has Content ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Try Ġexecution Ġ| ĠSub content Ġcount Ġ: Ġ${ index Stack . count } Ġ- ĠLast Content Ġ: Ġ${ dee pe st Sub Content }} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre assign Y Pos ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . getContent (). on Launch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( ex : Exception ){ Ġex . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbutton Guide Ġ= ĊĠĠĠĠĠĠĠ Ġ" |{ btn : confirm }| Ġ: ĠSelect \ n |{ btn : cancel }| Ġ: ĠBack \ n |{ btn : menu }| Ġ: ĠMenu \ n |{ btn : home }| Ġ: ĠHome " ĊĠĠĠ Ġprivate Ġfun Ġformat Button Guide () Ġ: ĠMult if ont Span Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġretval Ġ= ĠMult if ont Span () ĊĠĠĠĠĠĠĠ Ġvar Ġuse Btn Font Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġtxt Ġ= Ġbutton Guide . apply Font Macro ( Button Type . Play Station , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtxt . split ('| '). forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Btn Font Ġ= Ġ! use Btn Font ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretval . add ( if ( use Btn Font ) Ġx mb Font Ġelse Ġx mb System Font , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġretval ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbutton Guide Rect Ġ: ĠRect Ġ= ĠRect () ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Button Guide Rect ( ctx : Canvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġformat Button Guide () ĊĠĠĠĠĠĠĠ Ġval Ġsize Rect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġval Ġsys Pad Ġ= Ġget System Padding () ĊĠĠĠĠĠĠĠ Ġctx . getText Bound ( text , Ġpaint Text Selected , Ġsize Rect ) ĊĠĠĠĠĠĠĠ Ġbutton Guide Rect . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Pad . right Ġ- Ġsize Rect . width () Ġ- Ġsd ( 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Pad . bottom Ġ- Ġsize Rect . height () Ġ- Ġsd ( 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Pad . right Ġ- Ġsd ( 1 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Pad . bottom Ġ- Ġsd ( 1 0 ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġl Button Guide ( ctx : Canvas ){ ĊĠĠĠĠĠĠĠ Ġupdate Button Guide Rect ( ctx ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġformat Button Guide () ĊĠĠĠĠĠĠĠ Ġctx . draw Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Guide Rect . to Rect F (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsd ( 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsd ( 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Box Fill ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġctx . draw Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Guide Rect . to Rect F (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsd ( 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsd ( 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Status Box Outline ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġctx . draw Text ( text , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Guide Rect . left Ġ+ Ġsd ( 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Guide Rect . top Ġ+ Ġsd ( 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Text Selected ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute Current Option Item (){ ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Opt Ġ= Ġdee pe st Sub Content . get Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Opt . selectable ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Opt . onClick . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis On Options Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Category ( id : String ) Ġ: ĠX MB Icon ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġitem Ġ: ĠX MB Icon ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġitem Root . content . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Item ID Ġ: Ġ${ it . id } Ġ| Ġ${ it . itemId }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . itemId . equals ( id , Ġtrue )) Ġitem Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( item Ġ!= null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Found Ġitem Ġ: Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Item Ġwith ĠID Ġ$ id Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/// Ġend region Ċ } Ċ