package it.sephiroth.android.library.bottomnavigation.app.behaviors;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.View;
import com.github.clans.fab.FloatingActionMenu;
public class FloatingActionMenuBehavior extends CoordinatorLayout.Behavior<FloatingActionMenu> {
private static final int HIDE_MSG = 1;
private static final int SHOW_MSG = 2;
private static final String TAG = FloatingActionMenuBehavior.class.getSimpleName();
private float mFabTranslationY;
private final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case HIDE_MSG:
((FloatingActionMenu) msg.obj).hideMenu(true);
break;
case SHOW_MSG:
((FloatingActionMenu) msg.obj).showMenu(true);
break;
}
}
};
public FloatingActionMenuBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean layoutDependsOn(final CoordinatorLayout parent, final FloatingActionMenu child, final View dependency) {
return dependency instanceof Snackbar.SnackbarLayout;
}
@Override
public boolean onDependentViewChanged(final CoordinatorLayout parent, final FloatingActionMenu child, final View dependency) {
if (dependency instanceof Snackbar.SnackbarLayout) {
updateFabTranslationForSnackbar(parent, child, dependency);
ViewCompat.setTranslationY(child, mFabTranslationY);
}
return false;
}
@Override
public void onDependentViewRemoved(final CoordinatorLayout parent, final FloatingActionMenu child, final View dependency) {
super.onDependentViewRemoved(parent, child, dependency);
}
private void updateFabTranslationForSnackbar(CoordinatorLayout parent, final FloatingActionMenu fab, View snackbar) {
mFabTranslationY = getFabTranslationYForSnackbar(parent, fab, snackbar);
}
private float getFabTranslationYForSnackbar(CoordinatorLayout parent, FloatingActionMenu fab, View snackbar) {
float minOffset = 0;
minOffset = Math.min(minOffset, ViewCompat.getTranslationY(snackbar) - snackbar.getHeight());
return minOffset;
}
}