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