package hk.hku.cs.srli.widget; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import hk.hku.cs.srli.widget.util.HoverHandler; import hk.hku.cs.srli.widget.util.TooltipManager; import hk.hku.cs.srli.widget.util.HoverHandler.OnLongHoverListener; public class HoverTextView extends TextView implements OnLongHoverListener { private HoverHandler hover; public HoverTextView(Context context) { super(context); init(); } public HoverTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public HoverTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { hover = new HoverHandler(this); hover.setOnLongHoverListener(this); } @Override protected void onDetachedFromWindow() { // prevent the tooltip from leaking TooltipManager.hide(this); super.onDetachedFromWindow(); } @Override public void onHoverChanged(boolean hovered) { super.onHoverChanged(hovered); if (!hovered) { TooltipManager.hide(this); hover.dettachTooltip(); } } @Override public boolean onLongHover(View v, int x, int y) { hover.attachTooltip(TooltipManager.show(HoverTextView.this, getText())); return true; } @Override public boolean onHoverEvent(MotionEvent event) { return hover.onHoverEvent(event); } }