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);
         }
     }
 }
