Turn UdfpView into a SurfaceView
Bug: 178533728
Test: No visible effect
Test: atest com.android.systemui.biometrics
Change-Id: I18ee39de70036ce308612fbf1c2b608bab19b58f
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java
index 265703e..96ecc7b 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java
@@ -27,6 +27,7 @@
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
+import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
@@ -34,20 +35,20 @@
import android.util.AttributeSet;
import android.util.Log;
import android.view.Surface;
-import android.view.View;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
import android.view.ViewTreeObserver;
import com.android.systemui.R;
import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.ScrimController;
/**
* A full screen view with a configurable illumination dot and scrim.
*/
-public class UdfpsView extends View implements DozeReceiver,
- StatusBarStateController.StateListener, ScrimController.ScrimChangedListener{
+public class UdfpsView extends SurfaceView implements DozeReceiver,
+ StatusBarStateController.StateListener, ScrimController.ScrimChangedListener {
private static final String TAG = "UdfpsView";
// Values in pixels.
@@ -86,6 +87,29 @@
// The runnable is reset to null after it's executed once.
@Nullable private Runnable mRunAfterShowingScrimAndDot;
+ @NonNull private final SurfaceHolder.Callback mSurfaceCallback = new SurfaceHolder.Callback() {
+ @Override
+ public void surfaceCreated(@NonNull SurfaceHolder holder) {
+ Log.d(TAG, "Surface created");
+ // SurfaceView sets this to true by default. We must set it to false to allow
+ // onDraw to be called
+ setWillNotDraw(false);
+ }
+
+ @Override
+ public void surfaceChanged(@NonNull SurfaceHolder holder, int format,
+ int width, int height) {
+
+ }
+
+ @Override
+ public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
+ Log.d(TAG, "Surface destroyed");
+ // Must not draw when the surface is destroyed
+ setWillNotDraw(true);
+ }
+ };
+
public UdfpsView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -102,6 +126,8 @@
a.recycle();
}
+ getHolder().addCallback(mSurfaceCallback);
+ getHolder().setFormat(PixelFormat.TRANSLUCENT);
mScrimRect = new Rect();
mScrimPaint = new Paint(0 /* flags */);