/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 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 Ġcom . j pb . scratch t appy . md 3 Ċ Ċ import Ġcom . j pb . scratch t appy . md 3 . getSystem Color Ċ import Ġkotlin . jvm . Jvm Over loads Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Vector Drawable Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . View . Measure Spec Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . text . format . Date Utils Ċ import Ġandroid . content . res . Typed Array Ċ import Ġcom . j pb . scratch t appy . md 3 . R Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroid . app . Activity Ċ import Ġcom . j pb . scratch t appy . md 3 . Pl at Logo Activity . Set table Analog Clock Ċ import Ġcom . j pb . scratch t appy . md 3 . Pl at Logo Activity . B ubbles Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . graphics . drawable . Layer Drawable Ċ import Ġandroid . view . animation . Over shoot Interpolator Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . H aptic Feedback Constants Ċ import Ġcom . j pb . scratch t appy . md 3 . Pl at Logo Activity Ċ import Ġcom . j pb . scratch t appy . md 3 . Pl at Logo Activity . Bubble Ċ import Ġandroid . text . format . Time Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . material . color . Dynamic Colors Ċ import Ġjava . lang . Exception Ċ Ċ /** Ċ Ġ* ĠAndroid ĠS Ċ Ġ*/ Ċ class ĠPl at Logo Activity Ġ: ĠActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠMAX _ BU BB S Ġ= Ġ 2 0 0 0 ĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġstatic Ġfinal ĠString ĠS _ E GG _ UNLOCK _ SETTING Ġ= Ġ" egg _ mode _ s "; ĊĠĠĠ Ġprivate Ġvar Ġm Clock : ĠSet table Analog Clock ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Logo : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Bg : ĠB ubbles Drawable ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠĠĠ Ġ@ Override ĊĠĠĠ Ġ// ĠĠĠ Ġprotected Ġvoid Ġon Pause () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsuper . on Pause (); ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠDynamic Colors . apply If Available ( this ); ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwindow . navigation Bar Color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġab Ġ= Ġaction Bar ĊĠĠĠĠĠĠĠ Ġab ?. hide () ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠFrame Layout ( this ) ĊĠĠĠĠĠĠĠ Ġm Clock Ġ= ĠSet table Analog Clock ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġdm Ġ= Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġval Ġdp Ġ= Ġdm . density ĊĠĠĠĠĠĠĠ Ġval Ġmin Side Ġ= ĠMath . min ( dm . width Pixels , Ġdm . height Pixels ) ĊĠĠĠĠĠĠĠ Ġval Ġwidget Size Ġ= Ġ( min Side Ġ* Ġ 0 . 7 5 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠFrame Layout . LayoutParams ( widget Size , Ġwidget Size ) ĊĠĠĠĠĠĠĠ Ġlp . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġlayout . addView ( m Clock , Ġlp ) ĊĠĠĠĠĠĠĠ Ġm Logo Ġ= ĠImageView ( this ) ĊĠĠĠĠĠĠĠ Ġm Logo !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġm Logo . setImage Resource ( R . drawable . s _ plat logo ); ĊĠĠĠĠĠĠĠ Ġm Logo !!. setImage Drawable ( create Drawable ()) ĊĠĠĠĠĠĠĠ Ġlayout . addView ( m Logo , Ġlp ) ĊĠĠĠĠĠĠĠ Ġm Bg Ġ= ĠB ubbles Drawable () ĊĠĠĠĠĠĠĠ Ġm Bg !!. level Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Bg !!. avoid Ġ= Ġ( widget Size Ġ/ Ġ 2 ). toFloat () ĊĠĠĠĠĠĠĠ Ġm Bg !!. padding Ġ= Ġ 0 . 5 f Ġ* Ġdp ĊĠĠĠĠĠĠĠ Ġm Bg !!. min R Ġ= Ġ 1 Ġ* Ġdp ĊĠĠĠĠĠĠĠ Ġlayout . background Ġ= Ġm Bg ĊĠĠĠĠĠĠĠ ĠsetContentView ( layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Drawable (): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcolor Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġthis . getSystem Color (" system _ accent 3 _ 5 0 0 ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( color Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠR . color . purple _ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( this , ĠR . drawable . s _ plat logo _ nob g ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg . shape Ġ= ĠGradient Drawable . O VAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg . setColor ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLayer Drawable ( array Of ( bg , Ġdrawable )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . get Drawable ( this , ĠR . drawable . s _ plat logo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġboolean Ġshould Write Settings () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġreturn Ġget PackageName (). equals (" android "); ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ@ Suppress Lint (" Object Animator Binding ") ĊĠĠĠ Ġprivate Ġfun Ġlaunch Next Stage ( locked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Clock !!. animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 f ). scale X ( 0 . 5 f ). scale Y ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ Ġm Clock !!. visibility Ġ= ĠView . GONE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠ Ġm Logo !!. alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Logo !!. scale X Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġm Logo !!. scale Y Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġm Logo !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm Logo !!. animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Y ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Over shoot Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠ Ġm Logo !!. post Delayed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠObject Animator . of Int ( m Bg , Ġ" level ", Ġ 0 , Ġ 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim . interpol ator Ġ= ĠDec el erate Interpolator ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 0 ĊĠĠĠĠĠĠĠ Ġ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġfinal ĠContent Resolver Ġcr Ġ= ĠgetContent Resolver (); Ċ // Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Write Settings ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Saving Ġegg Ġunlock =" Ġ+ Ġlocked ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Touch Pressure (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . System . put Long ( cr , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS _ E GG _ UNLOCK _ SETTING , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocked Ġ? Ġ 0 Ġ: ĠSystem . currentTimeMillis ()); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( RuntimeException Ġe ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Can 't Ġwrite Ġsettings ", Ġe ); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( new ĠIntent ( Intent . ACTION _ MAIN ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Category (" com . android . internal . category . PL AT LOG O ")); Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( Activity NotFoundException Ġex ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" com . android . internal . app . Pl at Logo Activity ", Ġ" No Ġmore Ġeg gs ."); Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// finish (); Ġ// Ġno Ġlonger Ġfinish Ġupon Ġunlock ; Ġit 's Ġfun Ġto Ġf rob Ġthe Ġdial ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠ Ġstatic Ġfinal ĠString ĠTO UCH _ STATS Ġ= Ġ" touch . stats "; ĊĠĠĠ Ġ// ĠĠĠ Ġdouble Ġm Pressure Min Ġ= Ġ 0 , Ġm Pressure Max Ġ= Ġ- 1 ; ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġvoid Ġmeasure Touch Pressure ( Motion Event Ġevent ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġfinal Ġfloat Ġpressure Ġ= Ġevent . get Pressure (); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġswitch Ġ( event . getAction Mask ed ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġcase ĠMotion Event . ACTION _ DOWN : ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pressure Max Ġ< Ġ 0 ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pressure Min Ġ= Ġm Pressure Max Ġ= Ġpressure ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġcase ĠMotion Event . ACTION _ MOVE : ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressure Ġ< Ġm Pressure Min ) Ġm Pressure Min Ġ= Ġpressure ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressure Ġ> Ġm Pressure Max ) Ġm Pressure Max Ġ= Ġpressure ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġvoid Ġsync Touch Pressure () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠString Ġtouch Data Json Ġ= ĠSettings . System . getString ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetContent Resolver (), ĠTO UCH _ STATS ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠJSONObject Ġtouch Data Ġ= Ġnew ĠJSONObject ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Data Json Ġ!= Ġnull Ġ? Ġtouch Data Json Ġ: Ġ"{} "); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( touch Data . has (" min ")) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pressure Min Ġ= ĠMath . min ( m Pressure Min , Ġtouch Data . getDouble (" min ")); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( touch Data . has (" max ")) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pressure Max Ġ= ĠMath . max ( m Pressure Max , Ġtouch Data . getDouble (" max ")); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pressure Max Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Data . put (" min ", Ġm Pressure Min ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Data . put (" max ", Ġm Pressure Max ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Write Settings ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . System . putString ( getContent Resolver (), ĠTO UCH _ STATS , ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Data . toString ()); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( Exception Ġe ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Can 't Ġwrite Ġtouch Ġsettings ", Ġe ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠĠĠ Ġ@ Override ĊĠĠĠ Ġ// ĠĠĠ Ġpublic Ġvoid ĠonStart () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsuper . onStart (); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsync Touch Pressure (); ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠĠĠ Ġ@ Override ĊĠĠĠ Ġ// ĠĠĠ Ġpublic Ġvoid Ġon Stop () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsync Touch Pressure (); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġsuper . on Stop (); ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSub class Ġof ĠAn alog Clock Ġthat Ġallows Ġthe Ġuser Ġto Ġflip Ġup Ġthe Ġg lass Ġand Ġadjust Ġthe Ġhands . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠSet table Analog Clock ( context : ĠContext ) Ġ: ĠAn alog Clock ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Override Hour Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Override Minute Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Override Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġnow (): ĠTime ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Now Ġ= Ġsuper . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠInstant Ġreal Now Ġ= Ġsuper . now (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠZone Id Ġtz Ġ= ĠClock . system Default Zone (). get Zone (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠZ onedDateTime Ġz d Time Ġ= Ġreal Now . at Zone ( tz ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Override ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Override Hour Ġ< Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Hour Ġ= Ġz d Time . get Hour (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Hour Ġ= Ġreal Now !!. hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Now ! ![ 0 , Ġm Override Minute , Ġm Override Hour , Ġreal Now . month Day , Ġreal Now . month ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Now . year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClock . fixed ( zd Time Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Hour ( m Override Hour ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Minute ( m Override Minute ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Second ( 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Instant (), Ġtz ). instant (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreal Now ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreal Now ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġto Positive Degrees ( rad : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( Math . to Degrees ( rad ) Ġ+ Ġ 3 6 0 Ġ- Ġ 9 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ev . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Touch Pressure ( ev ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġev . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġwidth Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcy Ġ= Ġheight Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġto Positive Degrees ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . atan 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( x Ġ- Ġcx ). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Ġ- Ġcy ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġ( 7 5 Ġ- Ġ( angle Ġ/ Ġ 6 ). toInt ()) Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Delta Ġ= Ġminutes Ġ- Ġm Override Minute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( minute Delta Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( minute Delta ) Ġ> Ġ 4 5 Ġ&& Ġm Override Hour Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Delta Ġ= Ġif Ġ( minute Delta Ġ< Ġ 0 ) Ġ 1 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Hour Ġ= Ġ( m Override Hour Ġ+ Ġ 2 4 Ġ+ Ġhour Delta ) Ġ% Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Minute Ġ= Ġminutes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Override Minute Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . LONG _ PRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scale X Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġ 1 . 0 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġ 1 . 0 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate (). scale X ( 1 f ). scale Y ( 1 f ). set Duration ( 1 5 0 ). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . CLOCK _ TICK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Time Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġev . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġwidth Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcy Ġ= Ġheight Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġto Positive Degrees ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . atan 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( x Ġ- Ġcx ). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Ġ- Ġcy ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġ( 7 5 Ġ- Ġ( angle Ġ/ Ġ 6 ). toInt ()) Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Delta Ġ= Ġminutes Ġ- Ġm Override Minute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( minute Delta Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( minute Delta ) Ġ> Ġ 4 5 Ġ&& Ġm Override Hour Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Delta Ġ= Ġif Ġ( minute Delta Ġ< Ġ 0 ) Ġ 1 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Hour Ġ= Ġ( m Override Hour Ġ+ Ġ 2 4 Ġ+ Ġhour Delta ) Ġ% Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Override Minute Ġ= Ġminutes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Override Minute Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . LONG _ PRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scale X Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġ 1 . 0 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġ 1 . 0 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate (). scale X ( 1 f ). scale Y ( 1 f ). set Duration ( 1 5 0 ). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . CLOCK _ TICK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Time Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Override Minute Ġ== Ġ 0 Ġ&& Ġm Override Hour Ġ% Ġ 1 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" 1 2 : 0 0 Ġlet 's Ġg oooo o " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( application Context , Ġtext , Ġduration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" 1 2 : 0 0 Ġlet 's Ġg oooo o ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . LONG _ PRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Next Stage ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠB ubble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġcolor Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠB ubbles Drawable Ġ: ĠDrawable () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprivate Ġfinal Ġint [] Ġm Color Ids Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . system _ accent 1 _ 4 0 0 , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . system _ accent 1 _ 5 0 0 , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . system _ accent 1 _ 6 0 0 , ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . system _ accent 2 _ 4 0 0 , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . system _ accent 2 _ 5 0 0 , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . system _ accent 2 _ 6 0 0 , ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Color Ids Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system _ accent 1 _ 4 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system _ accent 1 _ 5 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system _ accent 1 _ 6 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system _ accent 2 _ 4 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system _ accent 2 _ 5 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system _ accent 2 _ 6 0 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprivate Ġint [] Ġm Colors Ġ= Ġnew Ġint [ m Color Ids . length ]; ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Colors Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf (- 0 xa 6 7 2 0 9 , Ġ- 0 xc 8 8 e 2 1 , Ġ- 0 xda a 6 4 4 , Ġ- 0 x 7 5 6 e 5 d , Ġ- 0 x 8 f 8 9 7 9 , Ġ- 0 xa 7 a 1 9 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm B ub bs Ġ= ĠarrayOf Null s < Bubble >( MAX _ BU BB S ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Num B ub bs Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġvar Ġavoid Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġpadding Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġmin R Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġlevel Ġ/ Ġ 1 0 0 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdrawn Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm Num B ub bs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mB ub bs [ j ] !!. color Ġ== Ġ 0 Ġ|| Ġm B ub bs [ j ] !!. r Ġ== Ġ 0 f ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġm B ub bs [ j ] !!. color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( mB ub bs [ j ] !!. x , Ġm B ub bs [ j ] !!. y , Ġm B ub bs [ j ] !!. r Ġ* Ġf , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawn ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Level Change ( level : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bounds Change ( bounds : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Bounds Change ( bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandomize () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrandomize () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġbounds . width (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġbounds . height (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax R Ġ= ĠMath . min ( w , Ġh ) Ġ/ Ġ 3 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Num B ub bs Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( avoid Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. x Ġ= Ġw Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. y Ġ= Ġh Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. r Ġ= Ġavoid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Num B ub bs ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil ĠMAX _ BU BB S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġsimple Ġbut Ġtime - tested Ġbubble - packing Ġalgorithm : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġpick Ġa Ġspot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġshrink Ġthe Ġbubble Ġuntil Ġit Ġis Ġno Ġlonger Ġoverlapping Ġany Ġother Ġbubble ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġif Ġthe Ġbubble Ġhasn 't Ġpop ped , Ġkeep Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtries Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( tri es -- Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĠMath . random (). toFloat () Ġ* Ġw ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĠMath . random (). toFloat () Ġ* Ġh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr Ġ= ĠMath . min ( Math . min ( x , Ġw Ġ- Ġx ), ĠMath . min ( y , Ġh Ġ- Ġy )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshrink Ġradius Ġto Ġfit Ġother Ġb ub bs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Num B ub bs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= ĠMath . min ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . h ypot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( x Ġ- Ġm B ub bs [ i ] !!. x ). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Ġ- Ġm B ub bs [ i ] !!. y ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ- Ġm B ub bs [ i ] !!. r ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- Ġpadding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ< Ġmin R ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ>= Ġmin R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġfound Ġa Ġspot Ġfor Ġthis Ġbubble Ġto Ġlive , Ġlet 's Ġsave Ġit Ġand Ġmove Ġon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= ĠMath . min ( max R , Ġr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. r Ġ= Ġr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ m Num B ub bs ] !!. color Ġ= Ġm Colors [( Math . random () Ġ* Ġm Colors . size ). toInt ()] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Num B ub bs ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" successfully Ġplaced Ġ% d Ġb ubbles Ġ(% d %% )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Num B ub bs , Ġ( 1 0 0 f Ġ* Ġm Num B ub bs Ġ/ ĠMAX _ BU BB S ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Alpha ( alpha : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Color Filter ( color Filter : ĠColor Filter ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Opacity (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Color Ids . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Colors [ i ] Ġ= Ġthis @ Pl at Logo Activity . getSystem Color ( m Color Ids [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġm B ub bs . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm B ub bs [ j ] Ġ= ĠB ubble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Pl at Logo Activity " ĊĠĠĠ Ġ} Ċ }