diff options
5 files changed, 53 insertions, 0 deletions
diff --git a/bridge/src/android/view/accessibility/AccessibilityInteractionClient_Accessor.java b/bridge/src/android/view/accessibility/AccessibilityInteractionClient_Accessor.java new file mode 100644 index 0000000000..8c87c22e88 --- /dev/null +++ b/bridge/src/android/view/accessibility/AccessibilityInteractionClient_Accessor.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +public class AccessibilityInteractionClient_Accessor { + public static void clearCaches() { + AccessibilityInteractionClient.sCaches.clear(); + AccessibilityInteractionClient.sClients.clear(); + AccessibilityInteractionClient.sConnectionCache.clear(); + AccessibilityInteractionClient.sScrollingWindows.clear(); + AccessibilityInteractionClient.sDirectConnectionCount = 0; + } +} diff --git a/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java b/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java index 8048ff1e1a..98b59565f7 100644 --- a/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java +++ b/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java @@ -43,6 +43,7 @@ import android.view.IWindowManagerImpl; import android.view.Surface; import android.view.ViewConfiguration_Accessor; import android.view.WindowManagerGlobal_Delegate; +import android.view.accessibility.AccessibilityInteractionClient_Accessor; import android.view.inputmethod.InputMethodManager_Accessor; import java.util.Collections; @@ -313,6 +314,7 @@ public abstract class RenderAction<T extends RenderParams> { ParserFactory.setParserFactory(null); PropertyValuesHolder_Accessor.clearClassCaches(); + AccessibilityInteractionClient_Accessor.clearCaches(); } public static BridgeContext getCurrentContext() { diff --git a/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java index 034a92df75..9ed5d17531 100644 --- a/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +++ b/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java @@ -72,6 +72,8 @@ import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewParent; +import android.view.ViewRootImpl; +import android.view.ViewRootImpl_Accessor; import android.view.WindowManagerImpl; import android.widget.ActionMenuView; import android.widget.FrameLayout; @@ -1206,6 +1208,19 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { } } + @Override + public void release() { + super.release(); + if (mViewRoot == null) { + return; + } + ViewRootImpl viewRootImpl = mViewRoot.getViewRootImpl(); + if (viewRootImpl == null) { + return; + } + ViewRootImpl_Accessor.detachFromWindow(viewRootImpl); + } + private void disposeImageSurface() { if (mCanvas != null) { mCanvas.release(); diff --git a/bridge/tests/src/com/android/layoutlib/bridge/android/AccessibilityTest.java b/bridge/tests/src/com/android/layoutlib/bridge/android/AccessibilityTest.java index dc24d845ca..e1cad4ee2d 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/android/AccessibilityTest.java +++ b/bridge/tests/src/com/android/layoutlib/bridge/android/AccessibilityTest.java @@ -31,6 +31,7 @@ import org.junit.Test; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityNodeInfo; import java.io.FileNotFoundException; @@ -63,6 +64,7 @@ public class AccessibilityTest extends RenderTestBase { try { Result renderResult = session.render(50000); assertTrue(renderResult.isSuccess()); + assertEquals(0, AccessibilityInteractionClient.sConnectionCache.size()); View rootView = (View)session.getSystemRootViews().get(0).getViewObject(); AccessibilityNodeInfo rootNode = rootView.createAccessibilityNodeInfo(); assertNotNull(rootNode); @@ -148,6 +150,7 @@ public class AccessibilityTest extends RenderTestBase { try { Result renderResult = session.render(50000); assertTrue(renderResult.isSuccess()); + assertEquals(0, AccessibilityInteractionClient.sConnectionCache.size()); View rootView = (View)((View) session.getSystemRootViews().get(1).getViewObject()).getParent(); int[] counter = {0}; @@ -157,6 +160,7 @@ public class AccessibilityTest extends RenderTestBase { rootNode.setQueryFromAppProcessEnabled(rootView, true); traverseAccessibilityTree(rootNode, counter); }); + assertEquals(0, AccessibilityInteractionClient.sConnectionCache.size()); assertEquals(17, counter[0]); } finally { session.dispose(); diff --git a/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/create/src/com/android/tools/layoutlib/create/CreateInfo.java index b2b7e7084b..fbfd66895f 100644 --- a/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -336,6 +336,11 @@ public final class CreateInfo implements ICreateInfo { "android.view.Choreographer#mCallbackQueues", // required for tests only "android.view.Choreographer$CallbackQueue#mHead", // required for tests only "android.view.ViewRootImpl#mTmpFrames", + "android.view.accessibility.AccessibilityInteractionClient#sCaches", + "android.view.accessibility.AccessibilityInteractionClient#sClients", + "android.view.accessibility.AccessibilityInteractionClient#sConnectionCache", + "android.view.accessibility.AccessibilityInteractionClient#sDirectConnectionCount", + "android.view.accessibility.AccessibilityInteractionClient#sScrollingWindows", "com.android.internal.util.ArrayUtils#sCache", }; |