Handle window removed event properly am: d5a4811bee

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/RotaryController/+/13114369

Change-Id: Iaead40480f71eaf16c1ffa3a945a5dbd0d56c1fa
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 8ef9a27..cd7e866 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -11,6 +11,7 @@
     // Include the testing libraries
     libs: [
         "android.car",
+        "android.test.base.impl",
     ],
     static_libs: [
         "car-ui-lib",
diff --git a/tests/robotests/src/com/android/car/rotary/NavigatorTest.java b/tests/robotests/src/com/android/car/rotary/NavigatorTest.java
index ee79412..83e06a2 100644
--- a/tests/robotests/src/com/android/car/rotary/NavigatorTest.java
+++ b/tests/robotests/src/com/android/car/rotary/NavigatorTest.java
@@ -60,7 +60,7 @@
         AccessibilityNodeInfo root = mNodeBuilder.build();
         setRootNodeForWindow(root, window);
 
-        assertThat(window.getRoot()).isSameAs(root);
+        assertThat(window.getRoot()).isSameInstanceAs(root);
     }
 
     /**
@@ -90,17 +90,17 @@
 
         // Rotate once, the focus should move from button1 to button2.
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
 
         // Rotate twice, the focus should move from button1 to button3.
         target = mNavigator.findRotateTarget(button1, direction, 2);
-        assertThat(target.node).isSameAs(button3);
+        assertThat(target.node).isSameInstanceAs(button3);
         assertThat(target.advancedCount).isEqualTo(2);
 
         // Rotate 3 times and exceed the boundary, the focus should stay at the boundary.
         target = mNavigator.findRotateTarget(button1, direction, 3);
-        assertThat(target.node).isSameAs(button3);
+        assertThat(target.node).isSameInstanceAs(button3);
         assertThat(target.advancedCount).isEqualTo(2);
     }
 
@@ -249,7 +249,7 @@
 
         // Rotate from button1, it shouldn't skip the invisible view.
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(invisible);
+        assertThat(target.node).isSameInstanceAs(invisible);
     }
 
     /**
@@ -278,7 +278,7 @@
 
         // Rotate from button1, it should skip the empty view.
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
     }
 
     /**
@@ -314,7 +314,7 @@
         when(recyclerView.focusSearch(direction)).thenReturn(button2);
 
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(recyclerView);
+        assertThat(target.node).isSameInstanceAs(recyclerView);
     }
 
     /**
@@ -344,7 +344,7 @@
         when(recyclerView.focusSearch(direction)).thenReturn(button2);
 
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
     }
 
     /**
@@ -378,7 +378,7 @@
         when(recyclerView.focusSearch(direction)).thenReturn(focusParkingView);
 
         FindRotateTargetResult target = mNavigator.findRotateTarget(focusable2, direction, 2);
-        assertThat(target.node).isSameAs(focusable1);
+        assertThat(target.node).isSameInstanceAs(focusable1);
         assertThat(target.advancedCount).isEqualTo(1);
     }
 
@@ -458,18 +458,18 @@
 
         // Rotate once, the focus should move from button1 to button2.
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
 
         // Rotate twice, the focus should move from button1 to button2 since button3 is not a
         // descendant of the scrollable container.
         target = mNavigator.findRotateTarget(button1, direction, 2);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
 
         // Rotate three times should do the same.
         target = mNavigator.findRotateTarget(button1, direction, 3);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
     }
 
@@ -533,18 +533,18 @@
 
         // Rotate once, the focus should move from button1 to button2.
         FindRotateTargetResult target = mNavigator.findRotateTarget(button1, direction, 1);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
 
         // Rotate twice, the focus should move from button1 to button2 since button3 is off the
         // screen.
         target = mNavigator.findRotateTarget(button1, direction, 2);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
 
         // Rotate three times should do the same.
         target = mNavigator.findRotateTarget(button1, direction, 3);
-        assertThat(target.node).isSameAs(button2);
+        assertThat(target.node).isSameInstanceAs(button2);
         assertThat(target.advancedCount).isEqualTo(1);
     }
 
@@ -580,7 +580,7 @@
         AccessibilityNodeInfo button2 = mNodeBuilder.setParent(focusArea).build();
 
         AccessibilityNodeInfo target = mNavigator.findScrollableContainer(button1);
-        assertThat(target).isSameAs(scrollableContainer);
+        assertThat(target).isSameInstanceAs(scrollableContainer);
         target = mNavigator.findScrollableContainer(button2);
         assertThat(target).isNull();
     }
@@ -616,13 +616,13 @@
 
         AccessibilityNodeInfo target = mNavigator.findFocusableDescendantInDirection(
                 container2, button4, View.FOCUS_BACKWARD);
-        assertThat(target).isSameAs(button3);
+        assertThat(target).isSameInstanceAs(button3);
         target = mNavigator.findFocusableDescendantInDirection(container2, button3,
                 View.FOCUS_BACKWARD);
         assertThat(target).isNull();
         target = mNavigator.findFocusableDescendantInDirection(container1, button2,
                 View.FOCUS_BACKWARD);
-        assertThat(target).isSameAs(button1);
+        assertThat(target).isSameInstanceAs(button1);
         target = mNavigator.findFocusableDescendantInDirection(container1, button1,
                 View.FOCUS_BACKWARD);
         assertThat(target).isNull();
@@ -659,13 +659,13 @@
 
         AccessibilityNodeInfo target = mNavigator.findFocusableDescendantInDirection(
                 container1, button1, View.FOCUS_FORWARD);
-        assertThat(target).isSameAs(button2);
+        assertThat(target).isSameInstanceAs(button2);
         target = mNavigator.findFocusableDescendantInDirection(container1, button2,
                 View.FOCUS_FORWARD);
         assertThat(target).isNull();
         target = mNavigator.findFocusableDescendantInDirection(container2, button3,
                 View.FOCUS_FORWARD);
-        assertThat(target).isSameAs(button4);
+        assertThat(target).isSameInstanceAs(button4);
         target = mNavigator.findFocusableDescendantInDirection(container2, button4,
                 View.FOCUS_FORWARD);
         assertThat(target).isNull();
@@ -703,16 +703,16 @@
 
         AccessibilityNodeInfo target = mNavigator.findFocusableDescendantInDirection(container,
                 button1, View.FOCUS_FORWARD);
-        assertThat(target).isSameAs(button2);
+        assertThat(target).isSameInstanceAs(button2);
         target = mNavigator.findFocusableDescendantInDirection(container, button2,
                 View.FOCUS_FORWARD);
-        assertThat(target).isSameAs(button1);
+        assertThat(target).isSameInstanceAs(button1);
         target = mNavigator.findFocusableDescendantInDirection(container, button3,
                 View.FOCUS_FORWARD);
-        assertThat(target).isSameAs(button1);
+        assertThat(target).isSameInstanceAs(button1);
         target = mNavigator.findFocusableDescendantInDirection(container, button4,
                 View.FOCUS_FORWARD);
-        assertThat(target).isSameAs(button1);
+        assertThat(target).isSameInstanceAs(button1);
     }
 
     /**
@@ -751,7 +751,7 @@
         AccessibilityNodeInfo button4 = mNodeBuilder.setParent(container2).build();
 
         AccessibilityNodeInfo target = mNavigator.findFirstFocusableDescendant(root);
-        assertThat(target).isSameAs(button3);
+        assertThat(target).isSameInstanceAs(button3);
     }
 
     /**
@@ -790,7 +790,7 @@
                 .build();
 
         AccessibilityNodeInfo target = mNavigator.findLastFocusableDescendant(root);
-        assertThat(target).isSameAs(button2);
+        assertThat(target).isSameInstanceAs(button2);
     }
 
     /** Sets the {@code root} node in the {@code window}'s hierarchy. */
diff --git a/tests/robotests/src/com/android/car/rotary/NodeBuilderTest.java b/tests/robotests/src/com/android/car/rotary/NodeBuilderTest.java
index ed8dfad..75bcb2b 100644
--- a/tests/robotests/src/com/android/car/rotary/NodeBuilderTest.java
+++ b/tests/robotests/src/com/android/car/rotary/NodeBuilderTest.java
@@ -104,7 +104,7 @@
     public void testSetWindow() {
         AccessibilityWindowInfo window = new WindowBuilder().build();
         AccessibilityNodeInfo node = mNodeBuilder.setWindow(window).build();
-        assertThat(node.getWindow()).isSameAs(window);
+        assertThat(node.getWindow()).isSameInstanceAs(window);
     }
 
     @Test
@@ -144,10 +144,10 @@
         AccessibilityNodeInfo child1 = mNodeBuilder.setParent(parent).build();
         AccessibilityNodeInfo child2 = mNodeBuilder.setParent(parent).build();
 
-        assertThat(child1.getParent()).isSameAs(parent);
+        assertThat(child1.getParent()).isSameInstanceAs(parent);
         assertThat(parent.getChildCount()).isEqualTo(2);
-        assertThat(parent.getChild(0)).isSameAs(child1);
-        assertThat(parent.getChild(1)).isSameAs(child2);
+        assertThat(parent.getChild(0)).isSameInstanceAs(child1);
+        assertThat(parent.getChild(1)).isSameInstanceAs(child2);
         assertThat(parent.getChild(2)).isNull();
     }
 
diff --git a/tests/robotests/src/com/android/car/rotary/TreeTraverserTest.java b/tests/robotests/src/com/android/car/rotary/TreeTraverserTest.java
index ba6e0ba..d7700b4 100644
--- a/tests/robotests/src/com/android/car/rotary/TreeTraverserTest.java
+++ b/tests/robotests/src/com/android/car/rotary/TreeTraverserTest.java
@@ -67,17 +67,17 @@
         // Should check the node itself.
         AccessibilityNodeInfo result = mTreeTraverser.findNodeOrAncestor(node0,
                 /* stopPredicate= */ null, /* targetPredicate= */ node -> node == node0);
-        assertThat(result).isSameAs(node0);
+        assertThat(result).isSameInstanceAs(node0);
 
         // Parent.
         result = mTreeTraverser.findNodeOrAncestor(node1, /* stopPredicate= */ null,
                 /* targetPredicate= */ node -> node == node0);
-        assertThat(result).isSameAs(node0);
+        assertThat(result).isSameInstanceAs(node0);
 
         // Grandparent.
         result = mTreeTraverser.findNodeOrAncestor(node2, /* stopPredicate= */ null,
                 /* targetPredicate= */ node -> node == node0);
-        assertThat(result).isSameAs(node0);
+        assertThat(result).isSameInstanceAs(node0);
 
         // No ancestor found.
         result = mTreeTraverser.findNodeOrAncestor(node2, /* stopPredicate= */ null,
@@ -137,17 +137,17 @@
         // Find root.
         result = mTreeTraverser.depthFirstSearch(node0, /* skipPredicate= */ null,
                 /* targetPredicate= */ node -> node == node0);
-        assertThat(result).isSameAs(node0);
+        assertThat(result).isSameInstanceAs(node0);
 
         // Find child.
         result = mTreeTraverser.depthFirstSearch(node0, /* skipPredicate= */ null,
                 /* targetPredicate= */ node -> node == node4);
-        assertThat(result).isSameAs(node4);
+        assertThat(result).isSameInstanceAs(node4);
 
         // Find grandchild.
         result = mTreeTraverser.depthFirstSearch(node0, /* skipPredicate= */ null,
                 /* targetPredicate= */ node -> node == node6);
-        assertThat(result).isSameAs(node6);
+        assertThat(result).isSameInstanceAs(node6);
 
         // Iterate in depth-first order, skipping a subtree containing the target
         List<AccessibilityNodeInfo> skipPredicateCalledWithNodes = new ArrayList<>();
@@ -208,15 +208,15 @@
 
         // Find root.
         result = mTreeTraverser.reverseDepthFirstSearch(node0, node -> node == node0);
-        assertThat(result).isSameAs(node0);
+        assertThat(result).isSameInstanceAs(node0);
 
         // Find child.
         result = mTreeTraverser.reverseDepthFirstSearch(node0, node -> node == node1);
-        assertThat(result).isSameAs(node1);
+        assertThat(result).isSameInstanceAs(node1);
 
         // Find grandchild.
         result = mTreeTraverser.reverseDepthFirstSearch(node0, node -> node == node2);
-        assertThat(result).isSameAs(node2);
+        assertThat(result).isSameInstanceAs(node2);
     }
 
     /**
diff --git a/tests/robotests/src/com/android/car/rotary/WindowBuilderTest.java b/tests/robotests/src/com/android/car/rotary/WindowBuilderTest.java
index 7b2d9ce..01c0768 100644
--- a/tests/robotests/src/com/android/car/rotary/WindowBuilderTest.java
+++ b/tests/robotests/src/com/android/car/rotary/WindowBuilderTest.java
@@ -42,7 +42,7 @@
     public void testSetRoot() {
         AccessibilityNodeInfo root = new NodeBuilder(new ArrayList<>()).build();
         AccessibilityWindowInfo window = new WindowBuilder().setRoot(root).build();
-        assertThat(window.getRoot()).isSameAs(root);
+        assertThat(window.getRoot()).isSameInstanceAs(root);
     }
 
     @Test