[Magnifier-85] Test PixelCopy failure behavior

Bug: 132136368
Test: atest CtsWidgetTestCases:android.widget.cts.MagnifierTest
Change-Id: I08472e87bfa1dad839909800bccb4b991c7f1e5f
diff --git a/tests/tests/widget/src/android/widget/cts/MagnifierTest.java b/tests/tests/widget/src/android/widget/cts/MagnifierTest.java
index 3d05bf9..0264665 100644
--- a/tests/tests/widget/src/android/widget/cts/MagnifierTest.java
+++ b/tests/tests/widget/src/android/widget/cts/MagnifierTest.java
@@ -27,6 +27,7 @@
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Insets;
 import android.graphics.Point;
@@ -36,6 +37,8 @@
 import android.util.DisplayMetrics;
 import android.view.ContextThemeWrapper;
 import android.view.Gravity;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
 import android.view.View;
 import android.widget.HorizontalScrollView;
 import android.widget.LinearLayout;
@@ -343,6 +346,22 @@
                 magnifierPosition.y, PIXEL_COMPARISON_DELTA);
     }
 
+    @Test
+    public void testShow_whenPixelCopyFails() throws Throwable {
+        WidgetTestUtils.runOnMainAndLayoutSync(mActivityRule, () -> {
+            mActivity.setContentView(R.layout.magnifier_activity_centered_surfaceview_layout);
+        }, false /*forceLayout*/);
+        final View view = mActivity.findViewById(R.id.magnifier_centered_view);
+
+        runOnUiThreadAndWaitForCompletion(() -> mMagnifier = new Magnifier.Builder(view).build());
+        // The PixelCopy will fail as no draw has been done so far to the SurfaceView.
+        showMagnifier(0f, 0f);
+
+        assertNull(mMagnifier.getPosition());
+        assertNull(mMagnifier.getSourcePosition());
+        assertNull(mMagnifier.getContent());
+    }
+
     //***** Tests for #dismiss() *****//
 
     @Test
@@ -708,7 +727,15 @@
     public void testSourcePosition_respectsMaxInSurfaceBounds_forSurfaceView() throws Throwable {
         WidgetTestUtils.runOnMainAndLayoutSync(mActivityRule, () -> {
             mActivity.setContentView(R.layout.magnifier_activity_centered_surfaceview_layout);
-        }, false /*forceLayout*/);
+        }, false /* forceLayout */);
+        WidgetTestUtils.runOnMainAndLayoutSync(mActivityRule, () -> {
+            // Draw something in the SurfaceView for the Magnifier to copy.
+            final View view = mActivity.findViewById(R.id.magnifier_centered_view);
+            final SurfaceHolder surfaceHolder = ((SurfaceView) view).getHolder();
+            final Canvas canvas = surfaceHolder.lockHardwareCanvas();
+            canvas.drawColor(Color.BLUE);
+            surfaceHolder.unlockCanvasAndPost(canvas);
+        }, false /* forceLayout */);
         final View view = mActivity.findViewById(R.id.magnifier_centered_view);
         final Magnifier.Builder builder = new Magnifier.Builder(view)
                 .setSize(100, 100)