Uses WorkspaceSurfaceHolderCallback for GridPreviewer

Video: https://drive.google.com/file/d/1XW8tM3HBvnDSOHHi4ORn1_XpvEd9joDc/view?usp=sharing

Test: Manually
Fixes: 158163054
Change-Id: Icda7685e3066215fbcd16a50ba0a094d1a92a280
diff --git a/src/com/android/customization/picker/grid/GridOptionPreviewer.java b/src/com/android/customization/picker/grid/GridOptionPreviewer.java
index 5f6ef20..47303e9 100644
--- a/src/com/android/customization/picker/grid/GridOptionPreviewer.java
+++ b/src/com/android/customization/picker/grid/GridOptionPreviewer.java
@@ -15,9 +15,8 @@
  */
 package com.android.customization.picker.grid;
 
+import android.content.Context;
 import android.os.Bundle;
-import android.os.Message;
-import android.os.RemoteException;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
@@ -25,19 +24,18 @@
 
 import com.android.customization.model.grid.GridOption;
 import com.android.customization.model.grid.GridOptionsManager;
+import com.android.wallpaper.picker.WorkspaceSurfaceHolderCallback;
 import com.android.wallpaper.util.SurfaceViewUtils;
 
 /** A class to load the {@link GridOption} preview to the view. */
 class GridOptionPreviewer {
 
-    private final WorkspaceSurfaceHolderCallback mSurfaceCallback =
-            new WorkspaceSurfaceHolderCallback();
-
     private final GridOptionsManager mGridManager;
     private final ViewGroup mPreviewContainer;
 
     private SurfaceView mGridOptionSurface;
     private GridOption mGridOption;
+    private GridOptionSurfaceHolderCallback mSurfaceCallback;
 
     GridOptionPreviewer(GridOptionsManager gridManager, ViewGroup previewContainer) {
         mGridManager = gridManager;
@@ -69,53 +67,38 @@
     private void updateWorkspacePreview() {
         // Reattach SurfaceView to trigger #surfaceCreated to update preview for different option.
         mPreviewContainer.removeAllViews();
-        mSurfaceCallback.mLastSurface = null;
+        if (mSurfaceCallback != null) {
+            mSurfaceCallback.resetLastSurface();
+        }
         if (mGridOptionSurface == null) {
             mGridOptionSurface = new SurfaceView(mPreviewContainer.getContext());
             mGridOptionSurface.setLayoutParams(new ViewGroup.LayoutParams(
                     ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
             mGridOptionSurface.setZOrderMediaOverlay(true);
+            mSurfaceCallback = new GridOptionSurfaceHolderCallback(mGridOptionSurface,
+                    mGridOptionSurface.getContext());
             mGridOptionSurface.getHolder().addCallback(mSurfaceCallback);
         }
         mPreviewContainer.addView(mGridOptionSurface);
     }
 
-    // TODO(158163054): Refactor and use with WorkspaceSurfaceHolderCallback.
-    private class WorkspaceSurfaceHolderCallback implements SurfaceHolder.Callback {
-        private Surface mLastSurface;
-        private Message mCallback;
+    private class GridOptionSurfaceHolderCallback extends WorkspaceSurfaceHolderCallback {
+        private GridOptionSurfaceHolderCallback(SurfaceView workspaceSurface, Context context) {
+            super(workspaceSurface, context);
+        }
 
         @Override
         public void surfaceCreated(SurfaceHolder holder) {
-            if (mLastSurface != holder.getSurface() && mGridOption != null) {
-                mLastSurface = holder.getSurface();
-                Bundle result = mGridManager.renderPreview(
-                        SurfaceViewUtils.createSurfaceViewRequest(mGridOptionSurface),
-                        mGridOption.name);
-                if (result != null) {
-                    mGridOptionSurface.setChildSurfacePackage(
-                            SurfaceViewUtils.getSurfacePackage(result));
-                    mCallback = SurfaceViewUtils.getCallback(result);
-                }
+            if (mGridOption != null) {
+                super.surfaceCreated(holder);
             }
         }
 
         @Override
-        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
-
-        @Override
-        public void surfaceDestroyed(SurfaceHolder holder) {}
-
-        public void cleanUp() {
-            if (mCallback != null) {
-                try {
-                    mCallback.replyTo.send(mCallback);
-                } catch (RemoteException e) {
-                    e.printStackTrace();
-                } finally {
-                    mCallback = null;
-                }
-            }
+        protected Bundle renderPreview(SurfaceView workspaceSurface) {
+            return mGridManager.renderPreview(
+                    SurfaceViewUtils.createSurfaceViewRequest(workspaceSurface),
+                    mGridOption.name);
         }
     }
 }