From 6a9cb69a1f1cb4a6dad9bdeb5fa331d79c0e5930 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 01:12:02 +0200 Subject: [PATCH 01/10] ui: purpelize fastscroll thumb --- ...apptheme_fastscroll_thumb_default_holo.png | Bin 0 -> 260 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 467 bytes ...apptheme_fastscroll_thumb_default_holo.png | Bin 0 -> 169 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 306 bytes ...apptheme_fastscroll_thumb_default_holo.png | Bin 0 -> 324 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 613 bytes ...apptheme_fastscroll_thumb_default_holo.png | Bin 0 -> 600 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 911 bytes .../apptheme_fastscroll_thumb_holo.xml | 20 +++++++ .../res/values-v11/styles_keychaintheme.xml | 24 -------- .../res/values-v11/themes_keychaintheme.xml | 28 --------- .../res/res/values/colors_keychaintheme.xml | 4 -- .../res/res/values/styles_keychaintheme.xml | 53 ------------------ .../res/res/values/themes_keychaintheme.xml | 32 ----------- .../res/values-v11/themes_keychaintheme.xml | 4 +- 15 files changed, 23 insertions(+), 142 deletions(-) create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml delete mode 100644 OpenKeychain/src/main/res/res/values-v11/styles_keychaintheme.xml delete mode 100644 OpenKeychain/src/main/res/res/values-v11/themes_keychaintheme.xml delete mode 100644 OpenKeychain/src/main/res/res/values/colors_keychaintheme.xml delete mode 100644 OpenKeychain/src/main/res/res/values/styles_keychaintheme.xml delete mode 100644 OpenKeychain/src/main/res/res/values/themes_keychaintheme.xml diff --git a/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddafab03611e5b22a91cd7eef76d3b2d6567c7a GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^xJmetY_Aq`U zo1l+pnc}S}HyWN#Nfd8XFk2|zug54kuVoK=wbYECe7kqeeLpk$bv<*Pr^(a|t&1Ux zR=NatE)()qowZ7+*274pvbOSYdR&m|uSrX?&+JmUzRG#(i@Qf^qDwPA)=PP#>+!-N zF!japBYz@GR|wU58JVRePfEVJ(D&*hmD)+Q5BH^Y|Gyl8uoh&*s>nt6cPI<2Vf(+V Q3g|5cPgg&ebxsLQ0CnwZQ~&?~ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png b/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..c062b17f8470f0af7cf73460f4279048311496a1 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^xJ`T9MMwW;325eB5+8k>1dzt48@t|r{$gQg`a!# z|Jm)-wCy*_zy14ja^pp-Ee)*G!yaDJiiv9VUR{tW`nK)WmIk{EjOUa;i*8_2JFu)| zW6(=J1BPAIarNA18V$et&d|6iXZxV>Z|nb;Z87I}Z3x}Pd`I+2^a0y~MBZo#k(BMP zQ<5Wh`2L&bQP}w~CXz47-tZsC9){}^cWQoM>k;}|SHz;@Z}rWKSwcu$t%u+EwQ6S2 zuPk>xQ~il{7J6$BEe+kVg$u<^_yoHqPh2PTc)xYg%AX;7ReZhn2mNR6H{|_n`E^o6 z-3$MQ*(ZK*R2W@5edyDY>jw@^=-$Zjb<+m9BO48`d&sW-BJ|_fy`Nh-e=b#x`E+VF zqx_Y-@s?+t^U`8>Y&n|CTGMJ(`|4hANPL`Y?Tby{KbZNN3a>kv^HTF+%DxWv;|PcL c1^wc8I&V^4Ju&PwFtQjtUHx3vIVCg!0A}*j6951J literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..ebffb16a0fe41a8620474b73e464941e9f5b2165 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^azJdx!3HERoY(vbqzXJ;977^n-(EE2YB1nweVG1n z!J-FiMbghdntE$j%By9e&L8>rs7|Ok{QBF^3CCH)MI|I8ewcqy()2ntEo1lfhYNRb zPdcXm!2MO`s^kPXcu-|gc`&+B-ShQT^}oCon?ihpWtoBC_aXI)i@Z+vau0j}+RfnU L>gTe~DWM4fxj93| literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..b6739b56483c749418e345618b6829effcc36f50 GIT binary patch literal 306 zcmV-20nPr2P)Wz>4unvnDKKj?NsijL#yeomZP6ug1VSt0yl=^l?GI^V<%ab_T$z`^ok+n7R&HpN}~>fcGh3jQtd72%F0Ms2c4wg3PC07*qoM6N<$ Eg8O}hpa1{> literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5e21eebcb51e8064bfa64f1093e8973eec04bd GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^Hb9)i!3HGFiY~S?Ffej^x;TbZ%z1m;kn50x2;0MW zL4WZ*Ef1FJykWKeC=%zvnKf~W*2Wv^K4}Vf5AD;JzV!Cdj@@Z~y8mq*N}FDCE>oW| zFQE#J5y!g2yU44^`_rEfcaE9HzD^8VYwoe>EW^)j*R4*b#T4gR`dsDouiUs=WKIF= zkLl}I{IvPE%eo7Id`u7$-F4+<8NSl@C(aj6vp10jqxrvlHX-=PPYI-0*xw!CRl(46Q}o>-DGPN@`yhusEgw_^CUV(N5zJhmzL+ zE#bQV{a>nWTDa45b@sY2rIyz*m#OV;uk9|J*O%~ed2Lk55Op=PI^SS_K(vr~C!-vP%$XP8 zKTO)<==lD+d*4T&52rLQp0ayh`goG!%FVm8=gs<}vhHWUnO>B!5t{%2 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4818bfc903edaed22fffd46d0e772421aec392 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^Q9!(igAGU?%)C{`z`!K$>EaktG3V_i!>rIik+zF# zBf4BqnKN)JZWc&i;9MYdjnA!+;}ORjrgI9Dv|4Xue~!BN!EaxANA^M8@8=&rw)^$t z+v|e=a`S&P{^wq(?Bw3k#~~|drBvebqT_-fnF3|JwKHb&8yDLe@BjC4x7|INb06;Q zzh(I4^UR&IW||jo&uD*q_Uf5EJKD?VrX0WUKK@=&i_gjfy zH=BBwbDK>AYHL=Z$TigP5wT`$N`4{FZC0muBO>egg?O=?nz#)cukEaktG3V{wjb71#GRHs0 zceex?i3qBnd=lcNuKx1DYKtx2@{9Zft-kR75>YzpX*K22NllAR7IsZli;@#lS9RQ* zeB{05i|@vkbME~ASUq|69i7T=Zx1Ja`7rPLy#v9C86681+u9_gl89w!Z#6IIcbt@X ze(Q73W&As)w{8)unvpUkrS{#jcFCvBd&^#&Rgpe0 z=dH?d&%TDp?W=yK{m}Dy;w^pmj8<0bJ4qM%r|LL5@|Hann-%U1D`cnDum%R6k%7`8NO8SpR?J21_oAm!jWqHrCfQ9F| zuJuiRqjuB(CjVmpUB}-n`=8&Wo?1Oy`YZFB$5Z}Z_?bD$pMT5r*PwCoFTy=TB~!Zu0BWN9lRx;wAc~>n>J{rrq1(&cEhs z+K%Z@79G0N9b$FS)V{RFzli6Y^}DpNz~7JW22Ns5IOk}-TI$ug4|z{xX^LH2j~TkH^P1 U|5^_dFrzVey85}Sb4q9e0K9#a`v3p{ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml b/OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml new file mode 100644 index 000000000..e7121f083 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/OpenKeychain/src/main/res/res/values-v11/styles_keychaintheme.xml b/OpenKeychain/src/main/res/res/values-v11/styles_keychaintheme.xml deleted file mode 100644 index 91599cbfe..000000000 --- a/OpenKeychain/src/main/res/res/values-v11/styles_keychaintheme.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/res/values-v11/themes_keychaintheme.xml b/OpenKeychain/src/main/res/res/values-v11/themes_keychaintheme.xml deleted file mode 100644 index ab2d99bde..000000000 --- a/OpenKeychain/src/main/res/res/values-v11/themes_keychaintheme.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/res/values/colors_keychaintheme.xml b/OpenKeychain/src/main/res/res/values/colors_keychaintheme.xml deleted file mode 100644 index fdb9f3283..000000000 --- a/OpenKeychain/src/main/res/res/values/colors_keychaintheme.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #aa66cc - diff --git a/OpenKeychain/src/main/res/res/values/styles_keychaintheme.xml b/OpenKeychain/src/main/res/res/values/styles_keychaintheme.xml deleted file mode 100644 index 0496967cc..000000000 --- a/OpenKeychain/src/main/res/res/values/styles_keychaintheme.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/res/values/themes_keychaintheme.xml b/OpenKeychain/src/main/res/res/values/themes_keychaintheme.xml deleted file mode 100644 index 5b240ddc7..000000000 --- a/OpenKeychain/src/main/res/res/values/themes_keychaintheme.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml index ab2d99bde..e8c61848f 100644 --- a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml +++ b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml @@ -23,6 +23,8 @@ @drawable/keychaintheme_activated_background_holo_light + @drawable/apptheme_fastscroll_thumb_holo + - \ No newline at end of file + From 96125b1976b1cddec946d1ef8e28c4868a63e354 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 01:39:28 +0200 Subject: [PATCH 02/10] ui: purplize edge overscroll glow effect --- .../keychain/KeychainApplication.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java index 866888bb2..f911318a0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java @@ -18,6 +18,9 @@ package org.sufficientlysecure.keychain; import android.app.Application; +import android.content.Context; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; import android.os.Environment; import org.spongycastle.jce.provider.BouncyCastleProvider; @@ -70,5 +73,22 @@ public class KeychainApplication extends Application { // that the directory doesn't exist at this point } } + + brandGlowEffect(getApplicationContext(), + getApplicationContext().getResources().getColor(R.color.emphasis)); + } + + static void brandGlowEffect(Context context, int brandColor) { + // terrible hack to brand the edge overscroll glow effect + // https://gist.github.com/menny/7878762#file-brandgloweffect_full-java + + //glow + int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android"); + Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); + androidGlow.setColorFilter(brandColor, PorterDuff.Mode.SRC_IN); + //edge + int edgeDrawableId = context.getResources().getIdentifier("overscroll_edge", "drawable", "android"); + Drawable androidEdge = context.getResources().getDrawable(edgeDrawableId); + androidEdge.setColorFilter(brandColor, PorterDuff.Mode.SRC_IN); } } From 6aafb314125f016e2215f7d33baf600b5768d72c Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 02:14:47 +0200 Subject: [PATCH 03/10] ui: move revocation/expiry notes above tab slider --- .../keychain/ui/ViewKeyActivity.java | 26 +++++++++++++ .../keychain/ui/ViewKeyMainFragment.java | 38 +++---------------- .../src/main/res/layout/view_key_activity.xml | 29 ++++++++++++++ .../res/layout/view_key_main_fragment.xml | 22 ----------- 4 files changed, 61 insertions(+), 54 deletions(-) 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 56aaba57b..a7ac2587a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -40,6 +40,7 @@ import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.view.Window; import com.devspark.appmsg.AppMsg; @@ -55,6 +56,7 @@ import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.SlidingTabLayout; import java.io.IOException; +import java.util.Date; import java.util.HashMap; public class ViewKeyActivity extends ActionBarActivity implements @@ -75,6 +77,8 @@ public class ViewKeyActivity extends ActionBarActivity implements private ViewPager mViewPager; private SlidingTabLayout mSlidingTabLayout; private PagerTabStripAdapter mTabsAdapter; + private View mStatusRevoked; + private View mStatusExpired; public static final int REQUEST_CODE_LOOKUP_KEY = 0x00007006; @@ -104,6 +108,9 @@ public class ViewKeyActivity extends ActionBarActivity implements setContentView(R.layout.view_key_activity); + mStatusRevoked = findViewById(R.id.view_key_revoked); + mStatusExpired = findViewById(R.id.view_key_expired); + mViewPager = (ViewPager) findViewById(R.id.view_key_pager); mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.view_key_sliding_tab_layout); @@ -363,10 +370,14 @@ public class ViewKeyActivity extends ActionBarActivity implements KeychainContract.KeyRings._ID, KeychainContract.KeyRings.MASTER_KEY_ID, KeychainContract.KeyRings.USER_ID, + KeychainContract.KeyRings.IS_REVOKED, + KeychainContract.KeyRings.EXPIRY, }; static final int INDEX_UNIFIED_MASTER_KEY_ID = 1; static final int INDEX_UNIFIED_USER_ID = 2; + static final int INDEX_UNIFIED_IS_REVOKED = 3; + static final int INDEX_UNIFIED_EXPIRY = 4; @Override public Loader onCreateLoader(int id, Bundle args) { @@ -408,6 +419,21 @@ public class ViewKeyActivity extends ActionBarActivity implements String keyIdStr = PgpKeyHelper.convertKeyIdToHex(masterKeyId); getSupportActionBar().setSubtitle(keyIdStr); + // If this key is revoked, it cannot be used for anything! + if (data.getInt(INDEX_UNIFIED_IS_REVOKED) != 0) { + mStatusRevoked.setVisibility(View.VISIBLE); + mStatusExpired.setVisibility(View.GONE); + } else { + mStatusRevoked.setVisibility(View.GONE); + + Date expiryDate = new Date(data.getLong(INDEX_UNIFIED_EXPIRY) * 1000); + if (!data.isNull(INDEX_UNIFIED_EXPIRY) && expiryDate.before(new Date())) { + mStatusExpired.setVisibility(View.VISIBLE); + } else { + mStatusExpired.setVisibility(View.GONE); + } + } + break; } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java index ded457eca..389455a9a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java @@ -49,8 +49,6 @@ public class ViewKeyMainFragment extends Fragment implements public static final String ARG_DATA_URI = "uri"; private LinearLayout mContainer; - private View mStatusRevoked; - private View mStatusExpired; private View mActionEdit; private View mActionEditDivider; private View mActionEncrypt; @@ -72,8 +70,6 @@ public class ViewKeyMainFragment extends Fragment implements mContainer = (LinearLayout) view.findViewById(R.id.container); mUserIds = (ListView) view.findViewById(R.id.view_key_user_ids); - mStatusRevoked = view.findViewById(R.id.view_key_revoked); - mStatusExpired = view.findViewById(R.id.view_key_expired); mActionEdit = view.findViewById(R.id.view_key_action_edit); mActionEditDivider = view.findViewById(R.id.view_key_action_edit_divider); mActionEncrypt = view.findViewById(R.id.view_key_action_encrypt); @@ -132,30 +128,14 @@ public class ViewKeyMainFragment extends Fragment implements } static final String[] UNIFIED_PROJECTION = new String[]{ - KeyRings._ID, KeyRings.MASTER_KEY_ID, KeyRings.HAS_ANY_SECRET, KeyRings.IS_REVOKED, - KeyRings.USER_ID, KeyRings.FINGERPRINT, - KeyRings.ALGORITHM, KeyRings.KEY_SIZE, KeyRings.CREATION, KeyRings.EXPIRY, - KeyRings.HAS_ENCRYPT - + KeyRings._ID, KeyRings.MASTER_KEY_ID, + KeyRings.HAS_ANY_SECRET, KeyRings.IS_REVOKED, KeyRings.EXPIRY, KeyRings.HAS_ENCRYPT }; static final int INDEX_UNIFIED_MASTER_KEY_ID = 1; static final int INDEX_UNIFIED_HAS_ANY_SECRET = 2; static final int INDEX_UNIFIED_IS_REVOKED = 3; - static final int INDEX_UNIFIED_USER_ID = 4; - static final int INDEX_UNIFIED_FINGERPRINT = 5; - static final int INDEX_UNIFIED_ALGORITHM = 6; - static final int INDEX_UNIFIED_KEY_SIZE = 7; - static final int INDEX_UNIFIED_CREATION = 8; - static final int INDEX_UNIFIED_EXPIRY = 9; - static final int INDEX_UNIFIED_HAS_ENCRYPT = 10; - - static final String[] KEYS_PROJECTION = new String[]{ - Keys._ID, - Keys.KEY_ID, Keys.RANK, Keys.ALGORITHM, Keys.KEY_SIZE, Keys.HAS_SECRET, - Keys.CAN_CERTIFY, Keys.CAN_ENCRYPT, Keys.CAN_SIGN, Keys.IS_REVOKED, - Keys.CREATION, Keys.EXPIRY, Keys.FINGERPRINT - }; - static final int KEYS_INDEX_CAN_ENCRYPT = 7; + static final int INDEX_UNIFIED_EXPIRY = 4; + static final int INDEX_UNIFIED_HAS_ENCRYPT = 5; public Loader onCreateLoader(int id, Bundle args) { switch (id) { @@ -165,7 +145,8 @@ public class ViewKeyMainFragment extends Fragment implements } case LOADER_ID_USER_IDS: { Uri baseUri = UserIds.buildUserIdsUri(mDataUri); - return new CursorLoader(getActivity(), baseUri, ViewKeyUserIdsAdapter.USER_IDS_PROJECTION, null, null, null); + return new CursorLoader(getActivity(), baseUri, + ViewKeyUserIdsAdapter.USER_IDS_PROJECTION, null, null, null); } default: @@ -206,9 +187,6 @@ public class ViewKeyMainFragment extends Fragment implements // If this key is revoked, it cannot be used for anything! if (data.getInt(INDEX_UNIFIED_IS_REVOKED) != 0) { - mStatusRevoked.setVisibility(View.VISIBLE); - mStatusExpired.setVisibility(View.GONE); - mActionEdit.setEnabled(false); mActionCertify.setEnabled(false); mActionEncrypt.setEnabled(false); @@ -217,13 +195,9 @@ public class ViewKeyMainFragment extends Fragment implements Date expiryDate = new Date(data.getLong(INDEX_UNIFIED_EXPIRY) * 1000); if (!data.isNull(INDEX_UNIFIED_EXPIRY) && expiryDate.before(new Date())) { - mStatusRevoked.setVisibility(View.GONE); - mStatusExpired.setVisibility(View.VISIBLE); mActionCertify.setEnabled(false); mActionEncrypt.setEnabled(false); } else { - mStatusRevoked.setVisibility(View.GONE); - mStatusExpired.setVisibility(View.GONE); mActionCertify.setEnabled(true); mActionEncrypt.setEnabled(true); } diff --git a/OpenKeychain/src/main/res/layout/view_key_activity.xml b/OpenKeychain/src/main/res/layout/view_key_activity.xml index eed71945b..aa6089aa2 100644 --- a/OpenKeychain/src/main/res/layout/view_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/view_key_activity.xml @@ -4,6 +4,35 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + + + - - - - Date: Wed, 7 May 2014 02:15:09 +0200 Subject: [PATCH 04/10] ui: slight edit icon cosmetics in keylist --- .../keychain/ui/ViewKeyActivity.java | 4 ++++ OpenKeychain/src/main/res/layout/key_list_item.xml | 11 ++++++----- .../src/main/res/layout/view_key_activity.xml | 4 +++- 3 files changed, 13 insertions(+), 6 deletions(-) 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 a7ac2587a..957a2db07 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -77,6 +77,7 @@ public class ViewKeyActivity extends ActionBarActivity implements private ViewPager mViewPager; private SlidingTabLayout mSlidingTabLayout; private PagerTabStripAdapter mTabsAdapter; + private View mStatusDivider; private View mStatusRevoked; private View mStatusExpired; @@ -421,6 +422,7 @@ public class ViewKeyActivity extends ActionBarActivity implements // If this key is revoked, it cannot be used for anything! if (data.getInt(INDEX_UNIFIED_IS_REVOKED) != 0) { + mStatusDivider.setVisibility(View.VISIBLE); mStatusRevoked.setVisibility(View.VISIBLE); mStatusExpired.setVisibility(View.GONE); } else { @@ -428,8 +430,10 @@ public class ViewKeyActivity extends ActionBarActivity implements Date expiryDate = new Date(data.getLong(INDEX_UNIFIED_EXPIRY) * 1000); if (!data.isNull(INDEX_UNIFIED_EXPIRY) && expiryDate.before(new Date())) { + mStatusDivider.setVisibility(View.VISIBLE); mStatusExpired.setVisibility(View.VISIBLE); } else { + mStatusDivider.setVisibility(View.GONE); mStatusExpired.setVisibility(View.GONE); } } diff --git a/OpenKeychain/src/main/res/layout/key_list_item.xml b/OpenKeychain/src/main/res/layout/key_list_item.xml index 85d9afdd3..73a20bd2e 100644 --- a/OpenKeychain/src/main/res/layout/key_list_item.xml +++ b/OpenKeychain/src/main/res/layout/key_list_item.xml @@ -48,7 +48,7 @@ + android:text="@string/edit" + android:padding="12dp" /> + android:layout_gravity="center" + android:padding="12dp" /> + android:padding="16dp" /> diff --git a/OpenKeychain/src/main/res/layout/view_key_activity.xml b/OpenKeychain/src/main/res/layout/view_key_activity.xml index aa6089aa2..f43aade25 100644 --- a/OpenKeychain/src/main/res/layout/view_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/view_key_activity.xml @@ -31,7 +31,9 @@ + android:background="?android:attr/listDivider" + android:visibility="gone" + android:id="@+id/status_divider" /> Date: Wed, 7 May 2014 02:27:51 +0200 Subject: [PATCH 05/10] display AppMsg warning when no encryption subkey is available --- .../keychain/ui/ViewKeyMainFragment.java | 12 ++++++++++++ OpenKeychain/src/main/res/values/strings.xml | 1 + 2 files changed, 13 insertions(+) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java index 389455a9a..b30c9aaec 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java @@ -32,6 +32,8 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ListView; +import com.devspark.appmsg.AppMsg; + import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R;import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; @@ -60,6 +62,9 @@ public class ViewKeyMainFragment extends Fragment implements private static final int LOADER_ID_UNIFIED = 0; private static final int LOADER_ID_USER_IDS = 1; + // conservative attitude + private boolean mHasEncrypt = true; + private ViewKeyUserIdsAdapter mUserIdsAdapter; private Uri mDataUri; @@ -203,6 +208,8 @@ public class ViewKeyMainFragment extends Fragment implements } } + mHasEncrypt = data.getInt(INDEX_UNIFIED_HAS_ENCRYPT) != 0; + break; } } @@ -229,6 +236,11 @@ public class ViewKeyMainFragment extends Fragment implements } private void encrypt(Uri dataUri) { + // If there is no encryption key, don't bother. + if (!mHasEncrypt) { + AppMsg.makeText(getActivity(), R.string.error_no_encrypt_subkey, AppMsg.STYLE_ALERT).show(); + return; + } try { long keyId = new ProviderHelper(getActivity()).extractOrGetMasterKeyId(dataUri); long[] encryptionKeyIds = new long[]{keyId}; diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 2109476c3..2277261ee 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -513,5 +513,6 @@ View Certificate Details unknown cannot sign + No encryption subkey available! From 65274f6c1678c55d321e513c3db45974c68470e4 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 03:07:24 +0200 Subject: [PATCH 06/10] ui: purplize searchtext in keylist --- .../sufficientlysecure/keychain/ui/KeyListFragment.java | 3 +++ .../res/drawable/keychaintheme_searchview_holo_light.xml | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml 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 f196e3445..5464a9b96 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -381,6 +381,9 @@ public class KeyListFragment extends Fragment // Execute this when searching mSearchView.setOnQueryTextListener(this); + View searchPlate = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_plate); + searchPlate.setBackgroundResource(R.drawable.keychaintheme_searchview_holo_light); + // Erase search result without focus MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { @Override diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml new file mode 100644 index 000000000..e82b1c2f3 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable/keychaintheme_searchview_holo_light.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file From 992d37819cbac9f7ba001bd91f0b5b700fd51f61 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 03:18:41 +0200 Subject: [PATCH 07/10] small fix for 6aafb3, forgot to commit this line --- .../java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java | 1 + 1 file changed, 1 insertion(+) 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 957a2db07..ef01dfc38 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -109,6 +109,7 @@ public class ViewKeyActivity extends ActionBarActivity implements setContentView(R.layout.view_key_activity); + mStatusDivider = findViewById(R.id.status_divider); mStatusRevoked = findViewById(R.id.view_key_revoked); mStatusExpired = findViewById(R.id.view_key_expired); From 40793935ac3fdbb353fc1a084ac14fe46dc1fa30 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 03:19:09 +0200 Subject: [PATCH 08/10] ui: primary certification icon was a pixel or two off --- OpenKeychain/src/main/res/layout/view_key_userids_item.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/res/layout/view_key_userids_item.xml b/OpenKeychain/src/main/res/layout/view_key_userids_item.xml index a6d147cc1..2f4041f8c 100644 --- a/OpenKeychain/src/main/res/layout/view_key_userids_item.xml +++ b/OpenKeychain/src/main/res/layout/view_key_userids_item.xml @@ -15,7 +15,7 @@ android:focusable="false" /> + android:src="@drawable/key_certify_ok_self" + android:layout_gravity="center_horizontal" /> From 12f1162a1ee6ac407080db3b9de2c8bf7fd83314 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 7 May 2014 03:48:03 +0200 Subject: [PATCH 09/10] ui: use SlidingTabLayout in help activity --- .../keychain/ui/HelpActivity.java | 50 +++++++++++-------- .../src/main/res/layout/help_activity.xml | 5 ++ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java index e81bc1563..cf7446a58 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java @@ -24,7 +24,9 @@ import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter; import org.sufficientlysecure.keychain.ui.adapter.TabsAdapter; +import org.sufficientlysecure.keychain.util.SlidingTabLayout; public class HelpActivity extends ActionBarActivity { public static final String EXTRA_SELECTED_TAB = "selected_tab"; @@ -37,25 +39,27 @@ public class HelpActivity extends ActionBarActivity { public static final int TAB_ABOUT = 5; ViewPager mViewPager; - TabsAdapter mTabsAdapter; + private PagerTabStripAdapter mTabsAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.help_activity); - - mViewPager = (ViewPager) findViewById(R.id.pager); - final ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(false); - actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); - mTabsAdapter = new TabsAdapter(this, mViewPager); + setContentView(R.layout.help_activity); - int selectedTab = 0; + mViewPager = (ViewPager) findViewById(R.id.pager); + SlidingTabLayout slidingTabLayout = + (SlidingTabLayout) findViewById(R.id.sliding_tab_layout); + + mTabsAdapter = new PagerTabStripAdapter(this); + mViewPager.setAdapter(mTabsAdapter); + + int selectedTab = TAB_START; Intent intent = getIntent(); if (intent.getExtras() != null && intent.getExtras().containsKey(EXTRA_SELECTED_TAB)) { selectedTab = intent.getExtras().getInt(EXTRA_SELECTED_TAB); @@ -63,30 +67,36 @@ public class HelpActivity extends ActionBarActivity { Bundle startBundle = new Bundle(); startBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_start); - mTabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.help_tab_start)), - HelpHtmlFragment.class, startBundle, (selectedTab == TAB_START)); + mTabsAdapter.addTab(HelpHtmlFragment.class, startBundle, + getString(R.string.help_tab_start)); Bundle faqBundle = new Bundle(); faqBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_faq); - mTabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.help_tab_faq)), - HelpHtmlFragment.class, faqBundle, (selectedTab == TAB_FAQ)); + mTabsAdapter.addTab(HelpHtmlFragment.class, faqBundle, + getString(R.string.help_tab_faq)); Bundle wotBundle = new Bundle(); wotBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_wot); - mTabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.help_tab_wot)), - HelpHtmlFragment.class, wotBundle, (selectedTab == TAB_WOT)); + mTabsAdapter.addTab(HelpHtmlFragment.class, wotBundle, + getString(R.string.help_tab_wot)); Bundle nfcBundle = new Bundle(); nfcBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_nfc_beam); - mTabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.help_tab_nfc_beam)), - HelpHtmlFragment.class, nfcBundle, (selectedTab == TAB_NFC)); + mTabsAdapter.addTab(HelpHtmlFragment.class, nfcBundle, + getString(R.string.help_tab_nfc_beam)); Bundle changelogBundle = new Bundle(); changelogBundle.putInt(HelpHtmlFragment.ARG_HTML_FILE, R.raw.help_changelog); - mTabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.help_tab_changelog)), - HelpHtmlFragment.class, changelogBundle, (selectedTab == TAB_CHANGELOG)); + mTabsAdapter.addTab(HelpHtmlFragment.class, changelogBundle, + getString(R.string.help_tab_changelog)); - mTabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.help_tab_about)), - HelpAboutFragment.class, null, (selectedTab == TAB_ABOUT)); + mTabsAdapter.addTab(HelpAboutFragment.class, null, + getString(R.string.help_tab_about)); + + // NOTE: must be after adding the tabs! + slidingTabLayout.setViewPager(mViewPager); + + // switch to tab selected by extra + mViewPager.setCurrentItem(selectedTab); } } diff --git a/OpenKeychain/src/main/res/layout/help_activity.xml b/OpenKeychain/src/main/res/layout/help_activity.xml index 58e4919dc..76ba183b7 100644 --- a/OpenKeychain/src/main/res/layout/help_activity.xml +++ b/OpenKeychain/src/main/res/layout/help_activity.xml @@ -4,6 +4,11 @@ android:layout_height="match_parent" android:orientation="vertical" > + + Date: Wed, 7 May 2014 03:55:06 +0200 Subject: [PATCH 10/10] ui: apply theme to tab buttons --- OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml index e8c61848f..4f13f81c6 100644 --- a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml +++ b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml @@ -25,6 +25,8 @@ @drawable/apptheme_fastscroll_thumb_holo + @drawable/keychaintheme_list_selector_holo_light +