Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39095da3 authored by Hao Dong's avatar Hao Dong
Browse files

Do not announce a11y move instructions in sensor area.

Test: manually test by enabling talkback
Bug: 270437012
Change-Id: I548e9e51fb564c5969cf9665c1af945688a4607f
parent 51095e26
Loading
Loading
Loading
Loading
+35 −14
Original line number Diff line number Diff line
@@ -62,16 +62,7 @@ public class UdfpsUtils {
     */
    public Point getTouchInNativeCoordinates(int idx, MotionEvent event,
            UdfpsOverlayParams udfpsOverlayParams) {
        Point portraitTouch = new Point((int) event.getRawX(idx), (int) event.getRawY(idx));
        int rot = udfpsOverlayParams.getRotation();
        if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270) {
            RotationUtils.rotatePoint(
                    portraitTouch,
                    RotationUtils.deltaRotation(rot, Surface.ROTATION_0),
                    udfpsOverlayParams.getLogicalDisplayWidth(),
                    udfpsOverlayParams.getLogicalDisplayHeight()
            );
        }
        Point portraitTouch = getPortraitTouch(idx, event, udfpsOverlayParams);

        // Scale the coordinates to native resolution.
        float scale = udfpsOverlayParams.getScaleFactor();
@@ -80,14 +71,26 @@ public class UdfpsUtils {
        return portraitTouch;
    }

    /**
     * @param idx                The pointer identifier.
     * @param event              The MotionEvent object containing full information about the event.
     * @param udfpsOverlayParams The [UdfpsOverlayParams] used.
     * @return Whether the touch event is within sensor area.
     */
    public boolean isWithinSensorArea(int idx, MotionEvent event,
            UdfpsOverlayParams udfpsOverlayParams) {
        Point portraitTouch = getPortraitTouch(idx, event, udfpsOverlayParams);
        return udfpsOverlayParams.getSensorBounds().contains(portraitTouch.x, portraitTouch.y);
    }

    /**
     * This function computes the angle of touch relative to the sensor and maps the angle to a list
     * of help messages which are announced if accessibility is enabled.
     *
     * @return Whether the announcing string is null
     */
    public String onTouchOutsideOfSensorArea(boolean touchExplorationEnabled,
            Context context, int touchX, int touchY, UdfpsOverlayParams udfpsOverlayParams) {
    public String onTouchOutsideOfSensorArea(boolean touchExplorationEnabled, Context context,
            int scaledTouchX, int scaledTouchY, UdfpsOverlayParams udfpsOverlayParams) {
        if (!touchExplorationEnabled) {
            return null;
        }
@@ -106,8 +109,8 @@ public class UdfpsUtils {
        String theStr =
                onTouchOutsideOfSensorAreaImpl(
                        touchHints,
                        touchX,
                        touchY,
                        scaledTouchX,
                        scaledTouchY,
                        scaledSensorX,
                        scaledSensorY,
                        udfpsOverlayParams.getRotation()
@@ -156,4 +159,22 @@ public class UdfpsUtils {
        }
        return touchHints[index];
    }

    /**
     * Map the touch to portrait mode if the device is in landscape mode.
     */
    private Point getPortraitTouch(int idx, MotionEvent event,
            UdfpsOverlayParams udfpsOverlayParams) {
        Point portraitTouch = new Point((int) event.getRawX(idx), (int) event.getRawY(idx));
        int rot = udfpsOverlayParams.getRotation();
        if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270) {
            RotationUtils.rotatePoint(
                    portraitTouch,
                    RotationUtils.deltaRotation(rot, Surface.ROTATION_0),
                    udfpsOverlayParams.getLogicalDisplayWidth(),
                    udfpsOverlayParams.getLogicalDisplayHeight()
            );
        }
        return portraitTouch;
    }
}