package org.goodev.discourse.widget; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.View.OnLongClickListener; import android.widget.ImageButton; import android.widget.Toast; /** * https://gist.github.com/scruffyfox/3894926 <br> * Extended image view to show the content description in a Toast view when the user long presses. Note: `android:contentDescription` must * be set in order for the toast to work * * @author Callum Taylor <http://callumtaylor.net> */ public class HintedImageBtn extends ImageButton implements OnLongClickListener { private final Context mContext; private OnLongClickListener mOnLongClickListener; public HintedImageBtn(Context context) { super(context); mContext = context; setOnLongClickListener(this); } public HintedImageBtn(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; setOnLongClickListener(this); } @Override public void setOnLongClickListener(OnLongClickListener l) { if (l == this) { super.setOnLongClickListener(l); return; } mOnLongClickListener = l; } @Override public boolean onLongClick(View v) { if (mOnLongClickListener != null) { if (!mOnLongClickListener.onLongClick(v)) { handleLongClick(); return true; } } else { handleLongClick(); return true; } return false; } private void handleLongClick() { String contentDesc = getContentDescription().toString(); if (!TextUtils.isEmpty(contentDesc)) { int[] pos = new int[2]; getLocationInWindow(pos); Toast t = Toast.makeText(mContext, contentDesc, Toast.LENGTH_SHORT); t.setGravity(Gravity.TOP | Gravity.LEFT, pos[0] - ((contentDesc.length() / 2) * 12), pos[1] - 128); t.show(); } } }