/** * Dispatch onExitRange if the status of the component is in the range. This method should only be * called when releasing a ComponentTree, thus no status update needed. */ void dispatchOnExitedRangeIfNeeded(WorkingRangeStatusHandler statusHandler) { if (mWorkingRanges == null) { return; } for (String key : mWorkingRanges.keySet()) { final RangeTuple rangeTuple = mWorkingRanges.get(key); for (Component component : rangeTuple.mComponents) { if (statusHandler.isInRange(rangeTuple.mName, component)) { component.dispatchOnExitedRange(rangeTuple.mName); } } } }
@Test public void testDispatchOnExitedRangeIfNeeded() { TestWorkingRange workingRange = new TestWorkingRange(); mWorkingRangeContainer.registerWorkingRange(NAME, workingRange, mComponent); TestWorkingRange workingRange2 = new TestWorkingRange(); mWorkingRangeContainer.registerWorkingRange(NAME, workingRange2, mComponent2); final WorkingRangeStatusHandler statusHandler = new WorkingRangeStatusHandler(); statusHandler.setStatus(NAME, mComponent, WorkingRangeStatusHandler.STATUS_IN_RANGE); doNothing().when(mComponent).dispatchOnExitedRange(isA(String.class)); statusHandler.setStatus(NAME, mComponent2, WorkingRangeStatusHandler.STATUS_OUT_OF_RANGE); doNothing().when(mComponent2).dispatchOnExitedRange(isA(String.class)); mWorkingRangeContainer.dispatchOnExitedRangeIfNeeded(statusHandler); verify(mComponent, times(1)).dispatchOnExitedRange(NAME); verify(mComponent2, times(0)).dispatchOnExitedRange(NAME); }
firstFullyVisibleIndex, lastFullyVisibleIndex)) { component.dispatchOnExitedRange(rangeTuple.mName); statusHandler.setExitedRangeStatus(rangeTuple.mName, component);