/* ĠCopyright Ġ 2 0 2 0 ĠRed warp Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠG if Wall paper ĠContributors Ċ Ġ* Ċ Ġ* Ġ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 Ġnet . red warp . gif wall paper Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . graphics . drawable . Drawable Compat Ċ import Ġandroidx . core . view . Gesture Detector Compat Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġdev . sas ikan th . color sheet . Color Sheet Ċ import Ġnet . red warp . gif wall paper . data . Color Scheme Ċ import Ġnet . red warp . gif wall paper . data . Model Ċ import Ġnet . red warp . gif wall paper . data . Wall paper Status Ċ import Ġnet . red warp . gif wall paper . databinding . Fragment Setup Binding Ċ import Ġnet . red warp . gif wall paper . renderer . Drawable Mapper Ċ import Ġnet . red warp . gif wall paper . renderer . Rotation Ċ import Ġnet . red warp . gif wall paper . renderer . Scale Type Ċ import Ġnet . red warp . gif wall paper . renderer . Surface Drawable Renderer Ċ import Ġnet . red warp . gif wall paper . util . is Dark Ċ import Ġnet . red warp . gif wall paper . util . theme Color Ċ Ċ const Ġval ĠP ICK _ G IF _ FILE Ġ= Ġ 2 Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass Ġas Ġthe Ġsecond Ġdestination Ġin Ġthe Ġnavigation . Ċ Ġ*/ Ċ @ Keep Ċ class ĠSetup Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Scale Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurrent Rotation Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodel : ĠModel ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Setup Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġvar Ġcolor Info : ĠColor Scheme ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . change Color Button . isEnabled Ġ= Ġvalue Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcurrent Color : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdetector : ĠGest ure Detector Compat ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Setup Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . open Gif Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpick Document () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . change Scale Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Scale () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . change Color Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Color () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . rotate Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Container . setOn Apply Window Insets Listener Ġ{ Ġ_, Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Container . update Padding ( bottom Ġ= Ġin sets . system Window Inset Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrenderer Ġ= ĠSurface Drawable Renderer ( binding . surface View . holder , ĠL ooper . get Main Looper ()) ĊĊĠĠĠĠĠĠĠ Ġmodel Ġ= ĠModel . get ( require Context ()) ĊĠĠĠĠĠĠĠ ĠDrawable Mapper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ= Ġmodel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimated Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun setText Ġ= ĠgetString ( R . string . click _ the _ open _ gif _ button ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Service Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ). observe ( view Lifecycle Owner ) Ġ{ Ġdrawable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmodel . color Info Data . observe ( view Lifecycle Owner ) Ġ{ Ġcolor Status Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Info Ġ= Ġcolor Status Ġas ? ĠColor Scheme ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . change Color Button . isEnabled Ġ= Ġcolor Status Ġis ĠColor Scheme ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmodel . backgroundColor Data . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Color Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Theme ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmodel . scale Type Data . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Scale Ġ= Ġit . ordinal ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmodel . rotation Data . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Rotation Ġ= Ġit . ordinal ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmodel . wall paper Status . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Wall paper Set Ġ= Ġit Ġis ĠWall paper Status . Wall paper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . change Scale Button . isEnabled Ġ= Ġis Wall paper Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . rotate Button . isEnabled Ġ= Ġis Wall paper Set ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdetector Ġ= ĠGest ure Detector Compat ( require Context (), ĠMy Gesture Listener ()) ĊĠĠĠĠĠĠĠ Ġbinding . touch Area . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠView Compat . setOn Apply Window Insets Listener ( binding . surface View ) Ġ{ Ġ_, Ġinset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( binding . touch Area . layout Params Ġas ? ĠFrame Layout . LayoutParams )?. set Margins ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset . system Gesture Insets . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset . system Gesture Insets . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset . system Gesture Insets . right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset . system Gesture Insets . bottom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinset ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠP ICK _ G IF _ FILE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. data ?. also Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . load New Gif ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . reset Translate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . extras , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . clear _ gif Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . clear Gif () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Text Activity . get Intent ( require Context (), Ġ" about . md ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . privacy Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Text Activity . get Intent ( require Context (), Ġ" privacy . md ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust Theme ( backgroundColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset StatusBar Color ( backgroundColor . is Dark ()) ĊĠĠĠĠĠĠĠ Ġval Ġoverflow Color Ġ= Ġif Ġ( backgroundColor . is Dark ()) ĠColor . WHITE Ġelse ĠColor . BLACK ĊĊĠĠĠĠĠĠĠ Ġval Ġtoolbar : ĠToolbar ? Ġ= Ġ( view ?. parent Ġas ? ĠViewGroup )?. findViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġtoolbar ?. overflow Icon ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDrawable Compat . wrap ( it ). also Ġ{ Ġwrapped Ġ-> Ġwrapped . set Tint ( overflow Color ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtoolbar ?. overflow Icon Ġ= Ġicon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset StatusBar Color ( is Dark : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. window ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dark ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġand ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR . inv () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Bar Color Ġ= Ġcontext . theme Color ( R . attr . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpick Document () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" image / gif " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠP ICK _ G IF _ FILE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Scale () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Scale Ġ= Ġ( current Scale Ġ+ Ġ 1 ) Ġ% ĠScale Type . values (). size ĊĠĠĠĠĠĠĠ Ġmodel . set Scale Type ( Scale Type . values ()[ current Scale ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Info ?. let Ġ{ Ġcolor Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Info . palette . targets . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Info . palette . getColor For Target ( it , ĠColor . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. distinct (). to IntArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Sheet (). color Picker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors , Ġcurrent Color , Ġno Color Option Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠColor Sheet . NO _ COLOR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Color Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . set BackgroundColor ( color Info . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Color Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . set BackgroundColor ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. corner Radius ( 0 ). show ( parent FragmentManager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrotate () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Rotation Ġ= Ġ( current Rotation Ġ+ Ġ 1 ) Ġ% ĠRotation . values (). size ĊĠĠĠĠĠĠĠ Ġmodel . setRotation ( Rotation . values ()[ current Rotation ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠMy Gesture Listener Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe 2 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance X : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . post Translate (- distance X , Ġ- distance Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Double Tap ( e : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . reset Translate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ