/** * Asynchronously ask service to remove all listeners of pending requests. * @throws InterruptedException * in case service binding fails. */ private void removeListenersOfAllPendingCachedRequests() throws InterruptedException { synchronized (mapPendingRequestToRequestListener) { if (!mapPendingRequestToRequestListener.isEmpty()) { for (final CachedSpiceRequest<?> cachedSpiceRequest : mapPendingRequestToRequestListener.keySet()) { final Set<RequestListener<?>> setRequestListeners = mapPendingRequestToRequestListener.get(cachedSpiceRequest); if (setRequestListeners != null) { Ln.d("Removing listeners of pending request : " + cachedSpiceRequest.toString() + " : " + setRequestListeners.size()); spiceService.dontNotifyRequestListenersForRequest(cachedSpiceRequest, setRequestListeners); } } mapPendingRequestToRequestListener.clear(); } } Ln.v("Cleared listeners of all pending requests"); }
/** * 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; } } } }
if (setRequestListeners != null) { Ln.d("Removing listeners of request to launch : " + cachedSpiceRequest.toString() + " : " + setRequestListeners.size()); spiceService.dontNotifyRequestListenersForRequest(cachedSpiceRequest, setRequestListeners);