From b4ca0dcbd6b5b4df4e7b4af1b796652b36e1b296 Mon Sep 17 00:00:00 2001 From: Kris Chen Date: Mon, 24 Jan 2022 22:37:44 +0800 Subject: [PATCH] Transform UDFPS touch coordinates to portrait mode Bug: 215810673 Test: manual on device Change-Id: Ia88a3e2e3fcba4f503cb4f8b746653eae9ad9d25 --- .../systemui/biometrics/UdfpsController.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index d20844143ad61..928be68ceef95 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -28,6 +28,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.graphics.Point; import android.graphics.RectF; import android.hardware.biometrics.SensorLocationInternal; import android.hardware.display.DisplayManager; @@ -45,6 +46,7 @@ import android.os.Vibrator; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; +import android.view.Surface; import android.view.VelocityTracker; import android.view.View; import android.view.WindowManager; @@ -414,8 +416,33 @@ public class UdfpsController implements DozeReceiver { final long sinceLastLog = mSystemClock.elapsedRealtime() - mTouchLogTime; if (!isIlluminationRequested && !mGoodCaptureReceived && !exceedsVelocityThreshold) { - onFingerDown((int) event.getRawX(), (int) event.getRawY(), minor, - major); + final int rawX = (int) event.getRawX(); + final int rawY = (int) event.getRawY(); + // Default coordinates assume portrait mode. + int x = rawX; + int y = rawY; + + // Gets the size based on the current rotation of the display. + Point p = new Point(); + mContext.getDisplay().getRealSize(p); + + // Transform x, y to portrait mode if the device is in landscape mode. + switch (mContext.getDisplay().getRotation()) { + case Surface.ROTATION_90: + x = p.y - rawY; + y = rawX; + break; + + case Surface.ROTATION_270: + x = rawY; + y = p.x - rawX; + break; + + default: + // Do nothing to stay in portrait mode. + } + + onFingerDown(x, y, minor, major); Log.v(TAG, "onTouch | finger down: " + touchInfo); mTouchLogTime = mSystemClock.elapsedRealtime(); mPowerManager.userActivity(mSystemClock.uptimeMillis(),