1 package com.android.deskclock; 2 3 import androidx.annotation.NonNull; 4 import android.view.View; 5 import android.widget.Button; 6 import android.widget.ImageView; 7 8 /** 9 * Implementers of this interface are able to {@link #onUpdateFab configure the fab} and associated 10 * {@link #onUpdateFabButtons left/right buttons} including setting them {@link View#INVISIBLE} if 11 * they are unnecessary. Implementers also attach click handler logic to the 12 * {@link #onFabClick fab}, {@link #onLeftButtonClick left button} and 13 * {@link #onRightButtonClick right button}. 14 */ 15 public interface FabController { 16 17 /** 18 * Configures the display of the fab component to match the current state of this controller. 19 * 20 * @param fab the fab component to be configured based on current state 21 */ onUpdateFab(@onNull ImageView fab)22 void onUpdateFab(@NonNull ImageView fab); 23 24 /** 25 * Called before onUpdateFab when the fab should be animated. 26 * 27 * @param fab the fab component to be configured based on current state 28 */ onMorphFab(@onNull ImageView fab)29 void onMorphFab(@NonNull ImageView fab); 30 31 /** 32 * Configures the display of the buttons to the left and right of the fab to match the current 33 * state of this controller. 34 * 35 * @param left button to the left of the fab to configure based on current state 36 * @param right button to the right of the fab to configure based on current state 37 */ onUpdateFabButtons(@onNull Button left, @NonNull Button right)38 void onUpdateFabButtons(@NonNull Button left, @NonNull Button right); 39 40 /** 41 * Handles a click on the fab. 42 * 43 * @param fab the fab component on which the click occurred 44 */ onFabClick(@onNull ImageView fab)45 void onFabClick(@NonNull ImageView fab); 46 47 /** 48 * Handles a click on the button to the left of the fab component. 49 * 50 * @param left the button to the left of the fab component 51 */ onLeftButtonClick(@onNull Button left)52 void onLeftButtonClick(@NonNull Button left); 53 54 /** 55 * Handles a click on the button to the right of the fab component. 56 * 57 * @param right the button to the right of the fab component 58 */ onRightButtonClick(@onNull Button right)59 void onRightButtonClick(@NonNull Button right); 60 }