aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util
diff options
context:
space:
mode:
authorrohands <rohan0495@gmail.com>2015-09-20 18:57:18 +0530
committerrohands <rohan0495@gmail.com>2015-09-20 18:57:18 +0530
commit50f404ccddd30becf1d69129f493a2620110ed4d (patch)
treed1c71788dfeda49fe00518510863868ad4154d52 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util
parent5330a91fef160b7d1bc4bae997997416ee01922c (diff)
downloadopen-keychain-50f404ccddd30becf1d69129f493a2620110ed4d.tar.gz
open-keychain-50f404ccddd30becf1d69129f493a2620110ed4d.tar.bz2
open-keychain-50f404ccddd30becf1d69129f493a2620110ed4d.zip
Mousehints
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/LongClick.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/LongClick.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/LongClick.java
new file mode 100644
index 000000000..c41f77767
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/LongClick.java
@@ -0,0 +1,85 @@
+package org.sufficientlysecure.keychain.ui.util;
+
+/**
+ * Created by rohan on 20/9/15.
+ */
+import android.content.Context;
+import android.graphics.Rect;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.Toast;
+public class LongClick {
+ private static final int ESTIMATED_TOAST_HEIGHT_DIPS = 48;
+ public static void setup(View view) {
+ view.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ return showLongClickText(view, view.getContentDescription());
+ }
+ });
+ }
+
+ public static void setup(View view, final int textResId) {
+ view.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ return showLongClickText(view, view.getContext().getString(textResId));
+ }
+ });
+ }
+
+ public static void setup(View view, final CharSequence text) {
+ view.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ return showLongClickText(view, text);
+ }
+ });
+ }
+
+ public static void remove(final View view) {
+ view.setOnLongClickListener(null);
+ }
+
+ private static boolean showLongClickText(View view, CharSequence text) {
+ if (TextUtils.isEmpty(text)) {
+ return false;
+ }
+
+ final int[] screenPos = new int[2]; // origin is device display
+ final Rect displayFrame = new Rect(); // includes decorations (e.g. status bar)
+ view.getLocationOnScreen(screenPos);
+ view.getWindowVisibleDisplayFrame(displayFrame);
+
+ final Context context = view.getContext();
+ final int viewWidth = view.getWidth();
+ final int viewHeight = view.getHeight();
+ final int viewCenterX = screenPos[0] + viewWidth / 2;
+ final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
+ final int estimatedToastHeight = (int) (ESTIMATED_TOAST_HEIGHT_DIPS
+ * context.getResources().getDisplayMetrics().density);
+
+ Toast longClickText = Toast.makeText(context, text, Toast.LENGTH_SHORT);
+ boolean showBelow = screenPos[1] < estimatedToastHeight;
+ if (showBelow) {
+ // Show below
+ // Offsets are after decorations (e.g. status bar) are factored in
+ longClickText.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
+ viewCenterX - screenWidth / 2,
+ screenPos[1] - displayFrame.top + viewHeight);
+ } else {
+ // Show above
+ // Offsets are after decorations (e.g. status bar) are factored in
+ // NOTE: We can't use Gravity.BOTTOM because when the keyboard is up
+ // its height isn't factored in.
+ longClickText.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
+ viewCenterX - screenWidth / 2,
+ screenPos[1] - displayFrame.top - estimatedToastHeight);
+ }
+
+ longClickText.show();
+ return true;
+ }
+
+}