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

Commit f0e57e10 authored by Svetoslav's avatar Svetoslav Committed by Android (Google) Code Review
Browse files

Merge "Fix AccessibilityNode's isVisibleToUser behavior." into lmp-dev

parents a42c0de9 9ae9ed24
Loading
Loading
Loading
Loading
+51 −7
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package android.view;


import android.graphics.Point;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler;
@@ -96,7 +97,7 @@ final class AccessibilityInteractionController {
    }
    }


    public void findAccessibilityNodeInfoByAccessibilityIdClientThread(
    public void findAccessibilityNodeInfoByAccessibilityIdClientThread(
            long accessibilityNodeId, int interactionId,
            long accessibilityNodeId, Region interactiveRegion, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
            long interrogatingTid, MagnificationSpec spec) {
            long interrogatingTid, MagnificationSpec spec) {
        Message message = mHandler.obtainMessage();
        Message message = mHandler.obtainMessage();
@@ -109,6 +110,7 @@ final class AccessibilityInteractionController {
        args.argi3 = interactionId;
        args.argi3 = interactionId;
        args.arg1 = callback;
        args.arg1 = callback;
        args.arg2 = spec;
        args.arg2 = spec;
        args.arg3 = interactiveRegion;
        message.obj = args;
        message.obj = args;


        // If the interrogation is performed by the same thread as the main UI
        // If the interrogation is performed by the same thread as the main UI
@@ -133,6 +135,7 @@ final class AccessibilityInteractionController {
        final IAccessibilityInteractionConnectionCallback callback =
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;
            (IAccessibilityInteractionConnectionCallback) args.arg1;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final Region interactiveRegion = (Region) args.arg3;


        args.recycle();
        args.recycle();


@@ -159,6 +162,7 @@ final class AccessibilityInteractionController {
                if (spec != null) {
                if (spec != null) {
                    spec.recycle();
                    spec.recycle();
                }
                }
                adjustIsVisibleToUserIfNeeded(infos, interactiveRegion);
                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
                infos.clear();
                infos.clear();
            } catch (RemoteException re) {
            } catch (RemoteException re) {
@@ -168,8 +172,9 @@ final class AccessibilityInteractionController {
    }
    }


    public void findAccessibilityNodeInfosByViewIdClientThread(long accessibilityNodeId,
    public void findAccessibilityNodeInfosByViewIdClientThread(long accessibilityNodeId,
            String viewId, int interactionId, IAccessibilityInteractionConnectionCallback callback,
            String viewId, Region interactiveRegion, int interactionId,
            int flags, int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
            long interrogatingTid, MagnificationSpec spec) {
        Message message = mHandler.obtainMessage();
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID;
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID;
        message.arg1 = flags;
        message.arg1 = flags;
@@ -180,6 +185,7 @@ final class AccessibilityInteractionController {
        args.arg1 = callback;
        args.arg1 = callback;
        args.arg2 = spec;
        args.arg2 = spec;
        args.arg3 = viewId;
        args.arg3 = viewId;
        args.arg4 = interactiveRegion;


        message.obj = args;
        message.obj = args;


@@ -205,6 +211,7 @@ final class AccessibilityInteractionController {
            (IAccessibilityInteractionConnectionCallback) args.arg1;
            (IAccessibilityInteractionConnectionCallback) args.arg1;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final String viewId = (String) args.arg3;
        final String viewId = (String) args.arg3;
        final Region interactiveRegion = (Region) args.arg4;


        args.recycle();
        args.recycle();


@@ -241,6 +248,7 @@ final class AccessibilityInteractionController {
                if (spec != null) {
                if (spec != null) {
                    spec.recycle();
                    spec.recycle();
                }
                }
                adjustIsVisibleToUserIfNeeded(infos, interactiveRegion);
                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                /* ignore - the other side will time out */
                /* ignore - the other side will time out */
@@ -249,8 +257,9 @@ final class AccessibilityInteractionController {
    }
    }


    public void findAccessibilityNodeInfosByTextClientThread(long accessibilityNodeId,
    public void findAccessibilityNodeInfosByTextClientThread(long accessibilityNodeId,
            String text, int interactionId, IAccessibilityInteractionConnectionCallback callback,
            String text, Region interactiveRegion, int interactionId,
            int flags, int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
            long interrogatingTid, MagnificationSpec spec) {
        Message message = mHandler.obtainMessage();
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT;
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT;
        message.arg1 = flags;
        message.arg1 = flags;
@@ -262,6 +271,7 @@ final class AccessibilityInteractionController {
        args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
        args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
        args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi3 = interactionId;
        args.argi3 = interactionId;
        args.arg4 = interactiveRegion;
        message.obj = args;
        message.obj = args;


        // If the interrogation is performed by the same thread as the main UI
        // If the interrogation is performed by the same thread as the main UI
@@ -287,6 +297,7 @@ final class AccessibilityInteractionController {
        final int accessibilityViewId = args.argi1;
        final int accessibilityViewId = args.argi1;
        final int virtualDescendantId = args.argi2;
        final int virtualDescendantId = args.argi2;
        final int interactionId = args.argi3;
        final int interactionId = args.argi3;
        final Region interactiveRegion = (Region) args.arg4;
        args.recycle();
        args.recycle();


        List<AccessibilityNodeInfo> infos = null;
        List<AccessibilityNodeInfo> infos = null;
@@ -347,6 +358,7 @@ final class AccessibilityInteractionController {
                if (spec != null) {
                if (spec != null) {
                    spec.recycle();
                    spec.recycle();
                }
                }
                adjustIsVisibleToUserIfNeeded(infos, interactiveRegion);
                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                /* ignore - the other side will time out */
                /* ignore - the other side will time out */
@@ -354,7 +366,8 @@ final class AccessibilityInteractionController {
        }
        }
    }
    }


    public void findFocusClientThread(long accessibilityNodeId, int focusType, int interactionId,
    public void findFocusClientThread(long accessibilityNodeId, int focusType,
            Region interactiveRegion, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interogatingPid,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interogatingPid,
            long interrogatingTid, MagnificationSpec spec) {
            long interrogatingTid, MagnificationSpec spec) {
        Message message = mHandler.obtainMessage();
        Message message = mHandler.obtainMessage();
@@ -368,6 +381,7 @@ final class AccessibilityInteractionController {
        args.argi3 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi3 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.arg1 = callback;
        args.arg1 = callback;
        args.arg2 = spec;
        args.arg2 = spec;
        args.arg3 = interactiveRegion;


        message.obj = args;
        message.obj = args;


@@ -394,6 +408,7 @@ final class AccessibilityInteractionController {
        final IAccessibilityInteractionConnectionCallback callback =
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;
            (IAccessibilityInteractionConnectionCallback) args.arg1;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final Region interactiveRegion = (Region) args.arg3;
        args.recycle();
        args.recycle();


        AccessibilityNodeInfo focused = null;
        AccessibilityNodeInfo focused = null;
@@ -457,6 +472,7 @@ final class AccessibilityInteractionController {
                if (spec != null) {
                if (spec != null) {
                    spec.recycle();
                    spec.recycle();
                }
                }
                adjustIsVisibleToUserIfNeeded(focused, interactiveRegion);
                callback.setFindAccessibilityNodeInfoResult(focused, interactionId);
                callback.setFindAccessibilityNodeInfoResult(focused, interactionId);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                /* ignore - the other side will time out */
                /* ignore - the other side will time out */
@@ -464,7 +480,8 @@ final class AccessibilityInteractionController {
        }
        }
    }
    }


    public void focusSearchClientThread(long accessibilityNodeId, int direction, int interactionId,
    public void focusSearchClientThread(long accessibilityNodeId, int direction,
            Region interactiveRegion, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interogatingPid,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interogatingPid,
            long interrogatingTid, MagnificationSpec spec) {
            long interrogatingTid, MagnificationSpec spec) {
        Message message = mHandler.obtainMessage();
        Message message = mHandler.obtainMessage();
@@ -477,6 +494,7 @@ final class AccessibilityInteractionController {
        args.argi3 = interactionId;
        args.argi3 = interactionId;
        args.arg1 = callback;
        args.arg1 = callback;
        args.arg2 = spec;
        args.arg2 = spec;
        args.arg3 = interactiveRegion;


        message.obj = args;
        message.obj = args;


@@ -502,6 +520,7 @@ final class AccessibilityInteractionController {
        final IAccessibilityInteractionConnectionCallback callback =
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;
            (IAccessibilityInteractionConnectionCallback) args.arg1;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final MagnificationSpec spec = (MagnificationSpec) args.arg2;
        final Region interactiveRegion = (Region) args.arg3;


        args.recycle();
        args.recycle();


@@ -530,6 +549,7 @@ final class AccessibilityInteractionController {
                if (spec != null) {
                if (spec != null) {
                    spec.recycle();
                    spec.recycle();
                }
                }
                adjustIsVisibleToUserIfNeeded(next, interactiveRegion);
                callback.setFindAccessibilityNodeInfoResult(next, interactionId);
                callback.setFindAccessibilityNodeInfoResult(next, interactionId);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                /* ignore - the other side will time out */
                /* ignore - the other side will time out */
@@ -644,6 +664,30 @@ final class AccessibilityInteractionController {
        }
        }
    }
    }


    private void adjustIsVisibleToUserIfNeeded(List<AccessibilityNodeInfo> infos,
            Region interactiveRegion) {
        if (interactiveRegion == null || infos == null) {
            return;
        }
        final int infoCount = infos.size();
        for (int i = 0; i < infoCount; i++) {
            AccessibilityNodeInfo info = infos.get(i);
            adjustIsVisibleToUserIfNeeded(info, interactiveRegion);
        }
    }

    private void adjustIsVisibleToUserIfNeeded(AccessibilityNodeInfo info,
            Region interactiveRegion) {
        if (interactiveRegion == null || info == null) {
            return;
        }
        Rect boundsInScreen = mTempRect;
        info.getBoundsInScreen(boundsInScreen);
        if (interactiveRegion.quickReject(boundsInScreen)) {
            info.setVisibleToUser(false);
        }
    }

    private void applyAppScaleAndMagnificationSpecIfNeeded(AccessibilityNodeInfo info,
    private void applyAppScaleAndMagnificationSpecIfNeeded(AccessibilityNodeInfo info,
            MagnificationSpec spec) {
            MagnificationSpec spec) {
        if (info == null) {
        if (info == null) {
+21 −17
Original line number Original line Diff line number Diff line
@@ -6629,14 +6629,15 @@ public final class ViewRootImpl implements ViewParent,


        @Override
        @Override
        public void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId,
        public void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId,
                int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
                Region interactiveRegion, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfoByAccessibilityIdClientThread(accessibilityNodeId,
                    .findAccessibilityNodeInfoByAccessibilityIdClientThread(accessibilityNodeId,
                            interactionId, callback, flags, interrogatingPid, interrogatingTid,
                            interactiveRegion, interactionId, callback, flags, interrogatingPid,
                            spec);
                            interrogatingTid, spec);
            } else {
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                // We cannot make the call and notify the caller so it does not wait.
                try {
                try {
@@ -6669,15 +6670,15 @@ public final class ViewRootImpl implements ViewParent,


        @Override
        @Override
        public void findAccessibilityNodeInfosByViewId(long accessibilityNodeId,
        public void findAccessibilityNodeInfosByViewId(long accessibilityNodeId,
                String viewId, int interactionId,
                String viewId, Region interactiveRegion, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfosByViewIdClientThread(accessibilityNodeId,
                    .findAccessibilityNodeInfosByViewIdClientThread(accessibilityNodeId,
                            viewId, interactionId, callback, flags, interrogatingPid,
                            viewId, interactiveRegion, interactionId, callback, flags,
                            interrogatingTid, spec);
                            interrogatingPid, interrogatingTid, spec);
            } else {
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                // We cannot make the call and notify the caller so it does not wait.
                try {
                try {
@@ -6690,14 +6691,15 @@ public final class ViewRootImpl implements ViewParent,


        @Override
        @Override
        public void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text,
        public void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text,
                int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
                Region interactiveRegion, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfosByTextClientThread(accessibilityNodeId, text,
                    .findAccessibilityNodeInfosByTextClientThread(accessibilityNodeId, text,
                            interactionId, callback, flags, interrogatingPid, interrogatingTid,
                            interactiveRegion, interactionId, callback, flags, interrogatingPid,
                            spec);
                            interrogatingTid, spec);
            } else {
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                // We cannot make the call and notify the caller so it does not wait.
                try {
                try {
@@ -6709,14 +6711,15 @@ public final class ViewRootImpl implements ViewParent,
        }
        }


        @Override
        @Override
        public void findFocus(long accessibilityNodeId, int focusType, int interactionId,
        public void findFocus(long accessibilityNodeId, int focusType, Region interactiveRegion,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                viewRootImpl.getAccessibilityInteractionController()
                    .findFocusClientThread(accessibilityNodeId, focusType, interactionId, callback,
                    .findFocusClientThread(accessibilityNodeId, focusType, interactiveRegion,
                            flags, interrogatingPid, interrogatingTid, spec);
                            interactionId, callback, flags, interrogatingPid, interrogatingTid,
                            spec);
            } else {
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                // We cannot make the call and notify the caller so it does not wait.
                try {
                try {
@@ -6728,14 +6731,15 @@ public final class ViewRootImpl implements ViewParent,
        }
        }


        @Override
        @Override
        public void focusSearch(long accessibilityNodeId, int direction, int interactionId,
        public void focusSearch(long accessibilityNodeId, int direction, Region interactiveRegion,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
                int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                viewRootImpl.getAccessibilityInteractionController()
                    .focusSearchClientThread(accessibilityNodeId, direction, interactionId,
                    .focusSearchClientThread(accessibilityNodeId, direction, interactiveRegion,
                            callback, flags, interrogatingPid, interrogatingTid, spec);
                            interactionId, callback, flags, interrogatingPid, interrogatingTid,
                            spec);
            } else {
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                // We cannot make the call and notify the caller so it does not wait.
                try {
                try {
+10 −9
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package android.view.accessibility;
package android.view.accessibility;


import android.graphics.Region;
import android.os.Bundle;
import android.os.Bundle;
import android.view.MagnificationSpec;
import android.view.MagnificationSpec;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -29,23 +30,23 @@ import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
 */
 */
oneway interface IAccessibilityInteractionConnection {
oneway interface IAccessibilityInteractionConnection {


    void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId, int interactionId,
    void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId, in Region bounds,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
        long interrogatingTid, in MagnificationSpec spec);
        int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);


    void findAccessibilityNodeInfosByViewId(long accessibilityNodeId, String viewId,
    void findAccessibilityNodeInfosByViewId(long accessibilityNodeId, String viewId,
        in Region bounds, int interactionId, IAccessibilityInteractionConnectionCallback callback,
        int flags, int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);

    void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text, in Region bounds,
        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
        int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);
        int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);


    void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text, int interactionId,
    void findFocus(long accessibilityNodeId, int focusType, in Region bounds, int interactionId,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid, in MagnificationSpec spec);

    void findFocus(long accessibilityNodeId, int focusType, int interactionId,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid, in MagnificationSpec spec);
        long interrogatingTid, in MagnificationSpec spec);


    void focusSearch(long accessibilityNodeId, int direction, int interactionId,
    void focusSearch(long accessibilityNodeId, int direction, in Region bounds, int interactionId,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid, in MagnificationSpec spec);
        long interrogatingTid, in MagnificationSpec spec);


+74 −10

File changed.

Preview size limit exceeded, changes collapsed.