Release SurfaceControlViewHost used to render wallpaper surface we are done
Fixes: 157709599
Test: manual
Change-Id: I204f27fffc482bbc0c24f9f3f871295f01167a01
diff --git a/src/com/android/wallpaper/picker/CategoryFragment.java b/src/com/android/wallpaper/picker/CategoryFragment.java
index 9abeecf..82d8deb 100755
--- a/src/com/android/wallpaper/picker/CategoryFragment.java
+++ b/src/com/android/wallpaper/picker/CategoryFragment.java
@@ -93,6 +93,8 @@
private final Rect mPreviewLocalRect = new Rect();
private final Rect mPreviewGlobalRect = new Rect();
private final int[] mLivePreviewLocation = new int[2];
+ private final WallpaperSurfaceCallback mWallpaperSurfaceCallback =
+ new WallpaperSurfaceCallback();
/**
* Interface to be implemented by an Activity hosting a {@link CategoryFragment}
@@ -348,6 +350,7 @@
super.onDestroyView();
LiveTileOverlay.INSTANCE.detach(mHomePreview.getOverlay());
LiveTileOverlay.INSTANCE.detach(mLockscreenPreview.getOverlay());
+ mWallpaperSurfaceCallback.cleanUp();
if (mWallpaperConnection != null) {
mWallpaperConnection.disconnect();
mWallpaperConnection = null;
@@ -708,9 +711,10 @@
mWorkspaceSurface.getHolder().addCallback(mWorkspaceSurfaceCallback);
}
- private final SurfaceHolder.Callback mWallpaperSurfaceCallback = new SurfaceHolder.Callback() {
+ private class WallpaperSurfaceCallback implements SurfaceHolder.Callback {
private Surface mLastSurface;
+ private SurfaceControlViewHost mHost;
@Override
public void surfaceCreated(SurfaceHolder holder) {
@@ -723,11 +727,12 @@
makeMeasureSpec(mHomePreview.getHeight(), EXACTLY));
mHomeImageWallpaper.layout(0, 0, mHomePreview.getWidth(), mHomePreview.getHeight());
- SurfaceControlViewHost host = new SurfaceControlViewHost(getContext(),
+ cleanUp();
+ mHost = new SurfaceControlViewHost(getContext(),
getContext().getDisplay(), mWallpaperSurface.getHostToken());
- host.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
+ mHost.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
mHomeImageWallpaper.getHeight());
- mWallpaperSurface.setChildSurfacePackage(host.getSurfacePackage());
+ mWallpaperSurface.setChildSurfacePackage(mHost.getSurfacePackage());
}
}
@@ -736,6 +741,13 @@
@Override
public void surfaceDestroyed(SurfaceHolder holder) { }
+
+ public void cleanUp() {
+ if (mHost != null) {
+ mHost.release();
+ mHost = null;
+ }
+ }
};
private static class PreviewPagerAdapter extends PagerAdapter {
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index 5ff2dbb..a469bd1 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -77,6 +77,8 @@
private static final float DEFAULT_WALLPAPER_MAX_ZOOM = 8f;
private final Handler mHandler = new Handler();
+ private final WallpaperSurfaceCallback mWallpaperSurfaceCallback =
+ new WallpaperSurfaceCallback();
private SubsamplingScaleImageView mFullResImageView;
private Asset mWallpaperAsset;
@@ -227,6 +229,7 @@
}
mFullResImageView.recycle();
+ mWallpaperSurfaceCallback.cleanUp();
mWorkspaceSurfaceCallback.cleanUp();
}
@@ -425,10 +428,10 @@
mWallpaperSurface.getHolder().addCallback(mWallpaperSurfaceCallback);
}
- // TODO(tracyzhou): Refactor this into a utility class.
- private final SurfaceHolder.Callback mWallpaperSurfaceCallback = new SurfaceHolder.Callback() {
+ private class WallpaperSurfaceCallback implements SurfaceHolder.Callback {
private Surface mLastSurface;
+ private SurfaceControlViewHost mHost;
@Override
public void surfaceCreated(SurfaceHolder holder) {
@@ -448,11 +451,12 @@
mWallpaperSurface.getHeight());
mTouchForwardingLayout.setTargetView(mFullResImageView);
- SurfaceControlViewHost host = new SurfaceControlViewHost(getContext(),
+ cleanUp();
+ mHost = new SurfaceControlViewHost(getContext(),
getContext().getDisplay(), mWallpaperSurface.getHostToken());
- host.setView(wallpaperPreviewContainer, wallpaperPreviewContainer.getWidth(),
+ mHost.setView(wallpaperPreviewContainer, wallpaperPreviewContainer.getWidth(),
wallpaperPreviewContainer.getHeight());
- mWallpaperSurface.setChildSurfacePackage(host.getSurfacePackage());
+ mWallpaperSurface.setChildSurfacePackage(mHost.getSurfacePackage());
}
}
@@ -461,6 +465,13 @@
@Override
public void surfaceDestroyed(SurfaceHolder holder) { }
+
+ public void cleanUp() {
+ if (mHost != null) {
+ mHost.release();
+ mHost = null;
+ }
+ }
};
private void setEditingEnabled(boolean enabled) {