Add missing removeCallbacksAndMessages to RobolectricUtil.

The Util class already handles removeMessages calls but so far ignored calls
to removeCallbacksAndMessages.

PiperOrigin-RevId: 232312458
This commit is contained in:
tonihei 2019-02-04 17:39:35 +00:00 committed by Oliver Woodman
parent f8772fda21
commit 1f476ecef0

View File

@ -37,6 +37,7 @@ import org.robolectric.shadows.ShadowMessageQueue;
public final class RobolectricUtil {
private static final AtomicLong sequenceNumberGenerator = new AtomicLong(0);
private static final int ANY_MESSAGE = Integer.MIN_VALUE;
private RobolectricUtil() {}
@ -110,7 +111,8 @@ public final class RobolectricUtil {
boolean isRemoved = false;
for (RemovedMessage removedMessage : removedMessages) {
if (removedMessage.handler == target
&& removedMessage.what == pendingMessage.message.what
&& (removedMessage.what == ANY_MESSAGE
|| removedMessage.what == pendingMessage.message.what)
&& (removedMessage.object == null
|| removedMessage.object == pendingMessage.message.obj)
&& pendingMessage.sequenceNumber < removedMessage.sequenceNumber) {
@ -179,6 +181,15 @@ public final class RobolectricUtil {
((CustomLooper) shadowOf(looper)).removeMessages(handler, what, object);
}
}
@Implementation
public void removeCallbacksAndMessages(Handler handler, Object object) {
Looper looper = ShadowLooper.getLooperForThread(looperThread);
if (shadowOf(looper) instanceof CustomLooper
&& shadowOf(looper) != ShadowLooper.getShadowMainLooper()) {
((CustomLooper) shadowOf(looper)).removeMessages(handler, ANY_MESSAGE, object);
}
}
}
private static final class PendingMessage implements Comparable<PendingMessage> {