Merge "Switch to public API for surface view when rendering preview" into ub-launcher3-master
diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java
index a334f5e..b0e0787 100644
--- a/src/com/android/customization/model/grid/GridOptionsManager.java
+++ b/src/com/android/customization/model/grid/GridOptionsManager.java
@@ -67,8 +67,8 @@
     }
 
     /** Call through content provider API to render preview */
-    public void renderPreview(Bundle bundle, String gridName) {
-        mProvider.renderPreview(gridName, bundle);
+    public Bundle renderPreview(Bundle bundle, String gridName) {
+        return mProvider.renderPreview(gridName, bundle);
     }
 
     private static class FetchTask extends AsyncTask<Void, Void, Pair<List<GridOption>, String>> {
diff --git a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
index 7d1d5cd..70a8fc8 100644
--- a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
+++ b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
@@ -118,9 +118,9 @@
      * @param bundle    surface view request bundle generated from
      *                  {@link SurfaceViewRequestUtils#createSurfaceBundle(SurfaceView)}.
      */
-    void renderPreview(String name, Bundle bundle) {
+    Bundle renderPreview(String name, Bundle bundle) {
         bundle.putString("name", name);
-        mPreviewUtils.renderPreview(bundle);
+        return mPreviewUtils.renderPreview(bundle);
     }
 
     int applyGrid(String name) {
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java
index 7a01f26..8a4f4b0 100644
--- a/src/com/android/customization/picker/grid/GridFragment.java
+++ b/src/com/android/customization/picker/grid/GridFragment.java
@@ -23,6 +23,8 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.Message;
+import android.os.RemoteException;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -47,7 +49,6 @@
 import com.android.customization.picker.BasePreviewAdapter;
 import com.android.customization.picker.BasePreviewAdapter.PreviewPage;
 import com.android.customization.widget.OptionSelectorController;
-import com.android.systemui.shared.system.SurfaceViewRequestUtils;
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
 import com.android.wallpaper.asset.ContentUriAsset;
@@ -55,6 +56,7 @@
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.util.SurfaceViewUtils;
 import com.android.wallpaper.widget.PreviewPager;
 
 import com.bumptech.glide.Glide;
@@ -282,11 +284,18 @@
             if (usesSurfaceViewForPreview) {
                 mPreviewSurface.setZOrderOnTop(true);
                 mPreviewSurface.getHolder().addCallback(new SurfaceHolder.Callback() {
+
+                    private Message mCallback;
+
                     @Override
                     public void surfaceCreated(SurfaceHolder holder) {
-                        Bundle bundle = SurfaceViewRequestUtils.createSurfaceBundle(
-                                mPreviewSurface);
-                        mGridManager.renderPreview(bundle, mName);
+                        Bundle result = mGridManager.renderPreview(
+                                SurfaceViewUtils.createSurfaceViewRequest(mPreviewSurface), mName);
+                        if (result != null) {
+                            mPreviewSurface.setChildSurfacePackage(
+                                    SurfaceViewUtils.getSurfacePackage(result));
+                            mCallback = SurfaceViewUtils.getCallback(result);
+                        }
                     }
 
                     @Override
@@ -294,7 +303,17 @@
                             int height) {}
 
                     @Override
-                    public void surfaceDestroyed(SurfaceHolder holder) {}
+                    public void surfaceDestroyed(SurfaceHolder holder) {
+                        if (mCallback != null) {
+                            try {
+                                mCallback.replyTo.send(mCallback);
+                            } catch (RemoteException e) {
+                                e.printStackTrace();
+                            } finally {
+                                mCallback = null;
+                            }
+                        }
+                    }
                 });
             } else {
                 mPreviewAsset.loadDrawableWithTransition(mActivity,