package Ġnet . ge ek semp ire . experimental . de mon stration . Physics Animation Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . dynamic animation . animation . Dynamic Animation Ċ import Ġandroidx . dynamic animation . animation . Fl ing Animation Ċ import Ġandroidx . dynamic animation . animation . Spring Animation Ċ import Ġandroidx . dynamic animation . animation . Spring Force Ċ import Ġcom . facebook . re bound . Simple Spring Listener Ċ import Ġcom . facebook . re bound . Spring Ċ import Ġcom . facebook . re bound . Spring Config Ċ import Ġcom . facebook . re bound . Spring System Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . android . play . core . app update . App Update Info Ċ import Ġcom . google . android . play . core . app update . App Update Manager Ċ import Ġcom . google . android . play . core . app update . App Update ManagerFactory Ċ import Ġcom . google . android . play . core . install . Install State Updated Listener Ċ import Ġcom . google . android . play . core . install . model . App Update Type Ċ import Ġcom . google . android . play . core . install . model . Install Status Ċ import Ġcom . google . android . play . core . install . model . Update Availability Ċ import Ġcom . google . android . play . core . split install .* Ċ import Ġcom . google . android . play . core . split install . model . Split Install Session Status Ċ import Ġcom . google . android . play . core . tasks . Task Ċ import Ġcom . google . firebase . Firebase App Ċ import Ġkotlinx . android . synt hetic . main . dynamic _ feature . dynamic Feature Ċ import Ġkotlinx . android . synt hetic . main . dynamic _ feature . dynamic Image Ċ import Ġkotlinx . android . synt hetic . main . physics _ animation .* Ċ import Ġnet . ge ek semp ire . experimental . de mon stration . Base Configurations Ċ import Ġnet . ge ek semp ire . experimental . de mon stration . Build Config Ċ import Ġnet . ge ek semp ire . experimental . de mon stration . R Ċ import Ġnet . ge ek semp ire . experimental . de mon stration . Utils . Functions . Functions Class Ċ Ċ class ĠPhysics Animation Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġfunctions Class : ĠFunctions Class ĊĊĠĠĠ Ġlateinit Ġvar Ġsplit Install Manager : ĠSplit Install Manager ĊĠĠĠ Ġlateinit Ġvar Ġsplit Install State Updated Listener : ĠSplit Install State Updated Listener ĊĊĠĠĠ Ġlateinit Ġvar Ġapp Update Manager : ĠApp Update Manager ĊĠĠĠ Ġlateinit Ġvar Ġinstall State Updated Listener : ĠInstall State Updated Listener ĊĊĠĠĠ Ġval ĠSPL IT _ REQUEST _ CODE Ġ= Ġ 1 1 1 ĊĠĠĠ Ġval ĠIN _ APP _ UPDATE _ REQUEST Ġ= Ġ 3 3 3 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠFirebase App . initialize App ( getApplicationContext ()); ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . physics _ animation ) ĊĊĠĠĠĠĠĠĠ Ġfunctions Class Ġ= ĠFunctions Class ( application Context ) ĊĊĠĠĠĠĠĠĠ Ġsplit Install State Updated Listener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install State Updated Listener Ġ{ Ġsplit Install Session State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( split Install Session State . status ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . REQ UIRES _ USER _ CONFIRM ATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Play ĠStore . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠSplit ĠConfirm ation Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Manager . start Confirmation Dialog For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Session State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Physics Animation Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSPL IT _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . DOWNLOAD ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Play ĠStore . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠSplit ĠDownloading Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . DOWN LOADED Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . INSTALL ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠSplit ĠInstalling Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . INST ALLED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠModule ĠInstalled : Ġ${ split Install Session State . module Names ()[ 0 ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdates Ġapp Ġinfo Ġwith Ġnew Ġsplit Ġinformation Ġmaking Ġsplit Ġartifacts Ġavailable Ġto Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapp Ġon Ġsubsequent Ġrequests . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Helper . update App Info ( application Context ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġassets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġasset Manager . open (" dynamic _ image . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Stream ( inputStream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbitmap . getWidth () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbitmap . getHeight () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Bitmap Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( width Ġ/ Ġ 2 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( height Ġ/ Ġ 2 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( dynamic Image . width ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CC W ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( output Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġ 0 f , Ġ 0 f , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Image . setImage Bitmap (( output Bitmap )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( split Install Session State . module Names ()[ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Configurations . dynamic Module Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent (). set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . APPLICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Configurations . dynamic ClassName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . putExtra (" DATA _ TO _ DYNAMIC ", Ġ" AFTER ĠINST ALLED ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Manager . unregister Listener ( split Install State Updated Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . FAILED Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Install Manager Ġ= ĠSplit Install ManagerFactory . create ( application Context ) ĊĠĠĠĠĠĠĠ Ġsplit Install Manager . register Listener ( split Install State Updated Listener ) ĊĠĠĠĠĠĠĠ Ġval Ġinstalled Module Ġ= Ġsplit Install Manager . installed Modules ĊĠĠĠĠĠĠĠ Ġinstalled Module . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠInstalled ĠModules : Ġ" Ġ+ Ġit Ġ+ Ġ" Ġ*** ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinstall State Updated Listener Ġ= ĠInstall State Updated Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . install Status ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . REQ UIRES _ UI _ INT ENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠUI ĠIntent Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . DOWNLOAD ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠDownloading Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . DOWN LOADED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠDown loaded Ġ*** ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Complete Confirmation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . INSTALL ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠInstalling Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . INST ALLED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠInstalled Ġ*** ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Manager . unregister Listener ( install State Updated Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . C ANCE LED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠC anceled Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠUPDATE ĠFailed Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp Update Manager Ġ= ĠApp Update ManagerFactory . create ( application Context ) ĊĠĠĠĠĠĠĠ Ġapp Update Manager . register Listener ( install State Updated Listener ) ĊĠĠĠĠĠĠĠ Ġval Ġapp Update Info : ĠTask < App Update Info > Ġ= Ġapp Update Manager . app Update Info ĊĠĠĠĠĠĠĠ Ġapp Update Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġupdate Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** Ġ${ update Info . update Availability ()} Ġ--- Ġ${ update Info . available Version Code ()} Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Info . update Availability () Ġ== ĠUpdate Availability . UPDATE _ AVAILABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġupdate Info . is Update Type Allowed ( App Update Type . IM MEDI ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Manager . start Update Flow For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Update Type . IM MEDI ATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Physics Animation Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIN _ APP _ UPDATE _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠException ĠError Ġ${ it } Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( installed Module . contains ( Base Configurations . dynamic Module )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġassets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġasset Manager . open (" dynamic _ image . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Stream ( inputStream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbitmap . getWidth () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbitmap . getHeight () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Bitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( width Ġ/ Ġ 2 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( height Ġ/ Ġ 2 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( dynamic Image . width ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CC W ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( output Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġ 0 f , Ġ 0 f , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Image . setImage Bitmap ( output Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdynamic Feature . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( installed Module . contains ( Base Configurations . dynamic Module )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent (). set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . APPLICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Configurations . dynamic ClassName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . putExtra (" DATA _ TO _ DYNAMIC ", Ġ" AL READY ĠINST ALLED ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Install Request : ĠSplit Install Request Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Module ( Base Configurations . dynamic Module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Install ( split Install Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Module ĠInstalled ĠSuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Exception ĠError :" Ġ+ Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdynamic Feature . setOn Long ClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule To Un install Ġ= ĠlistOf < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Configurations . dynamic Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Manager . deferred Un install ( module To Un install ). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Module ĠUn installed ĠSuccessfully ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Manager . installed Modules . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠInstalled ĠModules ĠAfter ĠUn installation : Ġ" Ġ+ Ġit Ġ+ Ġ" Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Exception ĠError :" Ġ+ Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĊĠĠĠĠĠĠĠ Ġ/ ******************************** **** Fl ing **************************************** *****/ ĊĠĠĠĠĠĠĠ Ġval Ġfl ing Animation X : ĠF ling Animation Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ling Animation ( dynamic Image , ĠDynamic Animation . X ). set F riction ( 1 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfl ing Animation Y : ĠF ling Animation Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ling Animation ( dynamic Image , ĠDynamic Animation . Y ). set F riction ( 1 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfl ing Animation X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MinValue ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MaxValue (( functions Class . Dp To Pixel ( resources . display Metrics . width Pixels . toFloat ()))) ĊĠĠĠĠĠĠĠ Ġfl ing Animation Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MinValue ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set MaxValue (( functions Class . Dp To Pixel ( resources . display Metrics . height Pixels . toFloat ()))) ĊĊĠĠĠĠĠĠĠ Ġval Ġgesture Listener Ġ= Ġobject Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fl ing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe 2 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity X : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation X . set Start Velocity ( velocity X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation Y . set Start Velocity ( velocity Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation X . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation Y . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgesture Detector Ġ= ĠGest ure Detector ( application Context , Ġgesture Listener ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġd X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġd Y : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġdynamic Image . setOn Touch Listener Ġ{ Ġview , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Detector . on Touch Event ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . getAction ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd X Ġ= Ġview . x Ġ- Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Y Ġ= Ġview . y Ġ- Ġevent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( event . raw X Ġ+ Ġd X ) Ġ> Ġ 0 Ġ&& Ġ( event . raw Y Ġ+ Ġd Y ) Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. x ( event . raw X Ġ+ Ġd X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. y ( event . raw Y Ġ+ Ġd Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/ ******************************** **** Spring **************************************** *****/ ĊĠĠĠĠĠĠĠ Ġval Ġspring Force : ĠSpring Force Ġby Ġlazy ( Lazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSpring Force ( 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst iff ness Ġ= ĠSpring Force . ST IFF NESS _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd amping Ratio Ġ= ĠSpring Force . DA MP ING _ RATIO _ HIGH _ BOUN CY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġspring Animation Translation X : ĠSpring Animation Ġby Ġlazy ( Lazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSpring Animation ( dynamic Feature , ĠDynamic Animation . TRANSL ATION _ X ). set Spring ( spring Force ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġspring Animation Translation Y : ĠSpring Animation Ġby Ġlazy ( Lazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSpring Animation ( dynamic Feature , ĠDynamic Animation . TRANSL ATION _ Y ). set Spring ( spring Force ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspring Animation Translation X . add Update Listener Ġ{ Ġanimation , Ġvalue , Ġvelocity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠR 1 Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Image . get Hit Rect ( R 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠR 2 Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Feature . get Hit Rect ( R 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( R 1 . intersect ( R 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Hit ĠHit ĠHit ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation X . set Start Velocity ( velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation Y . set Start Velocity ( velocity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation X . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation Y . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring Animation Translation X . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring Animation Translation Y . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġspring Animation Translation Y . add Update Listener Ġ{ Ġanimation , Ġvalue , Ġvelocity Ġ-> ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspring Animation Translation X . add End Listener Ġ{ Ġanimation , Ġcanceled , Ġvalue , Ġvelocity Ġ-> ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġspring Animation Translation Y . add End Listener Ġ{ Ġanimation , Ġcanceled , Ġvalue , Ġvelocity Ġ-> ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġx Diff In Touch Point AndView Top Left Corner : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġy Diff In Touch Point AndView Top Left Corner : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġdynamic Feature . setOn Touch Listener Ġ{ Ġview , Ġmotion Event Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( motion Event ?. action ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Diff In Touch Point AndView Top Left Corner Ġ= Ġmotion Event . raw X Ġ- Ġview . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Diff In Touch Point AndView Top Left Corner Ġ= Ġmotion Event . raw Y Ġ- Ġview . y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring Animation Translation X . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring Animation Translation Y . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Feature . x Ġ= Ġmotion Event . raw X Ġ- Ġx Diff In Touch Point AndView Top Left Corner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Feature . y Ġ= Ġmotion Event . raw Y Ġ- Ġy Diff In Touch Point AndView Top Left Corner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring Animation Translation X . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring Animation Translation Y . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/ ******************************** **** Re bound **************************************** *****/ ĊĠĠĠĠĠĠĠ Ġval ĠT ENSION Ġ= Ġ 8 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġval ĠDA MP ER Ġ= Ġ 2 0 . 0 Ġ// f riction ĊĊĠĠĠĠĠĠĠ Ġval Ġspring System Ġ= ĠSpring System . create () ĊĠĠĠĠĠĠĠ Ġval Ġspring Ġ= Ġspring System . create Spring () ĊĊĠĠĠĠĠĠĠ Ġspring . addListener ( object Ġ: ĠSimple Spring Listener (/* spring */) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Spring Update ( spring : ĠSpring ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġspring !!. current Value . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ 1 f Ġ- Ġ( value Ġ* Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Image . scale X Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Image . scale Y Ġ= Ġscale ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// animation Image . y Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Spring End StateChange ( spring : ĠSpring ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Spring At Rest ( spring : ĠSpring ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Spring Activate ( spring : ĠSpring ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠR 1 Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Image . get Hit Rect ( R 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠR 2 Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Image . get Hit Rect ( R 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( R 1 . intersect ( R 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Hit ĠHit ĠHit ĠSpeed Ġ::: Ġ${ spring !!. velocity }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation X . set Start Velocity (/* spring !!. velocity */ 1 0 0 . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation Y . set Start Velocity (/* spring !!. velocity */ 1 0 0 . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation X . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing Animation Y . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġspring Config Ġ= ĠSpring Config ( T ENSION , ĠDA MP ER ) ĊĠĠĠĠĠĠĠ Ġspring . spring Config Ġ= Ġspring Config ĊĊĠĠĠĠĠĠĠ Ġanimation Image . setOn Touch Listener Ġ{ Ġview , Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( motion Event ?. action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring . end Value Ġ= Ġ( 0 . 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspring . end Value Ġ= Ġ( 0 . 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanimation Image . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġspring . end Value Ġ= Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠMove By Sensor :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġapp Update Manager . app Update Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġapp Update Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Update Info . update Availability () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠUpdate Availability . DE VELO PER _ TRIGGER ED _ UPDATE _ IN _ PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Manager . start Update Flow For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Update Type . IM MEDI ATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Physics Animation Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIN _ APP _ UPDATE _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Update Info . install Status () Ġ== ĠInstall Status . DOWN LOADED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Complete Confirmation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠSPL IT _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ C ANCE LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠSplit ĠDownloading ĠC anceled Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" *** ĠSplit ĠDown loaded ĠSuccessfully Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠIN _ APP _ UPDATE _ REQUEST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ C ANCE LED ) Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Complete Confirmation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Constraint Layout >( R . id . main View ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" An ĠUpdate Ġhas ĠJust ĠBe en ĠInstalled .", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsn ackbar . setAction (" Complete ĠIt !") Ġ{ Ġview Ġ-> Ġapp Update Manager . complete Update () Ġ} ĊĠĠĠĠĠĠĠ Ġsn ackbar . setAction TextColor ( getColor ( android . R . color . holo _ blue _ bright )) ĊĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠ Ġ} Ċ } Ċ