WallpaperService.java revision 3be63c09309b21c01b535271625d4c39045690e5
18cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn/* 28cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * Copyright (C) 2009 The Android Open Source Project 38cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * 48cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 58cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * you may not use this file except in compliance with the License. 68cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * You may obtain a copy of the License at 78cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * 88cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 98cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * 108cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * Unless required by applicable law or agreed to in writing, software 118cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 128cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * See the License for the specific language governing permissions and 148cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * limitations under the License. 158cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn */ 168cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 178cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornpackage android.service.wallpaper; 188cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 198cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport com.android.internal.os.HandlerCaller; 204c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport com.android.internal.view.BaseIWindow; 214c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport com.android.internal.view.BaseSurfaceHolder; 228cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 238cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport android.app.Service; 24759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackbornimport android.app.WallpaperManager; 258cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport android.content.Intent; 264c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.graphics.Rect; 278cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport android.os.IBinder; 288cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport android.os.Message; 298cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport android.os.RemoteException; 308cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornimport android.util.Log; 314c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.Gravity; 324c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.IWindowSession; 338df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackbornimport android.view.MotionEvent; 344c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.SurfaceHolder; 354c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.View; 3672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackbornimport android.view.ViewGroup; 374c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.ViewRoot; 384c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.WindowManager; 394c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackbornimport android.view.WindowManagerImpl; 408cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 418cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn/** 428cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * A wallpaper service is responsible for showing a live wallpaper behind 438cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * applications that would like to sit on top of it. 444c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * @hide Live Wallpaper 458cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn */ 468cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackbornpublic abstract class WallpaperService extends Service { 478cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn /** 488cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn * The {@link Intent} that must be declared as handled by the service. 498cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn */ 508cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn public static final String SERVICE_INTERFACE = 518cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn "android.service.wallpaper.WallpaperService"; 528cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 534c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn static final String TAG = "WallpaperService"; 5472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn static final boolean DEBUG = false; 554c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 564c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn private static final int DO_ATTACH = 10; 574c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn private static final int DO_DETACH = 20; 584c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 594c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn private static final int MSG_UPDATE_SURFACE = 10000; 60759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn private static final int MSG_VISIBILITY_CHANGED = 10010; 6172c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn private static final int MSG_WALLPAPER_OFFSETS = 10020; 627341d7a104b47996445d069a695e155a07184606Dianne Hackborn private static final int MSG_WINDOW_RESIZED = 10030; 638df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn private static final int MSG_TOUCH_EVENT = 10040; 644c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 658cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn /** 664c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * The actual implementation of a wallpaper. A wallpaper service may 674c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * have multiple instances running (for example as a real wallpaper 684c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * and as a preview), each of which is represented by its own Engine 69759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * instance. You must implement {@link WallpaperService#onCreateEngine()} 70759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * to return your concrete Engine implementation. 718cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn */ 724c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public class Engine { 734c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn IWallpaperEngineWrapper mIWallpaperEngine; 744c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 754c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn // Copies from mIWallpaperEngine. 764c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn HandlerCaller mCaller; 774c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn IWallpaperConnection mConnection; 784c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn IBinder mWindowToken; 794c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 804c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn boolean mInitializing = true; 814c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 824c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn // Current window state. 834c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn boolean mCreated; 844c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn boolean mIsCreating; 854c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn boolean mDrawingAllowed; 864c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int mWidth; 874c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int mHeight; 884c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int mFormat; 894c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int mType; 9072c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn int mCurWidth; 9172c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn int mCurHeight; 928df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn int mWindowFlags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; 938df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn int mCurWindowFlags = mWindowFlags; 944c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn boolean mDestroyReportNeeded; 954c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final Rect mVisibleInsets = new Rect(); 964c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final Rect mWinFrame = new Rect(); 974c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final Rect mContentInsets = new Rect(); 984c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 994c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final WindowManager.LayoutParams mLayout 1004c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn = new WindowManager.LayoutParams(); 1014c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn IWindowSession mSession; 1028cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 10372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn final Object mLock = new Object(); 10472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn boolean mOffsetMessageEnqueued; 10572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn float mPendingXOffset; 10672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn float mPendingYOffset; 1078df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn MotionEvent mPendingMove; 10872c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn 1094c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final BaseSurfaceHolder mSurfaceHolder = new BaseSurfaceHolder() { 1104c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 1114c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn @Override 1124c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public boolean onAllowLockCanvas() { 1134c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn return mDrawingAllowed; 1144c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 1154c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 1164c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn @Override 1174c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void onRelayoutContainer() { 1184c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Message msg = mCaller.obtainMessage(MSG_UPDATE_SURFACE); 1194c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCaller.sendMessage(msg); 1204c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 1214c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 1224c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn @Override 1234c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void onUpdateSurface() { 1244c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Message msg = mCaller.obtainMessage(MSG_UPDATE_SURFACE); 1254c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCaller.sendMessage(msg); 1264c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 1278cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 1284c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public boolean isCreating() { 1294c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn return mIsCreating; 1304c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 1314c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 1324c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void setKeepScreenOn(boolean screenOn) { 1334c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn // Ignore. 1344c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 1354c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 1364c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn }; 1378cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 1384c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final BaseIWindow mWindow = new BaseIWindow() { 1398df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn @Override 1408df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn public boolean onDispatchPointer(MotionEvent event, long eventTime, 1418df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn boolean callWhenDone) { 1428df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn synchronized (mLock) { 1438df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn if (event.getAction() == MotionEvent.ACTION_MOVE) { 1448df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn if (mPendingMove != null) { 1458df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mCaller.removeMessages(MSG_TOUCH_EVENT, mPendingMove); 1468df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mPendingMove.recycle(); 1478df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 1488df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mPendingMove = event; 1498df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } else { 1508df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mPendingMove = null; 1518df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 1528df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn Message msg = mCaller.obtainMessageO(MSG_TOUCH_EVENT, 1538df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn event); 1548df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mCaller.sendMessage(msg); 1558df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 1568df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn return false; 1578df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 1588df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 1598df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn @Override 1607341d7a104b47996445d069a695e155a07184606Dianne Hackborn public void resized(int w, int h, Rect coveredInsets, 1617341d7a104b47996445d069a695e155a07184606Dianne Hackborn Rect visibleInsets, boolean reportDraw) { 1627341d7a104b47996445d069a695e155a07184606Dianne Hackborn Message msg = mCaller.obtainMessageI(MSG_WINDOW_RESIZED, 1637341d7a104b47996445d069a695e155a07184606Dianne Hackborn reportDraw ? 1 : 0); 1647341d7a104b47996445d069a695e155a07184606Dianne Hackborn mCaller.sendMessage(msg); 1657341d7a104b47996445d069a695e155a07184606Dianne Hackborn } 1667341d7a104b47996445d069a695e155a07184606Dianne Hackborn 1678df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn @Override 168759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public void dispatchAppVisibility(boolean visible) { 169759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn Message msg = mCaller.obtainMessageI(MSG_VISIBILITY_CHANGED, 170759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn visible ? 1 : 0); 171759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn mCaller.sendMessage(msg); 172759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn } 17372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn 17472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn @Override 17572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn public void dispatchWallpaperOffsets(float x, float y) { 17672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn synchronized (mLock) { 17772c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mPendingXOffset = x; 17872c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mPendingYOffset = y; 17972c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn if (!mOffsetMessageEnqueued) { 18072c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mOffsetMessageEnqueued = true; 18172c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn Message msg = mCaller.obtainMessage(MSG_WALLPAPER_OFFSETS); 18272c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mCaller.sendMessage(msg); 18372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } 18472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } 18572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } 18672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn 1874c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn }; 1884c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 189759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 190759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Provides access to the surface in which this wallpaper is drawn. 191759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 192759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public SurfaceHolder getSurfaceHolder() { 193759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn return mSurfaceHolder; 194759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn } 195759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn 196759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 197759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Convenience for {@link WallpaperManager#getDesiredMinimumWidth() 198759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * WallpaperManager.getDesiredMinimumWidth()}, returning the width 199759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * that the system would like this wallpaper to run in. 200759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 201759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public int getDesiredMinimumWidth() { 202759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn return mIWallpaperEngine.mReqWidth; 203759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn } 204759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn 205759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 206759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Convenience for {@link WallpaperManager#getDesiredMinimumHeight() 207759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * WallpaperManager.getDesiredMinimumHeight()}, returning the height 208759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * that the system would like this wallpaper to run in. 209759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 210759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public int getDesiredMinimumHeight() { 211759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn return mIWallpaperEngine.mReqHeight; 212759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn } 213759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn 214759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 2153be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Returns true if this engine is running in preview mode -- that is, 2163be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * it is being shown to the user before they select it as the actual 2173be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * wallpaper. 2183be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 2193be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public boolean isPreview() { 2203be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn return mIWallpaperEngine.mIsPreview; 2213be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 2223be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 2233be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 2248df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * Control whether this wallpaper will receive raw touch events 2258df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * from the window manager as the user interacts with the window 2268df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * that is currently displaying the wallpaper. By default they 2278df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * are turned off. If enabled, the events will be received in 2288df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * {@link #onTouchEvent(MotionEvent)}. 2298df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn */ 2308df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn public void setTouchEventsEnabled(boolean enabled) { 2318df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mWindowFlags = enabled 2328df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ? (mWindowFlags&~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) 2338df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn : (mWindowFlags|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 2348df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn if (mCreated) { 235cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn updateSurface(false, false); 2368df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 2378df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 2388df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 2398df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn /** 240759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Called once to initialize the engine. After returning, the 241759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * engine's surface will be created by the framework. 242759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 243759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public void onCreate(SurfaceHolder surfaceHolder) { 2444c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 2454c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 246759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 247759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Called right before the engine is going away. After this the 248759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * surface will be destroyed and this Engine object is no longer 249759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * valid. 250759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 251759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public void onDestroy() { 2524c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 2534c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 254759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 255759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Called to inform you of the wallpaper becoming visible or 256759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * hidden. <em>It is very important that a wallpaper only use 257759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * CPU while it is visible.</em>. 258759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 259759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn public void onVisibilityChanged(boolean visible) { 260759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn } 261759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn 262759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 2638df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * Called as the user performs touch-screen interaction with the 2648df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * window that is currently showing this wallpaper. Note that the 2658df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * events you receive here are driven by the actual application the 2668df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * user is interacting with, so if it is slow you will get viewer 2678df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * move events. 2688df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn */ 2698df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn public void onTouchEvent(MotionEvent event) { 2708df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 2718df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 2728df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn /** 27372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn * Called to inform you of the wallpaper's offsets changing 27472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn * within its contain, corresponding to the container's 27572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn * call to {@link WallpaperManager#setWallpaperOffsets(IBinder, float, float) 27672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn * WallpaperManager.setWallpaperOffsets()}. 27772c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn */ 27872c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn public void onOffsetsChanged(float xOffset, float yOffset, 27972c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn int xPixelOffset, int yPixelOffset) { 28072c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } 28172c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn 28272c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn /** 283759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Convenience for {@link SurfaceHolder.Callback#surfaceChanged 284759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * SurfaceHolder.Callback.surfaceChanged()}. 285759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 2864c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { 2874c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 2888cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 289759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 290759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Convenience for {@link SurfaceHolder.Callback#surfaceCreated 291759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * SurfaceHolder.Callback.surfaceCreated()}. 292759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 2934c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void onSurfaceCreated(SurfaceHolder holder) { 2944c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 2958cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 296759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn /** 297759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * Convenience for {@link SurfaceHolder.Callback#surfaceDestroyed 298759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn * SurfaceHolder.Callback.surfaceDestroyed()}. 299759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn */ 3004c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void onSurfaceDestroyed(SurfaceHolder holder) { 3018cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn } 3028cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 303cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn void updateSurface(boolean forceRelayout, boolean forceReport) { 3044c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int myWidth = mSurfaceHolder.getRequestedWidth(); 30572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn if (myWidth <= 0) myWidth = ViewGroup.LayoutParams.FILL_PARENT; 3064c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int myHeight = mSurfaceHolder.getRequestedHeight(); 30772c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn if (myHeight <= 0) myHeight = ViewGroup.LayoutParams.FILL_PARENT; 3084c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3094c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final boolean creating = !mCreated; 3104c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final boolean formatChanged = mFormat != mSurfaceHolder.getRequestedFormat(); 3117341d7a104b47996445d069a695e155a07184606Dianne Hackborn boolean sizeChanged = mWidth != myWidth || mHeight != myHeight; 3124c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final boolean typeChanged = mType != mSurfaceHolder.getRequestedType(); 3138df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn final boolean flagsChanged = mCurWindowFlags != mWindowFlags; 314cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn if (forceRelayout || creating || formatChanged || sizeChanged 315cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn || typeChanged || flagsChanged) { 3164c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3174c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (DEBUG) Log.i(TAG, "Changes: creating=" + creating 3184c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn + " format=" + formatChanged + " size=" + sizeChanged); 3194c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3204c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn try { 3214c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mWidth = myWidth; 3224c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mHeight = myHeight; 3234c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mFormat = mSurfaceHolder.getRequestedFormat(); 3244c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mType = mSurfaceHolder.getRequestedType(); 3254c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3264c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.x = 0; 3274c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.y = 0; 3284c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.width = myWidth; 3294c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.height = myHeight; 3304c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3314c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.format = mFormat; 3328df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 3338df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mCurWindowFlags = mWindowFlags; 3348df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mLayout.flags = mWindowFlags 3358df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 3368df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 3378df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 3388df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ; 3394c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3404c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.memoryType = mType; 3414c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.token = mWindowToken; 3424c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3434c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (!mCreated) { 3443be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn mLayout.type = mIWallpaperEngine.mWindowType; 3454c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mLayout.gravity = Gravity.LEFT|Gravity.TOP; 3464c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSession.add(mWindow, mLayout, View.VISIBLE, mContentInsets); 3474c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 3484c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3494c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSurfaceHolder.mSurfaceLock.lock(); 3504c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mDrawingAllowed = true; 3514c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3524c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final int relayoutResult = mSession.relayout( 3534c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mWindow, mLayout, mWidth, mHeight, 3544c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn View.VISIBLE, false, mWinFrame, mContentInsets, 3554c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mVisibleInsets, mSurfaceHolder.mSurface); 3564c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3574c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (DEBUG) Log.i(TAG, "New surface: " + mSurfaceHolder.mSurface 3584c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn + ", frame=" + mWinFrame); 3594c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3607341d7a104b47996445d069a695e155a07184606Dianne Hackborn int w = mWinFrame.width(); 3617341d7a104b47996445d069a695e155a07184606Dianne Hackborn if (mCurWidth != w) { 3627341d7a104b47996445d069a695e155a07184606Dianne Hackborn sizeChanged = true; 3637341d7a104b47996445d069a695e155a07184606Dianne Hackborn mCurWidth = w; 3647341d7a104b47996445d069a695e155a07184606Dianne Hackborn } 3657341d7a104b47996445d069a695e155a07184606Dianne Hackborn int h = mWinFrame.height(); 3667341d7a104b47996445d069a695e155a07184606Dianne Hackborn if (mCurHeight != h) { 3677341d7a104b47996445d069a695e155a07184606Dianne Hackborn sizeChanged = true; 3687341d7a104b47996445d069a695e155a07184606Dianne Hackborn mCurHeight = h; 3697341d7a104b47996445d069a695e155a07184606Dianne Hackborn } 37072c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn 3714c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSurfaceHolder.mSurfaceLock.unlock(); 3724c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3734c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn try { 3744c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mDestroyReportNeeded = true; 3754c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3764c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn SurfaceHolder.Callback callbacks[] = null; 3774c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn synchronized (mSurfaceHolder.mCallbacks) { 3784c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final int N = mSurfaceHolder.mCallbacks.size(); 3794c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (N > 0) { 3804c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn callbacks = new SurfaceHolder.Callback[N]; 3814c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSurfaceHolder.mCallbacks.toArray(callbacks); 3824c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 3834c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 3844c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 3854c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (!mCreated) { 3864c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mIsCreating = true; 3874c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn onSurfaceCreated(mSurfaceHolder); 3884c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (callbacks != null) { 3894c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn for (SurfaceHolder.Callback c : callbacks) { 3904c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn c.surfaceCreated(mSurfaceHolder); 3914c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 3924c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 3934c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 394cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn if (forceReport || creating || formatChanged || sizeChanged) { 395cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn if (DEBUG) { 396cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn RuntimeException e = new RuntimeException(); 397cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn e.fillInStackTrace(); 398cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn Log.w(TAG, "forceReport=" + forceReport + " creating=" + creating 399cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn + " formatChanged=" + formatChanged 400cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn + " sizeChanged=" + sizeChanged, e); 401cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn } 40272c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn onSurfaceChanged(mSurfaceHolder, mFormat, 40372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mCurWidth, mCurHeight); 4044c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (callbacks != null) { 4054c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn for (SurfaceHolder.Callback c : callbacks) { 40672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn c.surfaceChanged(mSurfaceHolder, mFormat, 40772c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mCurWidth, mCurHeight); 4084c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4094c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4104c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4114c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } finally { 4124c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mIsCreating = false; 4134c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCreated = true; 4144c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (creating || (relayoutResult&WindowManagerImpl.RELAYOUT_FIRST_TIME) != 0) { 4154c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSession.finishDrawing(mWindow); 4164c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4174c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4184c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } catch (RemoteException ex) { 4194c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4204c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (DEBUG) Log.v( 4214c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn TAG, "Layout: x=" + mLayout.x + " y=" + mLayout.y + 4224c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn " w=" + mLayout.width + " h=" + mLayout.height); 4234c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4244c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4254c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4264c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn void attach(IWallpaperEngineWrapper wrapper) { 427cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn if (DEBUG) Log.v(TAG, "attach: " + this + " wrapper=" + wrapper); 4284c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mIWallpaperEngine = wrapper; 4294c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCaller = wrapper.mCaller; 4304c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mConnection = wrapper.mConnection; 4314c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mWindowToken = wrapper.mWindowToken; 43272c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn // XXX temp -- should run in size from layout (screen) mode. 43372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mSurfaceHolder.setFixedSize(mIWallpaperEngine.mReqWidth, 43472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mIWallpaperEngine.mReqHeight); 43572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn //mSurfaceHolder.setSizeFromLayout(); 4364c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mInitializing = true; 4374c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSession = ViewRoot.getWindowSession(getMainLooper()); 4384c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mWindow.setSession(mSession); 4394c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 440759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn onCreate(mSurfaceHolder); 4414c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4424c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mInitializing = false; 443cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn updateSurface(false, false); 4444c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4454c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4464c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn void detach() { 447759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn onDestroy(); 4484c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (mDestroyReportNeeded) { 4494c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mDestroyReportNeeded = false; 4504c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn SurfaceHolder.Callback callbacks[]; 4514c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn synchronized (mSurfaceHolder.mCallbacks) { 4524c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn callbacks = new SurfaceHolder.Callback[ 4534c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSurfaceHolder.mCallbacks.size()]; 4544c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSurfaceHolder.mCallbacks.toArray(callbacks); 4554c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4564c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn for (SurfaceHolder.Callback c : callbacks) { 4574c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn c.surfaceDestroyed(mSurfaceHolder); 4584c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4594c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4604c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn if (mCreated) { 4614c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn try { 4624c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSession.remove(mWindow); 4634c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } catch (RemoteException e) { 4644c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4654c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mSurfaceHolder.mSurface.clear(); 4664c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCreated = false; 4674c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4684c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4694c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 4704c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4714c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn class IWallpaperEngineWrapper extends IWallpaperEngine.Stub 4724c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn implements HandlerCaller.Callback { 4734c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn private final HandlerCaller mCaller; 4744c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4754c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final IWallpaperConnection mConnection; 4764c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn final IBinder mWindowToken; 4773be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn final int mWindowType; 4783be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn final boolean mIsPreview; 4794c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int mReqWidth; 4804c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn int mReqHeight; 4814c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4824c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Engine mEngine; 4834c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4844c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn IWallpaperEngineWrapper(WallpaperService context, 4854c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn IWallpaperConnection conn, IBinder windowToken, 4863be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn int windowType, boolean isPreview, int reqWidth, int reqHeight) { 4874c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCaller = new HandlerCaller(context, this); 4884c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mConnection = conn; 4894c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mWindowToken = windowToken; 4903be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn mWindowType = windowType; 4913be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn mIsPreview = isPreview; 4924c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mReqWidth = reqWidth; 4934c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mReqHeight = reqHeight; 4944c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 4954c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn try { 4964c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn conn.attachEngine(this); 4974c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } catch (RemoteException e) { 4984c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn destroy(); 4994c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5004c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5014c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Message msg = mCaller.obtainMessage(DO_ATTACH); 5024c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCaller.sendMessage(msg); 5034c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5044c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5054c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public void destroy() { 5064c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Message msg = mCaller.obtainMessage(DO_DETACH); 5074c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mCaller.sendMessage(msg); 5088cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn } 5098cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn 5108cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn public void executeMessage(Message message) { 5118cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn switch (message.what) { 5124c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn case DO_ATTACH: { 5134c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Engine engine = onCreateEngine(); 5144c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mEngine = engine; 5154c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn engine.attach(this); 5168cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn return; 5174c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5184c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn case DO_DETACH: { 5194c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mEngine.detach(); 5204c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn return; 5214c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5224c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn case MSG_UPDATE_SURFACE: 523cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn mEngine.updateSurface(true, false); 5244c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn break; 525759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn case MSG_VISIBILITY_CHANGED: 526759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn if (DEBUG) Log.v(TAG, "Visibility change in " + mEngine 527759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn + ": " + message.arg1); 528759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn mEngine.onVisibilityChanged(message.arg1 != 0); 529759a39e8d2a8b27ef07e102394629dce68aa186bDianne Hackborn break; 53072c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn case MSG_WALLPAPER_OFFSETS: { 53172c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn float xOffset; 53272c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn float yOffset; 53372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn synchronized (mEngine.mLock) { 53472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn xOffset = mEngine.mPendingXOffset; 53572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn yOffset = mEngine.mPendingYOffset; 53672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mEngine.mOffsetMessageEnqueued = false; 53772c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } 53872c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn if (DEBUG) Log.v(TAG, "Offsets change in " + mEngine 53972c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn + ": " + xOffset + "," + yOffset); 54072c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn final int availw = mReqWidth-mEngine.mCurWidth; 54172c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn final int xPixels = availw > 0 ? -(int)(availw*xOffset+.5f) : 0; 54272c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn final int availh = mReqHeight-mEngine.mCurHeight; 54372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn final int yPixels = availh > 0 ? -(int)(availh*yOffset+.5f) : 0; 54472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn mEngine.onOffsetsChanged(xOffset, yOffset, xPixels, yPixels); 54572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } break; 5467341d7a104b47996445d069a695e155a07184606Dianne Hackborn case MSG_WINDOW_RESIZED: { 5477341d7a104b47996445d069a695e155a07184606Dianne Hackborn final boolean reportDraw = message.arg1 != 0; 548cbf15048240ecf460957ac3de98a7efbccbbb754Dianne Hackborn mEngine.updateSurface(true, false); 5497341d7a104b47996445d069a695e155a07184606Dianne Hackborn if (reportDraw) { 5507341d7a104b47996445d069a695e155a07184606Dianne Hackborn try { 5517341d7a104b47996445d069a695e155a07184606Dianne Hackborn mEngine.mSession.finishDrawing(mEngine.mWindow); 5527341d7a104b47996445d069a695e155a07184606Dianne Hackborn } catch (RemoteException e) { 5537341d7a104b47996445d069a695e155a07184606Dianne Hackborn } 5547341d7a104b47996445d069a695e155a07184606Dianne Hackborn } 5557341d7a104b47996445d069a695e155a07184606Dianne Hackborn } break; 5568df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn case MSG_TOUCH_EVENT: { 5578df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn MotionEvent ev = (MotionEvent)message.obj; 5588df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn synchronized (mEngine.mLock) { 5598df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn if (mEngine.mPendingMove == ev) { 5608df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mEngine.mPendingMove = null; 5618df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 5628df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 5638df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mEngine.onTouchEvent(ev); 5648df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.recycle(); 5658df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } break; 5668cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn default : 5674c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Log.w(TAG, "Unknown message type " + message.what); 5688cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn } 5698cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn } 5708cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn } 5714c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5724c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn /** 5734c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * Implements the internal {@link IWallpaperService} interface to convert 5744c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * incoming calls to it back to calls on an {@link WallpaperService}. 5754c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn */ 5764c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn class IWallpaperServiceWrapper extends IWallpaperService.Stub { 5774c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn private final WallpaperService mTarget; 5784c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5794c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public IWallpaperServiceWrapper(WallpaperService context) { 5804c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn mTarget = context; 5814c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5824c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5833be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void attach(IWallpaperConnection conn, IBinder windowToken, 5843be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn int windowType, boolean isPreview, int reqWidth, int reqHeight) { 5853be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn new IWallpaperEngineWrapper(mTarget, conn, windowToken, 5863be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn windowType, isPreview, reqWidth, reqHeight); 5874c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5884c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5894c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5904c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn /** 5914c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * Implement to return the implementation of the internal accessibility 5924c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn * service interface. Subclasses should not override. 5934c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn */ 5944c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn @Override 5954c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public final IBinder onBind(Intent intent) { 5964c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn return new IWallpaperServiceWrapper(this); 5974c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 5984c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 5994c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public abstract Engine onCreateEngine(); 6008cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn} 601