1 package org.robolectric.shadows;
2 
3 import android.os.Message;
4 import android.os.MessageQueue;
5 import org.robolectric.annotation.Implements;
6 import org.robolectric.util.Scheduler;
7 
8 /**
9  * The shadow API for {@link MessageQueue}.
10  *
11  * <p>Different shadow implementations will be used depending on the current {@link LooperMode}. See
12  * {@link ShadowLegacyMessageQueue} and {@link ShadowPausedMessageQueue} for details.
13  */
14 @Implements(value = MessageQueue.class, shadowPicker = ShadowMessageQueue.Picker.class)
15 public abstract class ShadowMessageQueue {
16 
17   /** The shadow Picker for this class. */
18   public static class Picker extends LooperShadowPicker<ShadowMessageQueue> {
19 
Picker()20     public Picker() {
21       super(ShadowLegacyMessageQueue.class, ShadowPausedMessageQueue.class);
22     }
23   }
24 
25   /**
26    * Return this queue's Scheduler.
27    *
28    * <p>Only supported in {@link LooperMode.Mode.LEGACY}.
29    */
getScheduler()30   public abstract Scheduler getScheduler();
31 
32   /**
33    * Set this queue's Scheduler.
34    *
35    * <p>Only supported in {@link LooperMode.Mode.LEGACY}.
36    */
setScheduler(Scheduler scheduler)37   public abstract void setScheduler(Scheduler scheduler);
38 
39   /**
40    * Retrieves the current Message at the top of the queue.
41    *
42    * <p>Only supported in {@link LooperMode.Mode.LEGACY}.
43    */
getHead()44   public abstract Message getHead();
45 
46   /**
47    * Sets the current Message at the top of the queue.
48    *
49    * <p>Only supported in {@link LooperMode.Mode.LEGACY}.
50    */
setHead(Message msg)51   public abstract void setHead(Message msg);
52 
53   /**
54    * Reset the messageQueue state. Should not be called by tests - it intended for use by the
55    * Robolectric framework.
56    */
reset()57   public abstract void reset();
58 }
59