From 13ed3bbd8a99b8031dc959f2cb367f5fcc6daba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jerzy=20Ko=C5=82osowski?= Date: Mon, 13 Oct 2014 04:47:48 +0200 Subject: [PATCH 1/3] Added option for num keypad for YubiKey --- .../sufficientlysecure/keychain/Constants.java | 1 + .../keychain/ui/PassphraseDialogActivity.java | 14 +++++++++++++- .../keychain/ui/PreferencesActivity.java | 16 ++++++++++++++++ .../ui/dialog/PassphraseDialogFragment.java | 13 ++++++++++++- .../keychain/util/Preferences.java | 10 ++++++++++ .../src/main/res/layout/passphrase_dialog.xml | 1 - OpenKeychain/src/main/res/values/strings.xml | 1 + .../src/main/res/xml/adv_preferences.xml | 6 +++++- 8 files changed, 58 insertions(+), 4 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index a32c14ca0..04a932658 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -83,6 +83,7 @@ public final class Constants { public static final String SEARCH_KEYSERVER = "search_keyserver_pref"; public static final String SEARCH_KEYBASE = "search_keybase_pref"; public static final String USE_DEFAULT_YUBIKEY_PIN = "useDefaultYubikeyPin"; + public static final String USE_NUMKEYPAD_FOR_YUBIKEY_PIN="useNumKeypadForYubikeyPin"; } public static final class Defaults { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java index b9761fbf3..deff648ba 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java @@ -27,6 +27,8 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; import android.view.ContextThemeWrapper; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -52,6 +54,7 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.Preferences; /** * We can not directly create a dialog on the application context. @@ -138,6 +141,7 @@ public class PassphraseDialogActivity extends FragmentActivity { alert.setTitle(R.string.title_authentication); String userId; + CanonicalizedSecretKey.SecretKeyType keyType = CanonicalizedSecretKey.SecretKeyType.PASSPHRASE; if (mSubKeyId == Constants.key.symmetric || mSubKeyId == Constants.key.none) { alert.setMessage(R.string.passphrase_for_symmetric_encryption); @@ -161,7 +165,7 @@ public class PassphraseDialogActivity extends FragmentActivity { long masterKeyId = new ProviderHelper(activity).getMasterKeyId(mSubKeyId); CachedPublicKeyRing keyRing = new ProviderHelper(activity).getCachedPublicKeyRing(masterKeyId); // get the type of key (from the database) - CanonicalizedSecretKey.SecretKeyType keyType = keyRing.getSecretKeyType(mSubKeyId); + keyType = keyRing.getSecretKeyType(mSubKeyId); switch (keyType) { case PASSPHRASE: message = getString(R.string.passphrase_for, userId); @@ -231,6 +235,14 @@ public class PassphraseDialogActivity extends FragmentActivity { mPassphraseEditText.setImeActionLabel(getString(android.R.string.ok), EditorInfo.IME_ACTION_DONE); mPassphraseEditText.setOnEditorActionListener(this); + if (keyType == CanonicalizedSecretKey.SecretKeyType.DIVERT_TO_CARD && Preferences.getPreferences(activity).useNumKeypadForYubikeyPin()) { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } else { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + + mPassphraseEditText.setTransformationMethod(PasswordTransformationMethod.getInstance()); + AlertDialog dialog = alert.create(); dialog.setButton(DialogInterface.BUTTON_POSITIVE, activity.getString(android.R.string.ok), (DialogInterface.OnClickListener) null); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java index 9d3175d15..51fac4779 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PreferencesActivity.java @@ -127,6 +127,9 @@ public class PreferencesActivity extends PreferenceActivity { initializeUseDefaultYubikeyPin( (CheckBoxPreference) findPreference(Constants.Pref.USE_DEFAULT_YUBIKEY_PIN)); + initializeUseNumKeypadForYubikeyPin( + (CheckBoxPreference) findPreference(Constants.Pref.USE_NUMKEYPAD_FOR_YUBIKEY_PIN)); + } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Load the legacy preferences headers addPreferencesFromResource(R.xml.preference_headers_legacy); @@ -278,6 +281,9 @@ public class PreferencesActivity extends PreferenceActivity { initializeUseDefaultYubikeyPin( (CheckBoxPreference) findPreference(Constants.Pref.USE_DEFAULT_YUBIKEY_PIN)); + + initializeUseNumKeypadForYubikeyPin( + (CheckBoxPreference) findPreference(Constants.Pref.USE_NUMKEYPAD_FOR_YUBIKEY_PIN)); } } @@ -463,4 +469,14 @@ public class PreferencesActivity extends PreferenceActivity { }); } + private static void initializeUseNumKeypadForYubikeyPin(final CheckBoxPreference mUseNumKeypadForYubikeyPin) { + mUseNumKeypadForYubikeyPin.setChecked(sPreferences.useNumKeypadForYubikeyPin()); + mUseNumKeypadForYubikeyPin.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + public boolean onPreferenceChange(Preference preference, Object newValue) { + mUseNumKeypadForYubikeyPin.setChecked((Boolean) newValue); + sPreferences.setUseNumKeypadForYubikeyPin((Boolean) newValue); + return false; + } + }); + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java index 8560bccc0..40ee8e0e9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java @@ -31,6 +31,8 @@ import android.os.Messenger; import android.os.RemoteException; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; @@ -54,6 +56,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.Preferences; public class PassphraseDialogFragment extends DialogFragment implements OnEditorActionListener { private static final String ARG_MESSENGER = "messenger"; @@ -132,6 +135,7 @@ public class PassphraseDialogFragment extends DialogFragment implements OnEditor alert.setTitle(R.string.title_authentication); String userId; + CanonicalizedSecretKey.SecretKeyType keyType = CanonicalizedSecretKey.SecretKeyType.PASSPHRASE; if (mSubKeyId == Constants.key.symmetric || mSubKeyId == Constants.key.none) { alert.setMessage(R.string.passphrase_for_symmetric_encryption); @@ -155,7 +159,7 @@ public class PassphraseDialogFragment extends DialogFragment implements OnEditor long masterKeyId = new ProviderHelper(getActivity()).getMasterKeyId(mSubKeyId); CachedPublicKeyRing keyRing = new ProviderHelper(getActivity()).getCachedPublicKeyRing(masterKeyId); // get the type of key (from the database) - CanonicalizedSecretKey.SecretKeyType keyType = keyRing.getSecretKeyType(mSubKeyId); + keyType = keyRing.getSecretKeyType(mSubKeyId); switch (keyType) { case PASSPHRASE: message = getString(R.string.passphrase_for, userId); @@ -226,6 +230,13 @@ public class PassphraseDialogFragment extends DialogFragment implements OnEditor mPassphraseEditText.setImeActionLabel(getString(android.R.string.ok), EditorInfo.IME_ACTION_DONE); mPassphraseEditText.setOnEditorActionListener(this); + if (keyType == CanonicalizedSecretKey.SecretKeyType.DIVERT_TO_CARD && Preferences.getPreferences(activity).useNumKeypadForYubikeyPin()) { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } else { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + mPassphraseEditText.setTransformationMethod(PasswordTransformationMethod.getInstance()); + AlertDialog dialog = alert.create(); dialog.setButton(DialogInterface.BUTTON_POSITIVE, activity.getString(android.R.string.ok), (DialogInterface.OnClickListener) null); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java index bdb7c65fc..52e083fd4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java @@ -191,6 +191,16 @@ public class Preferences { editor.commit(); } + public boolean useNumKeypadForYubikeyPin() { + return mSharedPreferences.getBoolean(Pref.USE_NUMKEYPAD_FOR_YUBIKEY_PIN, false); + } + + public void setUseNumKeypadForYubikeyPin(boolean useNumKeypadForYubikeyPin) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putBoolean(Pref.USE_NUMKEYPAD_FOR_YUBIKEY_PIN, useNumKeypadForYubikeyPin); + editor.commit(); + } + public void setFirstTime(boolean value) { SharedPreferences.Editor editor = mSharedPreferences.edit(); editor.putBoolean(Constants.Pref.FIRST_TIME, value); diff --git a/OpenKeychain/src/main/res/layout/passphrase_dialog.xml b/OpenKeychain/src/main/res/layout/passphrase_dialog.xml index f003e6994..2ca5199fd 100644 --- a/OpenKeychain/src/main/res/layout/passphrase_dialog.xml +++ b/OpenKeychain/src/main/res/layout/passphrase_dialog.xml @@ -19,7 +19,6 @@ android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:imeOptions="actionDone" - android:inputType="textPassword" android:hint="@string/label_passphrase" android:ems="10" android:layout_gravity="center_horizontal" /> diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 0b0f0b4fd..3720826fe 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -112,6 +112,7 @@ "Let others know that you're using OpenKeychain" "Writes 'OpenKeychain v2.7' to OpenPGP signatures, ciphertext, and exported keys" "Use default Yubikey PIN" + Use number keypad for Yubikey PIN "Uses default PIN (123456) to access Yubikeys over NFC" "Signed by:" "Encrypt to:" diff --git a/OpenKeychain/src/main/res/xml/adv_preferences.xml b/OpenKeychain/src/main/res/xml/adv_preferences.xml index 92e0f2ffc..fcca59abe 100644 --- a/OpenKeychain/src/main/res/xml/adv_preferences.xml +++ b/OpenKeychain/src/main/res/xml/adv_preferences.xml @@ -44,5 +44,9 @@ android:defaultValue="true" android:title="@string/label_use_default_yubikey_pin" android:summary="@string/label_label_use_default_yubikey_pin_summary" /> - + From 5219cf520765a6e989518c4471f30c094429a835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 13 Oct 2014 14:38:25 +0200 Subject: [PATCH 2/3] Better qr code icon --- .../res/drawable-hdpi/ic_action_qr_code.png | Bin 2388 -> 2134 bytes .../res/drawable-mdpi/ic_action_qr_code.png | Bin 1502 -> 1314 bytes .../res/drawable-xhdpi/ic_action_qr_code.png | Bin 2592 -> 2959 bytes .../res/drawable-xxhdpi/ic_action_qr_code.png | Bin 3339 -> 4129 bytes Resources/graphics/All_Icons.svg | 1619 +++++++++++++++++ Resources/graphics/ic_action_qr_code.svg | 1281 +++++++------ 6 files changed, 2296 insertions(+), 604 deletions(-) create mode 100644 Resources/graphics/All_Icons.svg diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_qr_code.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_qr_code.png index 1c65e5af8d745a88c18f243804783bc62d176fef..ceb3b16458792f75566ba9b4b23fe8420f84501e 100644 GIT binary patch delta 2047 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 Z{tMIM(`;A5qGbR8002ovPDHLkV1nH_dS(Cs diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_qr_code.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_qr_code.png index 570212461af60944af397177d4da4894a4ef95cf..21594e62fbaa04e2cd4b99938509ccdfda1922ce 100644 GIT binary patch delta 1221 zcmV;$1UmcP3!(~;ZGQxxNkle*w*u% zJ9p**;MA#8Z%dMNWoLh8o=>GxKesDDJ2#%x`TC{%m-jH%>&q%*@QxiHNwFI@2^y z1Nel9lvg6KMHlHT8AGk!osbkehlr@~S_A;}GzA{-(eB*4cdsl-Qn(#~-3rllBHErUGuHro?eqBp z^?Lo95aJC*QKTC;ZhVx><%Hkw-;gA!?z*lzFfbt2*4Bh9%WN11JC0+ON+mQ84JnGk z0|Nus0)K(Pk6ZlbW`KwkX8v$$YAWAoG`?l#v=G9oR4SUPs%jt*=+bpPlFQ|c_4RdK zlBAAEB%)<98GUhavBxls9z{{2fk2=qlgUJx*?5+}uVW~LcsG$qxVCNow6L)70|4dr z?b~0-vW#RhiO$YWsHzIvwjs+hip3&Ap%84_Mt{9tM>3g2Utb?2Nor;9N1!S3o?#f* zM@L6LyLj>91ptsF3E^-U-QC>)faAxHqgt&Z5{V$2%>n>aRYf=)MlcxMmHR?9UI-Bc zaJp8jNdS<^WT0sp8jS|l*Vpmn$rBtoas-N^U}IwgKA#T@3k%RR4W&{EwOXx(*|G`u z8Gp)y2M;!6S%#)*0Dx>Zi&CisMNv>J7V+rOBV4+42>`IVx(ds((AU=oS(d*v4CDLl zNwqUN0OWExuIs|KZ3F@VxUP%o>1i|?4J35S`CilAe+siqoV`)d>)FT;LMpbcz^itA@cb=(&;n`g#yy)bPK1g@BCIQFE1k+ zjY88j=(-NWFfcnii_4cUV|8^E%#7jTVK6hgySovMMqiykHk(DcTm}H#y?Yk`aN@)X zNRkA{aga`@arW$4c%BE(^WgXUVHidWr|l(p`t&IdA3ls&EQWYI4##oO)zyW~&3{c) zt5vwJ3(K-FK0c27_wPehRZLD!ws2l*2{t!3F*!N8U5Eg{^E@0qdK4=wE9mX*#n8|Y zg25olTM@+tqJrX+8;xqHJd+7K;G@dV70YIPDf9U!_vH)~5S!hG9&- jtiUUa1OGKUaDjgS7nbhX*zQtj00000NkvXXu0mjfn@mOL delta 1410 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 delta 2509 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 Yol@HVq<*a}8h}0>4Sn@ejCI(505BBHmjD0& delta 3262 zcmZvec{tSV8pnSlF_!FaSu@5ukzHi$jVu{!L^60|EH$L;+izZZ?J37t<|t_x+t`=k zogxRlWS4aam7U7V7z*i3UFTfqT-Q0zfA>Gn^<4LJf4-ml87y7=5f0={u|k<%jePvc z1DzrH>X&0o*zm{C@7xNeMWF&B>C!UUk@U~F$8`d3CnEA_m-^%_J#VFNsP>Aou>12-c>}8s2$_ zZ)Q?R%N3QRanu$Q3xlcif8WUsPqfi>>RN;o>^%Z739Sf@uz)A@`@0 zo1l)!r+=AqQO^hp3}WxeLlerPCnytvWq{n>)|x{}!3T)5S^#E?DJj^tba;H|wiMy9 zUl))xMp8GuSZr@H)a#Q#)6mgjp2D_!WL*Ppl=UZq0yu=Pm4|foM4)04J=`U-P*;W= zYndfAW-l5iLyCx7_&!@VBUQTa(6&ebP&NeUt@FWK`)S3}h%1eUq@eR7l85+)`%Xoau?Zy2<`3 zuaz%k?y!)5r{bzL{8#Levo#&IF_(;OTzAV26JWuFfsAOu8lAgCjzk5?XQc9vhvfPaFXRv}Rw$AU z@?1(QDk`26zZR9Ig1sBgcGgk0(CrKvwJV6J*W);$!S>LXCk7&BS@$hBHI%vFt^a;K zuO(aYDsb$Arl2armQ~o(xw_PL_3dI-UP7t?(MwZ zCB30VRFiww>U~&byz77cn7xQOcrWlCDk3eCGyiLXzz4Oz^CiIO>OUC8+akPInj7(DW&Gq$-et4QSTQ>#+Fs~RdxX@qPjcX%{p)y1241+ps0wAYQo=%0l zg;t#pL&u{+O&J1aRh9_j5#RLm^qHej6YD?NyyjcO+-su)ItKP53#ZudE|f5rU`a`l zYiJ0nselL;1@wR+h21klR$tmd-j4dgNE=&QBVH3f6?Z@=9<`gWby!=Hg@7ic0|UP> z#sH)2Bn#aV!a~waiQnuV1;AWk#Cj+ElvLJhcC?+{HP!(u0uam6i2`a6KoAXl8NwPU zC@2KgsQ@kIlM44V+K11H6soq>^N2p<6CJGoJk%zxI#9FbY;Kqe9jkpEl z;ysPqT!ioi%A%gtmy2aW0gqs$O(YVSV1GF|6)1n?4)|+}3*vp`kA{$2v3AJC)2C0{ zLL%qiZ8!eMKhhGy1P;`$#giF~YTm-w{?^Oy$4?wY;+)2)xbMtC-GzbBz59!L4^7E> zn)h%)K|%4^7W#jsf>&Ac?}?f7TS=oXr^TPTl^hZ*hSGj^t<$k@f0X#88S%59`fMp{ z9yhU(uXbzmIa~M+d-F`6ISOZMT_Hx1Jw1jQdmEeRp``e9Vlx-5)wHcpw300;iu7>; zZ;h5@F*Q)clksuwtbu1A-09zep>x*WMNtF{RAHOu0|t(y;hI_x2b&m6y=Rz^vu6_gzw8? zSE6Zl3z=Xzn?_PfrBkn0HwNBg#}BFa!VmHYcdcHxk3ubHW_l?Ivcd3xm3y9=XArLA wo>K{5-x*QWfAgek2Kl)f{#d(y@b$mtB4|}EX;MIZ69=%4mANgd#>^|>pIyZsk^lez diff --git a/Resources/graphics/All_Icons.svg b/Resources/graphics/All_Icons.svg new file mode 100644 index 000000000..e88ead4ef --- /dev/null +++ b/Resources/graphics/All_Icons.svg @@ -0,0 +1,1619 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/graphics/ic_action_qr_code.svg b/Resources/graphics/ic_action_qr_code.svg index da7d0f97c..ebd147888 100644 --- a/Resources/graphics/ic_action_qr_code.svg +++ b/Resources/graphics/ic_action_qr_code.svg @@ -2,11 +2,13 @@ image/svg+xml + id="defs229"> @@ -135,7 +142,49 @@ - - - \ No newline at end of file + + \ No newline at end of file From b86d235177da91b23562d28389748cce011ddc9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 13 Oct 2014 14:44:23 +0200 Subject: [PATCH 3/3] wording --- OpenKeychain/src/main/res/values/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 3720826fe..d94f9e800 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -49,7 +49,7 @@ "Advanced" "Certify" "Actions" - "Public key" + "Key" "Your Key used for certification" "Synchronize Key" "Keyserver" @@ -837,8 +837,8 @@ "IO error writing secret keys to cache!" "Error reimporting public keys!" "Error reimporting secret keys!" - "Recovering consolidation" - "Recovering from unknown state" + "Resuming consolidation process" + "Resuming consolidation process from unknown state" "Reimporting one public key" "Reimporting %d public keys"