diff options
Diffstat (limited to 'OpenKeychain/src')
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> |