/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . google . android . apps . mu ze i Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Wall paper Colors Ċ import Ġandroid . app . Wall paper Manager Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroid . view . View Configuration Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . os . User Manager Compat Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . lifecycle . Default Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Lifecycle Registry Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . observe Ċ import Ġcom . google . android . apps . mu ze i . feature dart . Build Config . FEATURE D _ ART _ AUTH ORITY Ċ import Ġcom . google . android . apps . mu ze i . notifications . Notification Updater Ċ import Ġcom . google . android . apps . mu ze i . render . Image Loader Ċ import Ġcom . google . android . apps . mu ze i . render . Mu ze i Blur Renderer Ċ import Ġcom . google . android . apps . mu ze i . render . Real Render Controller Ċ import Ġcom . google . android . apps . mu ze i . render . Render Controller Ċ import Ġcom . google . android . apps . mu ze i . room . Artwork Ċ import Ġcom . google . android . apps . mu ze i . room . Mu ze i Database Ċ import Ġcom . google . android . apps . mu ze i . room . open Artwork Info Ċ import Ġcom . google . android . apps . mu ze i . settings . Effects Lock Screen Open LiveData Ċ import Ġcom . google . android . apps . mu ze i . settings . Prefs Ċ import Ġcom . google . android . apps . mu ze i . shortcuts . Artwork Info Shortcut Controller Ċ import Ġcom . google . android . apps . mu ze i . sources . Source Manager Ċ import Ġcom . google . android . apps . mu ze i . sync . Provider Manager Ċ import Ġcom . google . android . apps . mu ze i . util . coroutine Scope Ċ import Ġcom . google . android . apps . mu ze i . util . observe NonNull Ċ import Ġcom . google . android . apps . mu ze i . wall paper . Lock screen Observer Ċ import Ġcom . google . android . apps . mu ze i . wall paper . Wall paper Analytics Ċ import Ġcom . google . android . apps . mu ze i . we arable . W ear able Controller Ċ import Ġcom . google . android . apps . mu ze i . widget . Widget Updater Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġnet . rb gr n . android . gl wall papers ervice . GL Wall paper Service Ċ Ċ data Ġclass ĠWall paper Size ( val Ġwidth : ĠInt , Ġval Ġheight : ĠInt ) Ċ Ċ object ĠWall paper Size LiveData Ġ: ĠMutable LiveData < Wall paper Size >() Ċ Ċ class ĠMu ze i Wall paper Service Ġ: ĠGL Wall paper Service (), ĠLifecycle Owner Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEMP OR ARY _ FOCUS _ DURATION _ M ILL IS : ĠLong Ġ= Ġ 3 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTHREE _ F ING ER _ T AP _ INTERVAL _ MS Ġ= Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ ART WORK _ SIZE Ġ= Ġ 1 1 0 Ġ// Ġpx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġwall paper Lifecycle Ġ= ĠLifecycle Registry ( this ) ĊĠĠĠ Ġprivate Ġvar Ġunlock Receiver : ĠBroadcast Receiver ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Engine (): ĠEngine Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMu ze i Wall paper Engine () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" In lined Api ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġwall paper Lifecycle . add Observer ( Source Manager ( this )) ĊĠĠĠĠĠĠĠ Ġwall paper Lifecycle . add Observer ( Notification Updater ( this )) ĊĠĠĠĠĠĠĠ Ġwall paper Lifecycle . add Observer ( W ear able Controller ( this )) ĊĠĠĠĠĠĠĠ Ġwall paper Lifecycle . add Observer ( Widget Updater ( this )) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwall paper Lifecycle . add Observer ( Artwork Info Shortcut Controller ( this , Ġthis )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠProvider Manager . getInstance ( this ). observe ( this ) Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider Manager . select ( this @ Mu ze i Wall paper Service , ĠFEATURE D _ ART _ AUTH ORITY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( User Manager Compat . is User Unlock ed ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwall paper Lifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ START ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwall paper Lifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ START ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Receiver ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunlock Receiver Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter ( Intent . ACTION _ USER _ UNLOCK ED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Receiver ( unlock Receiver , Ġfilter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Lifecycle (): ĠLifecycle Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwall paper Lifecycle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( unlock Receiver Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Receiver ( unlock Receiver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwall paper Lifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠMu ze i Wall paper Engine ĊĠĠĠĠĠĠĠ Ġ: ĠGL Wall paper Service . GL Engine (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Lifecycle Observer , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender Controller . Callbacks , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMu ze i Blur Renderer . Callbacks , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Boolean ) Ġ-> ĠUnit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġrenderer : ĠMu ze i Blur Renderer ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġrender Controller : ĠRender Controller ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Artwork : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġvalid Double Tap : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlast Three F inger Tap Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġengine Lifecycle Ġ= ĠLifecycle Registry ( this ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdouble Tap Timeout : ĠJob ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgesture Listener Ġ= Ġobject Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Double Tap ( e : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Art Detail Open LiveData . value Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġmain Ġactivity Ġis Ġvisible , Ġso Ġdiscard Ġany Ġdouble Ġto uches Ġsince Ġfocus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshould Ġbe Ġforced Ġon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Double Tap Ġ= Ġtrue Ġ// Ġprocessed Ġin Ġon Command / COMMAND _ T AP ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Timeout ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimeout Ġ= ĠView Configuration . getDouble Tap Timeout (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Timeout Ġ= Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Double Tap Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgesture Detector : ĠGest ure Detector Ġ= ĠGest ure Detector ( this @ Mu ze i Wall paper Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Listener ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdelayed Blur : ĠJob ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( surface Holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper < GL Engine >. onCreate ( surface Holder ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer Ġ= ĠMu ze i Blur Renderer ( this @ Mu ze i Wall paper Service , Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , Ġis Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Controller Ġ= ĠReal Render Controller ( this @ Mu ze i Wall paper Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Lifecycle . add Observer ( render Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset EGL Context Client Version ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset EGL Config Chooser ( 8 , Ġ 8 , Ġ 8 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Renderer ( renderer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Mode Ġ= ĠR ENDER MODE _ WHEN _ DIR TY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Render () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Lifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ CREATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Lifecycle . add Observer ( Wall paper Analytics ( this @ Mu ze i Wall paper Service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Lifecycle . add Observer ( Lock screen Observer ( this @ Mu ze i Wall paper Service , Ġthis )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMu ze i Database . getInstance ( this @ Mu ze i Wall paper Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. art work Dao (). current Artwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe NonNull ( this ) Ġ{ Ġart work Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Current Artwork ( art work ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe ĠMu ze i Wall paper Service 's Ġlifecycle Ġto Ġwait Ġfor Ġthe Ġuser Ġto Ġunlock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwall paper Lifecycle . add Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Touch Events Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Offset Notifications Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEffect s Lock Screen Open LiveData . observe ( this ) Ġ{ Ġis Effects Lock Screen Open Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Controller . on Lock Screen Ġ= Ġis Effects Lock Screen Open ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArt Detail Open LiveData . observe ( this ) Ġ{ Ġis Art Detail Opened Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Delayed Blur () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Event Ġ{ Ġrenderer . setIs Bl urred (! is Art Detail Opened , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArt Detail Viewport . add Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Lifecycle (): ĠLifecycle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġengine Lifecycle ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠMu ze i Wall paper Service Ġonly Ġgets Ġto ĠON _ START Ġwhen Ġthe Ġuser Ġis Ġun locked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAt Ġthat Ġpoint , Ġwe Ġcan Ġproceed Ġwith Ġthe Ġengine 's Ġlifecycle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġpreview Ġmode , Ġwe Ġonly Ġmove Ġto ĠON _ START Ġto Ġavoid Ġanalytics Ġevents . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Lifecycle . handle Lifecycle Event ( if Ġ( is Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle . Event . ON _ START Ġelse ĠLifecycle . Event . ON _ RE SU ME ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O _ MR 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Current Artwork ( art work : ĠArt work ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Artwork Ġ= ĠImage Loader . decode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver , Ġart work . content Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ ART WORK _ SIZE Ġ/ Ġ 2 ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Colors Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O _ MR 1 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Compute Colors (): ĠWall paper Colors ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Artwork ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWall paper Colors . from Bitmap ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . on Compute Colors () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( holder : ĠSurface Holder , Ġformat : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Surface Changed ( holder , Ġformat , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWall paper Size LiveData . value Ġ= ĠWall paper Size ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Controller . reload Current Artwork () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArt Detail Viewport . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Lifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper < GL Engine >. on Destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( is From User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Render () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlock Screen Visible Changed ( is Lock Screen Visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Effects Lock Screen Open LiveData . value Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Controller . on Lock Screen Ġ= Ġis Lock Screen Visible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Visibility Changed ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Controller . visible Ġ= Ġvisible ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Offsets Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Offset : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Offset : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Offset Step : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Offset Step : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pixel Offset : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pixel Offset : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Offsets Changed ( x Offset , Ġy Offset , Ġx Offset Step , Ġy Offset Step , Ġx Pixel Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pixel Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . set Normal Offset X ( x Offset ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextras : ĠBundle ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Requested : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠBundle ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvalid Double Tap Ġpreviously Ġset Ġin Ġthe Ġgesture Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Wall paper Manager . COMMAND _ T AP Ġ== Ġaction Ġ&& Ġvalid Double Tap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠP refs . get SharedPreferences ( this @ Mu ze i Wall paper Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdouble Tap Value Ġ= Ġprefs . getString ( Prefs . PRE F _ DOUBLE _ T AP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) Ġ?: ĠP refs . PRE F _ T AP _ ACTION _ TEMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Tap Action ( double Tap Value , Ġ" gesture _ double _ tap ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġthe Ġflag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Double Tap Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Command ( action , Ġx , Ġy , Ġz , Ġextras , Ġresult Requested ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtrigger Tap Action ( action : ĠString , Ġtype : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP refs . PRE F _ T AP _ ACTION _ TEMP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( this @ Mu ze i Wall paper Service ). log Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" temp _ disable _ effects ", Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . Param . CONTENT _ TYPE Ġto Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTemp or arily Ġtoggle Ġfocused / bl urred ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . setIs Bl urred (! renderer . is Bl urred , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSchedule Ġa Ġre - blur ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelayed Blur () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP refs . PRE F _ T AP _ ACTION _ NEXT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( this @ Mu ze i Wall paper Service ). log Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" next _ art work ", Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . Param . CONTENT _ TYPE Ġto Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSource Manager . next Artwork ( this @ Mu ze i Wall paper Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP refs . PRE F _ T AP _ ACTION _ VIEW _ DETAILS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġart work Ġ= ĠMu ze i Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInstance ( this @ Mu ze i Wall paper Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. art work Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getCurrent Artwork () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġart work ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( this @ Mu ze i Wall paper Service ). log Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" art work _ info _ open ", Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . Param . CONTENT _ TYPE Ġto Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Artwork Info ( this @ Mu ze i Wall paper Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Detector . on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelay Ġblur Ġfrom Ġtemporary Ġref ocus Ġwhile Ġtouch ing Ġthe Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelayed Blur () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSee Ġif Ġthere Ġwas Ġa Ġvalid Ġthree Ġfinger Ġtap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Since Last Three F inger Tap Ġ= Ġnow Ġ- Ġlast Three F inger Tap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . pointer Count Ġ== Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtime Since Last Three F inger Tap Ġ> ĠTHREE _ F ING ER _ T AP _ INTERVAL _ MS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Three F inger Tap Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠP refs . get SharedPreferences ( this @ Mu ze i Wall paper Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthree F inger Tap Value Ġ= Ġprefs . getString ( Prefs . PRE F _ TH REE _ F ING ER _ T AP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) Ġ?: ĠP refs . PRE F _ T AP _ ACTION _ NONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Tap Action ( three F inger Tap Value , Ġ" gesture _ three _ f inger ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcancel Delayed Blur () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelayed Blur ?. cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdelayed Blur () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Art Detail Open LiveData . value Ġ== Ġtrue Ġ|| Ġrenderer . is Bl urred ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Delayed Blur () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelayed Blur Ġ= Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( TEMP OR ARY _ FOCUS _ DURATION _ M ILL IS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . setIs Bl urred ( true , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrequest Render () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( render Controller . visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . request Render () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġqueue Event On Gl Thread ( event : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ