package com.kaichunlin.transition.adapter;
import android.app.Activity;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.Menu;
/**
* Similar to {@link AnimationAdapter} with the addition of MenuItem animation support.
*/
public class MenuAnimationAdapter extends AnimationAdapter implements MenuOptionHandler {
private MenuOptionHandler mMenuOptionHandler = new DefaultMenuOptionHandler(this, getAdapterState());
public MenuAnimationAdapter() {
super();
}
/**
* Wraps an existing {@link MenuBaseAdapter} to reuse its onCreateOptionsMenu(...) logic and its transition effects
*
* @param adapter
*/
public MenuAnimationAdapter(@Nullable TransitionAdapter adapter) {
super(adapter);
}
@Override
public void startAnimation(@IntRange(from = 0) int duration) {
AdapterState adapterState = getAdapterState();
adapterState.setState(adapterState.getState() == AdapterState.OPEN ? AdapterState.CLOSE : AdapterState.OPEN);
setReverseAnimation(adapterState.isOpen());
super.startAnimation(duration);
}
public void setMenuOptionHandler(@NonNull MenuOptionHandler menuOptionHandler) {
mMenuOptionHandler = menuOptionHandler;
}
private MenuOptionHandler getHandler() {
return getAdapter() == null ? mMenuOptionHandler : (MenuOptionHandler) getAdapter();
}
public void onCreateOptionsMenu(@NonNull Activity activity, @NonNull Menu menu) {
if (getAdapter() == null) {
mMenuOptionHandler.onCreateOptionsMenu(activity, menu);
} else {
((MenuBaseAdapter) getAdapter()).onCreateOptionsMenu(activity, menu, mMenuOptionHandler.getAdapterState());
}
}
@Override
public void onCreateOptionsMenu(@NonNull Activity activity, @NonNull Menu menu, @NonNull AdapterState adapterState) {
getHandler().onCreateOptionsMenu(activity, menu, adapterState);
}
public void setupOption(@NonNull Activity activity, @Nullable MenuOptionConfiguration openConfig) {
getHandler().setupOption(activity, openConfig);
}
public void setupOpenOption(@NonNull Activity activity, @Nullable MenuOptionConfiguration openConfig) {
getHandler().setupOpenOption(activity, openConfig);
}
public void setupCloseOption(@NonNull Activity activity, @Nullable MenuOptionConfiguration closeConfig) {
getHandler().setupCloseOption(activity, closeConfig);
}
public void setupOptions(@NonNull Activity activity, @Nullable MenuOptionConfiguration openConfig, @Nullable MenuOptionConfiguration closeConfig) {
getHandler().setupOptions(activity, openConfig, closeConfig);
}
@Override
public void clearOptions() {
getHandler().clearOptions();
}
@Override
public MenuOptionConfiguration getOpenConfig() {
return getHandler().getOpenConfig();
}
@Override
public MenuOptionConfiguration getCloseConfig() {
return getHandler().getCloseConfig();
}
}