package it.sephiroth.android.library.bottomnavigation.app;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import com.github.clans.fab.FloatingActionMenu;
import java.util.List;
import it.sephiroth.android.library.bottomnavigation.BadgeProvider;
import it.sephiroth.android.library.bottomnavigation.BottomBehavior;
import it.sephiroth.android.library.bottomnavigation.BottomNavigation;
import static android.util.Log.INFO;
import static it.sephiroth.android.library.bottomnavigation.MiscUtils.log;
public class MainActivityCustomBehavior extends MainActivity {
@Override
protected int getActivityLayoutResId() {
return R.layout.activity_main_custom_behavior;
}
@Override
protected void initializeUI(final Bundle savedInstanceState) {
final FloatingActionMenu floatingActionButton = (FloatingActionMenu) findViewById(R.id.fab);
assert floatingActionButton != null;
floatingActionButton.findViewById(R.id.fab_item1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction(
"Action",
null
).show();
}
});
if (null != getBottomNavigation() && null == savedInstanceState) {
getBottomNavigation().setDefaultSelectedIndex(0);
((BottomBehavior) getBottomNavigation().getBehavior()).setOnExpandStatusChangeListener(
new BottomBehavior.OnExpandStatusChangeListener() {
@Override
public void onExpandStatusChanged(final boolean expanded, final boolean animate) {
if (expanded) {
floatingActionButton.showMenu(animate);
} else {
floatingActionButton.hideMenu(animate);
}
}
});
final BadgeProvider provider = getBottomNavigation().getBadgeProvider();
provider.show(R.id.bbn_item3);
provider.show(R.id.bbn_item4);
}
}
public static class FabBehavior extends CoordinatorLayout.Behavior<FloatingActionMenu> {
public FabBehavior() {
super();
}
public FabBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(final CoordinatorLayout parent, final FloatingActionMenu child, final View dependency) {
if (BottomNavigation.class.isInstance(dependency)) {
return true;
} else if (Snackbar.SnackbarLayout.class.isInstance(dependency)) {
return true;
}
return super.layoutDependsOn(parent, child, dependency);
}
@Override
public boolean onDependentViewChanged(
final CoordinatorLayout parent, final FloatingActionMenu child, final View dependency) {
log(TAG, INFO, "onDependentViewChanged: " + dependency);
final List<View> list = parent.getDependencies(child);
int bottomMargin = ((ViewGroup.MarginLayoutParams) child.getLayoutParams()).bottomMargin;
float t = 0;
boolean result = false;
for (View dep : list) {
if (Snackbar.SnackbarLayout.class.isInstance(dep)) {
t += dep.getTranslationY() - dep.getHeight();
result = true;
} else if (BottomNavigation.class.isInstance(dep)) {
BottomNavigation navigation = (BottomNavigation) dep;
t += navigation.getTranslationY() - navigation.getHeight() + bottomMargin;
result = true;
}
}
child.setTranslationY(t);
return result;
}
@Override
public void onDependentViewRemoved(
final CoordinatorLayout parent, final FloatingActionMenu child, final View dependency) {
super.onDependentViewRemoved(parent, child, dependency);
}
}
}