1 package org.robolectric.shadows;
2 
3 import static org.robolectric.util.reflector.Reflector.reflector;
4 
5 import android.os.Handler;
6 import android.os.Message;
7 import org.robolectric.annotation.Implementation;
8 import org.robolectric.annotation.Implements;
9 import org.robolectric.annotation.LooperMode;
10 import org.robolectric.annotation.RealObject;
11 
12 /**
13  * The shadow {@link Message} for {@link LooperMode.Mode.PAUSED}.
14  *
15  * <p>This class should not be referenced directly. Use {@link ShadowMessage} instead.
16  */
17 @Implements(value = Message.class, isInAndroidSdk = false)
18 public class ShadowPausedMessage extends ShadowMessage {
19 
20   @RealObject private Message realMessage;
21 
22   @Implementation
getWhen()23   protected long getWhen() {
24     return reflector(MessageReflector.class, realMessage).getWhen();
25   }
26 
internalGetNext()27   Message internalGetNext() {
28     return reflector(MessageReflector.class, realMessage).getNext();
29   }
30 
31   // TODO: Reconsider this being exposed as a public method
32   @Override
33   @Implementation
recycleUnchecked()34   public void recycleUnchecked() {
35     reflector(MessageReflector.class, realMessage).recycleUnchecked();
36   }
37 
38   @Override
setScheduledRunnable(Runnable r)39   public void setScheduledRunnable(Runnable r) {
40     throw new UnsupportedOperationException("Not supported in PAUSED LooperMode");
41   }
42 
43   // We could support these methods, but intentionally do not for now as its unclear what the
44   // use case is.
45 
46   @Override
getNext()47   public Message getNext() {
48     throw new UnsupportedOperationException("Not supported in PAUSED LooperMode");
49   }
50 
51   @Override
setNext(Message next)52   public void setNext(Message next) {
53     throw new UnsupportedOperationException("Not supported in PAUSED LooperMode");
54   }
55 
56   @Implementation
getTarget()57   protected Handler getTarget() {
58     return reflector(MessageReflector.class, realMessage).getTarget();
59   }
60 }
61