1 package org.robolectric.shadows; 2 3 import android.graphics.Canvas; 4 import android.graphics.PixelFormat; 5 import android.graphics.Rect; 6 import android.view.Surface; 7 import android.view.SurfaceHolder; 8 import android.view.SurfaceView; 9 import java.util.HashSet; 10 import java.util.Set; 11 import org.robolectric.annotation.Implementation; 12 import org.robolectric.annotation.Implements; 13 14 @Implements(SurfaceView.class) 15 @SuppressWarnings({"UnusedDeclaration"}) 16 public class ShadowSurfaceView extends ShadowView { 17 private final FakeSurfaceHolder fakeSurfaceHolder = new FakeSurfaceHolder(); 18 19 @Implementation onAttachedToWindow()20 protected void onAttachedToWindow() {} 21 22 @Implementation getHolder()23 protected SurfaceHolder getHolder() { 24 return fakeSurfaceHolder; 25 } 26 getFakeSurfaceHolder()27 public FakeSurfaceHolder getFakeSurfaceHolder() { 28 return fakeSurfaceHolder; 29 } 30 31 /** Robolectric implementation of {@link android.view.SurfaceHolder}. */ 32 public static class FakeSurfaceHolder implements SurfaceHolder { 33 private final Set<Callback> callbacks = new HashSet<>(); 34 // The default format is RGB_565. 35 private int requestedFormat = PixelFormat.RGB_565; 36 37 @Override addCallback(Callback callback)38 public void addCallback(Callback callback) { 39 callbacks.add(callback); 40 } 41 getCallbacks()42 public Set<Callback> getCallbacks() { 43 return callbacks; 44 } 45 46 @Override removeCallback(Callback callback)47 public void removeCallback(Callback callback) { 48 callbacks.remove(callback); 49 } 50 51 @Override isCreating()52 public boolean isCreating() { 53 return false; 54 } 55 56 @Override setType(int i)57 public void setType(int i) {} 58 59 @Override setFixedSize(int i, int i1)60 public void setFixedSize(int i, int i1) {} 61 62 @Override setSizeFromLayout()63 public void setSizeFromLayout() {} 64 65 @Override setFormat(int format)66 public void setFormat(int format) { 67 if (format == PixelFormat.OPAQUE) { 68 requestedFormat = PixelFormat.RGB_565; 69 } else { 70 requestedFormat = format; 71 } 72 } 73 74 @Override setKeepScreenOn(boolean b)75 public void setKeepScreenOn(boolean b) {} 76 77 @Override lockCanvas()78 public Canvas lockCanvas() { 79 return null; 80 } 81 82 @Override lockCanvas(Rect rect)83 public Canvas lockCanvas(Rect rect) { 84 return null; 85 } 86 87 @Override unlockCanvasAndPost(Canvas canvas)88 public void unlockCanvasAndPost(Canvas canvas) {} 89 90 @Override getSurfaceFrame()91 public Rect getSurfaceFrame() { 92 return null; 93 } 94 95 @Override getSurface()96 public Surface getSurface() { 97 return null; 98 } 99 100 /** 101 * Retrieve the requested format by the developers or by Android Frameworks internal logic. 102 * 103 * @return The requested format, and the default value is {@link PixelFormat#RGB_565}. 104 * @see PixelFormat 105 */ getRequestedFormat()106 public int getRequestedFormat() { 107 return requestedFormat; 108 } 109 } 110 } 111