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

Commit af5b4f47 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Fixing a memory leak in accessibility enteraction APIs.

1. AccessibilityInteractionConnection was non-static inner
class, hence keeping a handle to the enclosing ViewRootImpl
resulting in leaking activities.

bug:5525412

Change-Id: Ie438861663d623d503995844125d9e15d677fc32
parent 2333a02e
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -4473,19 +4473,20 @@ public final class ViewRootImpl extends Handler implements ViewParent,
     * AccessibilityManagerService to the latter can interact with
     * the view hierarchy in this ViewAncestor.
     */
    final class AccessibilityInteractionConnection
    static final class AccessibilityInteractionConnection
            extends IAccessibilityInteractionConnection.Stub {
        private final WeakReference<ViewRootImpl> mViewAncestor;
        private final WeakReference<ViewRootImpl> mRootImpl;

        AccessibilityInteractionConnection(ViewRootImpl viewAncestor) {
            mViewAncestor = new WeakReference<ViewRootImpl>(viewAncestor);
            mRootImpl = new WeakReference<ViewRootImpl>(viewAncestor);
        }

        public void findAccessibilityNodeInfoByAccessibilityId(int accessibilityId,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int interrogatingPid, long interrogatingTid) {
            if (mViewAncestor.get() != null) {
                getAccessibilityInteractionController()
            ViewRootImpl viewRootImpl = mRootImpl.get();
            if (viewRootImpl != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfoByAccessibilityIdClientThread(accessibilityId,
                        interactionId, callback, interrogatingPid, interrogatingTid);
            }
@@ -4494,8 +4495,9 @@ public final class ViewRootImpl extends Handler implements ViewParent,
        public void performAccessibilityAction(int accessibilityId, int action,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int interogatingPid, long interrogatingTid) {
            if (mViewAncestor.get() != null) {
                getAccessibilityInteractionController()
            ViewRootImpl viewRootImpl = mRootImpl.get();
            if (viewRootImpl != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .performAccessibilityActionClientThread(accessibilityId, action, interactionId,
                            callback, interogatingPid, interrogatingTid);
            }
@@ -4504,8 +4506,9 @@ public final class ViewRootImpl extends Handler implements ViewParent,
        public void findAccessibilityNodeInfoByViewId(int viewId,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int interrogatingPid, long interrogatingTid) {
            if (mViewAncestor.get() != null) {
                getAccessibilityInteractionController()
            ViewRootImpl viewRootImpl = mRootImpl.get();
            if (viewRootImpl != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfoByViewIdClientThread(viewId, interactionId, callback,
                            interrogatingPid, interrogatingTid);
            }
@@ -4514,8 +4517,9 @@ public final class ViewRootImpl extends Handler implements ViewParent,
        public void findAccessibilityNodeInfosByViewText(String text, int accessibilityId,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int interrogatingPid, long interrogatingTid) {
            if (mViewAncestor.get() != null) {
                getAccessibilityInteractionController()
            ViewRootImpl viewRootImpl = mRootImpl.get();
            if (viewRootImpl != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfosByViewTextClientThread(text, accessibilityId,
                            interactionId, callback, interrogatingPid, interrogatingTid);
            }