diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/service/wallpaper/WallpaperService.java | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 87fb611d2a0b..53bde36a8a64 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -254,6 +254,7 @@ public abstract class WallpaperService extends Service { private int mDisplayState; SurfaceControl mSurfaceControl = new SurfaceControl(); + SurfaceControl mBbqSurfaceControl; BLASTBufferQueue mBlastBufferQueue; final BaseSurfaceHolder mSurfaceHolder = new BaseSurfaceHolder() { @@ -976,6 +977,15 @@ public abstract class WallpaperService extends Service { View.VISIBLE, 0, -1, mWinFrames, mMergedConfiguration, mSurfaceControl, mInsetsState, mTempControls, mSurfaceSize); if (mSurfaceControl.isValid()) { + if (mBbqSurfaceControl == null) { + mBbqSurfaceControl = new SurfaceControl.Builder() + .setName("Wallpaper BBQ wrapper") + .setHidden(false) + .setBLASTLayer() + .setParent(mSurfaceControl) + .setCallsite("Wallpaper#relayout") + .build(); + } Surface blastSurface = getOrCreateBLASTSurface(mSurfaceSize.x, mSurfaceSize.y, mFormat); // If blastSurface == null that means it hasn't changed since the last @@ -987,11 +997,6 @@ public abstract class WallpaperService extends Service { } if (!mLastSurfaceSize.equals(mSurfaceSize)) { mLastSurfaceSize.set(mSurfaceSize.x, mSurfaceSize.y); - if (mSurfaceControl != null && mSurfaceControl.isValid()) { - SurfaceControl.Transaction t = new SurfaceControl.Transaction(); - t.setBufferSize(mSurfaceControl, mSurfaceSize.x, mSurfaceSize.y); - t.apply(); - } } if (DEBUG) Log.v(TAG, "New surface: " + mSurfaceHolder.mSurface @@ -1830,6 +1835,14 @@ public abstract class WallpaperService extends Service { } catch (RemoteException e) { } mSurfaceHolder.mSurface.release(); + if (mBlastBufferQueue != null) { + mBlastBufferQueue.destroy(); + mBlastBufferQueue = null; + } + if (mBbqSurfaceControl != null) { + new SurfaceControl.Transaction().remove(mBbqSurfaceControl).apply(); + mBbqSurfaceControl = null; + } mCreated = false; } } @@ -1854,13 +1867,13 @@ public abstract class WallpaperService extends Service { private Surface getOrCreateBLASTSurface(int width, int height, int format) { Surface ret = null; if (mBlastBufferQueue == null) { - mBlastBufferQueue = new BLASTBufferQueue("Wallpaper", mSurfaceControl, width, - height, format); + mBlastBufferQueue = new BLASTBufferQueue("Wallpaper", mBbqSurfaceControl, + width, height, format); // We only return the Surface the first time, as otherwise // it hasn't changed and there is no need to update. ret = mBlastBufferQueue.createSurface(); } else { - mBlastBufferQueue.update(mSurfaceControl, width, height, format); + mBlastBufferQueue.update(mBbqSurfaceControl, width, height, format); } return ret; |
