Reintroduce WCG drawing if supported

As introduced in ag/9752181 for the GLEngine of ImageWallpaper, the CanvasEngine now checks for WallpaperManager#wallpaperSupportsWcg and draw in WCG mode if this returns true.

Test: manual
Bug: 243402530
Change-Id: Icaa06d9cacf39471b9021b3603908771170acfa9
diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java
index 6b3beeb..42d7d52 100644
--- a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java
@@ -528,6 +528,7 @@
         @VisibleForTesting
         static final int MIN_SURFACE_HEIGHT = 128;
         private Bitmap mBitmap;
+        private boolean mWideColorGamut = false;
 
         /*
          * Counter to unload the bitmap as soon as possible.
@@ -674,14 +675,16 @@
         @VisibleForTesting
         void drawFrameOnCanvas(Bitmap bitmap) {
             Trace.beginSection("ImageWallpaper.CanvasEngine#drawFrame");
-            // TODO change SurfaceHolder API to add wcg support
-            Canvas c = mSurfaceHolder.lockHardwareCanvas();
-            if (c != null) {
+            Surface surface = mSurfaceHolder.getSurface();
+            Canvas canvas = mWideColorGamut
+                    ? surface.lockHardwareWideColorGamutCanvas()
+                    : surface.lockHardwareCanvas();
+            if (canvas != null) {
                 Rect dest = mSurfaceHolder.getSurfaceFrame();
                 try {
-                    c.drawBitmap(bitmap, null, dest, null);
+                    canvas.drawBitmap(bitmap, null, dest, null);
                 } finally {
-                    mSurfaceHolder.unlockCanvasAndPost(c);
+                    surface.unlockCanvasAndPost(canvas);
                 }
             }
             Trace.endSection();
@@ -778,6 +781,8 @@
                     mBitmap.recycle();
                 }
                 mBitmap = bitmap;
+                mWideColorGamut = mWallpaperManager.wallpaperSupportsWcg(
+                        WallpaperManager.FLAG_SYSTEM);
 
                 // +2 usages for the color extraction and the delayed unload.
                 mBitmapUsages += 2;
@@ -839,10 +844,6 @@
         public void onOffsetsChanged(float xOffset, float yOffset,
                 float xOffsetStep, float yOffsetStep,
                 int xPixelOffset, int yPixelOffset) {
-            /*
-             * TODO check this formula. mPages is always >= 4, even when launcher is single-paged
-             * this formula is also used in the GL engine
-             */
             final int pages;
             if (xOffsetStep > 0 && xOffsetStep <= 1) {
                 pages = Math.round(1 / xOffsetStep) + 1;