aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent <valodim@mugenguild.com>2015-11-16 03:10:02 +0100
committerVincent <valodim@mugenguild.com>2015-11-16 03:10:02 +0100
commitd4c121c2aff58fc193c4d715f4475d388b6de91e (patch)
tree55328eb39dc9810538ed4a7d82d26fec18d1a6cd
parentba7deca7d86a0fec582937599f2a7ec2a85bb52f (diff)
parent8703b5f4a9268f43531a57ab5d27ab879882b449 (diff)
downloadopen-keychain-d4c121c2aff58fc193c4d715f4475d388b6de91e.tar.gz
open-keychain-d4c121c2aff58fc193c4d715f4475d388b6de91e.tar.bz2
open-keychain-d4c121c2aff58fc193c4d715f4475d388b6de91e.zip
Merge pull request #1543 from rohands/issue_mouseover_hints
mouseover hints
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java3
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java10
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/ContentDescriptionHint.java101
-rw-r--r--OpenKeychain/src/main/res/layout/key_list_item.xml3
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_activity.xml4
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml6
6 files changed, 126 insertions, 1 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
index 23c1250d0..db31bd0a1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
@@ -72,6 +72,7 @@ import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
+import org.sufficientlysecure.keychain.ui.util.ContentDescriptionHint;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.FabContainer;
import org.sufficientlysecure.keychain.util.Log;
@@ -787,6 +788,8 @@ public class KeyListFragment extends LoaderFragment
final KeyItemViewHolder holder = (KeyItemViewHolder) view.getTag();
holder.mSlinger.setVisibility(View.VISIBLE);
+
+ ContentDescriptionHint.setup(holder.mSlingerButton);
holder.mSlingerButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
index 0184527b7..0f538cd1b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
@@ -81,6 +81,7 @@ import org.sufficientlysecure.keychain.ui.linked.LinkedIdWizard;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
+import org.sufficientlysecure.keychain.ui.util.ContentDescriptionHint;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener;
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
@@ -181,6 +182,15 @@ public class ViewKeyActivity extends BaseNfcActivity implements
mQrCodeLayout = (CardView) findViewById(R.id.view_key_qr_code_layout);
mRotateSpin = AnimationUtils.loadAnimation(this, R.anim.rotate_spin);
+
+ //ContentDescriptionHint Listeners implemented
+
+ ContentDescriptionHint.setup(mActionEncryptFile);
+ ContentDescriptionHint.setup(mActionEncryptText);
+ ContentDescriptionHint.setup(mActionNfc);
+ ContentDescriptionHint.setup(mFab);
+
+
mRotateSpin.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/ContentDescriptionHint.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/ContentDescriptionHint.java
new file mode 100644
index 000000000..8e45a20e9
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/ContentDescriptionHint.java
@@ -0,0 +1,101 @@
+package org.sufficientlysecure.keychain.ui.util;
+
+/**
+ * Created by rohan on 20/9/15.
+ */
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+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 ContentDescriptionHint {
+ 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;
+ }
+
+}
diff --git a/OpenKeychain/src/main/res/layout/key_list_item.xml b/OpenKeychain/src/main/res/layout/key_list_item.xml
index 80be0ec34..d9e7170c5 100644
--- a/OpenKeychain/src/main/res/layout/key_list_item.xml
+++ b/OpenKeychain/src/main/res/layout/key_list_item.xml
@@ -123,7 +123,8 @@
android:layout_gravity="center"
android:src="@drawable/ic_repeat_grey_24dp"
android:padding="12dp"
- android:background="?android:selectableItemBackground" />
+ android:background="?android:selectableItemBackground"
+ android:contentDescription="@string/cd_exchange_keys"/>
</LinearLayout>
diff --git a/OpenKeychain/src/main/res/layout/view_key_activity.xml b/OpenKeychain/src/main/res/layout/view_key_activity.xml
index 560180407..7c021bec2 100644
--- a/OpenKeychain/src/main/res/layout/view_key_activity.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_activity.xml
@@ -94,6 +94,7 @@
<ImageButton
android:id="@+id/view_key_action_encrypt_files"
+ android:contentDescription="@string/cd_encrypt_files"
style="?android:attr/borderlessButtonStyle"
android:layout_width="64dp"
android:layout_height="64dp"
@@ -103,6 +104,7 @@
<ImageButton
android:id="@+id/view_key_action_encrypt_text"
+ android:contentDescription="@string/cd_encrypt_text"
style="?android:attr/borderlessButtonStyle"
android:layout_width="64dp"
android:layout_height="64dp"
@@ -113,6 +115,7 @@
<ImageButton
android:id="@+id/view_key_action_nfc"
style="?android:attr/borderlessButtonStyle"
+ android:contentDescription="@string/cd_share_nfc"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@drawable/ic_nfc_white_24dp"
@@ -213,6 +216,7 @@
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
+ android:contentDescription="@string/cd_exchange_keys"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="24dp"
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 84b5b0376..ff148b0c7 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -106,6 +106,12 @@
<string name="btn_saved">"Saved!"</string>
<string name="btn_not_matching">"Doesn't match"</string>
+ <!-- Content Description -->
+ <string name="cd_encrypt_files">"Encrypt Files"</string>
+ <string name="cd_exchange_keys">"Exchange Keys"</string>
+ <string name="cd_encrypt_text">"Encrypt Text"</string>
+ <string name="cd_share_nfc">"Share Via NFC"</string>
+
<!-- menu -->
<string name="menu_preferences">"Settings"</string>
<string name="menu_help">"Help"</string>