package hk.hku.cs.srli.widget.abs;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.actionbarsherlock.internal.view.menu.ActionMenuItemView;
import com.actionbarsherlock.internal.view.menu.MenuItemImpl;
import hk.hku.cs.srli.widget.util.HoverHandler;
import hk.hku.cs.srli.widget.util.TooltipManager;
public class HoverActionMenuItemView extends ActionMenuItemView
implements HoverHandler.OnLongHoverListener {
private HoverHandler hover;
public HoverActionMenuItemView(Context context) {
super(context);
init();
}
public HoverActionMenuItemView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public HoverActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
hover = new HoverHandler(this);
hover.setOnLongHoverListener(this);
}
@Override
public void initialize(MenuItemImpl itemData, int menuType) {
super.initialize(itemData, menuType);
// XXX: workaround for getting long content description
setContentDescription(itemData.getTitle());
}
// Intercept hover events to prevent children from hovering.
@Override
public boolean onInterceptHoverEvent(MotionEvent event) {
return true;
}
@Override
protected void onDetachedFromWindow() {
TooltipManager.hide(this);
super.onDetachedFromWindow();
}
@Override
public void onHoverChanged(boolean hovered) {
super.onHoverChanged(hovered);
if (!hovered) {
// clear tooltip
TooltipManager.hide(this, 1000);
hover.dettachTooltip();
}
}
@Override
public boolean onHoverEvent(MotionEvent event) {
return hover.onHoverEvent(event);
}
@Override
public boolean onLongHover(View v, int x, int y) {
hover.attachTooltip(TooltipManager.show(this, getContentDescription(), x, getHeight()));
return true;
}
}