/** * Remove all listeners of a request that has not yet been passed to the * {@link SpiceService}. * @param request * the request for which listeners must be unregistered. * @return a boolean indicating if the request could be found inside the * list of requests to be launched. If false, the request was * already passed to the service. */ private boolean removeListenersOfCachedRequestToLaunch(final SpiceRequest<?> request) { synchronized (mapRequestToLaunchToRequestListener) { for (final CachedSpiceRequest<?> cachedSpiceRequest : mapRequestToLaunchToRequestListener.keySet()) { if (match(cachedSpiceRequest, request)) { final Set<RequestListener<?>> setRequestListeners = mapRequestToLaunchToRequestListener.get(cachedSpiceRequest); setRequestListeners.clear(); return true; } } return false; } }
/** * Remove all listeners of a request that may have already been passed to * the {@link SpiceService}. If the request has already been passed to the * {@link SpiceService}, the method will bind to the service and ask it to * remove listeners. * @param request * the request for which listeners must be unregistered. */ private void removeListenersOfPendingCachedRequest(final SpiceRequest<?> request) throws InterruptedException { synchronized (mapPendingRequestToRequestListener) { for (final CachedSpiceRequest<?> cachedSpiceRequest : mapPendingRequestToRequestListener.keySet()) { if (match(cachedSpiceRequest, request)) { waitForServiceToBeBound(); if (spiceService == null) { return; } final Set<RequestListener<?>> setRequestListeners = mapPendingRequestToRequestListener.get(cachedSpiceRequest); spiceService.dontNotifyRequestListenersForRequest(cachedSpiceRequest, setRequestListeners); mapPendingRequestToRequestListener.remove(cachedSpiceRequest); break; } } } }