package com.android.deskclock; import androidx.annotation.IntDef; /** * Implemented by containers that house the fab and its associated buttons. Also implemented by * containers that know how to contact the true fab container to ferry through * commands. */ public interface FabContainer { /** Bit field for updates */ /** Bit 0-1 */ int FAB_ANIMATION_MASK = 0b11; /** Signals that the fab should be updated in place with no animation. */ int FAB_IMMEDIATE = 0b1; /** Signals the fab should be "animated away", updated, and "animated back". */ int FAB_SHRINK_AND_EXPAND = 0b10; /** Signals that the fab should morph into a new state in place. */ int FAB_MORPH = 0b11; /** Bit 2 */ int FAB_REQUEST_FOCUS_MASK = 0b100; /** Signals that the fab should request focus. */ int FAB_REQUEST_FOCUS = 0b100; /** Bit 3-4 */ int BUTTONS_ANIMATION_MASK = 0b11000; /** Signals that the buttons should be updated in place with no animation. */ int BUTTONS_IMMEDIATE = 0b1000; /** Signals that the buttons should be "animated away", updated, and "animated back". */ int BUTTONS_SHRINK_AND_EXPAND = 0b10000; /** Bit 5 */ int BUTTONS_DISABLE_MASK = 0b100000; /** Disable the buttons of the fab so they do not respond to clicks. */ int BUTTONS_DISABLE = 0b100000; /** Bit 6-7 */ int FAB_AND_BUTTONS_SHRINK_EXPAND_MASK = 0b11000000; /** Signals the fab and buttons should be "animated away". */ int FAB_AND_BUTTONS_SHRINK = 0b10000000; /** Signals the fab and buttons should be "animated back". */ int FAB_AND_BUTTONS_EXPAND = 0b01000000; /** Convenience flags */ int FAB_AND_BUTTONS_IMMEDIATE = FAB_IMMEDIATE | BUTTONS_IMMEDIATE; int FAB_AND_BUTTONS_SHRINK_AND_EXPAND = FAB_SHRINK_AND_EXPAND | BUTTONS_SHRINK_AND_EXPAND; @IntDef( flag = true, value = { FAB_IMMEDIATE, FAB_SHRINK_AND_EXPAND, FAB_MORPH, FAB_REQUEST_FOCUS, BUTTONS_IMMEDIATE, BUTTONS_SHRINK_AND_EXPAND, BUTTONS_DISABLE, FAB_AND_BUTTONS_IMMEDIATE, FAB_AND_BUTTONS_SHRINK_AND_EXPAND, FAB_AND_BUTTONS_SHRINK, FAB_AND_BUTTONS_EXPAND } ) @interface UpdateFabFlag {} /** * Requests that this container update the fab and/or its buttons because their state has * changed. The update may be immediate or it may be animated depending on the choice of * {@code updateTypes}. * * @param updateTypes indicates the types of update to apply to the fab and its buttons */ void updateFab(@UpdateFabFlag int updateTypes); }