WallpaperService.java revision 03850591954faf5280fd581dd04cd6958eda0124
161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala/* 261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Copyright (C) 2009 The Android Open Source Project 361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * you may not use this file except in compliance with the License. 661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * You may obtain a copy of the License at 761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 1061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * See the License for the specific language governing permissions and 1461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * limitations under the License. 1561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */ 1661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalapackage android.service.wallpaper; 18a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 1961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.content.res.TypedArray; 20a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvalaimport android.graphics.Canvas; 21f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaimport android.view.WindowInsets; 22a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 2361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport com.android.internal.R; 2461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport com.android.internal.os.HandlerCaller; 2561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport com.android.internal.util.ScreenShapeHelper; 2661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport com.android.internal.view.BaseIWindow; 2778822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvalaimport com.android.internal.view.BaseSurfaceHolder; 2861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaimport android.annotation.SdkConstant; 30f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaimport android.annotation.SdkConstant.SdkConstantType; 3161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.app.Service; 3261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.app.WallpaperManager; 3361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.content.Context; 3461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.content.Intent; 3561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.content.res.Configuration; 3661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.graphics.PixelFormat; 3761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.graphics.Rect; 3861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.hardware.display.DisplayManager; 3961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.hardware.display.DisplayManager.DisplayListener; 4061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.os.Bundle; 4161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.os.IBinder; 4261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.os.Looper; 4361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.os.Message; 4461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.os.RemoteException; 4561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.util.Log; 4661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.Display; 4761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.Gravity; 4861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.IWindowSession; 4961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.InputChannel; 5061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.InputDevice; 5161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.InputEvent; 5261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.InputEventReceiver; 5361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaimport android.view.MotionEvent; 54f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaimport android.view.SurfaceHolder; 558ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvalaimport android.view.View; 56d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalaimport android.view.ViewGroup; 57228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvalaimport android.view.WindowManager; 58228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvalaimport android.view.WindowManagerGlobal; 59d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 609cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvalaimport java.io.FileDescriptor; 61983cf231ab2d176a14595cdae46ff1b0c239af47James Dongimport java.io.PrintWriter; 62f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaimport java.util.ArrayList; 63a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 64c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala/** 6561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * A wallpaper service is responsible for showing a live wallpaper behind 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * applications that would like to sit on top of it. This service object 67228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala * itself does very little -- its only purpose is to generate instances of 68228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala * {@link Engine} as needed. Implementing a wallpaper thus 69228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala * involves subclassing from this, subclassing an Engine implementation, 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * and implementing {@link #onCreateEngine()} to return a new instance of 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * your engine. 723a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala */ 733a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvalapublic abstract class WallpaperService extends Service { 743a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala /** 753a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * The {@link Intent} that must be declared as handled by the service. 763a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * To be supported, the service must also require the 773a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * {@link android.Manifest.permission#BIND_WALLPAPER} permission so 783a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * that other applications can not abuse it. 793a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala */ 803a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala @SdkConstant(SdkConstantType.SERVICE_ACTION) 81f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala public static final String SERVICE_INTERFACE = 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "android.service.wallpaper.WallpaperService"; 83a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 84c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala /** 85f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * Name under which a WallpaperService component publishes information 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * about itself. This meta-data must reference an XML resource containing 87c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala * a <code><{@link android.R.styleable#Wallpaper wallpaper}></code> 88c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala * tag. 89c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala */ 90c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala public static final String SERVICE_META_DATA = "android.service.wallpaper"; 91c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala 92f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala static final String TAG = "WallpaperService"; 93f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala static final boolean DEBUG = false; 94f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 95f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int DO_ATTACH = 10; 96f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int DO_DETACH = 20; 97f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int DO_SET_DESIRED_SIZE = 30; 98f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int DO_SET_DISPLAY_PADDING = 40; 99174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala 100174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala private static final int MSG_UPDATE_SURFACE = 10000; 1018ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala private static final int MSG_VISIBILITY_CHANGED = 10010; 102f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int MSG_WALLPAPER_OFFSETS = 10020; 103f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int MSG_WALLPAPER_COMMAND = 10025; 104f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int MSG_WINDOW_RESIZED = 10030; 105f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int MSG_WINDOW_MOVED = 10035; 106f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala private static final int MSG_TOUCH_EVENT = 10040; 107f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala private final ArrayList<Engine> mActiveEngines 109f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala = new ArrayList<Engine>(); 110836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala 111f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala static final class WallpaperCommand { 112f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String action; 113836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala int x; 114f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int y; 115f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int z; 116f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala Bundle extras; 11761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala boolean sync; 11861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 11961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 120a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala /** 121c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala * The actual implementation of a wallpaper. A wallpaper service may 1224ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala * have multiple instances running (for example as a real wallpaper 123f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * and as a preview), each of which is represented by its own Engine 124f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * instance. You must implement {@link WallpaperService#onCreateEngine()} 1253a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * to return your concrete Engine implementation. 1263a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala */ 127f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala public class Engine { 128c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala IWallpaperEngineWrapper mIWallpaperEngine; 129c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala 130c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala // Copies from mIWallpaperEngine. 13161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala HandlerCaller mCaller; 13261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala IWallpaperConnection mConnection; 13361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala IBinder mWindowToken; 134611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala 1353297daae9681004775012faba9181d65e097e00cEino-Ville Talvala boolean mInitializing = true; 136611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala boolean mVisible; 137611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala boolean mReportedVisible; 138611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala boolean mDestroyed; 1397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // Current window state. 1417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala boolean mCreated; 142836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala boolean mSurfaceCreated; 143836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala boolean mIsCreating; 144228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala boolean mDrawingAllowed; 1457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala boolean mOffsetsChanged; 1464ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala boolean mFixedSizeAllowed; 1477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala int mWidth; 148836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala int mHeight; 1497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala int mFormat; 150836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala int mType; 1517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala int mCurWidth; 152836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala int mCurHeight; 15311b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala int mWindowFlags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; 154836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala int mWindowPrivateFlags = 1557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS; 156836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala int mCurWindowFlags = mWindowFlags; 1577f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala int mCurWindowPrivateFlags = mWindowPrivateFlags; 158836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mVisibleInsets = new Rect(); 1597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final Rect mWinFrame = new Rect(); 160836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mOverscanInsets = new Rect(); 161836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mContentInsets = new Rect(); 1627f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final Rect mStableInsets = new Rect(); 163836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mOutsets = new Rect(); 164836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mDispatchedOverscanInsets = new Rect(); 1657f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final Rect mDispatchedContentInsets = new Rect(); 166836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mDispatchedStableInsets = new Rect(); 167836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mDispatchedOutsets = new Rect(); 1687f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final Rect mFinalSystemInsets = new Rect(); 169836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final Rect mFinalStableInsets = new Rect(); 1707f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final Configuration mConfiguration = new Configuration(); 171836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala 1727f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala private boolean mWindowIsRound; 1737f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1747f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final WindowManager.LayoutParams mLayout 175836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala = new WindowManager.LayoutParams(); 1767f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala IWindowSession mSession; 1777f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala InputChannel mInputChannel; 1787f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1797f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final Object mLock = new Object(); 1807f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala boolean mOffsetMessageEnqueued; 1817f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala float mPendingXOffset; 1827f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala float mPendingYOffset; 1837f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala float mPendingXOffsetStep; 1847f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala float mPendingYOffsetStep; 1857f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala boolean mPendingSync; 1867f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala MotionEvent mPendingMove; 1877f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 188836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala DisplayManager mDisplayManager; 1897f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala Display mDisplay; 1907f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala private int mDisplayState; 1917f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1927f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final BaseSurfaceHolder mSurfaceHolder = new BaseSurfaceHolder() { 1937f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala { 1947f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mRequestedFormat = PixelFormat.RGBX_8888; 1957f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1967f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1977f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 1987f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public boolean onAllowLockCanvas() { 1997f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala return mDrawingAllowed; 2007f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2017f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 202836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala @Override 2037f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void onRelayoutContainer() { 2047f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala Message msg = mCaller.obtainMessage(MSG_UPDATE_SURFACE); 2057f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mCaller.sendMessage(msg); 2067f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2077f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2087f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 2097f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void onUpdateSurface() { 2107f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala Message msg = mCaller.obtainMessage(MSG_UPDATE_SURFACE); 211836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala mCaller.sendMessage(msg); 2127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2147f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public boolean isCreating() { 2157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala return mIsCreating; 2167f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 2197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void setFixedSize(int width, int height) { 2207f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala if (!mFixedSizeAllowed) { 2217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // Regular apps can't do this. It can only work for 2227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // certain designs of window animations, so you can't 2237f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // rely on it. 2247f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala throw new UnsupportedOperationException( 2257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala "Wallpapers currently only support sizing from layout"); 2267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala super.setFixedSize(width, height); 2287f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void setKeepScreenOn(boolean screenOn) { 2317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala throw new UnsupportedOperationException( 2327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala "Wallpapers do not support keep screen on"); 233836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 2347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 2367f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public Canvas lockCanvas() { 2377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala if (mDisplayState == Display.STATE_DOZE 2387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala || mDisplayState == Display.STATE_DOZE_SUSPEND) { 2397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala try { 2407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mSession.pokeDrawLock(mWindow); 2417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } catch (RemoteException e) { 2427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // System server died, can be ignored. 2437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 244836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 2457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala return super.lockCanvas(); 2467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala }; 2487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala final class WallpaperInputEventReceiver extends InputEventReceiver { 2507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public WallpaperInputEventReceiver(InputChannel inputChannel, Looper looper) { 2517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala super(inputChannel, looper); 2527f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2537f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2547f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 2557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void onInputEvent(InputEvent event) { 2567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala boolean handled = false; 257836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala try { 2587f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala if (event instanceof MotionEvent 259836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala && (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) { 260836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala MotionEvent dup = MotionEvent.obtainNoHistory((MotionEvent)event); 261836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala dispatchPointer(dup); 262836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala handled = true; 263836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 2647f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } finally { 2657f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala finishInputEvent(event, handled); 2667f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 267836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 2687f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2697f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala WallpaperInputEventReceiver mInputEventReceiver; 270836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala 271836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala final BaseIWindow mWindow = new BaseIWindow() { 2727f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 2737f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, 274836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, 2757f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala Configuration newConfig) { 276836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala Message msg = mCaller.obtainMessageIO(MSG_WINDOW_RESIZED, 277836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala reportDraw ? 1 : 0, outsets); 278836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala mCaller.sendMessage(msg); 279836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 280836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala 2817f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala @Override 2827f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala public void moved(int newX, int newY) { 283836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala Message msg = mCaller.obtainMessageII(MSG_WINDOW_MOVED, newX, newY); 284836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala mCaller.sendMessage(msg); 285836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 2867f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2873297daae9681004775012faba9181d65e097e00cEino-Ville Talvala @Override 288836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala public void dispatchAppVisibility(boolean visible) { 2897f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // We don't do this in preview mode; we'll let the preview 2903297daae9681004775012faba9181d65e097e00cEino-Ville Talvala // activity tell us when to run. 291836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala if (!mIWallpaperEngine.mIsPreview) { 2927f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala Message msg = mCaller.obtainMessageI(MSG_VISIBILITY_CHANGED, 2933297daae9681004775012faba9181d65e097e00cEino-Ville Talvala visible ? 1 : 0); 2943297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mCaller.sendMessage(msg); 2953297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 296836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala } 2973297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2983297daae9681004775012faba9181d65e097e00cEino-Ville Talvala @Override 299cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala public void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, 3003297daae9681004775012faba9181d65e097e00cEino-Ville Talvala boolean sync) { 3013297daae9681004775012faba9181d65e097e00cEino-Ville Talvala synchronized (mLock) { 302cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Dispatch wallpaper offsets: " + x + ", " + y); 3033297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mPendingXOffset = x; 3043297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mPendingYOffset = y; 3053297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mPendingXOffsetStep = xStep; 3063297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mPendingYOffsetStep = yStep; 3073297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (sync) { 308cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mPendingSync = true; 3093297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 3103297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (!mOffsetMessageEnqueued) { 311cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mOffsetMessageEnqueued = true; 3123297daae9681004775012faba9181d65e097e00cEino-Ville Talvala Message msg = mCaller.obtainMessage(MSG_WALLPAPER_OFFSETS); 3133297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mCaller.sendMessage(msg); 3143297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 3153297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 3163297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 317cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 318428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala @Override 319428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala public void dispatchWallpaperCommand(String action, int x, int y, 320cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala int z, Bundle extras, boolean sync) { 321428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala synchronized (mLock) { 322428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Dispatch wallpaper command: " + x + ", " + y); 323428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala WallpaperCommand cmd = new WallpaperCommand(); 324428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala cmd.action = action; 325428b77a2b94b74665a47375b3fdb893b98d71269Eino-Ville Talvala cmd.x = x; 326c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala cmd.y = y; 327c8474b68e435cd840ba66791fb09e3da59f1d93cEino-Ville Talvala cmd.z = z; 3283297daae9681004775012faba9181d65e097e00cEino-Ville Talvala cmd.extras = extras; 329611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala cmd.sync = sync; 3307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala Message msg = mCaller.obtainMessage(MSG_WALLPAPER_COMMAND); 3313297daae9681004775012faba9181d65e097e00cEino-Ville Talvala msg.obj = cmd; 3323297daae9681004775012faba9181d65e097e00cEino-Ville Talvala mCaller.sendMessage(msg); 3333297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 3343297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 3353297daae9681004775012faba9181d65e097e00cEino-Ville Talvala }; 3363297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 3377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala /** 3387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala * Provides access to the surface in which this wallpaper is drawn. 339611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala */ 34061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala public SurfaceHolder getSurfaceHolder() { 34161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return mSurfaceHolder; 3424ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 3434ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala 3444ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala /** 3453a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * Convenience for {@link WallpaperManager#getDesiredMinimumWidth() 3464ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala * WallpaperManager.getDesiredMinimumWidth()}, returning the width 3474ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala * that the system would like this wallpaper to run in. 3484ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala */ 3494ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala public int getDesiredMinimumWidth() { 3504ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return mIWallpaperEngine.mReqWidth; 3514ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 3524ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala 3534ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala /** 3544ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala * Convenience for {@link WallpaperManager#getDesiredMinimumHeight() 3554ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala * WallpaperManager.getDesiredMinimumHeight()}, returning the height 3564ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala * that the system would like this wallpaper to run in. 3574ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala */ 3584ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala public int getDesiredMinimumHeight() { 35961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return mIWallpaperEngine.mReqHeight; 36061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 36161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 362a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala /** 3639e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala * Return whether the wallpaper is currently visible to the user, 364ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala * this is the last value supplied to 3653a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * {@link #onVisibilityChanged(boolean)}. 3663a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala */ 367ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala public boolean isVisible() { 368f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return mReportedVisible; 369f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 37036cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala 3716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala /** 372d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala * Returns true if this engine is running in preview mode -- that is, 3736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * it is being shown to the user before they select it as the actual 374d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala * wallpaper. 375d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala */ 376d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public boolean isPreview() { 377d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return mIWallpaperEngine.mIsPreview; 378d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 379d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 3806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala /** 381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala * Control whether this wallpaper will receive raw touch events 382898a9a9b867e5d209671feee4c92266f90a55aa3Eino-Ville Talvala * from the window manager as the user interacts with the window 383898a9a9b867e5d209671feee4c92266f90a55aa3Eino-Ville Talvala * that is currently displaying the wallpaper. By default they 384898a9a9b867e5d209671feee4c92266f90a55aa3Eino-Ville Talvala * are turned off. If enabled, the events will be received in 385898a9a9b867e5d209671feee4c92266f90a55aa3Eino-Ville Talvala * {@link #onTouchEvent(MotionEvent)}. 386898a9a9b867e5d209671feee4c92266f90a55aa3Eino-Ville Talvala */ 387228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala public void setTouchEventsEnabled(boolean enabled) { 388228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mWindowFlags = enabled 389228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala ? (mWindowFlags&~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) 390228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala : (mWindowFlags|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 391228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (mCreated) { 3923a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala updateSurface(false, false, false); 393228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 394228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 3953a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala 3968ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala /** 3978ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala * Control whether this wallpaper will receive notifications when the wallpaper 3988ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala * has been scrolled. By default, wallpapers will receive notifications, although 3998ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala * the default static image wallpapers do not. It is a performance optimization to 4008ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala * set this to false. 40161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 40261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * @param enabled whether the wallpaper wants to receive offset notifications 40361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */ 40461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala public void setOffsetNotificationsEnabled(boolean enabled) { 405a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala mWindowPrivateFlags = enabled 4069e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala ? (mWindowPrivateFlags | 407ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS) 408ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala : (mWindowPrivateFlags & 4099cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala ~WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS); 4109cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (mCreated) { 4119cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala updateSurface(false, false, false); 4129cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 4139cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 4149cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 4159cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** {@hide} */ 4169cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void setFixedSizeAllowed(boolean allowed) { 4178ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala mFixedSizeAllowed = allowed; 4188ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala } 4199cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 4209cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** 421228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala * Called once to initialize the engine. After returning, the 422228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala * engine's surface will be created by the framework. 423228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala */ 4249cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void onCreate(SurfaceHolder surfaceHolder) { 42561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 42661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 42761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala /** 428a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala * Called right before the engine is going away. After this the 4299e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala * surface will be destroyed and this Engine object is no longer 430ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala * valid. 4319cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala */ 4329cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void onDestroy() { 433ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala } 4349cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 4359cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** 4369cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * Called to inform you of the wallpaper becoming visible or 4379cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * hidden. <em>It is very important that a wallpaper only use 4389cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * CPU while it is visible.</em>. 4399cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala */ 4409cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void onVisibilityChanged(boolean visible) { 4419cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 4429cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 4439cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** 4449cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * Called with the current insets that are in effect for the wallpaper. 4459cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * This gives you the part of the overall wallpaper surface that will 44661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * generally be visible to the user (ignoring position offsets applied to it). 44761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 44861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * @param insets Insets to apply. 449a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala */ 4509e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala public void onApplyWindowInsets(WindowInsets insets) { 451ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala } 4529cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 4539cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** 454ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala * Called as the user performs touch-screen interaction with the 4559cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * window that is currently showing this wallpaper. Note that the 4569cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * events you receive here are driven by the actual application the 4579cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * user is interacting with, so if it is slow you will get fewer 4588ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala * move events. 4598ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala */ 4609cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void onTouchEvent(MotionEvent event) { 4619cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 4629cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 4639cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** 4649cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * Called to inform you of the wallpaper's offsets changing 4659cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * within its contain, corresponding to the container's 4669cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * call to {@link WallpaperManager#setWallpaperOffsets(IBinder, float, float) 4679cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * WallpaperManager.setWallpaperOffsets()}. 46861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */ 46961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala public void onOffsetsChanged(float xOffset, float yOffset, 4706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala float xOffsetStep, float yOffsetStep, 4716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala int xPixelOffset, int yPixelOffset) { 472a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala } 4739e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala 474ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala /** 4753a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * Process a command that was sent to the wallpaper with 4763a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * {@link WallpaperManager#sendWallpaperCommand}. 477ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala * The default implementation does nothing, and always returns null 4786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * as the result. 4796db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * 4806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * @param action The name of the command to perform. This tells you 4816db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * what to do and how to interpret the rest of the arguments. 4826db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * @param x Generic integer parameter. 4836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * @param y Generic integer parameter. 4846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * @param z Generic integer parameter. 48536cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala * @param extras Any additional parameters. 48661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * @param resultRequested If true, the caller is requesting that 48761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * a result, appropriate for the command, be returned back. 4886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * @return If returning a result, create a Bundle and place the 4896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * result data in to it. Otherwise return null. 490a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala */ 4919e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala public Bundle onCommand(String action, int x, int y, int z, 492ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Bundle extras, boolean resultRequested) { 4933a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala return null; 4943a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 495ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 4966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala /** 4976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * Called when an application has changed the desired virtual size of 4986db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * the wallpaper. 4996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala */ 5006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala public void onDesiredSizeChanged(int desiredWidth, int desiredHeight) { 5016db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 50236cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala 5036db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala /** 5046db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala * Convenience for {@link SurfaceHolder.Callback#surfaceChanged 50536cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala * SurfaceHolder.Callback.surfaceChanged()}. 506be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala */ 507a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { 5086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 5096db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 5106db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala /** 5119e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala * Convenience for {@link SurfaceHolder.Callback2#surfaceRedrawNeeded 5129e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala * SurfaceHolder.Callback.surfaceRedrawNeeded()}. 5136db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala */ 5146db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala public void onSurfaceRedrawNeeded(SurfaceHolder holder) { 5156db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 516228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 517228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala /** 5183a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala * Convenience for {@link SurfaceHolder.Callback#surfaceCreated 5199cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * SurfaceHolder.Callback.surfaceCreated()}. 5209cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala */ 5219cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void onSurfaceCreated(SurfaceHolder holder) { 5229cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 523228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 5249cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala /** 5259cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * Convenience for {@link SurfaceHolder.Callback#surfaceDestroyed 5269cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala * SurfaceHolder.Callback.surfaceDestroyed()}. 5279cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala */ 5289cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala public void onSurfaceDestroyed(SurfaceHolder holder) { 5299cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 5309cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 5319cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala protected void dump(String prefix, FileDescriptor fd, PrintWriter out, String[] args) { 5329cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala out.print(prefix); out.print("mInitializing="); out.print(mInitializing); 533cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala out.print(" mDestroyed="); out.println(mDestroyed); 534228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala out.print(prefix); out.print("mVisible="); out.print(mVisible); 5359cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala out.print(" mReportedVisible="); out.println(mReportedVisible); 5369cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala out.print(prefix); out.print("mDisplay="); out.println(mDisplay); 5379cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala out.print(prefix); out.print("mCreated="); out.print(mCreated); 538d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala out.print(" mSurfaceCreated="); out.print(mSurfaceCreated); 539be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(" mIsCreating="); out.print(mIsCreating); 540be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(" mDrawingAllowed="); out.println(mDrawingAllowed); 541be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(prefix); out.print("mWidth="); out.print(mWidth); 542be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(" mCurWidth="); out.print(mCurWidth); 543be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(" mHeight="); out.print(mHeight); 544be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(" mCurHeight="); out.println(mCurHeight); 5456db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(prefix); out.print("mType="); out.print(mType); 5466db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(" mWindowFlags="); out.print(mWindowFlags); 547be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(" mCurWindowFlags="); out.println(mCurWindowFlags); 548be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(prefix); out.print("mWindowPrivateFlags="); out.print(mWindowPrivateFlags); 5496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(" mCurWindowPrivateFlags="); out.println(mCurWindowPrivateFlags); 5506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(prefix); out.print("mVisibleInsets="); 551be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(mVisibleInsets.toShortString()); 5526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(" mWinFrame="); out.print(mWinFrame.toShortString()); 5536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(" mContentInsets="); out.println(mContentInsets.toShortString()); 554bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala out.print(prefix); out.print("mConfiguration="); out.println(mConfiguration); 555be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala out.print(prefix); out.print("mLayout="); out.println(mLayout); 556bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala synchronized (mLock) { 557228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala out.print(prefix); out.print("mPendingXOffset="); out.print(mPendingXOffset); 558228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala out.print(" mPendingXOffset="); out.println(mPendingXOffset); 5596db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(prefix); out.print("mPendingXOffsetStep="); 5606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(mPendingXOffsetStep); 5616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala out.print(" mPendingXOffsetStep="); out.println(mPendingXOffsetStep); 56261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala out.print(prefix); out.print("mOffsetMessageEnqueued="); 56361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala out.print(mOffsetMessageEnqueued); 56461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala out.print(" mPendingSync="); out.println(mPendingSync); 565a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala if (mPendingMove != null) { 566228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala out.print(prefix); out.print("mPendingMove="); out.println(mPendingMove); 567ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala } 5683a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 569228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 570228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 571228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala private void dispatchPointer(MotionEvent event) { 572228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (event.isTouchEvent()) { 573228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala synchronized (mLock) { 574228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (event.getAction() == MotionEvent.ACTION_MOVE) { 575228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mPendingMove = event; 576228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } else { 577228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mPendingMove = null; 578228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 579228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 580228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala Message msg = mCaller.obtainMessageO(MSG_TOUCH_EVENT, event); 581228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mCaller.sendMessage(msg); 582228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } else { 583228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala event.recycle(); 584228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 585228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 586228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 587228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala void updateSurface(boolean forceRelayout, boolean forceReport, boolean redrawNeeded) { 588228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (mDestroyed) { 589228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala Log.w(TAG, "Ignoring updateSurface: destroyed"); 590228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 591228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 592228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala boolean fixedSize = false; 593228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala int myWidth = mSurfaceHolder.getRequestedWidth(); 594228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (myWidth <= 0) myWidth = ViewGroup.LayoutParams.MATCH_PARENT; 595228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala else fixedSize = true; 596228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala int myHeight = mSurfaceHolder.getRequestedHeight(); 597228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (myHeight <= 0) myHeight = ViewGroup.LayoutParams.MATCH_PARENT; 598228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala else fixedSize = true; 599228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 60061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala final boolean creating = !mCreated; 60161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala final boolean surfaceCreating = !mSurfaceCreated; 60261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala final boolean formatChanged = mFormat != mSurfaceHolder.getRequestedFormat(); 603a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala boolean sizeChanged = mWidth != myWidth || mHeight != myHeight; 6049e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala boolean insetsChanged = !mCreated; 605ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala final boolean typeChanged = mType != mSurfaceHolder.getRequestedType(); 6063a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala final boolean flagsChanged = mCurWindowFlags != mWindowFlags || 6073a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala mCurWindowPrivateFlags != mWindowPrivateFlags; 608228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (forceRelayout || creating || surfaceCreating || formatChanged || sizeChanged 609228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala || typeChanged || flagsChanged || redrawNeeded 610d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala || !mIWallpaperEngine.mShownReported) { 611ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 612228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Changes: creating=" + creating 613d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala + " format=" + formatChanged + " size=" + sizeChanged); 6146db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 615228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala try { 6164ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala mWidth = myWidth; 617228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mHeight = myHeight; 6184ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala mFormat = mSurfaceHolder.getRequestedFormat(); 6194ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala mType = mSurfaceHolder.getRequestedType(); 6206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 621be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.x = 0; 622228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mLayout.y = 0; 6236db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mLayout.width = myWidth; 6246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mLayout.height = myHeight; 625228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 6269cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mLayout.format = mFormat; 627228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 628be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mCurWindowFlags = mWindowFlags; 629be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.flags = mWindowFlags 630be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 631be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 6326db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 633228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala ; 634228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mCurWindowPrivateFlags = mWindowPrivateFlags; 635228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mLayout.privateFlags = mWindowPrivateFlags; 636228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 637228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mLayout.memoryType = mType; 638228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mLayout.token = mWindowToken; 639228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 640228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (!mCreated) { 641228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // Retrieve watch round info 642228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala TypedArray windowStyle = obtainStyledAttributes( 6436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala com.android.internal.R.styleable.Window); 644cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mWindowIsRound = ScreenShapeHelper.getWindowIsRound(getResources()); 645228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala windowStyle.recycle(); 646be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 647be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // Add window 648be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.type = mIWallpaperEngine.mWindowType; 649be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.gravity = Gravity.START|Gravity.TOP; 650be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.setTitle(WallpaperService.this.getClass().getName()); 6516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mLayout.windowAnimations = 6526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala com.android.internal.R.style.Animation_Wallpaper; 653228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mInputChannel = new InputChannel(); 654228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (mSession.addToDisplay(mWindow, mWindow.mSeq, mLayout, View.VISIBLE, 655228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala Display.DEFAULT_DISPLAY, mContentInsets, mStableInsets, mOutsets, 656cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mInputChannel) < 0) { 657228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala Log.w(TAG, "Failed to add window while updating wallpaper surface."); 658228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala return; 659228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 660cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mCreated = true; 661cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 662228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mInputEventReceiver = new WallpaperInputEventReceiver( 663cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mInputChannel, Looper.myLooper()); 664228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 6656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 6666db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mSurfaceHolder.mSurfaceLock.lock(); 6676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDrawingAllowed = true; 668be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 669be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (!fixedSize) { 670cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mLayout.surfaceInsets.set(mIWallpaperEngine.mDisplayPadding); 671be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.surfaceInsets.left += mOutsets.left; 672be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.surfaceInsets.top += mOutsets.top; 673be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mLayout.surfaceInsets.right += mOutsets.right; 6746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mLayout.surfaceInsets.bottom += mOutsets.bottom; 6756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } else { 6766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mLayout.surfaceInsets.set(0, 0, 0, 0); 6776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 6786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala final int relayoutResult = mSession.relayout( 679bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala mWindow, mWindow.mSeq, mLayout, mWidth, mHeight, 680bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala View.VISIBLE, 0, mWinFrame, mOverscanInsets, mContentInsets, 6816db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mVisibleInsets, mStableInsets, mOutsets, mConfiguration, 6826db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mSurfaceHolder.mSurface); 6836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 684228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (DEBUG) Log.v(TAG, "New surface: " + mSurfaceHolder.mSurface 6856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala + ", frame=" + mWinFrame); 6866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 68761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int w = mWinFrame.width(); 68861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int h = mWinFrame.height(); 68961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 690a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala if (!fixedSize) { 6919e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala final Rect padding = mIWallpaperEngine.mDisplayPadding; 692ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala w += padding.left + padding.right + mOutsets.left + mOutsets.right; 6933a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala h += padding.top + padding.bottom + mOutsets.top + mOutsets.bottom; 6943a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala mOverscanInsets.left += padding.left; 69536cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala mOverscanInsets.top += padding.top; 696ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala mOverscanInsets.right += padding.right; 697ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala mOverscanInsets.bottom += padding.bottom; 69836cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala mContentInsets.left += padding.left; 699ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala mContentInsets.top += padding.top; 700228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mContentInsets.right += padding.right; 701228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mContentInsets.bottom += padding.bottom; 702228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mStableInsets.left += padding.left; 703228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mStableInsets.top += padding.top; 704228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mStableInsets.right += padding.right; 705228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mStableInsets.bottom += padding.bottom; 706228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 7073a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala 708d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCurWidth != w) { 709d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala sizeChanged = true; 710d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCurWidth = w; 711d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 712d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCurHeight != h) { 713d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala sizeChanged = true; 714d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCurHeight = h; 715d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 716d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 717d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (DEBUG) { 718228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala Log.v(TAG, "Wallpaper size has changed: (" + mCurWidth + ", " + mCurHeight); 719d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 720cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 7212267106c98f461b730c772a913da946c391a178cEino-Ville Talvala insetsChanged |= !mDispatchedOverscanInsets.equals(mOverscanInsets); 722228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala insetsChanged |= !mDispatchedContentInsets.equals(mContentInsets); 723228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala insetsChanged |= !mDispatchedStableInsets.equals(mStableInsets); 724228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala insetsChanged |= !mDispatchedOutsets.equals(mOutsets); 725228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 726228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mSurfaceHolder.setSurfaceFrameSize(w, h); 727d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mSurfaceHolder.mSurfaceLock.unlock(); 728228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 729d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (!mSurfaceHolder.mSurface.isValid()) { 730d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala reportSurfaceDestroyed(); 731228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Layout: Surface destroyed"); 732d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 73361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 73461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 73561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala boolean didSurface = false; 736a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 737ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala try { 7383a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala mSurfaceHolder.ungetCallbacks(); 7393a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala 7403a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala if (surfaceCreating) { 741228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mIsCreating = true; 742228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala didSurface = true; 74361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala if (DEBUG) Log.v(TAG, "onSurfaceCreated(" 74461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala + mSurfaceHolder + "): " + this); 74561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala onSurfaceCreated(mSurfaceHolder); 746a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks(); 747ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (callbacks != null) { 7483a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala for (SurfaceHolder.Callback c : callbacks) { 7493a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala c.surfaceCreated(mSurfaceHolder); 7503a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 751228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 752228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 75378822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala 75478822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala redrawNeeded |= creating || (relayoutResult 75578822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala & WindowManagerGlobal.RELAYOUT_RES_FIRST_TIME) != 0; 756228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 75778822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala if (forceReport || creating || surfaceCreating 75878822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala || formatChanged || sizeChanged) { 75978822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala if (DEBUG) { 76078822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala RuntimeException e = new RuntimeException(); 76178822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala e.fillInStackTrace(); 76278822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala Log.w(TAG, "forceReport=" + forceReport + " creating=" + creating 763836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala + " formatChanged=" + formatChanged 76478822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala + " sizeChanged=" + sizeChanged, e); 76578822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala } 76661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala if (DEBUG) Log.v(TAG, "onSurfaceChanged(" 76761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala + mSurfaceHolder + ", " + mFormat 76861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala + ", " + mCurWidth + ", " + mCurHeight 769a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala + "): " + this); 7709e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala didSurface = true; 771ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala onSurfaceChanged(mSurfaceHolder, mFormat, 7729cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mCurWidth, mCurHeight); 7733a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks(); 774228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (callbacks != null) { 775228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala for (SurfaceHolder.Callback c : callbacks) { 776228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala c.surfaceChanged(mSurfaceHolder, mFormat, 777228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mCurWidth, mCurHeight); 7783a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 779228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 780228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 781228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 7829cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (insetsChanged) { 783228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mDispatchedOverscanInsets.set(mOverscanInsets); 7849cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedOverscanInsets.left += mOutsets.left; 7859cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedOverscanInsets.top += mOutsets.top; 7869cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedOverscanInsets.right += mOutsets.right; 7879cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedOverscanInsets.bottom += mOutsets.bottom; 7889cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedContentInsets.set(mContentInsets); 7899cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedStableInsets.set(mStableInsets); 7909cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDispatchedOutsets.set(mOutsets); 791228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mFinalSystemInsets.set(mDispatchedOverscanInsets); 792228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mFinalStableInsets.set(mDispatchedStableInsets); 793228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala WindowInsets insets = new WindowInsets(mFinalSystemInsets, 7949cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala null, mFinalStableInsets, mWindowIsRound); 7959cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (DEBUG) { 7969cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala Log.v(TAG, "dispatching insets=" + insets); 797228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 7989cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala onApplyWindowInsets(insets); 7999cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8009cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 801228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (redrawNeeded) { 80278822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala onSurfaceRedrawNeeded(mSurfaceHolder); 80378822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks(); 80478822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala if (callbacks != null) { 80578822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala for (SurfaceHolder.Callback c : callbacks) { 80678822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala if (c instanceof SurfaceHolder.Callback2) { 80778822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala ((SurfaceHolder.Callback2)c).surfaceRedrawNeeded( 808228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mSurfaceHolder); 8099cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8109cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8119cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8129cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8139cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 814228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (didSurface && !mReportedVisible) { 815228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // This wallpaper is currently invisible, but its 816228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // surface has changed. At this point let's tell it 817228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // again that it is invisible in case the report about 818228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // the surface caused it to start running. We really 819228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // don't want wallpapers running when not visible. 820228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (mIsCreating) { 821228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // Some wallpapers will ignore this call if they 822228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // had previously been told they were invisble, 823228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // so if we are creating a new surface then toggle 8249cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala // the state to get them to notice. 825cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (DEBUG) Log.v(TAG, "onVisibilityChanged(true) at surface: " 826228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala + this); 8279cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala onVisibilityChanged(true); 8289cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8299cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (DEBUG) Log.v(TAG, "onVisibilityChanged(false) at surface: " 8309cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala + this); 8319cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala onVisibilityChanged(false); 8329cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8339cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 834228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } finally { 835228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mIsCreating = false; 836228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mSurfaceCreated = true; 837cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (redrawNeeded) { 838228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mSession.finishDrawing(mWindow); 839228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 840228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mIWallpaperEngine.reportShown(); 841228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 842cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } catch (RemoteException ex) { 843228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 844228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (DEBUG) Log.v( 845228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala TAG, "Layout: x=" + mLayout.x + " y=" + mLayout.y + 8469cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala " w=" + mLayout.width + " h=" + mLayout.height); 8479cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8489cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8499cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 8509cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala void attach(IWallpaperEngineWrapper wrapper) { 851cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (DEBUG) Log.v(TAG, "attach: " + this + " wrapper=" + wrapper); 8529cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (mDestroyed) { 8539cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala return; 8549cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8559cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 8569cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mIWallpaperEngine = wrapper; 8579cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mCaller = wrapper.mCaller; 8589cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mConnection = wrapper.mConnection; 8599cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mWindowToken = wrapper.mWindowToken; 8609cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mSurfaceHolder.setSizeFromLayout(); 8619cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mInitializing = true; 8629cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mSession = WindowManagerGlobal.getWindowSession(); 8639cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 8649cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mWindow.setSession(mSession); 865228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 866228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mLayout.packageName = getPackageName(); 867228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 8689cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDisplayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE); 8699cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mDisplayManager.registerDisplayListener(mDisplayListener, mCaller.getHandler()); 87061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala mDisplay = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); 87161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala mDisplayState = mDisplay.getState(); 87261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 873a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala if (DEBUG) Log.v(TAG, "onCreate(): " + this); 8749e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala onCreate(mSurfaceHolder); 875ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 876228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mInitializing = false; 877228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mReportedVisible = false; 8789cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala updateSurface(false, false, false); 8793a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 8803a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala 881228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala void doDesiredSizeChanged(int desiredWidth, int desiredHeight) { 8829cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (!mDestroyed) { 8839cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (DEBUG) Log.v(TAG, "onDesiredSizeChanged(" 8849cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala + desiredWidth + "," + desiredHeight + "): " + this); 8859cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mIWallpaperEngine.mReqWidth = desiredWidth; 8869cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mIWallpaperEngine.mReqHeight = desiredHeight; 8879cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala onDesiredSizeChanged(desiredWidth, desiredHeight); 8889cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala doOffsetsChanged(true); 8899cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8909cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 891228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 8929cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala void doDisplayPaddingChanged(Rect padding) { 8939cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (!mDestroyed) { 8949cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (DEBUG) Log.v(TAG, "onDisplayPaddingChanged(" + padding + "): " + this); 8959cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (!mIWallpaperEngine.mDisplayPadding.equals(padding)) { 8969cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mIWallpaperEngine.mDisplayPadding.set(padding); 8979cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala updateSurface(true, false, false); 8989cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 8999cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 9009cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 9019cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 9029cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala void doVisibilityChanged(boolean visible) { 9039cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (!mDestroyed) { 9049cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mVisible = visible; 9059cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala reportVisibility(); 9069cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 907228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 90861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 90961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala void reportVisibility() { 91061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala if (!mDestroyed) { 911a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala mDisplayState = mDisplay == null ? Display.STATE_UNKNOWN : mDisplay.getState(); 912ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala boolean visible = mVisible && mDisplayState != Display.STATE_OFF; 9138da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong if (mReportedVisible != visible) { 9143a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala mReportedVisible = visible; 9153a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala if (DEBUG) Log.v(TAG, "onVisibilityChanged(" + visible 9168da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong + "): " + this); 9178da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong if (visible) { 9188da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong // If becoming visible, in preview mode the surface 9198da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong // may have been destroyed so now we need to make 9208da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong // sure it is re-created. 921228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala doOffsetsChanged(false); 9228da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong updateSurface(false, false, false); 923228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 92461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala onVisibilityChanged(visible); 92561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 92661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 927a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala } 928ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 9293a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala void doOffsetsChanged(boolean always) { 9303a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala if (mDestroyed) { 93130e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala return; 93230e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } 93330e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala 9349cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala if (!always && !mOffsetsChanged) { 9359cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala return; 9369cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 9379cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala 9389cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala float xOffset; 9399cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala float yOffset; 9409cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala float xOffsetStep; 9419cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala float yOffsetStep; 9429cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala boolean sync; 9439cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala synchronized (mLock) { 94478822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala xOffset = mPendingXOffset; 94578822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala yOffset = mPendingYOffset; 94678822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala xOffsetStep = mPendingXOffsetStep; 94778822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala yOffsetStep = mPendingYOffsetStep; 94878822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala sync = mPendingSync; 94978822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala mPendingSync = false; 95078822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala mOffsetMessageEnqueued = false; 95130e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } 95230e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala 95330e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala if (mSurfaceCreated) { 95430e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala if (mReportedVisible) { 95530e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Offsets change in " + this 95630e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala + ": " + xOffset + "," + yOffset); 95730e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala final int availw = mIWallpaperEngine.mReqWidth-mCurWidth; 95830e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala final int xPixels = availw > 0 ? -(int)(availw*xOffset+.5f) : 0; 95930e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala final int availh = mIWallpaperEngine.mReqHeight-mCurHeight; 96030e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala final int yPixels = availh > 0 ? -(int)(availh*yOffset+.5f) : 0; 96130e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixels, yPixels); 96230e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } else { 96330e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala mOffsetsChanged = true; 96430e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } 96530e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } 96630e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala 96730e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala if (sync) { 96830e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala try { 96930e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Reporting offsets change complete"); 97078822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala mSession.wallpaperOffsetsComplete(mWindow.asBinder()); 97130e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } catch (RemoteException e) { 97230e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } 97330e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala } 97478822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala } 97578822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala 97678822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala void doCommand(WallpaperCommand cmd) { 97730e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala Bundle result; 97878822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala if (!mDestroyed) { 97978822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala result = onCommand(cmd.action, cmd.x, cmd.y, cmd.z, 98030e65e7e2ec01e13e45b5e38552a34d2fbb3f866Eino-Ville Talvala cmd.extras, cmd.sync); 98178822d73af1e7f6b8b297fc7f98ef7f8257cc10aEino-Ville Talvala } else { 9829cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala result = null; 98361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 98461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala if (cmd.sync) { 98561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala try { 986a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Reporting command complete"); 987ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala mSession.wallpaperCommandComplete(mWindow.asBinder(), result); 9883a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } catch (RemoteException e) { 9893a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 9903a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 991174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala } 992174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala 993174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala void reportSurfaceDestroyed() { 994174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala if (mSurfaceCreated) { 995174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala mSurfaceCreated = false; 996174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala mSurfaceHolder.ungetCallbacks(); 997174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala SurfaceHolder.Callback callbacks[] = mSurfaceHolder.getCallbacks(); 998174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala if (callbacks != null) { 999174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala for (SurfaceHolder.Callback c : callbacks) { 10006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala c.surfaceDestroyed(mSurfaceHolder); 100161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 100261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 100361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala if (DEBUG) Log.v(TAG, "onSurfaceDestroyed(" 1004a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala + mSurfaceHolder + "): " + this); 1005ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala onSurfaceDestroyed(mSurfaceHolder); 10063a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 10073a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 10083a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala 1009174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala void detach() { 1010174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala if (mDestroyed) { 1011174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala return; 1012174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala } 1013174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala 1014174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala mDestroyed = true; 1015174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala 1016174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala if (mDisplayManager != null) { 10176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDisplayManager.unregisterDisplayListener(mDisplayListener); 101861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } 101961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 102061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala if (mVisible) { 1021a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala mVisible = false; 1022ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (DEBUG) Log.v(TAG, "onVisibilityChanged(false): " + this); 1023d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala onVisibilityChanged(false); 10243a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala } 1025d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1026228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala reportSurfaceDestroyed(); 1027228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 10283a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala if (DEBUG) Log.v(TAG, "onDestroy(): " + this); 1029d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala onDestroy(); 1030d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1031d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCreated) { 1032d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala try { 1033d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Removing window and destroying surface " 1034d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala + mSurfaceHolder.getSurface() + " of: " + this); 1035d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1036d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mInputEventReceiver != null) { 1037d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mInputEventReceiver.dispose(); 1038d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mInputEventReceiver = null; 1039d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1040d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1041d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mSession.remove(mWindow); 1042d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } catch (RemoteException e) { 1043d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1044d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mSurfaceHolder.mSurface.release(); 10458ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala mCreated = false; 1046d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1047228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // Dispose the input channel after removing the window so the Window Manager 1048228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala // doesn't interpret the input channel being closed as an abnormal termination. 1049228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala if (mInputChannel != null) { 1050228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mInputChannel.dispose(); 1051228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mInputChannel = null; 1052228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 10538ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala } 1054cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 1055228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 10564ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala private final DisplayListener mDisplayListener = new DisplayListener() { 1057228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala @Override 1058228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala public void onDisplayChanged(int displayId) { 10594ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (mDisplay.getDisplayId() == displayId) { 10604ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala reportVisibility(); 1061d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1062d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1063228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 1064228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala @Override 1065228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala public void onDisplayRemoved(int displayId) { 1066228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 1067228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 1068228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala @Override 1069228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala public void onDisplayAdded(int displayId) { 1070228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala } 1071228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala }; 1072cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 1073cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 1074228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala class IWallpaperEngineWrapper extends IWallpaperEngine.Stub 1075228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala implements HandlerCaller.Callback { 1076228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala private final HandlerCaller mCaller; 1077228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 1078228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala final IWallpaperConnection mConnection; 1079cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala final IBinder mWindowToken; 1080cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala final int mWindowType; 1081228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala final boolean mIsPreview; 1082228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala boolean mShownReported; 1083228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala int mReqWidth; 1084228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala int mReqHeight; 1085228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala final Rect mDisplayPadding = new Rect(); 1086cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 1087cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala Engine mEngine; 1088228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 1089228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala IWallpaperEngineWrapper(WallpaperService context, 1090228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala IWallpaperConnection conn, IBinder windowToken, 1091228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala int windowType, boolean isPreview, int reqWidth, int reqHeight, Rect padding) { 1092228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mCaller = new HandlerCaller(context, context.getMainLooper(), this, true); 1093cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mConnection = conn; 1094cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mWindowToken = windowToken; 1095228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mWindowType = windowType; 1096228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mIsPreview = isPreview; 1097228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mReqWidth = reqWidth; 1098d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mReqHeight = reqHeight; 1099d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDisplayPadding.set(padding); 1100d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1101d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Message msg = mCaller.obtainMessage(DO_ATTACH); 1102d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaller.sendMessage(msg); 1103d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1104cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 1105be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala public void setDesiredSize(int width, int height) { 1106be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala Message msg = mCaller.obtainMessageII(DO_SET_DESIRED_SIZE, width, height); 1107be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mCaller.sendMessage(msg); 1108be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 1109be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 1110d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public void setDisplayPadding(Rect padding) { 1111cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala Message msg = mCaller.obtainMessageO(DO_SET_DISPLAY_PADDING, padding); 1112cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mCaller.sendMessage(msg); 1113d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1114d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1115d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public void setVisibility(boolean visible) { 1116d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Message msg = mCaller.obtainMessageI(MSG_VISIBILITY_CHANGED, 1117d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala visible ? 1 : 0); 1118228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mCaller.sendMessage(msg); 1119cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 1120d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1121d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public void dispatchPointer(MotionEvent event) { 1122d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mEngine != null) { 1123d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mEngine.dispatchPointer(event); 1124d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } else { 1125d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala event.recycle(); 1126d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 11279cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala } 1128d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1129d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public void dispatchWallpaperCommand(String action, int x, int y, 1130d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala int z, Bundle extras) { 1131d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mEngine != null) { 1132d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mEngine.mWindow.dispatchWallpaperCommand(action, x, y, z, extras, false); 1133d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1134d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1135d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1136228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala public void reportShown() { 1137d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (!mShownReported) { 1138228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala mShownReported = true; 1139228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala try { 11408ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala mConnection.engineShown(this); 11418ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala } catch (RemoteException e) { 11428ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala Log.w(TAG, "Wallpaper host disappeared", e); 11438ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala return; 11448ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala } 1145d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1146d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1147228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala 1148d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public void destroy() { 1149d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Message msg = mCaller.obtainMessage(DO_DETACH); 1150d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaller.sendMessage(msg); 1151d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1152d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1153d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala public void executeMessage(Message message) { 1154d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (message.what) { 1155d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case DO_ATTACH: { 115661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala try { 115761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala mConnection.attachEngine(this); 115861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala } catch (RemoteException e) { 1159a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala Log.w(TAG, "Wallpaper host disappeared", e); 11609e4c3db01ba4eb1e5acbed113f78a31374900df6Eino-Ville Talvala return; 1161ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala } 11626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Engine engine = onCreateEngine(); 11633a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala mEngine = engine; 11643a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala mActiveEngines.add(engine); 11653a609147811105d40766f8f8f5904bf71cb123cbEino-Ville Talvala engine.attach(this); 11666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return; 11676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case DO_DETACH: { 11696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mActiveEngines.remove(mEngine); 11706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.detach(); 11716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return; 11726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case DO_SET_DESIRED_SIZE: { 11746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.doDesiredSizeChanged(message.arg1, message.arg2); 11756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return; 11766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case DO_SET_DISPLAY_PADDING: { 11786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.doDisplayPaddingChanged((Rect) message.obj); 11796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case MSG_UPDATE_SURFACE: 1181836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala mEngine.updateSurface(true, false, false); 1182836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala break; 1183228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala case MSG_VISIBILITY_CHANGED: 11846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (DEBUG) Log.v(TAG, "Visibility change in " + mEngine 11859cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala + ": " + message.arg1); 11869cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala mEngine.doVisibilityChanged(message.arg1 != 0); 1187836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala break; 11889cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala case MSG_WALLPAPER_OFFSETS: { 11896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.doOffsetsChanged(true); 11906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } break; 1191cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala case MSG_WALLPAPER_COMMAND: { 11926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala WallpaperCommand cmd = (WallpaperCommand)message.obj; 11936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.doCommand(cmd); 11946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } break; 11956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case MSG_WINDOW_RESIZED: { 11966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala final boolean reportDraw = message.arg1 != 0; 11976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.mOutsets.set((Rect) message.obj); 11986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.updateSurface(true, false, reportDraw); 11996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.doOffsetsChanged(true); 12006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } break; 12016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case MSG_WINDOW_MOVED: { 12026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Do nothing. What does it mean for a Wallpaper to move? 12036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } break; 12046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala case MSG_TOUCH_EVENT: { 120511b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala boolean skip = false; 120611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala MotionEvent ev = (MotionEvent)message.obj; 12076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (ev.getAction() == MotionEvent.ACTION_MOVE) { 120811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala synchronized (mEngine.mLock) { 1209836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala if (mEngine.mPendingMove == ev) { 1210836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala mEngine.mPendingMove = null; 12116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else { 1212cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala // this is not the motion event we are looking for.... 12136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala skip = true; 12146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 121611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala } 12176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!skip) { 121811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala if (DEBUG) Log.v(TAG, "Delivering touch event: " + ev); 12196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mEngine.onTouchEvent(ev); 12206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ev.recycle(); 12226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } break; 12236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala default : 122411b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala Log.w(TAG, "Unknown message type " + message.what); 12256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 122711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala } 12286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** 12306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala * Implements the internal {@link IWallpaperService} interface to convert 12316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala * incoming calls to it back to calls on an {@link WallpaperService}. 1232836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala */ 1233228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala class IWallpaperServiceWrapper extends IWallpaperService.Stub { 12346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala private final WallpaperService mTarget; 12356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala public IWallpaperServiceWrapper(WallpaperService context) { 12376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mTarget = context; 1238cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 12396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala @Override 12416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala public void attach(IWallpaperConnection conn, IBinder windowToken, 12426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int windowType, boolean isPreview, int reqWidth, int reqHeight, Rect padding) { 12436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala new IWallpaperEngineWrapper(mTarget, conn, windowToken, 12446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala windowType, isPreview, reqWidth, reqHeight, padding); 12456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala @Override 12496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala public void onCreate() { 12506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala super.onCreate(); 12516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala @Override 12546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala public void onDestroy() { 1255836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala super.onDestroy(); 1256cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala for (int i=0; i<mActiveEngines.size(); i++) { 12576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mActiveEngines.get(i).detach(); 12586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mActiveEngines.clear(); 12606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** 12636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala * Implement to return the implementation of the internal accessibility 12646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala * service interface. Subclasses should not override. 12656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala */ 126611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala @Override 126711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala public final IBinder onBind(Intent intent) { 12686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return new IWallpaperServiceWrapper(this); 12696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** 12726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala * Must be implemented to return a new instance of the wallpaper's engine. 12736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala * Note that multiple instances may be active at the same time, such as 1274836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala * when the wallpaper is currently set as the active wallpaper and the user 1275836b81f3c5a5bacb800f698f90ded6bd6e6bc5ceEino-Ville Talvala * is in the wallpaper picker viewing a preview of it as well. 1276cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 12776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala public abstract Engine onCreateEngine(); 12786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 12796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala @Override 12806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala protected void dump(FileDescriptor fd, PrintWriter out, String[] args) { 12816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala out.print("State of wallpaper "); out.print(this); out.println(":"); 12826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (int i=0; i<mActiveEngines.size(); i++) { 12836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Engine engine = mActiveEngines.get(i); 12846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala out.print(" Engine "); out.print(engine); out.println(":"); 12856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala engine.dump(" ", fd, out, args); 12866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 12886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 12896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala