From eaf7e5e0051da5a49001283321e8e722ab3b1bae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 6 Mar 2015 01:12:33 +0100 Subject: [PATCH 01/25] Fix elevation --- .../keychain/ui/ViewKeyAdvActivity.java | 4 +- .../src/main/res/layout/help_activity.xml | 35 ++++----------- .../main/res/layout/toolbar_inner_layout.xml | 26 +++++++++++ .../main/res/layout/toolbar_standalone.xml | 26 ++--------- .../res/layout/toolbar_standalone_orange.xml | 26 ++--------- .../src/main/res/layout/toolbar_tabs.xml | 24 +++++++++++ .../main/res/layout/view_key_adv_activity.xml | 43 ++++--------------- 7 files changed, 78 insertions(+), 106 deletions(-) create mode 100644 OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml create mode 100644 OpenKeychain/src/main/res/layout/toolbar_tabs.xml diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java index 9390e8a69..0654f0c9a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java @@ -76,8 +76,8 @@ public class ViewKeyAdvActivity extends BaseActivity implements mExportHelper = new ExportHelper(this); mProviderHelper = new ProviderHelper(this); - mViewPager = (ViewPager) findViewById(R.id.view_key_pager); - mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.view_key_sliding_tab_layout); + mViewPager = (ViewPager) findViewById(R.id.pager); + mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.sliding_tab_layout); int switchToTab = TAB_MAIN; Intent intent = getIntent(); diff --git a/OpenKeychain/src/main/res/layout/help_activity.xml b/OpenKeychain/src/main/res/layout/help_activity.xml index 1722f03ea..0b309a8b1 100644 --- a/OpenKeychain/src/main/res/layout/help_activity.xml +++ b/OpenKeychain/src/main/res/layout/help_activity.xml @@ -1,33 +1,16 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/toolbar_tabs" + layout="@layout/toolbar_tabs" /> - + android:layout_height="match_parent" /> - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml b/OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml new file mode 100644 index 000000000..047225394 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/toolbar_standalone.xml b/OpenKeychain/src/main/res/layout/toolbar_standalone.xml index 950c2f2ae..4ab94060c 100644 --- a/OpenKeychain/src/main/res/layout/toolbar_standalone.xml +++ b/OpenKeychain/src/main/res/layout/toolbar_standalone.xml @@ -1,31 +1,13 @@ - - - - + diff --git a/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml b/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml index 0336b51fd..b8c190a36 100644 --- a/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml +++ b/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml @@ -1,31 +1,13 @@ - - - - + diff --git a/OpenKeychain/src/main/res/layout/toolbar_tabs.xml b/OpenKeychain/src/main/res/layout/toolbar_tabs.xml new file mode 100644 index 000000000..91efda682 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/toolbar_tabs.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml b/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml index 59888c25a..0b309a8b1 100644 --- a/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml +++ b/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml @@ -1,41 +1,16 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/toolbar_tabs" + layout="@layout/toolbar_tabs" /> - + android:layout_height="match_parent" /> - - - - - - - - \ No newline at end of file + \ No newline at end of file From d74a662614489e86e842b4ca241aebee81f38ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 6 Mar 2015 01:52:06 +0100 Subject: [PATCH 02/25] Tryout design for encrypt, decrypt --- Graphics/drawables/ic_action_encrypt_copy.svg | 59 ++++++++++++++++++ Graphics/drawables/ic_action_encrypt_save.svg | 59 ++++++++++++++++++ .../drawables/ic_action_encrypt_share.svg | 59 ++++++++++++++++++ .../ic_comment_text_black_18dp.png | Bin 0 -> 405 bytes .../ic_comment_text_black_24dp.png | Bin 0 -> 352 bytes .../ic_comment_text_black_36dp.png | Bin 0 -> 486 bytes .../ic_comment_text_black_48dp.png | Bin 0 -> 507 bytes .../ic_comment_text_grey600_18dp.png | Bin 0 -> 485 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 455 bytes .../ic_comment_text_grey600_36dp.png | Bin 0 -> 644 bytes .../ic_comment_text_grey600_48dp.png | Bin 0 -> 748 bytes .../ic_comment_text_white_18dp.png | Bin 0 -> 409 bytes .../ic_comment_text_white_24dp.png | Bin 0 -> 368 bytes .../ic_comment_text_white_36dp.png | Bin 0 -> 529 bytes .../ic_comment_text_white_48dp.png | Bin 0 -> 572 bytes .../ic_comment_text_black_18dp.png | Bin 0 -> 310 bytes .../ic_comment_text_black_24dp.png | Bin 0 -> 249 bytes .../ic_comment_text_black_36dp.png | Bin 0 -> 352 bytes .../ic_comment_text_black_48dp.png | Bin 0 -> 364 bytes .../ic_comment_text_grey600_18dp.png | Bin 0 -> 376 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 308 bytes .../ic_comment_text_grey600_36dp.png | Bin 0 -> 455 bytes .../ic_comment_text_grey600_48dp.png | Bin 0 -> 469 bytes .../ic_comment_text_white_18dp.png | Bin 0 -> 317 bytes .../ic_comment_text_white_24dp.png | Bin 0 -> 267 bytes .../ic_comment_text_white_36dp.png | Bin 0 -> 368 bytes .../ic_comment_text_white_48dp.png | Bin 0 -> 414 bytes .../ic_comment_text_black_18dp.png | Bin 0 -> 352 bytes .../ic_comment_text_black_24dp.png | Bin 0 -> 364 bytes .../ic_comment_text_black_36dp.png | Bin 0 -> 507 bytes .../ic_comment_text_black_48dp.png | Bin 0 -> 635 bytes .../ic_comment_text_grey600_18dp.png | Bin 0 -> 455 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 469 bytes .../ic_comment_text_grey600_36dp.png | Bin 0 -> 748 bytes .../ic_comment_text_grey600_48dp.png | Bin 0 -> 882 bytes .../ic_comment_text_white_18dp.png | Bin 0 -> 368 bytes .../ic_comment_text_white_24dp.png | Bin 0 -> 414 bytes .../ic_comment_text_white_36dp.png | Bin 0 -> 572 bytes .../ic_comment_text_white_48dp.png | Bin 0 -> 725 bytes .../ic_comment_text_black_18dp.png | Bin 0 -> 486 bytes .../ic_comment_text_black_24dp.png | Bin 0 -> 507 bytes .../ic_comment_text_black_36dp.png | Bin 0 -> 767 bytes .../ic_comment_text_black_48dp.png | Bin 0 -> 1020 bytes .../ic_comment_text_grey600_18dp.png | Bin 0 -> 644 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 748 bytes .../ic_comment_text_grey600_36dp.png | Bin 0 -> 1034 bytes .../ic_comment_text_grey600_48dp.png | Bin 0 -> 1343 bytes .../ic_comment_text_white_18dp.png | Bin 0 -> 529 bytes .../ic_comment_text_white_24dp.png | Bin 0 -> 572 bytes .../ic_comment_text_white_36dp.png | Bin 0 -> 900 bytes .../ic_comment_text_white_48dp.png | Bin 0 -> 1156 bytes .../ic_comment_text_black_18dp.png | Bin 0 -> 507 bytes .../ic_comment_text_black_24dp.png | Bin 0 -> 635 bytes .../ic_comment_text_black_36dp.png | Bin 0 -> 1020 bytes .../ic_comment_text_black_48dp.png | Bin 0 -> 1419 bytes .../ic_comment_text_grey600_18dp.png | Bin 0 -> 748 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 882 bytes .../ic_comment_text_grey600_36dp.png | Bin 0 -> 1343 bytes .../ic_comment_text_grey600_48dp.png | Bin 0 -> 1781 bytes .../ic_comment_text_white_18dp.png | Bin 0 -> 572 bytes .../ic_comment_text_white_24dp.png | Bin 0 -> 725 bytes .../ic_comment_text_white_36dp.png | Bin 0 -> 1156 bytes .../ic_comment_text_white_48dp.png | Bin 0 -> 1546 bytes .../comment-text/drawable/comment-text.xml | 8 +++ .../originals/comment-text/readme.txt | 5 ++ Graphics/drawables/originals/content-copy.svg | 1 + Graphics/drawables/originals/content-save.svg | 1 + .../{ic_cloud_24px.svg => ic_cloud_24dp.svg} | 0 ...{ic_search_24px.svg => ic_search_24dp.svg} | 0 .../drawables/originals/share-variant.svg | 1 + Graphics/update-drawables.sh | 2 +- .../ic_action_encrypt_copy_24dp.png | Bin 0 -> 869 bytes .../ic_action_encrypt_save_24dp.png | Bin 0 -> 871 bytes .../ic_action_encrypt_share_24dp.png | Bin 0 -> 960 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 455 bytes .../ic_action_encrypt_copy_24dp.png | Bin 0 -> 627 bytes .../ic_action_encrypt_save_24dp.png | Bin 0 -> 635 bytes .../ic_action_encrypt_share_24dp.png | Bin 0 -> 674 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 308 bytes .../ic_action_encrypt_copy_24dp.png | Bin 0 -> 1071 bytes .../ic_action_encrypt_save_24dp.png | Bin 0 -> 1122 bytes .../ic_action_encrypt_share_24dp.png | Bin 0 -> 1281 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 469 bytes .../ic_action_encrypt_copy_24dp.png | Bin 0 -> 1490 bytes .../ic_action_encrypt_save_24dp.png | Bin 0 -> 1567 bytes .../ic_action_encrypt_share_24dp.png | Bin 0 -> 1880 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 748 bytes .../ic_action_encrypt_copy_24dp.png | Bin 0 -> 1881 bytes .../ic_action_encrypt_save_24dp.png | Bin 0 -> 2080 bytes .../ic_action_encrypt_share_24dp.png | Bin 0 -> 2490 bytes .../ic_comment_text_grey600_24dp.png | Bin 0 -> 882 bytes .../encrypt_decrypt_overview_fragment.xml | 2 +- .../res/layout/encrypt_files_activity.xml | 2 +- .../main/res/layout/encrypt_text_activity.xml | 2 +- .../res/layout/toolbar_inner_layout_white.xml | 26 ++++++++ .../res/layout/toolbar_standalone_white.xml | 13 ++++ .../main/res/menu/encrypt_file_activity.xml | 16 ++++- .../main/res/menu/encrypt_text_activity.xml | 16 ++++- OpenKeychain/src/main/res/values/strings.xml | 6 +- 99 files changed, 270 insertions(+), 8 deletions(-) create mode 100644 Graphics/drawables/ic_action_encrypt_copy.svg create mode 100644 Graphics/drawables/ic_action_encrypt_save.svg create mode 100644 Graphics/drawables/ic_action_encrypt_share.svg create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_18dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_24dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_36dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_48dp.png create mode 100644 Graphics/drawables/originals/comment-text/drawable/comment-text.xml create mode 100644 Graphics/drawables/originals/comment-text/readme.txt create mode 100644 Graphics/drawables/originals/content-copy.svg create mode 100644 Graphics/drawables/originals/content-save.svg rename Graphics/drawables/originals/{ic_cloud_24px.svg => ic_cloud_24dp.svg} (100%) rename Graphics/drawables/originals/{ic_search_24px.svg => ic_search_24dp.svg} (100%) create mode 100644 Graphics/drawables/originals/share-variant.svg create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png create mode 100644 OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.xml create mode 100644 OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml diff --git a/Graphics/drawables/ic_action_encrypt_copy.svg b/Graphics/drawables/ic_action_encrypt_copy.svg new file mode 100644 index 000000000..473178295 --- /dev/null +++ b/Graphics/drawables/ic_action_encrypt_copy.svg @@ -0,0 +1,59 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/Graphics/drawables/ic_action_encrypt_save.svg b/Graphics/drawables/ic_action_encrypt_save.svg new file mode 100644 index 000000000..09af0dc88 --- /dev/null +++ b/Graphics/drawables/ic_action_encrypt_save.svg @@ -0,0 +1,59 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/Graphics/drawables/ic_action_encrypt_share.svg b/Graphics/drawables/ic_action_encrypt_share.svg new file mode 100644 index 000000000..6509675e6 --- /dev/null +++ b/Graphics/drawables/ic_action_encrypt_share.svg @@ -0,0 +1,59 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_18dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..48a1990763c09ce319b4be4cb8cea1e3fb8fbb4d GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0d(}6TtKf~3pEvFe67!^ES978;g-@Ufci`h}&*vI*utq*J)TU%o? zlOHoLxp0nsLwL69#;=@P{8FciZxGG7bn^$3(hb&ZRzXv-dnccrDBO8^?E-ljo;Tup&K{7aQ=Hk<*=lQ z={qYo-Eh-WkCHwuYfH_Uu_y0Al~+;noJZ@HEV`cac4?k=mt=jCe$efD{v+QXtFpf} q=e;zy@P0I#_2JYrtNtz9$MED@kMqgID^|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3$&RwWo_?NW|f{(|x%P8A!0YPn@^Xn*Y&z-7ic* zHf`>O&t0RYuWNO>>v7@2GSA6hvKKJl6uo!hy1T|16+gC^MxhL)`JZM_o!QbQ=<+3a zMvE5X!dKx53pq_U?(gKAa(vbEgX{(TGV_?TZ@16=C3|A0s{6(sffugvsg?y?b28Ut z7s;0vP2IWfOs1pRk9BKu9nIV)#-y&({=6hm`{U(KO?#k&qb^L&$cI7u0>{8pm zX?eq$_+@$}!U9HVe(%grumyYY<{Ym(sy6fP4Wn2m(+$%nWD2ipY@Wh%AbPT;*C~dW ieL?yO%DTqN=hzqRJ=0-d{dqgk+YFwrelF{r5}E*7m4f&H literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_36dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8c79f01cda3c6f7b3a925e5fdb7ccfa28fc2daf5 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Zwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pTY0#i8BlgjD?;qjv*QM-p<_U#q221X776BoXI2aB_ceP z?7hF#!uGYktl{f^!mFYX5%q)XpxZ&E*>2sJpV^!|Q#Jc$?6c;zMdJVRHVa48$0yCKB&s=}AJj_tl4FRV}kVa%|Ro zGvT__cS5J%x+*^OPzqzMKJ|KiWBTGX&Iz-;-f&hJ2t{Y=t^1}CroGIzOZ`A&;I%|A z!;goveYd(_JnD6Lm4koaKAxcNub~U>2YERjb>A3exSGlKgzp*dEv9;5Qaej7ta@kB z8nKEm>Z+{w3XnO|yxH&mmQT{Zu=JwpwrzZ(2Uok~B+fNrDtxB(Jo$nTXS!rd-@FX3 z^b5zE&hEJQM&|718g`bawG7@$=@$$$%B&dDZ*y$*-N-N}y8UhR8Vk+N2nMxlioeCU z544sZ*mtyR8dJr8=U11kZq)D0^<3Maz1m=uJQvb0|R55r;B4q#jUruZT$`h2)I5JZkfbocEBp*=Y79T zyhq$_aJZgwI4G3BsG_&RNpSkc{0&ddg`d|=(iX{l_CoVm5KmfKTCy3d*a4v%47Zi{ zn|;;muG${At|7E(Y1^)_uYGgRH1xB0^VIIWzWd*8n}Z*guB)8xaGIrg`mSldf@->r zbq(Emsr?tEcHH^izRltGiPrvl@^&xeS0)>N(EbKxu z9xtlJrT^MbwsUM^=HyecnDD^C>0A2754)H61DPm67Axu!tMoqvw$1(}6TtKf~3pEvFe67z;dI978;g-<@XYci2J1C4G~~#1otv0ZlcG zQhXDbR$N;8kZB=n%v1BbL%2+B5T$?692IZWnOP&yUR?DFvIas{`r4b6KEolb?s z*Khr7viff}^J}eTuKVwY&-HsA;HzmdfQ{olh!SU1BH2z52~OP4wh(jV`uz25Y~{GURWJFAY1(Etsp2Vk-Tp8k&?=exelQTX2m7P^%NHTiN7M*u&(2dOJK=srl|Z{ChO&s VB2*_$ZU9CEgQu&X%Q~loCIEu_$;SWy literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_24dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c48a3b46395ea570cb466003ad1fa6a0b7f0ac7a GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3#+V#vo4@$B>A_Z>RhE9X1eXz3(C_J-=bzlHK1F zJf6Pi;wx#)I->VY@yAQYgyWtGr_;=)9@?-_qcg)N=D1SOJ*|zp`}K{hig7$?`~#Rs>p2|iWB*~NH8Gj$)!U)SdB$mLUh3W+dh_(bNXM`k>#vOeu3 zY`$X}>-^M(oxksEDlhsz<=Os9v-(8&AfTn$y1`y+XIeVn%D%8GY~#A!8EcoO?h=_8 z{QQpE6r;2^-bz;1ENW^2oDcSBbS-x_?_vxQy4bq)o8htPtqi%^=T#d{FVa}F)R^T& nt#hrw#Y<7u^4w`x6uz?dO4alJGOAGk1~r4HtDnm{r-UW|938L+ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_36dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..36e7c5ab294b1679f79cbc268445676399d6e448 GIT binary patch literal 644 zcmV-~0(2*siz2$vL|kIaNRS)>3Yvuca0;YZ`wX6)6&)QdEdjJSK@>ou zOu-cp4IqldlIKmcNRe&rdN#JlYt7TGXRLXj^?1ggMkEjjvau2SlukDz&;j{(%~?}5Q!$8b8eTT& z#k)H0jaX9~v{LG~%L=y+gPn?l74xz|19;Rcv9Lk+fFQPM^reD!s*W2MYpa5Gt&Zz3 z*r_;Jv0hZruGMklVqt^s0VOe#neR}pko>h$EQ+E_-$7le%3Km#9LJpd4(q^q@d&9> zZ1E4A0+{_aAYY6>Z>kN7wCX)$Wq(~kZ zV?H-Eei0wbeFosLO(`E@8Gu8r^{2K6a{BVPuN29b)9JKzDUt4;SO(z881u2C@j4O9 z032zp&$^OoTI_F?6v^YRrJ5FdSNMGc;KUg7p=&9T2KO-$K^(^~L}ZubKWpvTY&QGh eLn;smw9hS*Kg1BoBFGm20000=uJQvb0|QgJr;B4q#jUru_vc*>5IO$wK4;)Y5#y3)f&%qs zVaq&B7M}UQu)@2IXXZzVn|($Vj<(kVf&_9(qcKRu!pe;jzti$nd7ewbWSR_3Y-}m00 zvniqWnZx0SAF_7et>b(!?QQ7QlzlgIeqDa~W%Wyz9*I)4oWhgYVL5PrD-Jv_J=ZNoWW|8t( z&(bu*{z&fBv2>#o0+ciF<7Abz0lZD?o-(*t8;_kHi>dyYSzpQ?WS zU+Gc%iWxrLi*{Jg^s&2Q``T=sJ$qy?^A1@J)(z>#d=K&#h#ZI$aebf5AM`SHtD2_q z_eU1n3{rV?pw#YV$A?Am%j!)_ixEP@n83+d+C`P{Vt{Dj~MdaESS>q z?Xg8&a`lAVEPfZ4``&!ZUAD-#JG&;=ndv4euaA5mo u`?WKFCI^a?KeDJxwQdOV(kw0f%XCR=>y)mNN3VeCk-^i|&t;ucLK6T|=|cPf literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_18dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d182f623ec2a7b69357261f24096e8502bdfc728 GIT binary patch literal 409 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0d(}6TtKf~3pEvFe67*#x7978;g-<@jj#q20@tX@Bg<&JPf#EEH{ zIW`VlZ;Kc?119ocmq( z`Q8VKAL}>SOxVI2!xWof-SAzef+_FJo8p)KOSF$(R7l?d^({9BjoUA95Xd2e*l{r9|I zqce)vuV2!)#Ph-S9Ho_$jdNIcFw1QCbBDo3Y)-@hQ-g0IUl@DN=7g=}XH}2$u|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3$&Rx2KC^NW|f{(|x%P8A!11@A$%3HR+vA$NudX zxII2f$Q_+4zEUriyR|TJqEyc0StgkaH=BOtt+i`XQg&wZXb_%o*|u`#R1?lrMwgOJ ztC}yhvqDT$x|xw1oNjo++aUl|K7IIo)TU&FpD zX_XG^w|U0WuV3BmuPT_jHFoCTrksMo>b zYT-(dc3mb?m1VR$!)WP+jZ>-^POmUhu6@9|-0s4Y73+U!0fT|T)78&qol`;+0ES46 AL;wH) literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_36dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..07f15d82bbd855c3a7fe93bedb3f15da3c85e799 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Zwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pTY0#i8BlgjB`9)978hhy`5?3ci2I|^}j;P3#aBCE~h*k z`WTuRRJSj9B(~(Sj7Xth1Cz%Tkr>8{4K9Maf0~FnZEL*QJAGsL?^7vr|ET-hNb*kb zP;pY)zt^)!{D8!Pw$ck+tPQOlHWsn2MGi*E-)BygS@B-tB+r4yuepIn;u85>l6Dr?$p;Ou6=mnhSgH`t!I3bVygo(Zd~hdJ-F-fPi_W(x5##eWebnUxjwme zsO!n4r!`xaO01oct=Z?1CzUGOCKCL=Vr}O(k;xJFH)LH1wy@)I>fU;3f#<%~DNIUw zM>CGDk@^yL{YX&rHnq;Lz3Y4~_+2jK*r*`9<#ov##alr=VQaL7OJ3J^1UJ8v_DyOn z)!>gaP2zq%Med5x^&_WB&)l(E$^7{h*UG>(Ph=d@=0-S%rLA3f*YUl^z9*LqLl_@O zIlNQ+!ZcrY3xD74$8(+pehB!lGi|cXwsW_)MeJWPCCTz+XX&|ZM~fz@Uz5Bo_IiDY z=C^;%S5}s83q86{E696NdRS%3*Zv=uJQvb0|Vo6PZ!6Kid%1Q@AhSO6lr~E%;DIufHCXALIKHvXo@l;i1V}oPUB% zX(!hM(F0{)w4S};Jy7TMGW}AwcPsb$i~lVcHW6f40VN;>O`m0ZFo%7AD z)0k>q{O>M&6Xo3~w`lphfU>o(G!AjQ?RR;<`DUL|kG{q67YE$qc^T$Bf5c$Nr`qp) zR`zzbhn!3JTGN32kGJq#nPAg1Z~rxiZo%|p4!kE9zu1}03l!^{w-YEPp56r%oBSdY zEY>^E*yzIY$5WW^iana+dS1Nm3D-&MNrww($WJ=2@_kXdv9a;%?e<@e%y2tl{OBq$ Pei=Mn{an^LB{Ts5VQ%TL literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_18dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a5677ee1f5ed4349137d8048b853efe576d3ce8d GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pF!Co&kM*o=;`7ZVsU!yWJA6~20X6vE7(skK442te#2pG zy_dP?PTR)m4ZTx&^B9z!zk5w#WZyZJ$?x!VrQ@D|p3K+ypxzr2!#w%KFY5rtwecFN zl15$)J`Ta1rUhnY#_Tc^vL{>@jgWFwU+}?GehM?Yvc`4KG@YU(RgKkKoz~27RLp)C zemZ&aRw)ZFpH0uMR<2aM_T}I8zPwj@Vs5){9c2&koU@YI+BCn>_QMNDy;Wu!|EJG8 qptk9BpHyQ`u)>FbS67F4Y>As&rDs~4<8A=-41=eupUXO@geCy{glTjD literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_24dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c477421c75fec10d033d312c49ba084bfd269b9a GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(}6TtKSPDj(q%wSi>HfYh{y4_Q!a8g81T5ve^jEk=-o?|Yn(C* zekD7uxf)B88CB1)eDKpMmqP1CmlidGx&bOF#E^yqf`Vhu>-)w`!@;2r# g2bT0bwT@y)-WyPQcJ8I4K=&|sy85}Sb4q9e0Q0(4I{*Lx literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_36dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c714df0c52a2cd59873335f4ab6bd267b8f9b850 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3$&RwWo_?NW|f{(|x%P8A!0YPn@^Xn*Y&z-7ic* zHf`>O&t0RYuWNO>>v7@2GSA6hvKKJl6uo!hy1T|16+gC^MxhL)`JZM_o!QbQ=<+3a zMvE5X!dKx53pq_U?(gKAa(vbEgX{(TGV_?TZ@16=C3|A0s{6(sffugvsg?y?b28Ut z7s;0vP2IWfOs1pRk9BKu9nIV)#-y&({=6hm`{U(KO?#k&qb^L&$cI7u0>{8pm zX?eq$_+@$}!U9HVe(%grumyYY<{Ym(sy6fP4Wn2m(+$%nWD2ipY@Wh%AbPT;*C~dW ieL?yO%DTqN=hzqRJ=0-d{dqgk+YFwrelF{r5}E*7m4f&H literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_48dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddeb841195d17fadb6352e9360a67ba1ac5289e GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^T-NyQhm|NXEUlGd2nxbP#dnU;K=H(RW=g-a4b! zd+!5`ldVMpJ(SHhah|*@`~FN${W+W2viv-UKNzwX9bjzzvEx#zoYsDZbAlb==Q&R} zF_j6PxHfl>mh~r=n1;+3JJ^mfZeG^llza0)_veV*&$^S>J!Ka7;_Xq#B(`ALS=o+H zuc!QB(Q!CC;k|=?xyDbHo(0cUC@8PhiY?BOCCTyC7>N|DK&cnZ9M6 z=4aWNY9qe#m2JlJr+O;;;_|&$oDhxpu6nWjfNt2&2@NZr&SuIx;HG=S^ufHQnpg*; vPYmw;f5LRHwy73qJncW=rJEx0{|NKS3g*c^I}*fzLBQbY>gTe~DWM4fQ^<@^ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_18dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..86169288cf5d7671e257c9dbc53ebc328c5d998c GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pF!Co&x?V9k=fJ5F~s8Z+R3(lM+^kq?z>nz@G+Qk$UdD` zz`5W7hr-cwvO3{14O}l)F1$UhZ!hB%k?4R$l3YR$SvI}asp&QS_tPfdjrqUI%kcMq zIX9Sp{+rG5kk5ee!@c>lZl3j<*)gY8AkUk@`1bp6*AE0QJFXZoGm(}6TtKSPDj(q%x-eoq(25Rc<;r=I0KWWeJVuXU`UHG+lfxlZ7B zzug?t2A($?7|%3ra|sQYY$CMik@Zve%5Uk~oPTzmG1zeJT_f8K-ITHefiCM9S~p)z zYq)HDEAbKAjkGmqPTcxY=6a-M^Sw>iUX`r%U_5%_^?~W0tM)xkSjTS2_utl|SfGmE zY0kRU?B9Dj`*q9@G+qzh9TIz`h3dZEmG}IdpKOaqui^55iW~;kbD^Q8 qhLWu;I~e&xbzPqby{urZV!C$O?9J7(El+`7VeoYIb6Mw<&;$VT1$7?) literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_36dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c48a3b46395ea570cb466003ad1fa6a0b7f0ac7a GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3#+V#vo4@$B>A_Z>RhE9X1eXz3(C_J-=bzlHK1F zJf6Pi;wx#)I->VY@yAQYgyWtGr_;=)9@?-_qcg)N=D1SOJ*|zp`}K{hig7$?`~#Rs>p2|iWB*~NH8Gj$)!U)SdB$mLUh3W+dh_(bNXM`k>#vOeu3 zY`$X}>-^M(oxksEDlhsz<=Os9v-(8&AfTn$y1`y+XIeVn%D%8GY~#A!8EcoO?h=_8 z{QQpE6r;2^-bz;1ENW^2oDcSBbS-x_?_vxQy4bq)o8htPtqi%^=T#d{FVa}F)R^T& nt#hrw#Y<7u^4w`x6uz?dO4alJGOAGk1~r4HtDnm{r-UW|938L+ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_48dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0e14a9500ee9a8e8fd60a0556fd73c8df7cef615 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^S>R#sp6n$B>MBZ)Y0%9WfAa{co{F!O`FU_`OD^ zs#SNnFQ}gq)ySFH%~G|4L0qwvYn$>$Cq@qq!-L&9=iSa|uMPY(U-otvFUO((Z85!- z^X8{Tma#wJI-pp5Ot-;3J2x=&>gn}Nu7Ptjm(F99F=m&)EOc?_wOv2&tvD9yweq$t z4?lzYVS|v#d-@J>zguD)^NT~KaQU3XNxpxdYW_abn7`1lttQ(!VA|6M!P|cb3NYsF zdEW5eeCDj9{S6!ilXK)dOxwlmnUoInzG1%8!C;>ApLyZ4E05eASawXTZIGURK)ZZ} zq}t6GCjUE{=`&Jha|i_TEqLnpYQf(#X8H@Z=B?SP&0uQRw{7Q5rWI?quKsw^DJPy)?E@0gE>nWt{EO$F7Tp5!|Obd>daWYbzlFFz6>T?!L`Zl z{Hg|Vx2hN}R@*H(z}v9?_4&4rb-jkAT_2hh7~aPk#5Eau@8<;uJcFmJpUXO@geCw_ Cmb@7N literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_18dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d83ee85a4c2aaec99e24445118da150118ec26d4 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pF!Co&kM*o;pyTSVsU!yL_@wN2Ladn5_|_3zp&ki49d#Y zFTZf{9+l;qg*rK8?%>I!pwrPUEw5#`h%uet5v;DyQB!)>mHyA&6{`OyBV*Jpd z^-(Z`O5dJ>&1~x$bHg0CQtVcoynDt>QN&Ypg86ehjmaf^Ia7YNs}yLKYBh5PO`gJh zRpi2iD66nau@zy=;^vR9+8jMMzbi2N{c$PVJ=-JLUu_e!TTxQ{vbNyM+6LhduN?F4 zy?an?^3&s%f6h(Dy|PaPcncReUHYc(;j?dgTJOWE*M)C^eq!)+^>bP0l+XkK)`WI| literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_24dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ec2d374539d4be8dc4466f6c5c73d2b67ba9d4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(}6TtKSPDj(q%x-G*1`D5Rc<;r`+akau9KOE_M1sTZYS<%U%&$ z8yal?EKuBWkyTw$==t;~XC9|bEK^>gTe~DWM4f#Z6wW literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_36dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b6eee07b7e97e0ccdf27e94ba5d96516b3a19a73 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3$&Rx2KC^NW|f{(|x%P8A!11@A$%3HR+vA$NudX zxII2f$Q_+4zEUriyR|TJqEyc0StgkaH=BOtt+i`XQg&wZXb_%o*|u`#R1?lrMwgOJ ztC}yhvqDT$x|xw1oNjo++aUl|K7IIo)TU&FpD zX_XG^w|U0WuV3BmuPT_jHFoCTrksMo>b zYT-(dc3mb?m1VR$!)WP+jZ>-^POmUhu6@9|-0s4Y73+U!0fT|T)78&qol`;+0ES46 AL;wH) literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_48dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..edfd394c6b211e40cec44f3171fa6596be887e5e GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^S>RMomu_$B>MBZ)X_h9dZzG{jZP}5ajGHer}=? z@5!k_MFJL#;tS4;I=%8JT;=dFIE8zI_~wWS`?a4ZHZ~@=k~6%pThlj-P7x8U*`w>VX<-W{Umkb>)Q|z^X&e&%-5rwkNO{AzVgFv z!7=75C-$-HZC%zizkz+l$65zpodrSOTQ3xJv#z-^P1od3l6tW+L;erz?lYZR4&N;} zEOJ2T!1h~K7CMYRuRn=D>?!^yKgsy(|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3$&RwWo_?NW|f{(|x%P8A!0YPn@^Xn*Y&z-7ic* zHf`>O&t0RYuWNO>>v7@2GSA6hvKKJl6uo!hy1T|16+gC^MxhL)`JZM_o!QbQ=<+3a zMvE5X!dKx53pq_U?(gKAa(vbEgX{(TGV_?TZ@16=C3|A0s{6(sffugvsg?y?b28Ut z7s;0vP2IWfOs1pRk9BKu9nIV)#-y&({=6hm`{U(KO?#k&qb^L&$cI7u0>{8pm zX?eq$_+@$}!U9HVe(%grumyYY<{Ym(sy6fP4Wn2m(+$%nWD2ipY@Wh%AbPT;*C~dW ieL?yO%DTqN=hzqRJ=0-d{dqgk+YFwrelF{r5}E*7m4f&H literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddeb841195d17fadb6352e9360a67ba1ac5289e GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^T-NyQhm|NXEUlGd2nxbP#dnU;K=H(RW=g-a4b! zd+!5`ldVMpJ(SHhah|*@`~FN${W+W2viv-UKNzwX9bjzzvEx#zoYsDZbAlb==Q&R} zF_j6PxHfl>mh~r=n1;+3JJ^mfZeG^llza0)_veV*&$^S>J!Ka7;_Xq#B(`ALS=o+H zuc!QB(Q!CC;k|=?xyDbHo(0cUC@8PhiY?BOCCTyC7>N|DK&cnZ9M6 z=4aWNY9qe#m2JlJr+O;;;_|&$oDhxpu6nWjfNt2&2@NZr&SuIx;HG=S^ufHQnpg*; vPYmw;f5LRHwy73qJncW=rJEx0{|NKS3g*c^I}*fzLBQbY>gTe~DWM4fQ^<@^ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1462c86c6d8f2c145c804a994438a441e9edf55e GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|R55r;B4q#jUruZT$`h2)I5JZkfbocEBp*=Y79T zyhq$_aJZgwI4G3BsG_&RNpSkc{0&ddg`d|=(iX{l_CoVm5KmfKTCy3d*a4v%47Zi{ zn|;;muG${At|7E(Y1^)_uYGgRH1xB0^VIIWzWd*8n}Z*guB)8xaGIrg`mSldf@->r zbq(Emsr?tEcHH^izRltGiPrvl@^&xeS0)>N(EbKxu z9xtlJrT^MbwsUM^=HyecnDD^C>0A2754)H61DPm67Axu!tMoqvw$1(}8pX7+2iB`GtXjiOti+F{I+w+dI2`nH@!1A2Pe0Tfo2~+Hhnw z>k1aGqK3?d9x{sLn_-RjeJacM2~;IGjJ0b8cNeGt~UxLZ8-X20G)t;WN< zUx#lzyu1F$2Jf6@i(j1HNfmi@P}dO=1}>wl#~@mvpQ zKjrv;#MUKcb<2OPL-CRiXX{G;TlxFg^`na(?(h7tS*d0-|I+sQXZvoJmMnkv;lAsS zqi-_*1+1-pAXJz5d)E7wh5MT8r<7=CUatiu5{3zv)f0N&v|P2EdmF^{boFyt=akR{ E0N_9a#Q*>R literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c48a3b46395ea570cb466003ad1fa6a0b7f0ac7a GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3#+V#vo4@$B>A_Z>RhE9X1eXz3(C_J-=bzlHK1F zJf6Pi;wx#)I->VY@yAQYgyWtGr_;=)9@?-_qcg)N=D1SOJ*|zp`}K{hig7$?`~#Rs>p2|iWB*~NH8Gj$)!U)SdB$mLUh3W+dh_(bNXM`k>#vOeu3 zY`$X}>-^M(oxksEDlhsz<=Os9v-(8&AfTn$y1`y+XIeVn%D%8GY~#A!8EcoO?h=_8 z{QQpE6r;2^-bz;1ENW^2oDcSBbS-x_?_vxQy4bq)o8htPtqi%^=T#d{FVa}F)R^T& nt#hrw#Y<7u^4w`x6uz?dO4alJGOAGk1~r4HtDnm{r-UW|938L+ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0e14a9500ee9a8e8fd60a0556fd73c8df7cef615 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^S>R#sp6n$B>MBZ)Y0%9WfAa{co{F!O`FU_`OD^ zs#SNnFQ}gq)ySFH%~G|4L0qwvYn$>$Cq@qq!-L&9=iSa|uMPY(U-otvFUO((Z85!- z^X8{Tma#wJI-pp5Ot-;3J2x=&>gn}Nu7Ptjm(F99F=m&)EOc?_wOv2&tvD9yweq$t z4?lzYVS|v#d-@J>zguD)^NT~KaQU3XNxpxdYW_abn7`1lttQ(!VA|6M!P|cb3NYsF zdEW5eeCDj9{S6!ilXK)dOxwlmnUoInzG1%8!C;>ApLyZ4E05eASawXTZIGURK)ZZ} zq}t6GCjUE{=`&Jha|i_TEqLnpYQf(#X8H@Z=B?SP&0uQRw{7Q5rWI?quKsw^DJPy)?E@0gE>nWt{EO$F7Tp5!|Obd>daWYbzlFFz6>T?!L`Zl z{Hg|Vx2hN}R@*H(z}v9?_4&4rb-jkAT_2hh7~aPk#5Eau@8<;uJcFmJpUXO@geCw_ Cmb@7N literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..de5de6042c5037cd2eddce43d53d6125d71e38d9 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|QgJr;B4q#jUru_vc*>5IO$wK4;)Y5#y3)f&%qs zVaq&B7M}UQu)@2IXXZzVn|($Vj<(kVf&_9(qcKRu!pe;jzti$nd7ewbWSR_3Y-}m00 zvniqWnZx0SAF_7et>b(!?QQ7QlzlgIeqDa~W%Wyz9*I)4oWhgYVL5PrD-Jv_J=ZNoWW|8t( z&(bu*{z&fBv2>#o0+ciF<7Abz0lZD?o-(*t8;_kHi>dyYSzpQ?WS zU+Gc%iWxrLi*{Jg^s&2Q``T=sJ$qy?^A1@J)(z>#d=K&#h#ZI$aebf5AM`SHtD2_q z_eU1n3{rV?pw#YV$A?Am%j!)_ixEP@n83+d+C`P{Vt{Dj~MdaESS>q z?Xg8&a`lAVEPfZ4``&!ZUAD-#JG&;=ndv4euaA5mo u`?WKFCI^a?KeDJxwQdOV(kw0f%XCR=>y)mNN3VeCk-^i|&t;ucLK6T|=|cPf literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9dae1a4a03c48da9b0410eb4b7c637f4fa5d0b1d GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXj>941YV@SoVw|5QmFFQya`}lkv2ix>kNyRb= z35j2flk{?G7}*jMmUvAy%@#2?Xw*8=BOxgvAi1f8r7J{C?Z_dA*^7eoL-r+mXelZd zO+WGQAZ=+q~!1m(955F&>*y zec{9NjY(_wO5f6WrtBeaTm0#sx%2HKEISUxc^qom+|5}qac@@(Yx?rnl}4-z!3>*< zL-!}Hzdrlte{ap3ckX-%-8cUn16T$@Y&x}{J*0MSOt}^F36TaLMkFGu++Jbpdqqr% z68i?9bcUHs6Eu;C$hYs#C$Qah?Zrs`(bA=&LzCO(_dzWqwk*@A=;QY3tQY@BMyz!PvR+ z#OeiCuU>6uV0+`Lnqn|BGT;hxWc%U7o%{Cv`}E|=6QPFLGaj#eo!-LyLFM!&>#25o ze*0I|{Eh#2{_$(^)W-kTzw*}RmhHaV|HjlW_5jC_XsZdIPYH&JVe*aLybtLH}X$Vc=sxKF$-YxO*< z_{sdJHimqqZ9gB*$E!=_XqAuYin!w?Cfm) zHCv|}{=2)Dn<1g+C)mdKI;Vst E0NSB<|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3$&Rx2KC^NW|f{(|x%P8A!11@A$%3HR+vA$NudX zxII2f$Q_+4zEUriyR|TJqEyc0StgkaH=BOtt+i`XQg&wZXb_%o*|u`#R1?lrMwgOJ ztC}yhvqDT$x|xw1oNjo++aUl|K7IIo)TU&FpD zX_XG^w|U0WuV3BmuPT_jHFoCTrksMo>b zYT-(dc3mb?m1VR$!)WP+jZ>-^POmUhu6@9|-0s4Y73+U!0fT|T)78&qol`;+0ES46 AL;wH) literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..edfd394c6b211e40cec44f3171fa6596be887e5e GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^S>RMomu_$B>MBZ)X_h9dZzG{jZP}5ajGHer}=? z@5!k_MFJL#;tS4;I=%8JT;=dFIE8zI_~wWS`?a4ZHZ~@=k~6%pThlj-P7x8U*`w>VX<-W{Umkb>)Q|z^X&e&%-5rwkNO{AzVgFv z!7=75C-$-HZC%zizkz+l$65zpodrSOTQ3xJv#z-^P1od3l6tW+L;erz?lYZR4&N;} zEOJ2T!1h~K7CMYRuRn=D>?!^yKgsy(=uJQvb0|Vo6PZ!6Kid%1Q@AhSO6lr~E%;DIufHCXALIKHvXo@l;i1V}oPUB% zX(!hM(F0{)w4S};Jy7TMGW}AwcPsb$i~lVcHW6f40VN;>O`m0ZFo%7AD z)0k>q{O>M&6Xo3~w`lphfU>o(G!AjQ?RR;<`DUL|kG{q67YE$qc^T$Bf5c$Nr`qp) zR`zzbhn!3JTGN32kGJq#nPAg1Z~rxiZo%|p4!kE9zu1}03l!^{w-YEPp56r%oBSdY zEY>^E*yzIY$5WW^iana+dS1Nm3D-&MNrww($WJ=2@_kXdv9a;%?e<@e%y2tl{OBq$ Pei=Mn{an^LB{Ts5VQ%TL literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2bbe5a4fbab05b4e5541b034800f3a2d5b0f8691 GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXjDZ$glF{I+w+dKQat^~*&{rLX8sPsj40oH2W zKcBfaU$twCy75aPOL%n9!Q z)nmmvkGWszk^5P`P}ZD7^}gj-qi+fp1Oz+1o%%Ff3^NC4-5*dAe0=7>e!zGa>#Dc!{azZa;*#G}^H<{E*-u}CXMWhf`22x7mp!5V8_&nw zZwWUMusgH4L3BfgV$Ff_w`)enU;dG{JCEMpN{pB)i^6u!=XSrW3 zW^GOWk=?#uxm|yo^N;c?&+WLQTmBz?*ni?-cj~k4j1TXJ&VTZwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pTY0#i8BlgjD?;qjv*QM-p<_U#q221X776BoXI2aB_ceP z?7hF#!uGYktl{f^!mFYX5%q)XpxZ&E*>2sJpV^!|Q#Jc$?6c;zMdJVRHVa48$0yCKB&s=}AJj_tl4FRV}kVa%|Ro zGvT__cS5J%x+*^OPzqzMKJ|KiWBTGX&Iz-;-f&hJ2t{Y=t^1}CroGIzOZ`A&;I%|A z!;goveYd(_JnD6Lm4koaKAxcNub~U>2YERjb>A3exSGlKgzp*dEv9;5Qaej7ta@kB z8nKEm>Z+{w3XnO|yxH&mmQT{Zu=JwpwrzZ(2Uok~B+fNrDtxB(Jo$nTXS!rd-@FX3 z^b5zE&hEJQM&|718g`bawG7@$=@$$$%B&dDZ*y$*-N-N}y8UhR8Vk+N2nMxlioeCU z544sZ*mtyR8dJr8=U11kZq)D0^<3Maz1m=uJQvb0|R55r;B4q#jUruZT$`h2)I5JZkfbocEBp*=Y79T zyhq$_aJZgwI4G3BsG_&RNpSkc{0&ddg`d|=(iX{l_CoVm5KmfKTCy3d*a4v%47Zi{ zn|;;muG${At|7E(Y1^)_uYGgRH1xB0^VIIWzWd*8n}Z*guB)8xaGIrg`mSldf@->r zbq(Emsr?tEcHH^izRltGiPrvl@^&xeS0)>N(EbKxu z9xtlJrT^MbwsUM^=HyecnDD^C>0A2754)H61DPm67Axu!tMoqvw$1F!Z|~Z6i8x9$JPbDsyvWRv*7g4< z+dr1o?g4vFN@YEf+|&3#kjE|XpmT=G>s1H&cFf?+Hd0c$wADEF@7M6Jb^$Zj{k>}a zis^A16KS^{>u6mH8<{p;sP+rO?wS5swG$Y;+wFNj#g+c<&$@m|rf-BR-z z;(vst>#qEA$o#|9uH^Nr)`$E#JAGPTxwOqEZ*TKT-4C`8?DmQ62)U8nm_7T^<-Oc7 zU2}p&iR_?bUTKpft}oKx=l=T0ueObc{v3%|S@R@g<2v{Fg7c`tJ6n z^;Q4m1HuoO>;L=RW}e6Re35FVdQ&MBb@0F5G4 AMgRZ+ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b06e2915091c43fbf307f5a0b2130f8f3b0324b1 GIT binary patch literal 1020 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cu_bxCy8vk*`02d69!PN(ctjQh zX%8@VJDF_<5-cllOb60n{S1{~6$2O;nA<&F978H@y}f<5Pb5^P?IXKmq(G^v1@q>H z9S`~TFbQ)?u0OEW+Wt{*1!GRf^oAqa3Wn>h{5Y7vqtn)t9UZ}I{CE+YFsI?1&tYfx zFZ=aVH9a!8^p}myu3ftwCaHKrP}DMG<^OxN5117Q@8HT|6knyj^VvM6-3OE(=oPS6 z#MB1r-(tyQ{C!|z^0nmu6>H5_Ew0RyjyU_EwQx)C)sMHP{$jG2aj^U03u*QP&qF`v zNS{|a#(2>0%5SwQ;Tw$i-q>zTOJ$8={}#n>bG!1;`iAeT)7M^{!+wu#U#9JbboN_G zJ5=BF`hWhyv*TF7>HnwVURzvrmpCspck$!B0sap1Vdq08@4Q&$;P3E0^nB3d%(&b0 z8qz*-skJ1^KJfSDrLkpL>3?VDtg!Ec>I^e#~RM-f(wXb5+@b*au}_b4+*LHaW)p_k3C| z)Az>htJ2p7u4#CEAntYJ-ucXL8RePVuNsHHnUJVE`!S=1^qe1zAH+W}zWzStWsnS0 zJX3sl+!3?GViiv;LX%7Plx^O?c!%j*`iDan|LWh!ufKXsg4_OEy=}O}s(qX>sXLzT zH~3_E<(cN;yI0|(_2?(-<4Bgr zflHL;bzhx)t-{Y}UcBMFqlR*>ep>UquL@r^S=RU5yeIu)kNZT;$CcZwie}vt`FQ7e z#kIDN8b)O{i~n5kT7Ep@zopr0Ct$ZSO5S3 literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..36e7c5ab294b1679f79cbc268445676399d6e448 GIT binary patch literal 644 zcmV-~0(2*siz2$vL|kIaNRS)>3Yvuca0;YZ`wX6)6&)QdEdjJSK@>ou zOu-cp4IqldlIKmcNRe&rdN#JlYt7TGXRLXj^?1ggMkEjjvau2SlukDz&;j{(%~?}5Q!$8b8eTT& z#k)H0jaX9~v{LG~%L=y+gPn?l74xz|19;Rcv9Lk+fFQPM^reD!s*W2MYpa5Gt&Zz3 z*r_;Jv0hZruGMklVqt^s0VOe#neR}pko>h$EQ+E_-$7le%3Km#9LJpd4(q^q@d&9> zZ1E4A0+{_aAYY6>Z>kN7wCX)$Wq(~kZ zV?H-Eei0wbeFosLO(`E@8Gu8r^{2K6a{BVPuN29b)9JKzDUt4;SO(z881u2C@j4O9 z032zp&$^OoTI_F?6v^YRrJ5FdSNMGc;KUg7p=&9T2KO-$K^(^~L}ZubKWpvTY&QGh eLn;smw9hS*Kg1BoBFGm20000=uJQvb0|QgJr;B4q#jUru_vc*>5IO$wK4;)Y5#y3)f&%qs zVaq&B7M}UQu)@2IXXZzVn|($Vj<(kVf&_9(qcKRu!pe;jzti$nd7ewbWSR_3Y-}m00 zvniqWnZx0SAF_7et>b(!?QQ7QlzlgIeqDa~W%Wyz9*I)4oWhgYVL5PrD-Jv_J=ZNoWW|8t( z&(bu*{z&fBv2>#o0+ciF<7Abz0lZD?o-(*t8;_kHi>dyYSzpQ?WS zU+Gc%iWxrLi*{Jg^s&2Q``T=sJ$qy?^A1@J)(z>#d=K&#h#ZI$aebf5AM`SHtD2_q z_eU1n3{rV?pw#YV$A?Am%j!)_ixEP@n83+d+C`P{Vt{Dj~MdaESS>q z?Xg8&a`lAVEPfZ4``&!ZUAD-#JG&;=ndv4euaA5mo u`?WKFCI^a?KeDJxwQdOV(kw0f%XCR=>y)mNN3VeCk-^i|&t;ucLK6T|=|cPf literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..adc9c13490c583a7ef74123fa62081b1c5c790e5 GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pJDNuux17Z=Bb`8jv*Dd-rn7vC+sNE_Avigh+{_pvuq4g z5f@)4v#E)KO4g3Xl<5WR=WbOqJG8TSn0yhL(JUaO>n_OEqQEZR*|OroyMPBAoSZ-A z8qE8fzHfP4e%Z6L>#og9Vo-vBU&@;=^Xuv9&D(Y@uHf8Uh60HL_bxPN?#O4blT4n+ zup?aLX!G1TDQ^-Yr^&Jw$R5afAsLXz@W5;R^=kWb?Z>#bZP-w7DXLojK;wnQy+_hw zuRlMvsYd5-gT;+Ymo80QwJMHb2A}Pz6FFO>)+XQ0D|ap0Fm>M6RjXzv=*TZyy=s@D zZG?!<`OlRM%boglk~S~4{HGph@chov3(8${OZt}fA9=ixeG0=x8SiFU9@|+g9nT`9 za^hcHRB5m;qrw$GcO{PcOLs`m86P$bQvrQEN{#Yy*a^ zQ}p7UqJr$N%XVv*#?EKmAX(KScyrC`Uu#Or?GnzsPh7lL>h_PF57pkDV{oXR^H;wy zHivu8^PiFo&v)u>h?tSvSbKWY8Q%xzYYdN-bS5fFoyjir)4EGzPyu|y*MJ@IsQc6Qh}Vc>t64aNMiiR9&LQgr7%6W z+w#V*7gzuKzTo~jKdJU*#QN8}f~Td1Y;3T2zo9p9&Gm))N7`>R<@UrGEb3uBBARnJ zO8V{Gt-8|^oU?P&D=UA7zTp12w)5aB!+!aw?B_uptR}`cjvMyLT0Nh%WAipsJz&^O z`*2}l@w&_JzsI-jd*+!Hvti}Rm4__9zsWx?ksP*m>*tk6nHs`gaR0cQVDRH!-uCwq z+1d>43~!FFuU})zu)WuCde@>K0>7dcu_bxCy8vk*`02d69!PN(ctjQh zX%8@VJDF_<5-cllOb60n{S1{~6$2O;SWbDmIEGZ*dVA-5woIzb@sH=P&kbD|@-i@! zUsONN=GmlfPN4vA7n_RAgZmv+REk4HauT=sI#+)VXck%Tr16hkGgL5Smf1=tzLjhD z>t$+O@iXgh&)b-k{n_UJO}pE7zrUW7Zgk!zf8O1*Z(NvwmP0_>WYfwGn{>W=&ze@E z(NYj_iP5vV$iL{w-6>lV(_T+H=NYwX)vK&v_I#BEn{?*$E7qvIjP-QwTip_Sd)k(W z>tETqxw)_JWiMtAnfA1V7KdI#l4|F_*s-{F-)l@uOXJ%TwYJpqzJ20@obugw#h*QYZl1*E`rg4c zaF6CANjKNkS7-IfipU0VJluN6*!BJ%Ico(g1>ZOdHM3`LVz!-Lz34^%l&!u$ zMUE|B|4?-Awm*UbdMqsBOikR32U{B+OnQ4dey-p0i}}udyLRr}IpOj5P0S#1Cx-$> zg&hI{F&rGo%7MZs%k*`w@0B*`mPMCA({R33^-%f~c?1d?)aKBZw>(R`C%YE`+5nTt2VAa$`8ftE~a-9u9Ygz={>YnfHZg>>KrRXDPU-#$x9d#oOj*Rbm ztpaKt&+l_&l&)ldK;&pb=Udep+P1j7{Wp=`?4>?|RPjO5ubG^j! z@rTVf#=E;pUtbnD#6R(H-Ky8K<}PRKuXR}NKmXtA+i&+NzWg1__w(49ILpdUPxN=5 zua(##uOq`Et`~D-)~s2--h6v|yMES9JI~)Lww34m?@al!c4qCSojZTtTN%9Eta!dL etUO_8IQY%HFx2H&?w{lbAVE)8KbLh*2~7Zuw^uFz literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..07f15d82bbd855c3a7fe93bedb3f15da3c85e799 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Zwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pTY0#i8BlgjB`9)978hhy`5?3ci2I|^}j;P3#aBCE~h*k z`WTuRRJSj9B(~(Sj7Xth1Cz%Tkr>8{4K9Maf0~FnZEL*QJAGsL?^7vr|ET-hNb*kb zP;pY)zt^)!{D8!Pw$ck+tPQOlHWsn2MGi*E-)BygS@B-tB+r4yuepIn;u85>l6Dr?$p;Ou6=mnhSgH`t!I3bVygo(Zd~hdJ-F-fPi_W(x5##eWebnUxjwme zsO!n4r!`xaO01oct=Z?1CzUGOCKCL=Vr}O(k;xJFH)LH1wy@)I>fU;3f#<%~DNIUw zM>CGDk@^yL{YX&rHnq;Lz3Y4~_+2jK*r*`9<#ov##alr=VQaL7OJ3J^1UJ8v_DyOn z)!>gaP2zq%Med5x^&_WB&)l(E$^7{h*UG>(Ph=d@=0-S%rLA3f*YUl^z9*LqLl_@O zIlNQ+!ZcrY3xD74$8(+pehB!lGi|cXwsW_)MeJWPCCTz+XX&|ZM~fz@Uz5Bo_IiDY z=C^;%S5}s83q86{E696NdRS%3*Zv=uJQvb0|Vo6PZ!6Kid%1Q@AhSO6lr~E%;DIufHCXALIKHvXo@l;i1V}oPUB% zX(!hM(F0{)w4S};Jy7TMGW}AwcPsb$i~lVcHW6f40VN;>O`m0ZFo%7AD z)0k>q{O>M&6Xo3~w`lphfU>o(G!AjQ?RR;<`DUL|kG{q67YE$qc^T$Bf5c$Nr`qp) zR`zzbhn!3JTGN32kGJq#nPAg1Z~rxiZo%|p4!kE9zu1}03l!^{w-YEPp56r%oBSdY zEY>^E*yzIY$5WW^iana+dS1Nm3D-&MNrww($WJ=2@_kXdv9a;%?e<@e%y2tl{OBq$ Pei=Mn{an^LB{Ts5VQ%TL literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6d6107ceac1c9ef3a943774181d6f5ebe7375fd9 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pJDNuux17ZW`0i>$B>F!Z|_>?3pd!a?lg`Kxw zNR_p}#a&iPV1C1T2aT0KcxFN0(Vp~{jq~Taw`cEK z7uRjwJ8S0tYu~E67+oOX$^M*M=9Bg?Jz#72%+SYZA!0jo-f!Lq)(zJg=FPhKIaBYF zmBdM5204a^zPQFGYz%obZ(cXc&l2rrBi3da0azar4T7Giu*5K5GY7IUJl6xFO|RdBxjuhB!BW zgA+nZ^P?^2R$p8#wj(b4vd)a>w|;r}xPeuP=t#19Lzug23gVP1t*e?Gt*SGw?f+`K zsQxwgl7y2Q5k_3odYV)hgPEppEsnoqI`29CAX{3QdR0@h%Jl#TgIX0eh%~Co<@IdL zTOQxhzE!9<0cHS9#g#3O-(371`!cI+j;+xfuh+_kaF@UwwKDVg&BfQxCp47JsdlwK z#~QRD1t^ujA^sxsT5t%|xqw698(X!o?QE_c*KSC^@%)kl45r6s&)fGl_&t4n>cE*W z8~rPd`5((J9&OBD%)M@rC0oF=WcCBA%*8Hzvdk$7d#p5z**w*ZnV~!P+DioT)sw|6j&EhJur4_PLzjzEr{Ek$Gk)??JPRH9X7uS*OUanPHv1=1D?yMpA8;+zFehQfp2`ILth_?c$MN61Eex zd@AofyCHUR^2Op6r+PN}x%Th33O;r#Y>k4-e~mCDmHk_LO0BBSRIlvcFC=dr|6Ta( z`h)xznb%33Y*xANw_~%J$GlFt)jbnz96srt{93>7a+}Kg$u>f^Zh{c-a^ZfFJ=sO# TTX@a^^9h5etDnm{r-UW|AhUk? literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2ce4c9935b8a380b06cf026f2fc7b3036f12542b GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cu_bxCy8vk*`02d69!PN(ctjQh zX%8@VJDF_<5-cllOb60n{S1{~6$2O;Sol3%978H@y}h$HPbO5N;o)}&1=lBER0=0@ zXr4-K$Z(h_SgRBm$To%Bq3QL40>O(>o0Qfua0WI8$XJVcak+Ea$IdC4X5STg^4amk z^FPySukC(+`FzE>bF1^q(#v@!sdz%rr6jH7cRE0=*#~?dXl>w%d9n9|>UXXi%<~w& zH=YeTb$Mf%otJ}PA?FXSA0igzzt&IGl3{p#VEWQ2&u`9M%G}jq`ao{OrQcHnr`A3Q z(@ZtqJlWhx+Wm<50k&hsVrv3+i%PMh z+z;F|pGLlITYLF&c2D}mn3Nv^A#1CcT#slSc0XiZy*_HO6~nrzLEo~>vSvESC);$t zkU4C-M@yHn_D1#6Su^{y%riJ&+`YH@%9)V)x2HASd%4%^tk2h-xs}4Qd&5`W)La^3 z`q0;5sl#|0_f=%wAGZaP@&?t9wVU`N%L_ z_tLC3l@9e^a8f?v{obhFyuD^}88aLhfRTQKP48RWR=1B#I|98b!*(ZLt_3RE#VhkI zZs#Sw#@o6d9Ui$QX{HMA=oXxt+J4~f$(=cq>h@SDU2CX5;PpP-IrLj&^vsHcmi0zz z>;l;S@hTjL$G@rhV zu(tpFUop9_?&c5f5008o&);J&n)S!5PR3i3U*dv<+=e9|8yHh<8Scejt2oeLv@PNj zkc!G>e6L$=li;8`$L6?1z}$A8kAE)yc6ipx==)yraO&xbKEnksEh_yI9RBCeR-AXg zTKWQ`Q{qDX?Zl4f+wZX(z2|vxzf3|e`j{~*^Dk?4e^q9y zPaTSK@^{xII5fNSOxJz9atjAz>i_7D$?A!MOt-vpcApmTzib>B)zh#q_fFpQhnrGu zPU|S0b3bxEFx^~9@4H>u+0Kp~GJ^KLlIQy;r~h86Ecmg^FVdQ&MBb@04+7;Q2+n{ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1462c86c6d8f2c145c804a994438a441e9edf55e GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|R55r;B4q#jUruZT$`h2)I5JZkfbocEBp*=Y79T zyhq$_aJZgwI4G3BsG_&RNpSkc{0&ddg`d|=(iX{l_CoVm5KmfKTCy3d*a4v%47Zi{ zn|;;muG${At|7E(Y1^)_uYGgRH1xB0^VIIWzWd*8n}Z*guB)8xaGIrg`mSldf@->r zbq(Emsr?tEcHH^izRltGiPrvl@^&xeS0)>N(EbKxu z9xtlJrT^MbwsUM^=HyecnDD^C>0A2754)H61DPm67Axu!tMoqvw$1(}8pX7+2iB`GtXjiOti+F{I+w+dI2`nH@!1A2Pe0Tfo2~+Hhnw z>k1aGqK3?d9x{sLn_-RjeJacM2~;IGjJ0b8cNeGt~UxLZ8-X20G)t;WN< zUx#lzyu1F$2Jf6@i(j1HNfmi@P}dO=1}>wl#~@mvpQ zKjrv;#MUKcb<2OPL-CRiXX{G;TlxFg^`na(?(h7tS*d0-|I+sQXZvoJmMnkv;lAsS zqi-_*1+1-pAXJz5d)E7wh5MT8r<7=CUatiu5{3zv)f0N&v|P2EdmF^{boFyt=akR{ E0N_9a#Q*>R literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b06e2915091c43fbf307f5a0b2130f8f3b0324b1 GIT binary patch literal 1020 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cu_bxCy8vk*`02d69!PN(ctjQh zX%8@VJDF_<5-cllOb60n{S1{~6$2O;nA<&F978H@y}f<5Pb5^P?IXKmq(G^v1@q>H z9S`~TFbQ)?u0OEW+Wt{*1!GRf^oAqa3Wn>h{5Y7vqtn)t9UZ}I{CE+YFsI?1&tYfx zFZ=aVH9a!8^p}myu3ftwCaHKrP}DMG<^OxN5117Q@8HT|6knyj^VvM6-3OE(=oPS6 z#MB1r-(tyQ{C!|z^0nmu6>H5_Ew0RyjyU_EwQx)C)sMHP{$jG2aj^U03u*QP&qF`v zNS{|a#(2>0%5SwQ;Tw$i-q>zTOJ$8={}#n>bG!1;`iAeT)7M^{!+wu#U#9JbboN_G zJ5=BF`hWhyv*TF7>HnwVURzvrmpCspck$!B0sap1Vdq08@4Q&$;P3E0^nB3d%(&b0 z8qz*-skJ1^KJfSDrLkpL>3?VDtg!Ec>I^e#~RM-f(wXb5+@b*au}_b4+*LHaW)p_k3C| z)Az>htJ2p7u4#CEAntYJ-ucXL8RePVuNsHHnUJVE`!S=1^qe1zAH+W}zWzStWsnS0 zJX3sl+!3?GViiv;LX%7Plx^O?c!%j*`iDan|LWh!ufKXsg4_OEy=}O}s(qX>sXLzT zH~3_E<(cN;yI0|(_2?(-<4Bgr zflHL;bzhx)t-{Y}UcBMFqlR*>ep>UquL@r^S=RU5yeIu)kNZT;$CcZwie}vt`FQ7e z#kIDN8b)O{i~n5kT7Ep@zopr0Ct$ZSO5S3 literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc7d8ab718afbb23502db07ee98de928093e6e0 GIT binary patch literal 1419 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalY)RhkE(}DB>Fg|~vUtC**YV@SoVw|A}cWkO}zKC%nNd&n$3I%&4X zvW^`Zz6%yOh=oqb&az{h&!FkV!L=f2v4@9%p4vkpkw8@k;R&pvQ;rF}Q`i`LgKcI~ zFAHPSWJ}}!clVt4w|e{W=Hl;P-@G~Zra{GX5-OTy($Di_`?H4B1WpUyIShTwm#@xV z5M+HI_kmae^A4^x470CtXFuh9V6%bsjin5`MD*{Okvb=`jW-{#OsM8DyJ9#qIo;lQ zGjsa(&6N*sN#rbe{7~ZhH{+`@^3NIknWs0j+KH`+$UYF6u=VMZwcG~$HQf)x?XNW$ zAE;W*DWAJzN8|&gw)nr140bGOQN9%`9zKd=j+3i!o|4{p(fxUNl+U$Sx)+o_C>w-s z(LA+@dk#}x+1wRZqZfo5{*gK-viMBtwMQHUJr_MsPCO+WI7in_epgP(%q2$!6C@9> ze<;fu_sYt%n@K11eM{2b8>LNRtQE_u#6?yYe~S`%kn&YeBkcK`trnd3j(N`tO>Xat z@7k(yAPy)TwVY@B9ucQm7Ge$;bs82$GPrJL=t^T0Im@JR>)|U_nFAB{$1eGH>{qo? zKTLcUYk&#&f(%RzC=$Mh{xT%j+U``F?T%z7iV|eY5E5z+>l(g1XRfe!>9=9hK!~Hc z4vT~t=Xd4`+dWl}1u^`BMK#2eK#47$JLDDq{$z-)v_EQF!9tAZ;4aSAUao?(YtVdtX*(+vm zQ_b^3(jscFbk`=oMB zXbod}!`Cq3ZTrMBWG!~@4_LX>)a_=LSlx@~NjpLxL_YY%FnbZtb;;DMtzVC<^=o>+ zjdKsT&wKqn>-R5izpb}e_+EHJ{A%&f3&a{f_w3toqu7GaVB0t2%{R&|+G|)|%531# zVO-uQe4x>s>H!KZJoG=}EBDlYzV{#gmpQ!NFztuvTfV<7 z|G6J{eC?k6@4Qx9{K0!ma)0bU@*%s)hV_rz><{q=KV&oQZGITOA=52Cc2~`<+dA< Ux6~(u0gFloPgg&ebxsLQ0EHi9ZU6uP literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..de5de6042c5037cd2eddce43d53d6125d71e38d9 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|QgJr;B4q#jUru_vc*>5IO$wK4;)Y5#y3)f&%qs zVaq&B7M}UQu)@2IXXZzVn|($Vj<(kVf&_9(qcKRu!pe;jzti$nd7ewbWSR_3Y-}m00 zvniqWnZx0SAF_7et>b(!?QQ7QlzlgIeqDa~W%Wyz9*I)4oWhgYVL5PrD-Jv_J=ZNoWW|8t( z&(bu*{z&fBv2>#o0+ciF<7Abz0lZD?o-(*t8;_kHi>dyYSzpQ?WS zU+Gc%iWxrLi*{Jg^s&2Q``T=sJ$qy?^A1@J)(z>#d=K&#h#ZI$aebf5AM`SHtD2_q z_eU1n3{rV?pw#YV$A?Am%j!)_ixEP@n83+d+C`P{Vt{Dj~MdaESS>q z?Xg8&a`lAVEPfZ4``&!ZUAD-#JG&;=ndv4euaA5mo u`?WKFCI^a?KeDJxwQdOV(kw0f%XCR=>y)mNN3VeCk-^i|&t;ucLK6T|=|cPf literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9dae1a4a03c48da9b0410eb4b7c637f4fa5d0b1d GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXj>941YV@SoVw|5QmFFQya`}lkv2ix>kNyRb= z35j2flk{?G7}*jMmUvAy%@#2?Xw*8=BOxgvAi1f8r7J{C?Z_dA*^7eoL-r+mXelZd zO+WGQAZ=+q~!1m(955F&>*y zec{9NjY(_wO5f6WrtBeaTm0#sx%2HKEISUxc^qom+|5}qac@@(Yx?rnl}4-z!3>*< zL-!}Hzdrlte{ap3ckX-%-8cUn16T$@Y&x}{J*0MSOt}^F36TaLMkFGu++Jbpdqqr% z68i?9bcUHs6Eu;C$hYs#C$Qah?Zrs`(bA=&LzCO(_dzWqwk*@A=;QY3tQY@BMyz!PvR+ z#OeiCuU>6uV0+`Lnqn|BGT;hxWc%U7o%{Cv`}E|=6QPFLGaj#eo!-LyLFM!&>#25o ze*0I|{Eh#2{_$(^)W-kTzw*}RmhHaV|HjlW_5jC_XsZdIPYH&JVe*aLybtLH}X$Vc=sxKF$-YxO*< z_{sdJHimqqZ9gB*$E!=_XqAuYin!w?Cfm) zHCv|}{=2)Dn<1g+C)mdKI;Vst E0NSB<cu_bxCy8vk*`02d69!PN(ctjQh zX%8@VJDF_<5-cllOb60n{S1{~6$2O;SWbDmIEGZ*dVA-5woIzb@sH=P&kbD|@-i@! zUsONN=GmlfPN4vA7n_RAgZmv+REk4HauT=sI#+)VXck%Tr16hkGgL5Smf1=tzLjhD z>t$+O@iXgh&)b-k{n_UJO}pE7zrUW7Zgk!zf8O1*Z(NvwmP0_>WYfwGn{>W=&ze@E z(NYj_iP5vV$iL{w-6>lV(_T+H=NYwX)vK&v_I#BEn{?*$E7qvIjP-QwTip_Sd)k(W z>tETqxw)_JWiMtAnfA1V7KdI#l4|F_*s-{F-)l@uOXJ%TwYJpqzJ20@obugw#h*QYZl1*E`rg4c zaF6CANjKNkS7-IfipU0VJluN6*!BJ%Ico(g1>ZOdHM3`LVz!-Lz34^%l&!u$ zMUE|B|4?-Awm*UbdMqsBOikR32U{B+OnQ4dey-p0i}}udyLRr}IpOj5P0S#1Cx-$> zg&hI{F&rGo%7MZs%k*`w@0B*`mPMCA({R33^-%f~c?1d?)aKBZw>(R`C%YE`+5nTt2VAa$`8ftE~a-9u9Ygz={>YnfHZg>>KrRXDPU-#$x9d#oOj*Rbm ztpaKt&+l_&l&)ldK;&pb=Udep+P1j7{Wp=`?4>?|RPjO5ubG^j! z@rTVf#=E;pUtbnD#6R(H-Ky8K<}PRKuXR}NKmXtA+i&+NzWg1__w(49ILpdUPxN=5 zua(##uOq`Et`~D-)~s2--h6v|yMES9JI~)Lww34m?@al!c4qCSojZTtTN%9Eta!dL etUO_8IQY%HFx2H&?w{lbAVE)8KbLh*2~7Zuw^uFz literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..71a9e5dea0ceaecff7dc362eb9bddf3c8ced8315 GIT binary patch literal 1781 zcma)7dpOf;9RF>uG0CA^63N8jgi0OCWf=LXl!!VNvx;oa=uFLhJIattonJSPL>G0G za=$b-)>-bF+|tCN##)kPWiB&k z{C+8Nf7*P(2hYm(q_;@l6;;dDQHE-m@ZWKAevfo4lv6pUGcufmIe!F=?z2w9qDOM) z*3&zR*MztLa45-?!^rv7!g7s zI5;?9Ts)TsZC+lssRY{)TR->Yx~miQpv^Jhl)rSML1=7f0ae`!tEQrQv&plPr<tghj zi@b0LrxqyR&=HUVOy`@nLeW!+3{3>W7)}Y52fCGk+Zw|L<8qpmdlNB0}277f25%*hUvk8^Sn z4(K{t*!TO%l>BDKVAJ;YlaH2s-OpF@UpBf(RI~=FW9Fs6{^Je}tmE+S>~Hbr_b2=0 zgwZE?shVHR?_WP7_=5ve>afMBCs@R4WBf)rsv69XWh7Ye(OgD54DJ2FRrW4dT-pOh z0lHYbm8<+r3p?eK1EfJuTe*m=^37R{9UGLMgl!JrzQu2fz|1*(iqnSdnFEMW&B!|? zgy4;|{ivU6Y4hadWbw_LH%s$7H;@#9^}V`3Tv?{75NrCNTM)Na;2C-VZc&5?UYCM_ z>D&FrBZ03VKhI}c&q~&W##!T?<>!CeoqfBIJ2$une!BW4;gB#^=jduw!Kh7UTb_2ViDTlkI0O$~v`!q+uWHk(#zPYrAp$WNDZ zIGlBifN=LNM=*nKsD3tSE0p;ZS9yv^B=$|lUHgmRoQ(tr2-RY=x6Rtn!u-cj?!}7h z1$>HUjfLP+{z|AQX2PoRIQ<+FtW8n+nXJwYn&%o#%)htIbn=8wkFDP@bf(1Ukucd6 zVDaTyhD%|H%jelNbzNzMGA1e~k{!KHD&yOP{50S$ z{-K@NfR$$jFSxD1AE-r;rRL;h9sCWm*`m&4))Iwb`GQLg?l(&>4_hsT`8M4k5)y~4 zR@B4yqO{!pT$!QB3WR%6AT=sEXV^-~6qS0zYzw2V&apFWv#u11fM4LZ&(6-Go5O9H z3)_GZ+ipQ*Vgf_SKnepUOkWKDrAET+VX(S!#um;Z{h!qwcJ#+c$ zR+6KkTW3}J_CpbD#$%znw#bx%Y&b5tlP}V}v=2L-e11j~1z8@d>3Lp>@9P^Ri0#1Q zv3fH8q<>csf1nA3gq&QXBhs->Lz|5oMV|F97SLT+pn!8cgK1MdRJ8q=uJQvb0|Vo6PZ!6Kid%1Q@AhSO6lr~E%;DIufHCXALIKHvXo@l;i1V}oPUB% zX(!hM(F0{)w4S};Jy7TMGW}AwcPsb$i~lVcHW6f40VN;>O`m0ZFo%7AD z)0k>q{O>M&6Xo3~w`lphfU>o(G!AjQ?RR;<`DUL|kG{q67YE$qc^T$Bf5c$Nr`qp) zR`zzbhn!3JTGN32kGJq#nPAg1Z~rxiZo%|p4!kE9zu1}03l!^{w-YEPp56r%oBSdY zEY>^E*yzIY$5WW^iana+dS1Nm3D-&MNrww($WJ=2@_kXdv9a;%?e<@e%y2tl{OBq$ Pei=Mn{an^LB{Ts5VQ%TL literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2bbe5a4fbab05b4e5541b034800f3a2d5b0f8691 GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXjDZ$glF{I+w+dKQat^~*&{rLX8sPsj40oH2W zKcBfaU$twCy75aPOL%n9!Q z)nmmvkGWszk^5P`P}ZD7^}gj-qi+fp1Oz+1o%%Ff3^NC4-5*dAe0=7>e!zGa>#Dc!{azZa;*#G}^H<{E*-u}CXMWhf`22x7mp!5V8_&nw zZwWUMusgH4L3BfgV$Ff_w`)enU;dG{JCEMpN{pB)i^6u!=XSrW3 zW^GOWk=?#uxm|yo^N;c?&+WLQTmBz?*ni?-cj~k4j1TXJ&VTcu_bxCy8vk*`02d69!PN(ctjQh zX%8@VJDF_<5-cllOb60n{S1{~6$2O;Sol3%978H@y}h$HPbO5N;o)}&1=lBER0=0@ zXr4-K$Z(h_SgRBm$To%Bq3QL40>O(>o0Qfua0WI8$XJVcak+Ea$IdC4X5STg^4amk z^FPySukC(+`FzE>bF1^q(#v@!sdz%rr6jH7cRE0=*#~?dXl>w%d9n9|>UXXi%<~w& zH=YeTb$Mf%otJ}PA?FXSA0igzzt&IGl3{p#VEWQ2&u`9M%G}jq`ao{OrQcHnr`A3Q z(@ZtqJlWhx+Wm<50k&hsVrv3+i%PMh z+z;F|pGLlITYLF&c2D}mn3Nv^A#1CcT#slSc0XiZy*_HO6~nrzLEo~>vSvESC);$t zkU4C-M@yHn_D1#6Su^{y%riJ&+`YH@%9)V)x2HASd%4%^tk2h-xs}4Qd&5`W)La^3 z`q0;5sl#|0_f=%wAGZaP@&?t9wVU`N%L_ z_tLC3l@9e^a8f?v{obhFyuD^}88aLhfRTQKP48RWR=1B#I|98b!*(ZLt_3RE#VhkI zZs#Sw#@o6d9Ui$QX{HMA=oXxt+J4~f$(=cq>h@SDU2CX5;PpP-IrLj&^vsHcmi0zz z>;l;S@hTjL$G@rhV zu(tpFUop9_?&c5f5008o&);J&n)S!5PR3i3U*dv<+=e9|8yHh<8Scejt2oeLv@PNj zkc!G>e6L$=li;8`$L6?1z}$A8kAE)yc6ipx==)yraO&xbKEnksEh_yI9RBCeR-AXg zTKWQ`Q{qDX?Zl4f+wZX(z2|vxzf3|e`j{~*^Dk?4e^q9y zPaTSK@^{xII5fNSOxJz9atjAz>i_7D$?A!MOt-vpcApmTzib>B)zh#q_fFpQhnrGu zPU|S0b3bxEFx^~9@4H>u+0Kp~GJ^KLlIQy;r~h86Ecmg^FVdQ&MBb@04+7;Q2+n{ literal 0 HcmV?d00001 diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..34ac08b5318ab4469bc4a061bfcd57d53ac23f55 GIT binary patch literal 1546 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalY)RhkE(}DB>Fg|~vU>r_t{$B>F!Z|~ani>696Jp651BVo6sR9K2h z>`4CwhO)He)`bCAR{Y`8-fDbnA*-6(~i}ZI?qb9 z+@8&?eE#9ib^aMMKR?@1k7n{)4W(@i?2WDo{2Q2Wu;paz<;cns z-NAf^WgXM>#-%~0PDxnH+cb1kuvPF|@Z?B6cFlZum%WeC-AnU&`<;skj4nqeA8y;pTsvKB9-!PH9<{#d z(kt6)Q>Gg?t3;=Sy}!9y@Idg|aL3HA^Y%*pXYIPSdchtq&An+mo~a+abjOfkX&Qsq zS%xXI7&T0p1G3l_T)DQ@uHpZs@BjB?Wxtv)T*(R+`kKsup*b!Z^heJ1^> zL3QglZd~Ob-`TOe@qOc4UNN`+{izB0norBt@`nA@yYS`!-x}i+lW!zHO_b#{pFi^DTyz&1Qi32;%UFQAYe2slkA7jsRo4dE=+UuQo z5@hE6R6oVgR^FKRqdvP<;g>bD#5LAk+im&&yGSy8sXKLI|BjCIe + + + \ No newline at end of file diff --git a/Graphics/drawables/originals/comment-text/readme.txt b/Graphics/drawables/originals/comment-text/readme.txt new file mode 100644 index 000000000..3adf02a3d --- /dev/null +++ b/Graphics/drawables/originals/comment-text/readme.txt @@ -0,0 +1,5 @@ +Thanks for visiting MaterialDesignIcons.com +Check back often for new icons and follow @MaterialIcons for updates. + +Icon: comment-text +By: Austin Andrews \ No newline at end of file diff --git a/Graphics/drawables/originals/content-copy.svg b/Graphics/drawables/originals/content-copy.svg new file mode 100644 index 000000000..0968db1a7 --- /dev/null +++ b/Graphics/drawables/originals/content-copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Graphics/drawables/originals/content-save.svg b/Graphics/drawables/originals/content-save.svg new file mode 100644 index 000000000..bbd8d5910 --- /dev/null +++ b/Graphics/drawables/originals/content-save.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Graphics/drawables/originals/ic_cloud_24px.svg b/Graphics/drawables/originals/ic_cloud_24dp.svg similarity index 100% rename from Graphics/drawables/originals/ic_cloud_24px.svg rename to Graphics/drawables/originals/ic_cloud_24dp.svg diff --git a/Graphics/drawables/originals/ic_search_24px.svg b/Graphics/drawables/originals/ic_search_24dp.svg similarity index 100% rename from Graphics/drawables/originals/ic_search_24px.svg rename to Graphics/drawables/originals/ic_search_24dp.svg diff --git a/Graphics/drawables/originals/share-variant.svg b/Graphics/drawables/originals/share-variant.svg new file mode 100644 index 000000000..a13fd3521 --- /dev/null +++ b/Graphics/drawables/originals/share-variant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Graphics/update-drawables.sh b/Graphics/update-drawables.sh index 4784af204..8da894725 100755 --- a/Graphics/update-drawables.sh +++ b/Graphics/update-drawables.sh @@ -22,7 +22,7 @@ SRC_DIR=./drawables/ #inkscape -w 512 -h 512 -e "$PLAY_DIR/$NAME.png" $NAME.svg -for NAME in "ic_cloud_search" "ic_action_encrypt_file" "ic_action_encrypt_text" "ic_action_verified_cutout" "status_lock_closed" "status_lock_error" "status_lock_open" "status_signature_expired_cutout" "status_signature_invalid_cutout" "status_signature_revoked_cutout" "status_signature_unknown_cutout" "status_signature_unverified_cutout" "status_signature_verified_cutout" "key_flag_authenticate" "key_flag_certify" "key_flag_encrypt" "key_flag_sign" +for NAME in "ic_cloud_search" "ic_action_encrypt_file" "ic_action_encrypt_text" "ic_action_verified_cutout" "ic_action_encrypt_copy" "ic_action_encrypt_save" "ic_action_encrypt_share" "status_lock_closed" "status_lock_error" "status_lock_open" "status_signature_expired_cutout" "status_signature_invalid_cutout" "status_signature_revoked_cutout" "status_signature_unknown_cutout" "status_signature_unverified_cutout" "status_signature_verified_cutout" "key_flag_authenticate" "key_flag_certify" "key_flag_encrypt" "key_flag_sign" do echo $NAME inkscape -w 24 -h 24 -e "$MDPI_DIR/${NAME}_24dp.png" "$SRC_DIR/$NAME.svg" diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f079dce181473354558f52d05126cc859299816d GIT binary patch literal 869 zcmV-r1DgDaP)nALT0AITLu-&K2l&XFxX;IahUcdps1=Q!d z>*ZgMf9N3aMO8bhajr|q@)D8#zyPq;qstFqNLAle4P@K4oy}%jlF8&JEnlK{fL}oA ze1Sc{5YQV4C?1cmNvG47ffGPfL@-S=Wm(qqP$)DwH8tgUxNZQhtLnW{MiIFH94~Au zTlUdtG@eeU-vH-%LOVIvi{ufYsYb} z78?_Z#JGsu1W?uPNF>r$H=y?R_AroNOP+dFl!!dZ--kk>uDSuat{Vd+_xRPTUnY}T zw5jT5;1;m2S|Gn15+9qVkE&*XOqD!Kf!f;InhnD^rmDO0ZK`_2G|fn<0Sv=v$wyN} zx-H9^Yiep5ot&IZval$2iO6q{`S<4fEJ_Mf!?x{1syYg+3;1Hingh-`jx!6~!28qj z9T>>XxfIB7Tjh+m>bZ0f&8j>X$>R z`lb5;Hc^Ve>ZL`0tB#IM272m z{QfW2p}MLVDA0$noLtupJYF%-qZ+XQd`u>jUI#=^{R8B>?ls_L4PZV4XRC3PQWay{ v_BNokngLaH&T*W#6&$lG2Uf#j0F!~RB{kO5bC8TEnZ4hL@*GLQmH+dOArrMRBR7!_|0me?Il{9CG+he zv$#9iKbg&F*Dnk+Z{B;q`7pot=J#Vv5}hRP{{~2^!K(+2@C=ofTzGjS6A1$VzKyp73?zLAK)SISDm4j0z0bg=aN221?2nwF-aGI z6?NRxz=(71y9Cfel@7@F{R5J&#by~8H?zl*HUWEh+o{9Oxv?fdGjVLPOcoB*+uPfh z%jJFr)-cyG!_K(}6@Pz!|EHek-2(c7m%!#Q45#Y=T?a;hmB1BXs1Z=pqR!=VU&SzZ zo_Dw!2B1_bO-ec%n;!$ib%u$66Ovv?`VBbK?3t~)Y%o3-r>3Uv)(Z&3@HX&AB0l+y zzA8K4?18P?cVm2h(jx8&&>P3stAWdAb{6OXP9=O%8lcJ>Y+CtdrnnY8N&lMJIPgVP z$QIyggY=s%fr21dEonWlJigWA`~LPuK$2F)mn(hW-##!faHv=;=4rl`0lbp*top{h zE-MrYmw|)KEdlN7HE_u}HB|gZ0QRL#NCLH* z^Hegk)Z=yBj`4#B`WqOHqG+?3osR8Hm1?6UX*3MOi?R8rP$;|s&Swdf>J6FM_X+!l zEMXuekfdGB>@1XO%FJvupU=PP?(QBhm&<#ZzfitkAYiST-I$q~DbsqLf)&Gy60ynH_YGw|7BNzCjQ=iKL#qSnz3fGP@t xV4I|^?ZV8?&fYJTN|Wv6X8!kMvFf-k`wuuYTb%hd3K0MR002ovPDHLkV1mupl}-Qv literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1060be81b10569dca88aeccf17186be8b782dbf2 GIT binary patch literal 960 zcmV;x13&zUP)990;GpLe=lW2$IsB;DC8tW{8&p!idvU==S~ zL@yM*@uC*BPz6iHzZ(Sw6)*HgiYCPcZn^Kre3qaNOuW*_pB&h`4)7Cu?oX8rbA`6a>kC*4>=B`YVL z!0SLQ?OzA1X`kCQhek$5MoOj91aQStKDJ+pkMeIW;vk3+zst>xPGi z*8-pAT;_oq|&aU6e6b1y;C7GNu|4Y&%p5O^MV8u&)i zP5%^VLwcj1mvXTE7tI95_69fgq3t8KPuhMCxD+@Hyf5h;N!um8B+|as+J{yv z+Yzus(g9!}Fp(SH4BVDA7FF5k=;#GWlH3&pLEZKqnicc4q>q=m;l04Qzz>q%v;9#V z$M1HkEJ@eW+zvAR0i0+1w?#m;TJ4e~NxlWnTH(Vlr%$6O+S&m~Km)iq?Rwkxt=V`> z4kbylyGJkp*M(uY2q>-88-OQ)Jv2AYQ)1trn?wsb-Go2>h+Qi*}faNv9CbD*}yK_yLt_h=|8a#{i|vLlC;pv#U;%b zozntj`?cQTurM$%@J7)|EkNm^>RDjPBkKxv#P-g~$;r8*6FdGdlT@nL>*uV7BnSep i24q>Fe(H>?vcCbv0IpRG{$@=80000|k1|%Oc%$NbB*pj^6U4S$Y{B+)352QE?JR*yM zvQ&rUPlPeufHm>3#+V#vo4@$B>A_Z>RhE9X1eXz3(C_J-=bzlHK1F zJf6Pi;wx#)I->VY@yAQYgyWtGr_;=)9@?-_qcg)N=D1SOJ*|zp`}K{hig7$?`~#Rs>p2|iWB*~NH8Gj$)!U)SdB$mLUh3W+dh_(bNXM`k>#vOeu3 zY`$X}>-^M(oxksEDlhsz<=Os9v-(8&AfTn$y1`y+XIeVn%D%8GY~#A!8EcoO?h=_8 z{QQpE6r;2^-bz;1ENW^2oDcSBbS-x_?_vxQy4bq)o8htPtqi%^=T#d{FVa}F)R^T& nt#hrw#Y<7u^4w`x6uz?dO4alJGOAGk1~r4HtDnm{r-UW|938L+ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0759d63cd81c99fe8990cb8e6a861c3e678b5962 GIT binary patch literal 627 zcmV-(0*w8MP)!`@50+uOuxc9}Ob zpZUIdyU!%?Kdn+W(aaja{=of1(uXYr%xnUf2a;gv4RF0Lw#*ip*(Kla12=%*lIG($J~BvkXdAYuUaudHqG(#uQktgc z{z`5%8qb|`OJ;Tzm@5j{pdgB(cJK90-k)XJOJGG(8_0l_QUFO~0M5Da2m++Qn51P% z_lf}4hde$$9((U+oO4r>CM7*Fv+&fM1!}+pU?EM@gTQIva}YNn=|UeMj^jn(Op&hE zyE8kUBuN$687#e$^b`7rd}5U10Fq8hx-}>!KLZ;TP$Xy5?;vLa7J)A%;DrEJk|dc* z)ASJVaoYismU~YRyek73__H&!+i@JvN;+z0=eHfe+8KXsR%ZTdHf#o4wme{U)MPUo znv)0I1b&TB|82EeeK@p<{Do7i)pl1Zm3>3Ia?U47^0i18rS9ZW><=%0)+jEP)6E?g>tOSh%C za-kdl21Rk*f}kL{a;I2Ocdj&`3-M#wB#uq8EGTKGIW962({_^SL~`IUGxyzd&wJ-S z-k2oji4$|J4wPpln%M@hk}>s6(u2{Lq{0JO0Ghy=L*p$V;BJ~bbqCdI^>n3DSur#9 z`~45SUT-Je08j#!4pA18=WXB~fK6($b8gMd9swtl(2kkiYPZ`@&8!0anX4|ghdIseq@HJB^%VXzU$2r#zg21IQ-}gP|+^%zO3#c&kTEM5o zg)-1eV%sV2$PR)axB%3E=gnp_O5?3o>nHF62y3;PH%3`ZEIY+NJ4ZMoAn9E4`aNUA zKLE<*@*=|%18|<~uO` zG8O^QlC*z7!1w(-k{(VVWJ1!-D2g_w<&0Z&xk&K@*YXlZ0+I^fOJ-I&w!jo@1HUHB zw3-eyf+M2x;hVmW#C)#o@>V} z0y7s*G2VmUGw^dcBLOpe4D1#t-j}qVmvrEV6NaIS<9PWv)#Et+-0gO^3kl2ve*t5b V?6k;-UElx!002ovPDHLkV1lJ;7^MIJ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9497d64454049ff7855bf39e6862b50bb1abe2d4 GIT binary patch literal 674 zcmV;T0$u%yP)PKAh|mVzH>B_f0rDJ205(ME%wMK;D@1i?r?)UKQ}iwZ~HmWRVWk&fg?a0 z@E(|yG$1LE)K;sP7SmP$N#9bwEdb(}6TtKSPDj(q%x-eoq(25Rc<;r=I0KWWeJVuXU`UHG+lfxlZ7B zzug?t2A($?7|%3ra|sQYY$CMik@Zve%5Uk~oPTzmG1zeJT_f8K-ITHefiCM9S~p)z zYq)HDEAbKAjkGmqPTcxY=6a-M^Sw>iUX`r%U_5%_^?~W0tM)xkSjTS2_utl|SfGmE zY0kRU?B9Dj`*q9@G+qzh9TIz`h3dZEmG}IdpKOaqui^55iW~;kbD^Q8 qhLWu;I~e&xbzPqby{urZV!C$O?9J7(El+`7VeoYIb6Mw<&;$VT1$7?) literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed110c7b2c733cc8f2705a193ca8b978dc0eb5b2 GIT binary patch literal 1071 zcmV+~1kn45P){Lp5D$6@l8Z!Kh$~STKURnCz^;m7mTac8 z^*n43wzD%kHPf9LXY~g|cfWe|>iy|{)m1&Bsthw`&KL#u~_|J55=(m84>G2~~ohu^XK#N#J9u<)v zMC5me-=`w7tvN>Di@1S^TnoGb`~iIH(B)p>8Q|fpv1b9}8tyV8JY?Vr7H|R#+*wGrEpUB=_GHe_ z8)FWy8FZyRTfldBo0uz30<5*WGnc1pwc5qC{L}W+8PlG2zIkyHAR;?5=d+G|vVOOw z$9I7Pz^|?ecEYuYy~c^EUUuow?5;5ph{fcV_)=XeK8ouUT4J+HQ>TfDM_Z zZRK)#uS4wY!fQjhT;6M~t=H@I*@cCLKLMMzT_++pJH(SrpTCXGn|cu`jg5`HDk2BD zGI!`Q@KPMdF96>GH+IqYu&Tb6HLMa41i@3lD|xf*goqr7qUd8_8o1t}%NgMP<{E4z z;4H9%E6Gc=B?|j58=N+M-C4wt?zl~Oa_pG&r?XbG#KmQ^dIO|eCzy3HbWSmw4ek>xe z1BHy!O2COC0y|L1II9H2ar`E5lop>b3c>YIbIf=!0KWQ5vcEB7#OM zebBc)=~F2!A{9i%mp=H`DrpfPd=NxMsGu+P1C>5#p%M)iAx1Qy5;B`j;`djQZElVa zyD`(*o$O3zJ0X%EEZI4G?z!hbbMBpcZ)9d{WJ>FuKwdTltT&ew-JzraH~?IovdI}U zdnNH#Gb{81oCPf7=WtRy6*&t@+5*f2p8}6|a6bq<6}f)G%#O#MiY_5F|IV4&kE=RL zzs5{MlFZCbM2#D55Fd;i*8Bt{m4YDH>72V$(r&;3!_K+k>FMb)Gh14vd7q?x9lE$R zRUT^@1D@yIB$vC%?O(GifU@m$}0gzBRKOqlU~S-X)bh&wCPh4!E@GH|w0+S*z7%I+V~k;5cvv@HlWy8=saEN8j zmzI{69+;Y%`XuVp6mrz_ysspEKx5k6Q7V;=vHHCK4Y13acT>`4r@T^?kR$>3 zMNH4flaErZRzEbemm}>5J9P1)MM}ZUegRIV$t{%t&-1QlB)u=`bKt#%u<_+Zu}cXvTLfO9vBHcaU=MId zLi0J`Sln3ne!$F*NP3O*`+;S?HnZ8dvF&>x2!hMa>?kk@>;TGKD0U%br&}W57io-% zD)2UNBn-oUQpQQ7MS!HT@B5#bS<<8I79WLScz@m?En}cksoYyY@&JRr@86X-NQ(eT zx8x0)ft&LNXg3QLHn1h-?rWp%$XeJGu-B7LwLf$8EvbVSQ_Am^e z3B&N|N~LmJbFW+&c?A4iuh;jFj*ixs4I?8X=j-+QAsXAvLdYZF?Ck99pK;^N%*plZ40~P{VU>G=PX8U~K zf6w#0LveGN*$m({U=5G~b^&XFZeR&82l!Od$*R7M3TSO@&1Eu~t&$$86Lto8#q+#P ziVR?8w*s?(-2@fpY2Y0o2OI@nlJrenJ`D*d7K^w0zP|^!IcAsbp64x>Br}@|d<{Gd z7*GNRfIERxz*|6b znLP)5QX}Ayo%|J@B0h- z`};ov?yr%0wxr+3z#WKLM%&xlrx4s!BiL0cmDWVb1C-0oM%;QLY1 zuQIbKqxde1SOSKIhVCM$4gjQ5sTb>XI}d>6D~bf%(9}?Xl5OW1W39N zXJ)bP`e57k~#GFtZ=c?6xrp7%xcL33LGKfE$37m465- z*oJ7IQOjtdP?#&}K1nmpYz1&{#nmI}!^@Fz9H+IiJVx-Yq!W(g^hnxMDwR&x>tDJ0 zD?qmmx4_q=3gPXV7t%=;@9?E zakgD1<}2WrQ2P|{b~LCK$)yR1#fGGgTrM}Oj{lsb1q5qKq;(p5Zu7fncXR-vnN^$iicsEiAe z2&nabOR-pNCpaP*7bFp|IG@k24jXd0+;rdfw*DE{gjAjf3!D-#V rz`&o9ns#Bv{Ecj~;F>I>R~7yTsZapDN`dJ<00000NkvXXu0mjfRkKLI literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0e14a9500ee9a8e8fd60a0556fd73c8df7cef615 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pW)oQo^S>R#sp6n$B>MBZ)Y0%9WfAa{co{F!O`FU_`OD^ zs#SNnFQ}gq)ySFH%~G|4L0qwvYn$>$Cq@qq!-L&9=iSa|uMPY(U-otvFUO((Z85!- z^X8{Tma#wJI-pp5Ot-;3J2x=&>gn}Nu7Ptjm(F99F=m&)EOc?_wOv2&tvD9yweq$t z4?lzYVS|v#d-@J>zguD)^NT~KaQU3XNxpxdYW_abn7`1lttQ(!VA|6M!P|cb3NYsF zdEW5eeCDj9{S6!ilXK)dOxwlmnUoInzG1%8!C;>ApLyZ4E05eASawXTZIGURK)ZZ} zq}t6GCjUE{=`&Jha|i_TEqLnpYQf(#X8H@Z=B?SP&0uQRw{7Q5rWI?quKsw^DJPy)?E@0gE>nWt{EO$F7Tp5!|Obd>daWYbzlFFz6>T?!L`Zl z{Hg|Vx2hN}R@*H(z}v9?_4&4rb-jkAT_2hh7~aPk#5Eau@8<;uJcFmJpUXO@geCw_ Cmb@7N literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..438b2a9e62995307e0828f3f580768a7b0ab710a GIT binary patch literal 1490 zcmV;@1ugoCP)L&mO~>6LP)kJQeqeRT*NduJY*(Ob1rm{!z;R%0L_1#tn^e{F%kP#> z+K+8S6sOL8z+zy1HEZXH<18WUQAbfh}87 ztWC_atb%EpUjhe!JNbX~X=W9$&GWpUZQFh^&KTk*Hi2y0-U^%q9_Zk;6{@=5G|kV3 zhlisqArd1NflSlfud0WDtHQi5A`j2b&W`8v`5WViCr%;@WZU-RBGRszOafm3hk$Xw zcQ^%B8HVxU=;-K@s4>M!q)xg}D443czeV;5!!Wj&%jNOL#KFPA6+JyYFR1Dsu3TT; zJT*178+biRTyYYq26>)$5V)o}SykU~UH9H*aR92->IKJf-t|0hy@;IhG5e}zS@%SV zD^5ZSWLee|z=O@{s=C*8-94>lrkAN!tEWWdAz;cUrUPN)ikm1k=qaDHpG?!-JzoRm za=9WR+kLWD+qS(fd}#3zN}&G!{yt!{Pu6S2VsW+;TaM!#0ZufhtLmd+VvCzl0xes% zY=pTfdL!QK?CiH8fuiBp1TiikncwyomTs z2+xKM!Z3`pK6~R=H~hU8$N~R^^%0h^^PpC1tT_44hpPUbfGJyif1PUOq z4;mO480_useF?agxsgSHKA)nSEX(TXP_6;LGp~^bdly8c2po1C=U6?hRDaqc@_9(V zy-l{RpzX=3Wm%hnkC@xwS_~-gp6j|V0~-Oq=|QJl0!CET@yl!}P`&1y=E}wBf+Hfk z9LIS_L^c6CiE!)#>}z-Q(^4SIvfc)Eg>;-WGt<-41Cx`Je(g-5PN3`32p|I2r{ScXKxxdDqmW8`**qwKOrQWVfda?`3Lq0GfV2cU4~!Aw3S1jf zxqX_nK*vPnhDxO}SgBNQ$>;NZz>~lqG1yLJm{0P4&_UOAw`s##rhejaxKJn@_dIV5 z=ugmpEF@KfegSrBi-lgPRC1YHWG;FV5lBQns8lL{w=3hi?k7O1H&(-th(Mm_wY@nC zpsJTt^<)zM<0KJ*a=F~Ve9G0ozgW~HB9N*E-p;UX+XjY{@E<2hb<)oa4Gp#3Pg2$Q z6Y?D^NeR?btJRL=^Z5q(CQtyGKmlX|1<+C;5xJ0NAe~aH)l!MC zr9i6sV;TX3C9U|{)u1D31Q3$(YPA~nE>cId6v%O$qrl-bg6NPL!!Vv!)mj?P+IG^e z>uv$wWbTsDVqnZLjE&`TIkkq(CQtzX0=@o|v1!BK&j0`b07*qoM6N<$g4Zp%od5s; literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..24e3da7278224be3571bb54d33767706b83f4da0 GIT binary patch literal 1567 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 S^-c)@0000Vgdb literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..de5de6042c5037cd2eddce43d53d6125d71e38d9 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|QgJr;B4q#jUru_vc*>5IO$wK4;)Y5#y3)f&%qs zVaq&B7M}UQu)@2IXXZzVn|($Vj<(kVf&_9(qcKRu!pe;jzti$nd7ewbWSR_3Y-}m00 zvniqWnZx0SAF_7et>b(!?QQ7QlzlgIeqDa~W%Wyz9*I)4oWhgYVL5PrD-Jv_J=ZNoWW|8t( z&(bu*{z&fBv2>#o0+ciF<7Abz0lZD?o-(*t8;_kHi>dyYSzpQ?WS zU+Gc%iWxrLi*{Jg^s&2Q``T=sJ$qy?^A1@J)(z>#d=K&#h#ZI$aebf5AM`SHtD2_q z_eU1n3{rV?pw#YV$A?Am%j!)_ixEP@n83+d+C`P{Vt{Dj~MdaESS>q z?Xg8&a`lAVEPfZ4``&!ZUAD-#JG&;=ndv4euaA5mo u`?WKFCI^a?KeDJxwQdOV(kw0f%XCR=>y)mNN3VeCk-^i|&t;ucLK6T|=|cPf literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..560648d52d89e73ddd433213289c9be389eea49b GIT binary patch literal 1881 zcmZ8ic{JOL68?!@V!P#9YR&UdTW#0UkcvicV{H(-h@wGbsV!&`-g}nY3WB26YE>IN z%WY9>dbPF1L)D(5RI9PZ7OHsh&%NipIcMgZZ~mAwGv~}q#&!E&g@t5=000n1T|+u@ z5O<~md>p%2NHpO9PoyQvS%4#V1^m-FTrm8adn5oDd!H$n4CyMz0c4`A+@hSqZblJ( zBLV;-k*E_CdMnb;H#|TmECOG=VI~Uzd=n@n!a25Nz0`pqH!k0MxmzZ!)>s46aAU&2 z2q`Hh7AoO<#Yqz3iTQCZ$D$74vdjjjVN)!gIFgJcbdZ@d+?_Ad6*NRJL7MJD+Hy)3 zN_M6ex{D1+Yr;_NzeEMDgH&S^&DWk3zHNuibrc!5Co1++dN+-`*>^TqAXp)K5OV4mwu_AK8PaUlp}*Ctc%&V~GpUSP?2g>fbF5coHkH#<~|mBa-} zKFcLTrO*gF zs6LqfoH?q3Dho4|Jsna$3La!BV9Z1RXiR6kb_KoovLh@cS>aL>vXyX(Sbz`j7;(SQ z$)GY-bOjkJadR8GkSy+D9c}I7n8d^r{~XrO2;~G)daSSX#%@Bl$QrLv{o?Kr4Li?X z<%DdjrTJ1BU;};qh)^*eeiEM4_JL=P5M+Ld?s=%s-a` zYFb*FC@&)X5u$ve&yK`mv2Kf-<~4u2iXKOan;OF5@X#6J=x3-!oy%+mb>DNn6fOH6SNT+@(C*hOJqqd@Lq*Gy> z92=&A_oO>PNPmH;$=9F33sPu_j}4B?Ek9X}66AU>W5&H{1@gA+syMd%RbGLV1?n_RgfTEluymF;D1CaYa43_kMt(ILHyv^YYg%x73~H_Zm@Nw{t3rEt_msR63&7 z8y0p%7YFXJhZjxY!5X>NRonZ|ovQ7*S3Sm@qhA4P$wUvbO&W@8MjL*&l3Kd)$jUZ8lGs|GFcg=8@3d39Y}li%(R{(7or-_$31?~C_q<0weE86I^)bsEb6l2wU&}@| zByu2C7m_sX85`n0|78+}hQkj%=TW;g8 zg_Dr*Dr(|fzq*s+!qJJ-ZqhP0qq#Pt4SZlQ(wGvD6Ep!BQ+3AOjtWTeb3Y6@;~GGiwrbW!9XJK z86Ei}chkQI^M&(t{ba;@9hdad2xXgObjMhCC+@9L~v{csBO$TCUo0Hp)oJ{4_>hxY>c(&nyV_o5HSnB zRDH2Qnf9_KZrL{YP6(Oh_BItL;6ZGKyDWWZUf;nVlk0BN<}xxeHi-t-A^SgzW&J`B z47aDK@b~E64Xpa2Uiw?CI*Rg-ydTT6c$){Mw|kS#e8^GGNUY2F-vDStKJ`R;>Y-nm zTBZ6-$>URcp080<4fUkEX>x`*#EAdDEBxn4F46))7Wca2Cb zAWce2DoaaCtMI#RKH5c_)T0%uLO6RCf0lVhPWUsq4hDi1|8t)61_6|nJ@Vg{xRn0_ D9Xn|j literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e7e8a6dfa61d5f7fdfdee15600e80887560d0a GIT binary patch literal 2080 zcmZuyc{r2{7k}Rwvs88}gleuzWbA~jcapU`WEfi}lWmYa>x4co8i^}Qwh)yULyM)c zP1kxQQ{f`UNXbPR#c)TKJNM7;`M&c!XZzc`3vVpjl_bXmGCkFtiQfr*KQ%uR%(%?)Ff^2^x>z?cNuNJOTjG>`Y z^ZYmXj}%k!JWEvx%#JsL>?C>mV9(u^j`BvpC;}OsnZhGh)SIiru z1tcg;{A{Q;gEFatICpYm)gsL|f#{qW4kd|-3BOP>6j*_6(i<^#shZ^@XK3OSy8$7q zG#`l>&Y*_WF=L^L$w6g7V}GJPSX5|~uofC%Dp1^u^uICR?@y>Ac`;~7?X|F>9#WdtyX@=d zcc*5Fifc$nav-pm&kjrF+05Uz?)Rf*q4C%PQ}0Z^LMWlF(tf{z z^oMoUK%A44-+a-3TfgwwO}J@NpA7-kj*HKj>;S&Yn7Tn$M7-OskvZkrvHq}Yk~s}2 z8uj3XqOIFB9*6>l|% ztDMI*JBA#*vYBVJCr`@c%e>s#pg{~($~?T4{^KZlsGj)($UQDGDK*9&oJeAu=ZTd= z7n0+rlt02G51Qe=Guw&^6W&L${pPkBoNMpEUL!X)dw3%9&SMmG+fMM^Ffe03UL|h^ z8AQ4J5K1#<{cvvci7DIknO#i!qwj1diO@lNeNyE*I@n z0#_8ZVarm$_PR`HEdC~>Xak88s5;88H+RDATBh=c#hd0Bg}X=I zodzRGq+^ZmD!nreX>aahV}CdcXY0 zH%QMT(FSKSt!$3d1I1ts*Shx*N^IE8?Nqleu~+YibNV(?IeD5mg$UtB7o2GNfEp&e zI^9DRb6+S6G^+gd{UCEI|LR}~VpyEIcLnuUwM~N6r1jUbJ-<5tyS8ob4<^f9me&N> zCct8GRf!vvD=~^IJ~;oQoL@=KE^D8 zZU`G7Vx5Sy)P_?TYo^+hxXKQ}mpfoMfw|38lwiC~+==UY0eLh8xmkU%g z!jT2`qkR*Af4KDH>72jBqsE zQ~yhB!ox?8?tu23Q_F-pG$}J9!l^^O?YO(z>>o0*yJePVnxE(*Jrs2Rqv>lampsvz z4@_11;>QMJ<3M-Vv;btfaG(dapv5uKy@T6$f*CsT%%E65MA2#NXwGhho9cwet%=Jj zd7b)(hH+up=GBgq8m6Xuz$!zuZ_FX60YN2^NVC=gUU4&|qDIvh1@oYGa!nDDy&&|w zvEz`C26Efm-+v%lenEy;*o^Ore#Tuyg87>3VJ=cBU$OqL|Myo2HQEV){=Ktu-6F8I z>;b!WRqFU%pp(0&_SMYrHl+AO0iF^9ChI%#RQd`{r?Nnc{n@OAP4LvEtm@oz#u^&g zJz|U|du8z9!-u}-Kj~F+%*JkyIz^3t`t-@R8J>)OR-Sw67e(ouQfAks%u~S-=4tm@ zJKbPTlHV*XAefASh5QvX)tKE>#ZE7ROt6?c!XhG6UQdRUUl8i~Z_QXP-ASc^NF=7O y#cL>#V`5_H?u=r~bzVcw25d67@xPbkb7G~xE6aV?HbC&r0qgS@adZpP&3^zVNz5bw literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f93079dfcb2ea8657d4b7379af2df34db10f3017 GIT binary patch literal 2490 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 Ef(NIQRR910 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9dae1a4a03c48da9b0410eb4b7c637f4fa5d0b1d GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXj>941YV@SoVw|5QmFFQya`}lkv2ix>kNyRb= z35j2flk{?G7}*jMmUvAy%@#2?Xw*8=BOxgvAi1f8r7J{C?Z_dA*^7eoL-r+mXelZd zO+WGQAZ=+q~!1m(955F&>*y zec{9NjY(_wO5f6WrtBeaTm0#sx%2HKEISUxc^qom+|5}qac@@(Yx?rnl}4-z!3>*< zL-!}Hzdrlte{ap3ckX-%-8cUn16T$@Y&x}{J*0MSOt}^F36TaLMkFGu++Jbpdqqr% z68i?9bcUHs6Eu;C$hYs#C$Qah?Zrs`(bA=&LzCO(_dzWqwk*@A=;QY3tQY@BMyz!PvR+ z#OeiCuU>6uV0+`Lnqn|BGT;hxWc%U7o%{Cv`}E|=6QPFLGaj#eo!-LyLFM!&>#25o ze*0I|{Eh#2{_$(^)W-kTzw*}RmhHaV|HjlW_5jC_XsZdIPYH&JVe*aLybtLH}X$Vc=sxKF$-YxO*< z_{sdJHimqqZ9gB*$E!=_XqAuYin!w?Cfm) zHCv|}{=2)Dn<1g+C)mdKI;Vst E0NSB< diff --git a/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml index f9efd81b4..ce8b1302c 100644 --- a/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml +++ b/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml @@ -5,7 +5,7 @@ + layout="@layout/toolbar_standalone_white" /> + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml b/OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml new file mode 100644 index 000000000..d4269c2ba --- /dev/null +++ b/OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml b/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml index 9a26d1757..f4aeb76c9 100644 --- a/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml +++ b/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml @@ -1,5 +1,19 @@ - + + + + + + - + + + + + + "Select Keys" "Select Your Key" - "Encrypt Text" - "Encrypt Files" + "Encrypt" + "Encrypt" "Decrypt" "Unlock Key" "Add subkey" @@ -75,6 +75,7 @@ "Decrypt and verify message" "Encrypt and save file" "Encrypt and share file" + "Encrypt and save file" "Save" "Cancel" "Delete" @@ -87,6 +88,7 @@ "Fingerprints match" "Lookup key" "Encrypt and share message" + "Encrypt and copy message" "View certification key" "Create key" "Add file(s)" From a03f6d35d6a39e18c81a794e746863792c14a447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 6 Mar 2015 11:14:27 +0100 Subject: [PATCH 03/25] Improve way of getting possible names by filtering out emails --- .../keychain/util/ContactHelper.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index c66dc04d0..1de5fca30 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -43,9 +43,11 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.regex.Matcher; public class ContactHelper { @@ -54,6 +56,17 @@ public class ContactHelper { public static List getPossibleUserEmails(Context context) { Set accountMails = getAccountEmails(context); accountMails.addAll(getMainProfileContactEmails(context)); + + // remove items that are not an email + Iterator it = accountMails.iterator(); + while (it.hasNext()) { + String email = it.next(); + Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email); + if (!emailMatcher.matches()) { + it.remove(); + } + } + // now return the Set (without duplicates) as a List return new ArrayList<>(accountMails); } @@ -62,6 +75,17 @@ public class ContactHelper { Set accountMails = getAccountEmails(context); Set names = getContactNamesFromEmails(context, accountMails); names.addAll(getMainProfileContactName(context)); + + // remove items that are an email + Iterator it = names.iterator(); + while (it.hasNext()) { + String email = it.next(); + Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email); + if (emailMatcher.matches()) { + it.remove(); + } + } + return new ArrayList<>(names); } @@ -256,7 +280,7 @@ public class ContactHelper { } public static Bitmap loadPhotoByMasterKeyId(ContentResolver contentResolver, long masterKeyId, - boolean highRes) { + boolean highRes) { if (masterKeyId == -1) { return null; } From 4013a36276004e28e25e83684fc3f6b4690d2748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 6 Mar 2015 11:20:45 +0100 Subject: [PATCH 04/25] Remove dublicate email check --- .../org/sufficientlysecure/keychain/util/ContactHelper.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index 1de5fca30..08c7c02fb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -99,9 +99,7 @@ public class ContactHelper { final Account[] accounts = AccountManager.get(context).getAccounts(); final Set emailSet = new HashSet<>(); for (Account account : accounts) { - if (Patterns.EMAIL_ADDRESS.matcher(account.name).matches()) { - emailSet.add(account.name); - } + emailSet.add(account.name); } return emailSet; } From c5093433f58d019116ac2d4396f81abae98dbac8 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Fri, 6 Mar 2015 21:05:54 +0530 Subject: [PATCH 05/25] added PassphraseEditText --- .../keychain/ui/CreateKeyInputFragment.java | 19 ++--- .../ui/widget/PassphraseEditText.java | 84 +++++++++++++++++++ .../res/layout/create_key_input_fragment.xml | 20 +---- 3 files changed, 92 insertions(+), 31 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java index b496d40fd..d784f0b21 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java @@ -20,6 +20,8 @@ package org.sufficientlysecure.keychain.ui; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -32,6 +34,7 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.widget.EmailEditText; import org.sufficientlysecure.keychain.ui.widget.PasswordEditText; +import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView; import org.sufficientlysecure.keychain.util.ContactHelper; @@ -39,10 +42,9 @@ public class CreateKeyInputFragment extends Fragment { CreateKeyActivity mCreateKeyActivity; - PasswordStrengthView mPassphraseStrengthView; AutoCompleteTextView mNameEdit; EmailEditText mEmailEdit; - PasswordEditText mPassphraseEdit; + PassphraseEditText mPassphraseEdit; EditText mPassphraseEditAgain; View mCreateButton; @@ -68,11 +70,9 @@ public class CreateKeyInputFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.create_key_input_fragment, container, false); - mPassphraseStrengthView = (PasswordStrengthView) view.findViewById(R.id - .create_key_passphrase_strength); mNameEdit = (AutoCompleteTextView) view.findViewById(R.id.create_key_name); + mPassphraseEdit = (PassphraseEditText) view.findViewById(R.id.create_key_passphrase); mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email); - mPassphraseEdit = (PasswordEditText) view.findViewById(R.id.create_key_passphrase); mPassphraseEditAgain = (EditText) view.findViewById(R.id.create_key_passphrase_again); mCreateButton = view.findViewById(R.id.create_key_button); @@ -106,15 +106,6 @@ public class CreateKeyInputFragment extends Fragment { ) ); - // Edit text padding doesn't work via xml (http://code.google.com/p/android/issues/detail?id=77982) - // so we set the right padding programmatically. - mPassphraseEdit.setPadding(mPassphraseEdit.getPaddingLeft(), - mPassphraseEdit.getPaddingTop(), - (int) (56 * getResources().getDisplayMetrics().density), - mPassphraseEdit.getPaddingBottom()); - - mPassphraseEdit.setPasswordStrengthView(mPassphraseStrengthView); - mCreateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java new file mode 100644 index 000000000..bd623165f --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2014 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.widget.EditText; +import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthBarView; + +/** + * Created by abraham on 6/3/15. + */ +public class PassphraseEditText extends EditText { + + PasswordStrengthBarView mPasswordStrengthBarView; + int mPasswordBarWidth; + int mPasswordBarHeight; + float barGap; + + public PassphraseEditText(Context context, AttributeSet attrs) { + super(context, attrs); + mPasswordBarHeight = (int) (8 * getResources().getDisplayMetrics().density); + mPasswordBarWidth = (int) (50 * getResources().getDisplayMetrics().density); + + barGap = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, + getContext().getResources().getDisplayMetrics()); + + this.setPadding(getPaddingLeft(), getPaddingTop(), + getPaddingRight() + (int) barGap + mPasswordBarWidth, getPaddingBottom()); + + mPasswordStrengthBarView = new PasswordStrengthBarView(context, attrs); + this.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + mPasswordStrengthBarView.setPassword(s.toString()); + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + mPasswordStrengthBarView.layout(0, 0, mPasswordBarWidth, mPasswordBarHeight); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + float translateX = getScrollX() + canvas.getWidth() - mPasswordBarWidth; + float translateY = (canvas.getHeight() - mPasswordBarHeight) / 2; + canvas.translate(translateX, translateY); + mPasswordStrengthBarView.draw(canvas); + canvas.translate(-translateX, -translateY); + } +} \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml index b320885d0..791eda88c 100644 --- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml @@ -58,34 +58,20 @@ android:layout_height="wrap_content" android:text="@string/label_passphrase" /> - - - - - - - Date: Fri, 6 Mar 2015 22:00:30 +0530 Subject: [PATCH 06/25] added PassphraseEditText to SetPassphraseDialogFragment --- .../keychain/ui/dialog/SetPassphraseDialogFragment.java | 8 +++----- .../keychain/ui/widget/PassphraseEditText.java | 2 ++ .../src/main/res/layout/passphrase_repeat_dialog.xml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java index 9e1f21f60..93d445467 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java @@ -43,6 +43,7 @@ import android.widget.Toast; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; import org.sufficientlysecure.keychain.ui.widget.PasswordEditText; import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView; import org.sufficientlysecure.keychain.util.Log; @@ -57,10 +58,9 @@ public class SetPassphraseDialogFragment extends DialogFragment implements OnEdi public static final String MESSAGE_NEW_PASSPHRASE = "new_passphrase"; private Messenger mMessenger; - private PasswordEditText mPassphraseEditText; + private PassphraseEditText mPassphraseEditText; private EditText mPassphraseAgainEditText; private CheckBox mNoPassphraseCheckBox; - private PasswordStrengthView mPassphraseStrengthView; /** * Creates new instance of this dialog fragment @@ -100,11 +100,9 @@ public class SetPassphraseDialogFragment extends DialogFragment implements OnEdi View view = inflater.inflate(R.layout.passphrase_repeat_dialog, null); alert.setView(view); - mPassphraseEditText = (PasswordEditText) view.findViewById(R.id.passphrase_passphrase); + mPassphraseEditText = (PassphraseEditText) view.findViewById(R.id.passphrase_passphrase); mPassphraseAgainEditText = (EditText) view.findViewById(R.id.passphrase_passphrase_again); mNoPassphraseCheckBox = (CheckBox) view.findViewById(R.id.passphrase_no_passphrase); - mPassphraseStrengthView = (PasswordStrengthView) view.findViewById(R.id.passphrase_repeat_passphrase_strength); - mPassphraseEditText.setPasswordStrengthView(mPassphraseStrengthView); if (TextUtils.isEmpty(oldPassphrase)) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java index bd623165f..09aeba5dd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java @@ -48,6 +48,8 @@ public class PassphraseEditText extends EditText { getPaddingRight() + (int) barGap + mPasswordBarWidth, getPaddingBottom()); mPasswordStrengthBarView = new PasswordStrengthBarView(context, attrs); + mPasswordStrengthBarView.setShowGuides(false); + this.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { diff --git a/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml b/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml index 11355bbc0..ed14b81c9 100644 --- a/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml +++ b/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml @@ -21,7 +21,7 @@ android:layout_marginTop="8dp" android:layout_marginBottom="8dp"> - Date: Fri, 6 Mar 2015 22:11:33 +0530 Subject: [PATCH 07/25] changed default colors for PasswordStrengthView --- .../passwordstrengthindicator/PasswordStrengthView.java | 8 +++++--- .../src/main/res/layout/create_key_input_fragment.xml | 6 +----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java index d7270ff58..bc5018497 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java @@ -56,9 +56,6 @@ import org.sufficientlysecure.keychain.R; */ public class PasswordStrengthView extends View { - protected static final int COLOR_FAIL = Color.parseColor("#e74c3c"); - protected static final int COLOR_WEAK = Color.parseColor("#e67e22"); - protected static final int COLOR_STRONG = Color.parseColor("#2ecc71"); protected int mMinWidth; protected int mMinHeight; @@ -100,6 +97,11 @@ public class PasswordStrengthView extends View { public PasswordStrengthView(Context context, AttributeSet attrs) { super(context, attrs); + + int COLOR_FAIL = context.getResources().getColor(R.color.android_red_light); + int COLOR_WEAK = context.getResources().getColor(R.color.android_orange_light); + int COLOR_STRONG = context.getResources().getColor(R.color.android_green_light); + TypedArray style = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PasswordStrengthView, diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml index 791eda88c..1131bf4fc 100644 --- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml @@ -66,11 +66,7 @@ android:inputType="textPassword" android:hint="@string/label_passphrase" android:ems="10" - android:layout_gravity="center_horizontal" - custom:showGuides="false" - custom:color_fail="@color/android_red_light" - custom:color_weak="@color/android_orange_light" - custom:color_strong="@color/android_green_light" /> + android:layout_gravity="center_horizontal" /> Date: Fri, 6 Mar 2015 22:25:35 +0530 Subject: [PATCH 08/25] cleaned up code --- .../keychain/ui/CreateKeyInputFragment.java | 79 +++++++++---------- .../dialog/SetPassphraseDialogFragment.java | 10 +-- .../res/layout/passphrase_repeat_dialog.xml | 1 + 3 files changed, 38 insertions(+), 52 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java index d784f0b21..b3de6091e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java @@ -20,8 +20,6 @@ package org.sufficientlysecure.keychain.ui; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.text.Editable; -import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,28 +27,23 @@ import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.EditText; - import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.widget.EmailEditText; -import org.sufficientlysecure.keychain.ui.widget.PasswordEditText; import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; -import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView; import org.sufficientlysecure.keychain.util.ContactHelper; public class CreateKeyInputFragment extends Fragment { + public static final String ARG_NAME = "name"; + public static final String ARG_EMAIL = "email"; CreateKeyActivity mCreateKeyActivity; - AutoCompleteTextView mNameEdit; EmailEditText mEmailEdit; PassphraseEditText mPassphraseEdit; EditText mPassphraseEditAgain; View mCreateButton; - public static final String ARG_NAME = "name"; - public static final String ARG_EMAIL = "email"; - /** * Creates new instance of this fragment */ @@ -66,6 +59,40 @@ public class CreateKeyInputFragment extends Fragment { return frag; } + /** + * Checks if text of given EditText is not empty. If it is empty an error is + * set and the EditText gets the focus. + * + * @param context + * @param editText + * @return true if EditText is not empty + */ + private static boolean isEditTextNotEmpty(Context context, EditText editText) { + boolean output = true; + if (editText.getText().toString().length() == 0) { + editText.setError(context.getString(R.string.create_key_empty)); + editText.requestFocus(); + output = false; + } else { + editText.setError(null); + } + + return output; + } + + private static boolean areEditTextsEqual(Context context, EditText editText1, EditText editText2) { + boolean output = true; + if (!editText1.getText().toString().equals(editText2.getText().toString())) { + editText2.setError(context.getString(R.string.create_key_passphrases_not_equal)); + editText2.requestFocus(); + output = false; + } else { + editText2.setError(null); + } + + return output; + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.create_key_input_fragment, container, false); @@ -156,38 +183,4 @@ public class CreateKeyInputFragment extends Fragment { inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); } - /** - * Checks if text of given EditText is not empty. If it is empty an error is - * set and the EditText gets the focus. - * - * @param context - * @param editText - * @return true if EditText is not empty - */ - private static boolean isEditTextNotEmpty(Context context, EditText editText) { - boolean output = true; - if (editText.getText().toString().length() == 0) { - editText.setError(context.getString(R.string.create_key_empty)); - editText.requestFocus(); - output = false; - } else { - editText.setError(null); - } - - return output; - } - - private static boolean areEditTextsEqual(Context context, EditText editText1, EditText editText2) { - boolean output = true; - if (!editText1.getText().toString().equals(editText2.getText().toString())) { - editText2.setError(context.getString(R.string.create_key_passphrases_not_equal)); - editText2.requestFocus(); - output = false; - } else { - editText2.setError(null); - } - - return output; - } - } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java index 93d445467..21f711eca 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java @@ -33,19 +33,11 @@ import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.EditText; -import android.widget.TextView; +import android.widget.*; import android.widget.TextView.OnEditorActionListener; -import android.widget.Toast; - import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; -import org.sufficientlysecure.keychain.ui.widget.PasswordEditText; -import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView; import org.sufficientlysecure.keychain.util.Log; public class SetPassphraseDialogFragment extends DialogFragment implements OnEditorActionListener { diff --git a/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml b/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml index ed14b81c9..5f323716c 100644 --- a/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml +++ b/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml @@ -29,6 +29,7 @@ android:layout_marginBottom="8dp" android:imeOptions="actionNext" android:hint="@string/label_passphrase" + android:inputType="textPassword" android:ems="10" android:layout_gravity="center_horizontal" /> From 976c40e45f0cf3b3e5884aecfda2ba5ba0dcc549 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Fri, 6 Mar 2015 22:42:37 +0530 Subject: [PATCH 09/25] removed created by comment --- .../keychain/ui/widget/PassphraseEditText.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java index 09aeba5dd..949959120 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java @@ -26,9 +26,6 @@ import android.util.TypedValue; import android.widget.EditText; import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthBarView; -/** - * Created by abraham on 6/3/15. - */ public class PassphraseEditText extends EditText { PasswordStrengthBarView mPasswordStrengthBarView; From f181a1ecbe02c5fd157c8f4718af226ac39a017f Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Sat, 7 Mar 2015 13:07:28 +0530 Subject: [PATCH 10/25] minor code style correction --- .../keychain/ui/CreateKeyInputFragment.java | 1 + .../keychain/ui/dialog/SetPassphraseDialogFragment.java | 8 +++++++- .../keychain/ui/widget/PassphraseEditText.java | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java index b3de6091e..ecc609212 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java @@ -27,6 +27,7 @@ import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.EditText; + import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.widget.EmailEditText; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java index 21f711eca..b34dc2edc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java @@ -33,8 +33,14 @@ import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; -import android.widget.*; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; +import android.widget.Toast; + import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java index 949959120..11d9e8fd0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java @@ -24,6 +24,7 @@ import android.text.TextWatcher; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.EditText; + import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthBarView; public class PassphraseEditText extends EditText { @@ -40,7 +41,7 @@ public class PassphraseEditText extends EditText { barGap = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getContext().getResources().getDisplayMetrics()); - + this.setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight() + (int) barGap + mPasswordBarWidth, getPaddingBottom()); From 820005bc378ba91a9851902b651dfff7836c9bbf Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Sun, 8 Mar 2015 12:57:37 +0530 Subject: [PATCH 11/25] minor xml code style correction --- .../res/layout/create_key_input_fragment.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml index 1131bf4fc..850f22716 100644 --- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml @@ -59,14 +59,14 @@ android:text="@string/label_passphrase" /> + android:id="@+id/create_key_passphrase" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionNext" + android:inputType="textPassword" + android:hint="@string/label_passphrase" + android:ems="10" + android:layout_gravity="center_horizontal" /> Date: Mon, 9 Mar 2015 12:59:35 +0100 Subject: [PATCH 12/25] Removed unused PasswordEditText --- .../keychain/ui/widget/PasswordEditText.java | 101 ------------------ 1 file changed, 101 deletions(-) delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java deleted file mode 100644 index 04c48922b..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2014 Dominik Schürmann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.ui.widget; - -import android.annotation.TargetApi; -import android.content.Context; -import android.os.Build; -import android.text.Editable; -import android.text.InputType; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.widget.EditText; - -import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView; - -/** - * Developer: chipset - * Package : org.sufficientlysecure.keychain.layouts - * Project : open-keychain - * Date : 6/3/15 - */ -public class PasswordEditText extends EditText { - - PasswordEditText passwordEditText; - PasswordStrengthView passwordStrengthView; - - public PasswordEditText(Context context) { - super(context); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - public PasswordEditText(Context context, AttributeSet attrs) { - super(context, attrs); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - - TextWatcher textWatcher = new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable editable) { - String passphrase = editable.toString(); - passwordStrengthView.setPassword(passphrase); - } - }; - -// public PasswordStrengthView getPasswordStrengthView() { -// return passwordStrengthView; -// } - - public void setPasswordStrengthView(PasswordStrengthView mPasswordStrengthView) { - this.passwordStrengthView = mPasswordStrengthView; - } -} From cf2aa349707bd393691ad69db205827a91412410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 13:18:21 +0100 Subject: [PATCH 13/25] Fix padding in create key --- OpenKeychain/src/main/res/layout/create_key_input_fragment.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml index 850f22716..211c04d77 100644 --- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml @@ -62,6 +62,8 @@ android:id="@+id/create_key_passphrase" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" android:imeOptions="actionNext" android:inputType="textPassword" android:hint="@string/label_passphrase" From e2c502a51131927ddc9cd9fba5e56c2642dd377a Mon Sep 17 00:00:00 2001 From: chipset95 Date: Mon, 9 Mar 2015 17:55:46 +0530 Subject: [PATCH 14/25] Improved EmailEditText, Added NameEditText, Removed PasswordEditText #1106 --- .../keychain/ui/widget/EmailEditText.java | 21 ++++ .../keychain/ui/widget/NameEditText.java | 64 +++++++++++ .../keychain/ui/widget/PasswordEditText.java | 101 ------------------ 3 files changed, 85 insertions(+), 101 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java index 697f5a61e..e7ef788d8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java @@ -25,6 +25,7 @@ import android.text.InputType; import android.text.TextWatcher; import android.util.AttributeSet; import android.util.Patterns; +import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; @@ -41,6 +42,8 @@ public class EmailEditText extends AutoCompleteTextView { emailEditText = this; this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); this.addTextChangedListener(textWatcher); + removeFlag(); + makeAdapter(); } public EmailEditText(Context context, AttributeSet attrs) { @@ -48,6 +51,8 @@ public class EmailEditText extends AutoCompleteTextView { emailEditText = this; this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); this.addTextChangedListener(textWatcher); + removeFlag(); + makeAdapter(); } public EmailEditText(Context context, AttributeSet attrs, int defStyleAttr) { @@ -55,6 +60,8 @@ public class EmailEditText extends AutoCompleteTextView { emailEditText = this; this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); this.addTextChangedListener(textWatcher); + removeFlag(); + makeAdapter(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @@ -63,6 +70,8 @@ public class EmailEditText extends AutoCompleteTextView { emailEditText = this; this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); this.addTextChangedListener(textWatcher); + removeFlag(); + makeAdapter(); } TextWatcher textWatcher = new TextWatcher() { @@ -94,4 +103,16 @@ public class EmailEditText extends AutoCompleteTextView { } } }; + + private void makeAdapter() { + this.setThreshold(1); // Start working from first character + this.setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, + ContactHelper.getPossibleUserEmails(getContext()))); + } + + private void removeFlag() { + int inputType = getInputType(); + inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE; + setRawInputType(inputType); + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java new file mode 100644 index 000000000..c7dfa6359 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2014 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui.widget; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.view.inputmethod.EditorInfo; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; + +import org.sufficientlysecure.keychain.util.ContactHelper; + +public class NameEditText extends AutoCompleteTextView { + public NameEditText(Context context) { + super(context); + removeFlag(); + } + + public NameEditText(Context context, AttributeSet attrs) { + super(context, attrs); + removeFlag(); + } + + public NameEditText(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + removeFlag(); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public NameEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + removeFlag(); + } + + private void removeFlag() { + int inputType = getInputType(); + inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE; + setRawInputType(inputType); + } + + private void makeAdapter() { + this.setThreshold(1); // Start working from first character + this.setAdapter(new ArrayAdapter<>( + getContext(), android.R.layout.simple_spinner_dropdown_item, + ContactHelper.getPossibleUserNames(getContext()))); + } +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java deleted file mode 100644 index 04c48922b..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2014 Dominik Schürmann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.ui.widget; - -import android.annotation.TargetApi; -import android.content.Context; -import android.os.Build; -import android.text.Editable; -import android.text.InputType; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.widget.EditText; - -import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView; - -/** - * Developer: chipset - * Package : org.sufficientlysecure.keychain.layouts - * Project : open-keychain - * Date : 6/3/15 - */ -public class PasswordEditText extends EditText { - - PasswordEditText passwordEditText; - PasswordStrengthView passwordStrengthView; - - public PasswordEditText(Context context) { - super(context); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - public PasswordEditText(Context context, AttributeSet attrs) { - super(context, attrs); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - passwordEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - this.addTextChangedListener(textWatcher); - } - - - TextWatcher textWatcher = new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable editable) { - String passphrase = editable.toString(); - passwordStrengthView.setPassword(passphrase); - } - }; - -// public PasswordStrengthView getPasswordStrengthView() { -// return passwordStrengthView; -// } - - public void setPasswordStrengthView(PasswordStrengthView mPasswordStrengthView) { - this.passwordStrengthView = mPasswordStrengthView; - } -} From c50dceab32cd84349cfd414f8b64b8dea5bb209b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 13:27:24 +0100 Subject: [PATCH 15/25] Improve icons --- Graphics/drawables/ic_action_encrypt_copy.svg | 12 ++++----- Graphics/drawables/ic_action_encrypt_save.svg | 20 +++++++-------- .../drawables/ic_action_encrypt_share.svg | 24 +++++++++--------- .../ic_action_encrypt_copy_24dp.png | Bin 869 -> 594 bytes .../ic_action_encrypt_save_24dp.png | Bin 871 -> 638 bytes .../ic_action_encrypt_share_24dp.png | Bin 960 -> 686 bytes .../ic_action_encrypt_copy_24dp.png | Bin 627 -> 464 bytes .../ic_action_encrypt_save_24dp.png | Bin 635 -> 447 bytes .../ic_action_encrypt_share_24dp.png | Bin 674 -> 487 bytes .../ic_action_encrypt_copy_24dp.png | Bin 1071 -> 698 bytes .../ic_action_encrypt_save_24dp.png | Bin 1122 -> 750 bytes .../ic_action_encrypt_share_24dp.png | Bin 1281 -> 887 bytes .../ic_action_encrypt_copy_24dp.png | Bin 1490 -> 944 bytes .../ic_action_encrypt_save_24dp.png | Bin 1567 -> 1105 bytes .../ic_action_encrypt_share_24dp.png | Bin 1880 -> 1334 bytes .../ic_action_encrypt_copy_24dp.png | Bin 1881 -> 1208 bytes .../ic_action_encrypt_save_24dp.png | Bin 2080 -> 1417 bytes .../ic_action_encrypt_share_24dp.png | Bin 2490 -> 1872 bytes OpenKeychain/src/main/res/values/strings.xml | 14 +++++----- 19 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Graphics/drawables/ic_action_encrypt_copy.svg b/Graphics/drawables/ic_action_encrypt_copy.svg index 473178295..229c2524b 100644 --- a/Graphics/drawables/ic_action_encrypt_copy.svg +++ b/Graphics/drawables/ic_action_encrypt_copy.svg @@ -36,24 +36,24 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1364" - inkscape:window-height="747" + inkscape:window-width="2558" + inkscape:window-height="1419" id="namedview6" showgrid="false" inkscape:zoom="9.8333333" - inkscape:cx="12" + inkscape:cx="12.20339" inkscape:cy="12" inkscape:window-x="0" inkscape:window-y="19" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> + style="fill:#000000" /> diff --git a/Graphics/drawables/ic_action_encrypt_save.svg b/Graphics/drawables/ic_action_encrypt_save.svg index 09af0dc88..7bb435a5d 100644 --- a/Graphics/drawables/ic_action_encrypt_save.svg +++ b/Graphics/drawables/ic_action_encrypt_save.svg @@ -36,24 +36,24 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1364" - inkscape:window-height="747" + inkscape:window-width="2558" + inkscape:window-height="1419" id="namedview6" showgrid="false" inkscape:zoom="9.8333333" - inkscape:cx="12" + inkscape:cx="12.20339" inkscape:cy="12" inkscape:window-x="0" inkscape:window-y="19" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> - + d="M 12.355932,11.847458 H 4.7288135 V 8.7966102 H 12.355932 M 10.067797,19.474576 a 2.2881356,2.2881356 0 0 1 -2.288136,-2.288135 2.2881356,2.2881356 0 0 1 2.288136,-2.288136 2.2881356,2.2881356 0 0 1 2.288135,2.288136 2.2881356,2.2881356 0 0 1 -2.288135,2.288135 M 13.881356,7.2711864 H 4.7288135 c -0.8466101,0 -1.5254237,0.6864407 -1.5254237,1.5254238 V 19.474576 A 1.5254237,1.5254237 0 0 0 4.7288135,21 H 15.40678 a 1.5254237,1.5254237 0 0 0 1.525424,-1.525424 V 10.322034 L 13.881356,7.2711864 z" + id="path4-7" /> + diff --git a/Graphics/drawables/ic_action_encrypt_share.svg b/Graphics/drawables/ic_action_encrypt_share.svg index 6509675e6..35d0d3960 100644 --- a/Graphics/drawables/ic_action_encrypt_share.svg +++ b/Graphics/drawables/ic_action_encrypt_share.svg @@ -36,24 +36,24 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1364" - inkscape:window-height="747" + inkscape:window-width="2558" + inkscape:window-height="1419" id="namedview6" showgrid="false" - inkscape:zoom="9.8333333" - inkscape:cx="12" - inkscape:cy="12" + inkscape:zoom="13.906433" + inkscape:cx="16.307191" + inkscape:cy="17.104487" inkscape:window-x="0" inkscape:window-y="19" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> - + d="m 13.957374,17.775285 c -0.544868,0 -1.032382,0.215079 -1.405187,0.552038 L 7.4404597,15.352054 c 0.035847,-0.164895 0.064524,-0.329789 0.064524,-0.501853 0,-0.172063 -0.028677,-0.336958 -0.064524,-0.501852 l 5.0543733,-2.946592 c 0.387142,0.358465 0.896165,0.580715 1.462541,0.580715 a 2.1507969,2.1507969 0 0 0 2.150798,-2.1507972 2.1507969,2.1507969 0 0 0 -2.150798,-2.150797 2.1507969,2.1507969 0 0 0 -2.150796,2.150797 c 0,0.1720642 0.02868,0.3369582 0.06452,0.5018532 l -5.0543685,2.94659 C 6.4295852,12.921653 5.9205632,12.699404 5.3541867,12.699404 a 2.1507969,2.1507969 0 0 0 -2.1507969,2.150797 2.1507969,2.1507969 0 0 0 2.1507969,2.150796 c 0.5663765,0 1.0753985,-0.222248 1.4625419,-0.580715 l 5.1045584,2.975269 c -0.03585,0.150556 -0.05735,0.308281 -0.05735,0.473176 0,1.154261 0.939182,2.086273 2.093442,2.086273 1.154262,0 2.093443,-0.932012 2.093443,-2.086273 a 2.0934423,2.0934423 0 0 0 -2.093443,-2.093442 z" + id="path4-9" /> + diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png index f079dce181473354558f52d05126cc859299816d..25a7ed4453e50e1beef8ef9a13c735ea5cce40e5 100644 GIT binary patch delta 495 zcmV2GRtOZGQpJNkl6o#L7@rw||LIq712&qH_3mdC|piMvw z`3n~7Kadn@QUyd1A=ValcG?C4HiCkr5QKoDMUVs%wFn7sioGF|*>UI2ChHoU7lt!? z_M9`%o}E2=@5nZ{NtJd3q*Vgt=|+Gg^-1cFiESxR09gi3fPWK7Ym$cA1_UesPk^Vv zjsS}dGi`P!L5@IX$dNndH3aB&KJ=@zcMJ1V>dnM?5+R>`P zc%JjVfpyz;aWNfgMrXhPFlKwdNaEdG4;4`fl&2CXPiR>{FMu&1Y6$*o)y*N>$G~wL zSb+cJD{HG_{yN?V`$p1IWZhxlg4)`-m?E|_gTPygt*<`=^UZ9ZGIt$Wk~B>Git(fE ltLUyIuTwrB%25fFr=RK7GZA@6wD3lyJT$2> z&2F-3LW@5v*?sfoy>Bx!Z{HJDWi_c`r2&f7SdT$PWDBs}r+>?os(vVGQPrAWzyZJo z)aSbEb+3U!r$_ zUqI=6fjz(w&>ILS9*?g{r_+~#6F^i%FikUMS=RGVC^R@VHRX7?ZUC;U>b+7%5xD>y zFKjDY_R(lGo_|iK-vH-%LOVIvi{uf zYsYb}78?_Z#JGsu1W?uPNF>r$H=y?R_AroNOP+dFlz)gk$=`=Up{}|Cxvm=nB=`8$ zt6wIQS+uF@X5bdEuUa6#91jc8SPukNNlJ`YcKcQ^U6HL#jFotPA*J#hL@oIgT?6 z+`#+O@qZl{$j!MF$g-?4pl_Kld3_6q!?B5piMb$7#Yx>$BN%{_kPX`G{QUgs>FMd8x#!!KW%U7v zeSGSdL#q0!04A^Tpc9r;#Xus`8;ixvqUKYz#eE4DvL@GcpP8mP)X>o2sOkWJH*PBe z1h88~hUHlVed0abO*ah$gm9J4D2T1le`@{JGT)8wJ%(?Y}X%92*xlXE(8(FK*fv}$>4GEp73}-=H55>dM@S*mzg>D zoclg=-aYT0Co|(Z=|nSd8A>IJZrV&6BjfpG0_z@x}q)yxi}&fO^sL@Tcm56F_F zpBYpAl4`&yFy>k(4X6mc^>r-!aBap7t_(etbnLnKU=9!iKA72Iawb`254hS2Goa@C zP%ZnGCDZ|Osok=#10R9Ezzp!r;qU)y)5fM=18&A*mVX^Fg>CBJz`U8A#q6uVdd{^{ zl^5u%nVrUs7NqG*89;a2oby&*pixQVaigRG;CUH90@fr=M_`75&%m9l07|Q}3h)p2 zaqx?vH}*L?ro8*{j28Bt=Y@R61_X_u&&X`@B|QP2lE2B1ssVg5vqYPbrIv3UW$4^1m^~jZGQsfNkl?r6(<3N>xNK5Rg)-J(x=n4^~uc4{rF)YN72VTAL;F z?IE+cJJ~;(&1lyz3^Q-ud%yWGzxU?%V@wjAB=7$QNUGz2mVdm9LCtJGa0JLT2^*92 z?Y!KqYsk#HfIoqIz*L=(kATDR_1BWVsqsq6^Z=Ft0(Lj>_r?CoalG2!Rt=e1mQ#Ja zX6%JdSr7#4q9{5E3<4W~r@%y4SJ$~>vG{ux>@wgV;34o=ouQTjJF4vGl0HcVb==dyh<|hLy9Cfel@7@F{R5J&#by~8H?zl*HUWEh+o{9Oxv?fdGjVLPOcoB* z+uPfh%jJFr)-cyG!_K(}6@Pz!|EHek-2(c7m%!#Q45#Y=T?a;hmB1BXs1Z=pqR!=V zU&SzZo_Dw!2B1_bO-ec%n;!$ib%u$66Ovv?`VBbK?0=c9x@<5$7pJDC?$!$k!|*on zMEfErEg{SS@Kiuspui7>%N6vzeWa?M#(wqa|rH48x1D`KVARyaCQ<36$y$ znc4RV`-d!HASIBbUCrz)lxoV%Y&4(Gzv=Go9)B;F%X^u>P`+OvV6BbNfZ4>&YiocT2h5dZ)H07*qoM6N<$ Eg2&T=n*aa+ diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png index 1060be81b10569dca88aeccf17186be8b782dbf2..402d792c0ef0fd5a42aea88e9e4104e6774ceda8 100644 GIT binary patch delta 588 zcmV-S0<-ZGQqQNklWkQd(Qcu zci-=MxaSvQjQ%EdEH=Pg{Re8M1px{ntPLS_wbHj%pagOO6MvWpA&i6&dKV1{$FUnj z>9-%J8;*!E)>6=kH#m^9?ZQ{ADH~U3gu2j+v7BuTtFWbXR87%2hH*qZPxWy;%h^s9 zjSY32)FFiLSlOi8EH=a#C-cV6ia|DEZwoMF8*2GHYlUeV#AjJb=9Wu1D~n3r-ZRfn zMKCMyz69n~u7BUXW=#ew09_ zQ-s!41=0-Ye1mY`M1R#Fr9iS%cDe-SNL?VmO3`hQlI;;A*H1CAg2PIYZ>Ifk$!+zQA|1H6cwi}^Zo1vBx?N+cXlf+g*(|J8P@16lQ=woL zFIq$|6ut4H7PU|XOU1t%1qBr^^hSy;dgF~3-iU}=B_fDbQNdENTEQhm2{QpfnwWsC zKl6IAGi7$O$!6l(E#eCwJLjD5oO$M(?>lo=wmFj&^c$dEeSZUzv`JF6y}vI&l3oSA z1AdhBc+1%7&LK&gQkYB&K-KoIaGE0|sRZ29);$lL$Qq?03yzPEm*?i@u1u2Tq96zk zPft%b3czdwUIgmEo4|J9IPj?L-%mN(?rLLWW92XmUkJnSL>Pw7SzM`9?r8T1g532+ z;4Q$w>p(5-Uw;RzX`kCQhek$5MoOj91aQStKDJ+p18xHIQWp;!Z|fHH4E%c zo9l*$ht~q1`7%8{Q1umNgbt+34u#1xb?J6$C-u_8yuQ^R=Xpm$~7+z`4K= zlHRlZQ5?tbcB(8%*V5b$GW`LZXZyEBK($)!k|asK14 z+xD&5cuNi?NwT{~FaXzuVYmn=t<)QUCxJaQH-FAkYR{p|djyl|YGBdsoaWRsohJN$ zV(g~X0R0IZ>orKGqCf|MjZqYh+1?CH^%KazBT*Dh1H^IsmF<1~1Uf!6G}IE2APA23 zn5PiX`q|mpJM$g3ALubpv2U5}m#fw4^^y+Rz8ko)uRy@rz%JXndJU54Kd}$}t7-v~ zv{}&0#U;%bozntj`?cQTurM$%@J7)|EkNm^>RDjPBkKxv#P-g~$;r8*6FdGdlT@nL q>*uV7BnSep24q>Fe(H>?vcCbv0IpRG{$@=80000>+OXYS28BikgYRHE*` z9w4blQbAHt(p>BSU;!8fmVjkR;~z3?e|rIkz)0;q4-~>VU4Nk?=Yd6Nj)ydF`$p0_ zFby0_dIbim7P_=uYM=caoy|yJ&l+z6pM5KhO>A*glff3kYc{yPkn-paNt%0synX3ozNn_`LSa0eewNQGhg1 zv3(I$D5*^KT4aMVupbQkWDZKeifsi}%JyztfR6OP02SbrYTLyRu>ELz%Jx|zfTR>P z2M<72(pH<=Eb#Ohpz*V73Q8GZ6PRdIdj+i8E`J#ir~dvNya7jhp!7<3?@#~$002ov JPDHLkV1hw(pb7v0 delta 528 zcmV+r0`L9M1M>usZh!DeL_t(YiM5r#YZOrs$3OG-4n#31a(KsHI2F>_h~z*KQP2pA zAmneb2w0{QEYwD9?ZiS1!9paJh(U~YDYP(X>Cf9;!6sN};XS?m7^0xrY#x&|X=dNN_b;+6`yPZ`1NH##1OH>7{Z9q0R%>s!+r1B5%(++1>~g2m zd6ZMI16YvsG*I|S(g6UsS?AvSyS?JiBuxW1fZvkl<2XJtNOfo%wy0jOAC97ETGCRQ zrsw`jZZsOtoquynW_A^rD+<`4Ac~@P@AXdJpJmxgU`0|J$bgkn07+v2&bjai0;Is0 zq-9C>iU8J!JU%`id+%qQb5oKgB|R~-@YI|IYQO_vAx+bRz-i!f5H}&|LLVTG<3-?1 zk*?OeGdrFnNfp=`EWMKS6Z(gIVwB3Ia?U47^0i18rS9ZW><=%Z zMnp9tY7w#d?*iDtEcUP;5%WJXQc67su289e@1pu6=MTk?@PCE}+~En&Sj*={eoP}` z0SBmbXw4Tk+Hkd$(t2YtQXr4&2X9M?FJdaUe#9{jF2!pdxoyYKjGc sRou4`X%$b{E)!^S(|%xJezczP4Uo}K=zDwvMDF zn9yX;^KK*_?*aFdu`lU~bMATuWfC-4FYYqgp;Mp;ZOJHrxN>0I*q zJ!8W^0Lta^BEu5{aGv3b+5*ldvCWh)YOw3-eyf+M2x;hVmW#C)# zo@>V}0y7s*G2VmUGw^dcBLOpe4D1#t-j}qVmvrEV6NaIS<9PWv)#Et+-0gO^3kl2v ae*t5b>=Crchh5+R0000-7r@3*vd7Ci1+xBa~%mjdMh_XA@~sXveSIWDb_G} z=XNd-EEQ6ouY7Y6%i46OuznU1{pCH?rWG>i!?M=xoWo}vV;T=?OH@+uhSo!NfNvPf z{7pQpO^_pMViAAwMe7YZ!pnOh$PtYcnqUWwDn-7{Ht{pJ-cKoAwq4{lvv`3mY+(2{ hd}NzCW*z_ZuK=pSAy|1EK|xZGQqENkl5D6BVF2PQPh@h5&A7~{agcKmVRp)>Uz$M^5&<#AYy#%1NCU>1q^3AAyTN@7nLjY)`IRhWc7YQM5A* zLx*Ab0cff4?SJj)UKQ}iwZ~HmWRVWk& zfg?a0@E(|yG$1LE)K;sP7SmP$N#9bwEdb1^f(z<%3LHzQoZe@)T+Cgy)_ z+MrY_jX40Hn^m?wMfoIch`%lzN$TwE%x^R)2m((}PcJvKkklJ3OZ))@ZzN%0VjKzp O0000NlA;+f2CM-} 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 VQ4nCoke&bl002ovPDHLkV1hZlh!+3= delta 1188 zcmV;V1Y7&}27wBYZGQxQNklbN&YgKkUCG>n5=x37 zC5s9(Y?YqED10f<3XLAh2%>~oDtpL6UxFedQu?F5NQ96Q1R*B6Zn>^=XW5DcGuPC; z-yZI)Uhm9~clM6EtN4XsIKSWT{Lc4#&$+*I@3|(4s~OHj6MsmG>jJJc%xs>SJ!xhw zH3K9~${&yhz5{$fzzN{Ns83~FQHX6Y|AVBHHi3-obu`TPSckM^;#Ze*_OJ_9TR76Msd7&vHV z`+VPj&-1)Paes4}*$m({U=5G~b^&XFZeR&82l!Od$*R7M3TSO@&1Eu~t&$$86Lto8 z#q+#PiVR?8w*s?(-2@fpY2Y0o2OI@nlJrenJ`D*d7K^w0zP|^!IcAsbp64x>Br}@| zd<{Gd7*GNRfIERxz*|6Mqqu&^ue@g)7E!)cmEfTYinzp?>Nqvz`Tm- zjPLsk`uqDo0`9ModbXtB$G{zkSw`F2+ourRR3q3`DwWnm$pe(j<%7QOuK-4TQ&Xwb z8sPg;(tocqvniwaE{j+KhK7djBB%}kq*AFD>cyAK<%7V-BW+0wfz3epN}mJ%BB(yU znc1@Vv@ar-0N?lT2{rqVA3xqRYH$UTeh4+^XS3O}Ks)dR@G?*UZXu{Z1z@|G?KZP{ z(OmTqOMscp4KO?Ed?G0{s3MCj+ogOfCn5fvmeduwlN79FG$)6bO7ss z8-SISe+VkrhG?Hr%V?ocm@DZ%Ni)rC1#oZ0)g$S{%aL&$r?s*?M)0nr6OQBbNZL~> zm48mx>tDJ0D?qmmx4_q=3gPXV7t%=;@9?EakgD1<}2WrQ2P|{b~LCK$)yR1#fGGgTrM}Oj{lsb1q5q`1bEA4-QH(l2~18hvpEGCl7z_wDUbU12s9A^{bI15Px^wu)= z_4N%Ayr_%|k_f2veoL`fY$rG(85blGusEO3uMQh>x!iQ$_qQbE)DV)~#F*LUe1AT_ z#LRXAt*KP%S%OovaYG^j0A|(+bT)y@m~ee3o@iW?0*1$Ha5M9h=BN^2X0gxp6A$h< z-HCHV4e4}x3-EW+#4)h7x3_mNX_6`d$BrEIzp%x}S~u;?^B?!D7Z*RbbwAH8 zey>#T`MjU^V&2a+FLwzo)Y`oC9_O0!mVHNl~e~ zQEq``1>c^~tF31mL$_XFeZdsRI7>smA$jKG>%UoyPg!!FnKp5Agjj?3>>z;+%s&LX zfAGe1uU{7HVE;ka&W!&{j+^7*jSc%9@@GEY-8gf{*&AshUrg(UZ)xzJAGH zae1ZSP4+FvuO1JbHBHWXQ~k7kT$&xKmJIh-Z_&2B7Pm1}v`cG6nukr;WmBs!?4eUeXNE@1xQ{M6Ka zg;9WFdoknh9ik;-%h-ajtT=*+v( z@s&FJf^e6A`pl2?*Vwx}I1@ghqeMVsX1z`(gT6~j$BXm{n-6>gD&^VO-1$r5gMq^x z74e?OYY+UqFt<(M%A6JZL#{S56i!!EnzkV3hR5X^JrU0fF%K#(XG)2BUZ^+_(H~N( z;p@zQ_8M&5@AOSs9Znb$3Q`TRP0RzOch3e&Mg%^@^u-3Pdwj zT=mQjpV=OvsdUL>%fsEO5f@bJ1oujq&v$;)#Ui>z@MGpZP$EUP9hh?eGhF(9*<^wX R&k6=0@O1TaS?83{1ON&vc;o;8 delta 1398 zcmV-+1&R8w2ht0WZGQz%NklJ_w4ocq!UG6vcv~Z}q|UL9`%9p-?D_lv?pgP*93R>V*|!(?UU{vO7E7MngcX zCQWBQAF|bDJG+yeTe2{}mkH;b`MxiI&i$NOQB^WpV=Qz4i+`O=pa3#~0>}gkpl6{2 zm@gtS06YuiBba$hRVO;~+YO_bh};c)1uTtdYK^L%>EwlOX=1MsU7S#KOB1`R{`?r& z8o|y?r!RDiKvI9!RCPK{$K4`OOGM;;V0FmXi>g{|SDzy1HEZXH<18WUQAb zfh}87tWC_atb%EpUjhe!JNbX~X=W9$&GWpUZQFh^&VLxBzF!4*9{Juj&0 z9`-ez$Cs@3WR$8p~EJa4^-oboaI zs%2UCM2Ra-LJMSB))T;k&FQMT*LB@Jt!Ac|saC6}MC2i0$|t4+VdILMC^hIQpR}J$ z)7(8@1LbnLA|l&;vR2!+y)Jxc@exX({{H?xV1Khu)@#LLakdj%j^i8wPBf>h>Z4&| zi)0sn;c5tgv?pjK}z-Q(|=MR%d*}Ec7=4DG&9rF(*u)}lYb`ds9h(0 zd(zG$uypzI85T7RZ~ z;&Hf8C>-}ZZw%;9(0?o>RfB#3c4~`-Ua3@anOkHodJ+*xL_VlgDu1^twcSrr)%O$f9Vl9{uH4H*a7V5hVRn+$QG*sWC8_{2^2skPym@g0b~LN&{7}~ zxsYZcol>jSQi-pnK&tv<8UchQt@zs2pd)Dn5R&m~wHo#=Qb)8D$Z?#bz;EF+g6NPL z!!Vv!)mj?P+IG^e>uv$wWbTsDVqnZLjE&`TIkkq(CQtzX0=@o|v1!BK&j0`b07*qoM6N<$ Eg7P$`asU7T diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png index 24e3da7278224be3571bb54d33767706b83f4da0..5620e259521581388ae6563fafddc0cc797e2fd5 100644 GIT binary patch delta 1010 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 D5-d`f delta 1791 zcmV<~;N0S(ykId&W{E(t^lr6n!u zEmWw00=%Hm2OzClh@s>mqzWh$2?SIiN-2?=Ug$-FJbT#~y?@Uc%Qj7llRDE0ob5CP zN}wrF0!@JuXg$*jG!jWmfNOw@fpOq>wjYV@vrtwsNo#jCD>EIg~bdD0hQo$tWe{;7D&>$ zl5Ph!CAf|Pe}5@tn3v1Eq!yqb_$IKlgf7?Ho+@Ohn?RCU!Z5rX_@M0`+o7cY053>- zO42Wn9zFVE9pbJBb^>c=HUACR0epmO{U39!!uVRuEhT)fN?*QHs<2ohj z;mOI#En{P2BQ=QI1Ka{^oYnji@C{(s%r`{RxxjmY7k`06#lAVG$E~G6K@jw$QmG%? zzM_n7$87g!GMS$zIZEmP#%)i|YHI_&0(=>0n{JMPdx4v5|GSJ_=1{Xqx~r?}T1kh> z6bE3bqzAjYx_0;W_P#OSs2pFE^a3yfOi22Tq?M9B3H$^2IA!1sag*gjFwhlrsnfh4sAL9ma) zmFfZDQ|Wa2pZSKqzP`mLPMr8Qu#LHw`76Lh>3?+kX-W40pG`>PGTVDANWUbinuEeH z+(BV+Ztv{ue19Qv00svKPo>l8?NJn62~6af7XiEb`uY|FJtd?Oy9!lH#R9drw=c1M zQvuVyOeV8+U|`^tq%nqvhxY(m3z*)0{P^)r6sd0WSX+Wm#Z)ZNqD6}~0I$z$p2%ji zpMRM>$tICbr|+l0JR|99;C`UsIn6BYlJo~j=a(9@9ICm*KAhhm=@%m-BZtc!NYW1r zG_MbW;4rX-+`N>}^T5gJ_m=?!lJ1uD)^g*=QH?-vFVOZxB?C=PPVOgH+|8yXl}d%S z?*-NYyUEo&kCWRrtOQn(I}wE3XW0xqD}QOLq?&A_su8F=zrpsODj8^OZ0x_lGx_aP zQ&Yk8xCd=-vc1ao2W)@W_9@#(Y;Odvq| z`c7{n60!Xla6Y-qab}!Vz;7izEa~()w4@6peNNIwNu5b!&ztig+gaPYfb)Pmfq$8W z;^V+GlD;SD5nurL5%2);oTM+rjXQ4yn!)xl+c%KgvG18~UJPspHsrat0e4LA=?XIM z1e(G2A=~SLtAV2l?mLSa%9`neAn2JjFSO*_TUuIr!!XRRjY>k&oHcEwoquQh**Q5R?ZuWYTh`v%+Ip+)4ZxerO|XWXlJsO0 zMK@+LnFHl?l(Y@FHNkC#?IUyg#t9UL;X8qSlyqPe+#)Nw)c}OG>fsNn4zdZU0q$PflEqFqJP0G$!4>k zFSAcS@B?03v5x|uh&!||Do_+f?<+HbMzgLQXWJ)j-$<^~zMR}$kI?o*asA>}vG#Hj zI0JN4(#iG&@W)d9=WQKSE1Ci&&=e?vra%ca1xlbPPy&s3{N=dqJ(B(m1mud(cQqhx zO{l9twjT$s&15pCH-Xbne}DAbz6DrP&-k^Vo|o8xAPBCSEe?Qf4-F07Mecz8tfy`Q zMNxE3+|9#uI{j1N_w|ZjE9xcC;o;%oId>@v@MxXl*NnOdWc%->_(^)M9`S2QT?CR; z(kf;9tY6LQb&0L$?(SX_=O8Hse5_9KYeqdM>7T4#z4~><>_HH02Y)W8SNvL0&t-n? z`1tsvot>R4W;aS|4T9iXz|D1xT{G%kNnesmrT!X*;a=crpgRbHODXNasI!7bY&FgS zJ~aLMzoWTXO`s`I0!@JuXbO}-Q=kNz0woY9&}hT5sEmf>7kBG6-o~ERM2%4%N}o(UD4}N_uv=mPqpO@Nhcm_oa1-y%7F2MKv_*pahx% hCD0Tofu=wS{15e8O~#+~P6+@2002ovPDHLkV1nBFaC!g$ diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png index 560648d52d89e73ddd433213289c9be389eea49b..c3078ee92a04d94eca0307de73e96f1f42883a25 100644 GIT binary patch delta 1114 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 b0$ApMqG(yqTmDOF00000NkvXXu0mjf>yErl diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png index f93079dfcb2ea8657d4b7379af2df34db10f3017..925cb2d9ed89210d4338d00980a9ba837e8596fe 100644 GIT binary patch delta 1783 zcmVYp4}f6vu!6y5=J!%|u1ZUR){U_OPd!m6c!o zlA1xE!V05=io!BV$|4GTCq`5R6(tEJSVl;s*+cV@w=&D#Wst8lCCo?O)rWmI`Y9EXH^-93XpUOumn(P z*FoS(;4NSyFna$z|Cd5MgkZ4awM+;oLBaFxtYBgWo%~8;lfg9!5wq+=_nru@d+Ptt?HKHwAJ4Kr&?~*Sstp}0UYU}o>&^<3Xn7oSV#KCe*qX` zW&?o1z{_cUizW2rh=<9Q{0B+UZ8 z0>*^)CoP!@L6Rl|4+F;rcEuZ+5J1vMTn6*F(7r_QSCT??9fBnFmoyh>CA#r9;&MGh z@_$*PQlZCkx)|R%6u2Ijmmf9$vJ2Nw?}6(^&I8(F%G6>zKo`lqvF94Pu{&w}3xH2! zPPh%1*FUI}@@D{d0Q|M zs`g&hp5QlONxgyFfZKuI5vH4gnZS!yFMq!pAJia(9EKYrXsW<=3hrq(?lPYP^bH*z zYZ7ujHTn?XQCvLSTWYwyz*^jmac~Fw7F@PkT#Q`|G>2}ax)uPqocP|#4qz%Upd?7# z&G2hrLg>b+djWvQEBF<63@1_F@5bE^4h!8d-L)m|1xcEO>+1Qya2X9V&FoiCb$@1p zL;^?}1gs}vI$j4>VoAGS4Mx=h zlp5~il*er1wkJ`?x|e?!`z0XLc1GEenog2Z#eX0{qPZMe6>A_swQBED|{mP%S6X?RkIw?I;q{T^U8&?od@S=|oCl_RMMw-mq_T*7QK@P8%lHU1UA z%jNN1Qa|7xU^>wuY!fiU%wA3HWStUpPFT{(xO|^WVoaCg?hmcC_o{mdniphd8_eud z+!A6xM3{~R)=GL>l8+JCx}l!3B6{I+eC_}ak1+imw=Tm|W|k-$t)8eG0op08ZZe1X zSC2N}!qPh(%AW*G08Rr=#eYqQt}Jbf&8*U1TlWyU7ZB0A8iTuu$4zrC#4RD#6Sx=H zA7Q&5I3@JC{pUPGI}js6d$)C4j0k&y?<)|ieO`Kc=yPk|>MjIzMycC68@K^KPu^|7 zI5T_CLtUxJgaGYS(QU1SpMVw%JS$h%>FFJ@f4i-di0-yl!f;$VWPeaHB|tmomXSXh zcsgZO7pC_n9hnpWz+887eadP^N$TmtpQL0~fD&n!ldyHIF9mhZ4JG-!LkuFsCF*DnCEmg!?N!YZ+ zM4k>j3t35&;~O z2;i7R0LLT(I3^LmF^K@EDtblyt464}`8GSqF>_Nv8mJ0v{U1{5r7Q z%>G)po zR`h5W11o_efSEuZcnrAO%>Egwy@?c{tE=na za=CmRa6S<~eUk1il}eXy-n==~FE$n=Ee2Kti$*a&1YB%pFO5=8z(HpA-^guFlmOXm zc7>T;4}Tmyj%wZoe%#sFxpKpX4Lf2A4N0BA4}j(D*`@RWmzmk`;%aZVwi_)#Pft&C zu~@tv_)=VTN_rGHJ(tT3*70ixzKp*ZnghH5JPO=tW+RgJ11`bu>kp_Z{y*Rb;1)A` zH?G+Ch_R6Zba!{R4i69i9yqE2)%SXycT%mfL4VSzz#WV}Z+{l}Iq*&3kWuWv2Cgu( zd|biSqG19^YD%Zme*%^?qyeATnwpvx_4oI`S=IIlzyo8b?-}4CGkZLi=t9u2X=pl~ zUQM`%KP>5aGkeO+UXV0T(qc2~0cO-Gdq}BNS|{m5Gb;f|Y9&M#vWho=Zv%IkSvg|a zaevVe0Wz7)=kaGcLA+&V7tNS4W9_C*oA&5qC8at$JC{hh0|?3}9-mI9SK?0x0Zs-o z5yHI=FOWob7*L24RBU~+mM+Z zS|}9yCH)NedW4XVGqXn`_{U1@xuB7ek$+1Fc=%?vs!%8#ALii$^!D~{$>;NDo7qzh;Q7=C-8ihjP4*c0kEtbumJ$oMT zRK%*Qr=Jr_tODfo`6bj|Xl*yM=%TY44ve#ENJ1pXmurKFbe#2A&h$AIH% z86@2oM+3!T@j?7m>S!F^-QC>^To3#vpqgReeqh(Ga60f^d?A*`5o;J?6F^dm+S9+m zTrL;5F%gzZ3SmPn`}XbIvu0K@vwyRIrNGm`&b-k(z#oCb&Fm!n4fZFis+a?;lk~8p zPs9;(5U~l6PN&mAs)jjmTP`YQR&${BJTJ40-+D7!1RMx_7?^2hC!5*Eiv4NeQ@|I1 zVpUbg0?$fXBWXMd#6V&bpj<9j=g!~5%$|>{ol1Q#1en`K@gFj?zR_l1=6~}m;3L3I z_}$Y^Qoz@MO_DCCe9B`bHUUzpRL$Tdjd|u1wLZ`D#`KWPY^#}F349#*LzVep;8x%{ zNxO}6l8%yesif7C&XaUlly;qONlrG*>^0zXl0F0cgxwEeEdU;pv>t!s=4#-C>MA6y z#!qhy)oU*~6;T5-djMDnTz>{^sWP9AzpqgJ@WJ2Exfr-#Qr+j92oQjo?J%=d_~XMb zfGC;Lqk(VLb4mmVftkHwW?#Xdwnj;HTv6FCu1O+51k7v$@Y4uITJb+UHHn;#&SWwl zm9(_7VX^>du9)^`&tn`r*#g9Q#%Bib!5X$f{Bt<~Wi#98dEOHvBYz|J7K_D~$J?-^ zbAh`e6gkGs9<5nlSOFw?>2&&1;CsM?=1XE?82C=1P`G(KyIztO0%6xRhJRe8dJuoV zzOVvhGMP2_i;^jgq`Pyu-12dhPvIZHY7gQ5Or@u&NvJU(lgTWh{ubkuz|79hWHM)t zqx=Z4B7|!xj9=J6_R3{@b=~ zdx!T2+r5HvxxAoQEbej4Fba}-@DFt@0y=?y;BjDOWkp?=x~Yh*TemLsJa4ah_yC^g z9f^N_f6P?=!cPT|G~LX$MUJDMgQTdhp~cMRn%PnymZOZ59hb*ata6s- zs)2!l?YsQEzw&Q=C2f2w(Qhc3GPo4rmRv4(d5}XspT8%Y&Awq~53+Zq!{5VI7xeP< z>C>+XLet#b9Laww;c6OsMmC!b^&(tHN5=x-y2gg%4u5B<2s67qo6Q~@h|{b-H!Rqnlp= zWcu*m!J6OF(sG!YO@>5a!*MOZu5<(4``UH-`@~<_WF`^7F^K?z>&l2s9geiffx?ip^5!4l6aB%Q#VB-YDGLh`? zJa1|U03hi{jSgfYk+i1jFqkt!36RU>ehD<>3k)2vvAMbVD%U~mB=jt3XlUqMg0F&{ z3jD2HE`PSKudnV+RujcoZc91C%vMxhQg(XnZ(m4;&Fncz>k5U!s)@dyz8+(~JzbL5 z-rhbpl}c5A#nYrgQn|IY_4OBDd~vwGw;Pi06Lw6p5_U`?fMXH?9Fqv(m_z`_Bmy|* Y|1w(}_R_x*E&u=k07*qoM6N<$f~z8he*gdg diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index a53558532..39af9ca28 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -25,7 +25,7 @@ "Share fingerprint with…" "Share key with…" "Share file with…" - "Share message with…" + "Share text with…" "Encrypt To File" "Decrypt To File" "Import Keys" @@ -72,7 +72,7 @@ "Decrypt, verify, and save file" - "Decrypt and verify message" + "Decrypt and verify text" "Encrypt and save file" "Encrypt and share file" "Encrypt and save file" @@ -87,8 +87,8 @@ "No" "Fingerprints match" "Lookup key" - "Encrypt and share message" - "Encrypt and copy message" + "Encrypt and share text" + "Encrypt and copy text" "View certification key" "Create key" "Add file(s)" @@ -120,7 +120,7 @@ "Export Log" - "Message" + "Text" "File" "File(s)" "File:" @@ -145,7 +145,7 @@ "Encrypt with passphrase" "Cache time" "Cache passphrases by subkey" - "Message compression" + "Text compression" "File compression" "Keyservers" "Key ID" @@ -558,7 +558,7 @@ "This key is neither revoked nor expired.\nYou haven’t confirmed it, but you may choose to trust it." "This key has been revoked by its owner. You should not trust it." "This key has expired. You should not trust it." - " It may be OK to use this to decrypt an old message dating from the time when this key was valid." + "It may be OK to use this to decrypt an old message dating from the time when this key was valid." "No proof from the cloud on this key’s trustworthiness." "Start search" "Keybase.io offers “proofs” which assert that the owner of this key: " From c55353e2b80faca6886293f744a48753b6435f71 Mon Sep 17 00:00:00 2001 From: chipset95 Date: Mon, 9 Mar 2015 18:12:44 +0530 Subject: [PATCH 16/25] Implemented NameEditText --- .../keychain/ui/CreateKeyInputFragment.java | 26 ++-------- .../ui/dialog/AddUserIdDialogFragment.java | 25 ++------- .../AutoCorrectAutoCompleteTextView.java | 51 ------------------- .../keychain/ui/widget/NameEditText.java | 4 ++ .../main/res/layout/add_user_id_dialog.xml | 2 +- .../res/layout/create_key_input_fragment.xml | 2 +- 6 files changed, 12 insertions(+), 98 deletions(-) delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java index ecc609212..05408e21e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java @@ -24,22 +24,20 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; -import android.widget.ArrayAdapter; -import android.widget.AutoCompleteTextView; import android.widget.EditText; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.widget.EmailEditText; +import org.sufficientlysecure.keychain.ui.widget.NameEditText; import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; -import org.sufficientlysecure.keychain.util.ContactHelper; public class CreateKeyInputFragment extends Fragment { public static final String ARG_NAME = "name"; public static final String ARG_EMAIL = "email"; CreateKeyActivity mCreateKeyActivity; - AutoCompleteTextView mNameEdit; + NameEditText mNameEdit; EmailEditText mEmailEdit; PassphraseEditText mPassphraseEdit; EditText mPassphraseEditAgain; @@ -98,7 +96,7 @@ public class CreateKeyInputFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.create_key_input_fragment, container, false); - mNameEdit = (AutoCompleteTextView) view.findViewById(R.id.create_key_name); + mNameEdit = (NameEditText) view.findViewById(R.id.create_key_name); mPassphraseEdit = (PassphraseEditText) view.findViewById(R.id.create_key_passphrase); mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email); mPassphraseEditAgain = (EditText) view.findViewById(R.id.create_key_passphrase_again); @@ -116,24 +114,6 @@ public class CreateKeyInputFragment extends Fragment { } else if (name != null) { mEmailEdit.requestFocus(); } - - mEmailEdit.setThreshold(1); // Start working from first character - mEmailEdit.setAdapter( - new ArrayAdapter<> - (getActivity(), android.R.layout.simple_spinner_dropdown_item, - ContactHelper.getPossibleUserEmails(getActivity()) - ) - ); - - - mNameEdit.setThreshold(1); // Start working from first character - mNameEdit.setAdapter( - new ArrayAdapter<> - (getActivity(), android.R.layout.simple_spinner_dropdown_item, - ContactHelper.getPossibleUserNames(getActivity()) - ) - ); - mCreateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java index ee4af8cbe..5dd675fd3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java @@ -33,8 +33,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; -import android.widget.ArrayAdapter; -import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @@ -44,7 +42,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.ui.widget.EmailEditText; -import org.sufficientlysecure.keychain.util.ContactHelper; +import org.sufficientlysecure.keychain.ui.widget.NameEditText; import org.sufficientlysecure.keychain.util.Log; public class AddUserIdDialogFragment extends DialogFragment implements OnEditorActionListener { @@ -57,7 +55,7 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA public static final String MESSAGE_DATA_USER_ID = "user_id"; private Messenger mMessenger; - private AutoCompleteTextView mName; + private NameEditText mName; private EmailEditText mEmail; private EditText mComment; @@ -81,11 +79,6 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA mMessenger = getArguments().getParcelable(ARG_MESSENGER); String predefinedName = getArguments().getString(ARG_NAME); - ArrayAdapter autoCompleteEmailAdapter = new ArrayAdapter<> - (getActivity(), android.R.layout.simple_spinner_dropdown_item, - ContactHelper.getPossibleUserEmails(getActivity()) - ); - CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity); alert.setTitle(R.string.edit_key_action_add_identity); @@ -94,16 +87,12 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA View view = inflater.inflate(R.layout.add_user_id_dialog, null); alert.setView(view); - mName = (AutoCompleteTextView) view.findViewById(R.id.add_user_id_name); + mName = (NameEditText) view.findViewById(R.id.add_user_id_name); mEmail = (EmailEditText) view.findViewById(R.id.add_user_id_address); mComment = (EditText) view.findViewById(R.id.add_user_id_comment); mName.setText(predefinedName); - - mEmail.setThreshold(1); // Start working from first character - mEmail.setAdapter(autoCompleteEmailAdapter); - alert.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { @@ -118,14 +107,6 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA } }); - mName.setThreshold(1); // Start working from first character - mName.setAdapter( - new ArrayAdapter<> - (getActivity(), android.R.layout.simple_spinner_dropdown_item, - ContactHelper.getPossibleUserNames(getActivity()) - ) - ); - alert.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java deleted file mode 100644 index ed373a938..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2014 Dominik Schürmann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.ui.widget; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.inputmethod.EditorInfo; -import android.widget.AutoCompleteTextView; - -/** - * Hack to re-enable keyboard auto correction in AutoCompleteTextView. - * From http://stackoverflow.com/a/22512858 - */ -public class AutoCorrectAutoCompleteTextView extends AutoCompleteTextView { - - public AutoCorrectAutoCompleteTextView(Context context) { - super(context); - removeFlag(); - } - - public AutoCorrectAutoCompleteTextView(Context context, AttributeSet attrs) { - super(context, attrs); - removeFlag(); - } - - public AutoCorrectAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - removeFlag(); - } - - private void removeFlag() { - int inputType = getInputType(); - inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE; - setRawInputType(inputType); - } -} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java index c7dfa6359..895cd45ec 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java @@ -31,22 +31,26 @@ public class NameEditText extends AutoCompleteTextView { public NameEditText(Context context) { super(context); removeFlag(); + makeAdapter(); } public NameEditText(Context context, AttributeSet attrs) { super(context, attrs); removeFlag(); + makeAdapter(); } public NameEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); removeFlag(); + makeAdapter(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public NameEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); removeFlag(); + makeAdapter(); } private void removeFlag() { diff --git a/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml b/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml index c1b97b02c..ffb7493f6 100644 --- a/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml +++ b/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml @@ -16,7 +16,7 @@ android:imeOptions="actionNext" android:textAppearance="?android:attr/textAppearanceMedium" /> - - Date: Mon, 9 Mar 2015 16:03:58 +0100 Subject: [PATCH 17/25] Redesign of encrypt activites finished --- Graphics/get-material-icons.sh | 1 + .../keychain/ui/BaseActivity.java | 12 ++- .../keychain/ui/DecryptFilesActivity.java | 11 +++ .../keychain/ui/DecryptTextActivity.java | 10 +++ .../keychain/ui/EncryptActivity.java | 33 +++++++ .../keychain/ui/EncryptFilesActivity.java | 32 +++---- .../keychain/ui/EncryptFilesFragment.java | 41 +++++---- .../keychain/ui/EncryptTextFragment.java | 41 +++++---- .../res/drawable-hdpi/ic_close_black_24dp.png | Bin 0 -> 301 bytes .../res/drawable-mdpi/ic_close_black_24dp.png | Bin 0 -> 257 bytes .../drawable-xhdpi/ic_close_black_24dp.png | Bin 0 -> 360 bytes .../drawable-xxhdpi/ic_close_black_24dp.png | Bin 0 -> 425 bytes .../drawable-xxxhdpi/ic_close_black_24dp.png | Bin 0 -> 565 bytes .../res/layout/decrypt_files_activity.xml | 2 +- .../main/res/layout/decrypt_text_activity.xml | 2 +- .../res/layout/encrypt_files_fragment.xml | 81 +++--------------- .../main/res/layout/encrypt_text_fragment.xml | 45 ---------- 17 files changed, 140 insertions(+), 171 deletions(-) create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png diff --git a/Graphics/get-material-icons.sh b/Graphics/get-material-icons.sh index d34e572fc..3bfec249f 100755 --- a/Graphics/get-material-icons.sh +++ b/Graphics/get-material-icons.sh @@ -11,6 +11,7 @@ python copy OpenKeychain av white repeat 24 python copy OpenKeychain av grey repeat 24 python copy OpenKeychain editor white mode_edit 24 python copy OpenKeychain content white save 24 +python copy OpenKeychain navigation black close 24 python copy OpenKeychain action grey delete 24 python copy OpenKeychain action grey done 24 diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java index e6c2542a2..41fa50705 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java @@ -88,12 +88,20 @@ public abstract class BaseActivity extends ActionBarActivity { /** * Close button only */ - protected void setFullScreenDialogClose(View.OnClickListener cancelOnClickListener) { - setActionBarIcon(R.drawable.ic_close_white_24dp); + protected void setFullScreenDialogClose(View.OnClickListener cancelOnClickListener, boolean white) { + if (white) { + setActionBarIcon(R.drawable.ic_close_white_24dp); + } else { + setActionBarIcon(R.drawable.ic_close_black_24dp); + } getSupportActionBar().setDisplayShowTitleEnabled(true); mToolbar.setNavigationOnClickListener(cancelOnClickListener); } + protected void setFullScreenDialogClose(View.OnClickListener cancelOnClickListener) { + setFullScreenDialogClose(cancelOnClickListener, true); + } + /** * Inflate custom design with two buttons using drawables. * This does not conform to the Material Design Guidelines, but we deviate here as this is used diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java index 89dd4970b..162b10eca 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java @@ -17,9 +17,12 @@ package org.sufficientlysecure.keychain.ui; +import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.PersistableBundle; +import android.view.View; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; @@ -40,6 +43,14 @@ public class DecryptFilesActivity extends BaseActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setFullScreenDialogClose(new View.OnClickListener() { + @Override + public void onClick(View v) { + setResult(Activity.RESULT_CANCELED); + finish(); + } + }, false); + // Handle intent actions handleActions(savedInstanceState, getIntent()); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java index 81a8a2ac4..1e9e7bcb1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java @@ -18,9 +18,11 @@ package org.sufficientlysecure.keychain.ui; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; +import android.view.View; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; @@ -49,6 +51,14 @@ public class DecryptTextActivity extends BaseActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setFullScreenDialogClose(new View.OnClickListener() { + @Override + public void onClick(View v) { + setResult(Activity.RESULT_CANCELED); + finish(); + } + }, false); + // Handle intent actions handleActions(savedInstanceState, getIntent()); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java index 0d7e6056e..c595cc5b8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java @@ -1,10 +1,30 @@ +/* + * Copyright (C) 2014 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package org.sufficientlysecure.keychain.ui; +import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.os.Message; import android.os.Messenger; +import android.os.PersistableBundle; +import android.view.View; import org.openintents.openpgp.util.OpenPgpApi; import org.sufficientlysecure.keychain.R; @@ -26,6 +46,19 @@ public abstract class EncryptActivity extends BaseActivity { protected Date mNfcTimestamp = null; protected byte[] mNfcHash = null; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setFullScreenDialogClose(new View.OnClickListener() { + @Override + public void onClick(View v) { + setResult(Activity.RESULT_CANCELED); + finish(); + } + }, false); + } + protected void startPassphraseDialog(long subkeyId) { Intent intent = new Intent(this, PassphraseDialogActivity.class); intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, subkeyId); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java index 11b596c24..eba19df6d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java @@ -314,15 +314,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // if called with an intent action, do not init drawer navigation - if (ACTION_ENCRYPT_DATA.equals(getIntent().getAction())) { - // lock drawer -// deactivateDrawerNavigation(); - // TODO: back button to key? - } else { -// activateDrawerNavigation(savedInstanceState); - } - // Handle intent actions handleActions(getIntent()); updateModeFragment(); @@ -339,17 +330,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi return super.onCreateOptionsMenu(menu); } - private void updateModeFragment() { - getSupportFragmentManager().beginTransaction() - .replace(R.id.encrypt_pager_mode, - mCurrentMode == MODE_SYMMETRIC - ? new EncryptSymmetricFragment() - : new EncryptAsymmetricFragment() - ) - .commitAllowingStateLoss(); - getSupportFragmentManager().executePendingTransactions(); - } - @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.isCheckable()) { @@ -384,6 +364,17 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi return true; } + private void updateModeFragment() { + getSupportFragmentManager().beginTransaction() + .replace(R.id.encrypt_pager_mode, + mCurrentMode == MODE_SYMMETRIC + ? new EncryptSymmetricFragment() + : new EncryptAsymmetricFragment() + ) + .commitAllowingStateLoss(); + getSupportFragmentManager().executePendingTransactions(); + } + /** * Handles all actions with this intent * @@ -428,7 +419,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi // Save uris mInputUris = uris; - } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java index 860bd8502..ace58b165 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java @@ -27,6 +27,7 @@ import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; @@ -56,7 +57,6 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt // view private View mAddView; - private View mShareFile; private ListView mSelectedFiles; private SelectedFilesAdapter mAdapter = new SelectedFilesAdapter(); private final Map thumbnailCache = new HashMap<>(); @@ -78,21 +78,6 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.encrypt_files_fragment, container, false); - View vEncryptFile = view.findViewById(R.id.action_encrypt_file); - vEncryptFile.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - encryptClicked(false); - } - }); - mShareFile = view.findViewById(R.id.action_encrypt_share); - mShareFile.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - encryptClicked(true); - } - }); - mAddView = inflater.inflate(R.layout.file_list_entry_add, null); mAddView.setOnClickListener(new View.OnClickListener() { @Override @@ -108,8 +93,10 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt } @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setHasOptionsMenu(true); } private void addInputUri() { @@ -191,6 +178,24 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt return false; } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.encrypt_save: { + encryptClicked(false); + break; + } + case R.id.encrypt_share: { + encryptClicked(true); + break; + } + default: { + return super.onOptionsItemSelected(item); + } + } + return true; + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java index b13cb7837..5d9994c5c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java @@ -23,6 +23,7 @@ import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -33,8 +34,6 @@ public class EncryptTextFragment extends Fragment { public static final String ARG_TEXT = "text"; private TextView mText; - private View mEncryptShare; - private View mEncryptClipboard; private EncryptActivityInterface mEncryptInterface; @@ -72,24 +71,16 @@ public class EncryptTextFragment extends Fragment { mEncryptInterface.setMessage(s.toString()); } }); - mEncryptClipboard = view.findViewById(R.id.action_encrypt_clipboard); - mEncryptShare = view.findViewById(R.id.action_encrypt_share); - mEncryptClipboard.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mEncryptInterface.startEncrypt(false); - } - }); - mEncryptShare.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mEncryptInterface.startEncrypt(true); - } - }); return view; } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setHasOptionsMenu(true); + } @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -100,4 +91,22 @@ public class EncryptTextFragment extends Fragment { mText.setText(text); } } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.encrypt_copy: { + mEncryptInterface.startEncrypt(false); + break; + } + case R.id.encrypt_share: { + mEncryptInterface.startEncrypt(true); + break; + } + default: { + return super.onOptionsItemSelected(item); + } + } + return true; + } } diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a928783d111ba7856dc0eeaa5e77d28db7291a GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?IY?+mx}Y4#QU|%%kldeC8rzA+{x!>Hre;+VF9+~ tuQudP`LH3aN`3CF=e@`GUzNWqzQ})~(!}e&^MMX#@O1TaS?83{1OQYTX>b4l literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebf8a22709a7877b335ebefad80d8fe7cc44da6 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO=~G=WkKR z>FMGaVsZNEY4>uRRU+B`ZgK_?k(2b=PR_2;he^`1kzW=xXm|b;%Q{BN{p-rab1Xxqyu)d{o#9l_w~>gTe~DWM4fmG@UT literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2b2525fd590a5740ff154906bcc65e786a2c31 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq zA9%VrhD02Gd+j9OAq5fE3$q`nTj@0Xi{2XgSfA@)tJ|$h5BGlBb)n$;lX+8&7*$nO z|Ie0A8SCzu1{%CSLf!v7@L%nu%$m!H4-5#SQFk3U)@kFL>f3)Eg1&ul#2F zzmx0Z)i%9;&N=Z{=Au_u*LdVzYlbbb#W?$j&vHjB7kSq+{m|@;ihS$Vw!-UKSN8mxG-=ZPQ`~}|c($xsxa%R%uMD29elF{r5}E)p C8jrsK literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..08f59ea1e336cce5c787a99a6cc59d68b344bced GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g&? zz`&^J>EalYaqsO7OQB{19@Y!@CoX2R)aGRM?sHo%qUUs@SLJl;KgKua$vvu!a{b32 zf2^>PeAdavn%&ACHKk|{XG@=B)dS{3D$ZOoNfVgb9cBcaEPOYqZjQsM$_3YR44D@8 ztNbnIXlY~Dx?t>)?RR{SjLsyk=XRdG!XAf{K0Zt-4E3||oGa|^b!exb*Rh>$UZ*&h z6mEQIaofQ1`HYl9H`Qkre)DLX^Y*df(>W7)EZkL;&&i#fFj-b(v-0UTi_g8emH&5Y zb(*!p8O<4Q8!X!IFYGAx@p!IZRb##2l&9COxc4fGN2kWWTJj?+U~0*F3)?*QNyS$@ z_FRf>ykaDO*7W6B=BbaAZNEL(EF@dibtduko@0j+#b#f9a0ld5xqf$p_;S&xj$*kr Rjld9O@O1TaS?83{1OV}ar~3c^ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d79caffeff55ff848e6958a2d22b73b4aa707d GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g&? zz`(fH)5S5Q;?~<+-hPJ-L|Pv*cPMV@)?9ETwxT;BDy~~IOFV&1p>={q;iKxe(k16M zG(Y*jWL1zbv&`{A7&@BU>Ta_lX6G?J^It#nKl}($xMFeeaYOXkKc@E{J{0A+|5Hv* zzp6zoe%6I2+CtZU{3sRnbh3``{qX0xS`f?ilixqwIL*B3p7c_omi%^ z^sOe+X=06~)5aRfro%g9>Z}x})KAy8?@dsuw>#+b&!%bRpO-DU`TsV?{4;4f`KO}k z<{yiumwyVIe*Q^3r1YtsX$ z)V_C`^xU zQJ6h{uEPBJGe0buAg}i338VI&vQMe^UYBvQ&t06J+w>&+rJ1AVe%}dotM3Vje3ouH zwy@#V^9%89#og6Qjd?@+lBdH0xlrbN{5RI;3M$hLpUvq9#wLTOtDnm{r-UW|n@ago literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml index 3cf4a9e7b..3d214dbf6 100644 --- a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml +++ b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml @@ -5,7 +5,7 @@ + layout="@layout/toolbar_standalone_white" /> - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml b/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml index 6f7b636e1..3c21291cd 100644 --- a/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml +++ b/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml @@ -21,50 +21,5 @@ android:hint="@string/encrypt_content_edit_text_hint" android:layout_weight="1" /> - - - - - - - - - - - - From bd1705410ada57f882bea051c1ec397d14908ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 16:17:12 +0100 Subject: [PATCH 18/25] Cleanup new widgets --- .../keychain/ui/widget/EmailEditText.java | 42 ++++++++----------- .../keychain/ui/widget/NameEditText.java | 35 +++++++++------- .../ui/widget/PassphraseEditText.java | 4 ++ 3 files changed, 42 insertions(+), 39 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java index e7ef788d8..1bdec7b84 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java @@ -35,43 +35,33 @@ import org.sufficientlysecure.keychain.util.ContactHelper; import java.util.regex.Matcher; public class EmailEditText extends AutoCompleteTextView { - EmailEditText emailEditText; public EmailEditText(Context context) { super(context); - emailEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); - this.addTextChangedListener(textWatcher); - removeFlag(); - makeAdapter(); + init(); } public EmailEditText(Context context, AttributeSet attrs) { super(context, attrs); - emailEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); - this.addTextChangedListener(textWatcher); - removeFlag(); - makeAdapter(); + init(); } public EmailEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - emailEditText = this; - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); - this.addTextChangedListener(textWatcher); - removeFlag(); - makeAdapter(); + init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public EmailEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - emailEditText = this; + init(); + } + + private void init() { this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); this.addTextChangedListener(textWatcher); removeFlag(); - makeAdapter(); + initAdapter(); } TextWatcher textWatcher = new TextWatcher() { @@ -91,25 +81,29 @@ public class EmailEditText extends AutoCompleteTextView { if (email.length() > 0) { Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email); if (emailMatcher.matches()) { - emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, + EmailEditText.this.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.uid_mail_ok, 0); } else { - emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, + EmailEditText.this.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.uid_mail_bad, 0); } } else { // remove drawable if email is empty - emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); + EmailEditText.this.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); } } }; - private void makeAdapter() { - this.setThreshold(1); // Start working from first character - this.setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, + private void initAdapter() { + setThreshold(1); // Start working from first character + setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, ContactHelper.getPossibleUserEmails(getContext()))); } + /** + * Hack to re-enable keyboard auto correction in AutoCompleteTextView. + * From http://stackoverflow.com/a/22512858 + */ private void removeFlag() { int inputType = getInputType(); inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java index 895cd45ec..f086c5696 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java @@ -30,39 +30,44 @@ import org.sufficientlysecure.keychain.util.ContactHelper; public class NameEditText extends AutoCompleteTextView { public NameEditText(Context context) { super(context); - removeFlag(); - makeAdapter(); + init(); } public NameEditText(Context context, AttributeSet attrs) { super(context, attrs); - removeFlag(); - makeAdapter(); + init(); } public NameEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - removeFlag(); - makeAdapter(); + init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public NameEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - removeFlag(); - makeAdapter(); + init(); } + private void init() { + removeFlag(); + initAdapter(); + } + + private void initAdapter() { + setThreshold(1); // Start working from first character + setAdapter(new ArrayAdapter<>( + getContext(), android.R.layout.simple_spinner_dropdown_item, + ContactHelper.getPossibleUserNames(getContext()))); + } + + /** + * Hack to re-enable keyboard auto correction in AutoCompleteTextView. + * From http://stackoverflow.com/a/22512858 + */ private void removeFlag() { int inputType = getInputType(); inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE; setRawInputType(inputType); } - - private void makeAdapter() { - this.setThreshold(1); // Start working from first character - this.setAdapter(new ArrayAdapter<>( - getContext(), android.R.layout.simple_spinner_dropdown_item, - ContactHelper.getPossibleUserNames(getContext()))); - } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java index 11d9e8fd0..377f701d1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java @@ -36,6 +36,10 @@ public class PassphraseEditText extends EditText { public PassphraseEditText(Context context, AttributeSet attrs) { super(context, attrs); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { mPasswordBarHeight = (int) (8 * getResources().getDisplayMetrics().density); mPasswordBarWidth = (int) (50 * getResources().getDisplayMetrics().density); From b2e5ac282089cc13a1b819264f18b0467f3a41ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 16:55:23 +0100 Subject: [PATCH 19/25] Fix colors for remote activity --- .../keychain/remote/OpenPgpService.java | 2 +- .../res/layout/api_app_settings_activity.xml | 24 +++++++++---------- .../res/layout/api_app_settings_fragment.xml | 7 ------ 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index 03fa41984..1da88018a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -288,7 +288,7 @@ public class OpenPgpService extends RemoteService { } } else if (pgpResult.success()) { Intent result = new Intent(); - if (!cleartextSign) { + if (pgpResult.getDetachedSignature() != null && !cleartextSign) { result.putExtra(OpenPgpApi.RESULT_DETACHED_SIGNATURE, pgpResult.getDetachedSignature()); } result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); diff --git a/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml b/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml index 6df5c84f5..c3f6e33cb 100644 --- a/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml +++ b/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml @@ -77,18 +77,6 @@ android:padding="16dp" android:orientation="vertical"> - - - - + + + + diff --git a/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml b/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml index ed3e33aab..1ea0a520d 100644 --- a/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml +++ b/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml @@ -1,7 +1,6 @@ @@ -29,14 +28,12 @@ android:gravity="center_vertical" android:orientation="vertical" android:text="Name (set in-code)" - android:textColor="@color/icons" android:textAppearance="?android:attr/textAppearanceMedium" /> @@ -44,7 +41,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/api_settings_package_name" - android:textColor="@color/icons" android:textAppearance="?android:attr/textAppearanceMedium" /> From 3fe7fa202c790bb66d0f1b7e1396f3b9c62c90e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 17:12:46 +0100 Subject: [PATCH 20/25] API: If signature key is known return pi to show key --- .../keychain/remote/OpenPgpService.java | 177 +++++++++--------- 1 file changed, 88 insertions(+), 89 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index 1da88018a..390e85ef8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -38,8 +38,6 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult.LogEnt import org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult; import org.sufficientlysecure.keychain.pgp.PgpConstants; import org.sufficientlysecure.keychain.pgp.PgpDecryptVerify; -import org.sufficientlysecure.keychain.pgp.PgpHelper; -import org.sufficientlysecure.keychain.pgp.PgpKeyOperation; import org.sufficientlysecure.keychain.pgp.PgpSignEncryptInput; import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; @@ -55,7 +53,6 @@ import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity; import org.sufficientlysecure.keychain.ui.ViewKeyActivity; import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.util.Preferences; import java.io.IOException; import java.io.InputStream; @@ -83,7 +80,7 @@ public class OpenPgpService extends RemoteService { * @param encryptionUserIds * @return */ - private Intent getKeyIdsFromEmails(Intent data, String[] encryptionUserIds) { + private Intent returnKeyIdsFromEmails(Intent data, String[] encryptionUserIds) { boolean noUserIdsCheck = (encryptionUserIds == null || encryptionUserIds.length == 0); boolean missingUserIdsCheck = false; boolean duplicateUserIdsCheck = false; @@ -164,50 +161,7 @@ public class OpenPgpService extends RemoteService { } } - private Intent getNfcSignIntent(Intent data, long keyId, String pin, byte[] hashToSign, int hashAlgo) { - // build PendingIntent for Yubikey NFC operations - Intent intent = new Intent(getBaseContext(), NfcActivity.class); - intent.setAction(NfcActivity.ACTION_SIGN_HASH); - // pass params through to activity that it can be returned again later to repeat pgp operation - intent.putExtra(NfcActivity.EXTRA_DATA, data); - intent.putExtra(NfcActivity.EXTRA_PIN, pin); - intent.putExtra(NfcActivity.EXTRA_KEY_ID, keyId); - - intent.putExtra(NfcActivity.EXTRA_NFC_HASH_TO_SIGN, hashToSign); - intent.putExtra(NfcActivity.EXTRA_NFC_HASH_ALGO, hashAlgo); - PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, - intent, - PendingIntent.FLAG_CANCEL_CURRENT); - - // return PendingIntent to be executed by client - Intent result = new Intent(); - result.putExtra(OpenPgpApi.RESULT_INTENT, pi); - result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); - return result; - } - - private Intent getNfcDecryptIntent(Intent data, long subKeyId, String pin, byte[] encryptedSessionKey) { - // build PendingIntent for Yubikey NFC operations - Intent intent = new Intent(getBaseContext(), NfcActivity.class); - intent.setAction(NfcActivity.ACTION_DECRYPT_SESSION_KEY); - // pass params through to activity that it can be returned again later to repeat pgp operation - intent.putExtra(NfcActivity.EXTRA_DATA, data); - intent.putExtra(NfcActivity.EXTRA_PIN, pin); - intent.putExtra(NfcActivity.EXTRA_KEY_ID, subKeyId); - - intent.putExtra(NfcActivity.EXTRA_NFC_ENC_SESSION_KEY, encryptedSessionKey); - PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, - intent, - PendingIntent.FLAG_CANCEL_CURRENT); - - // return PendingIntent to be executed by client - Intent result = new Intent(); - result.putExtra(OpenPgpApi.RESULT_INTENT, pi); - result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); - return result; - } - - private Intent getPassphraseIntent(Intent data, long keyId) { + private Intent returnPassphraseIntent(Intent data, long keyId) { // build PendingIntent for passphrase input Intent intent = new Intent(getBaseContext(), PassphraseDialogActivity.class); intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, keyId); @@ -224,6 +178,59 @@ public class OpenPgpService extends RemoteService { return result; } + private PendingIntent getNfcSignPendingIntent(Intent data, long keyId, String pin, byte[] hashToSign, int hashAlgo) { + // build PendingIntent for Yubikey NFC operations + Intent intent = new Intent(getBaseContext(), NfcActivity.class); + intent.setAction(NfcActivity.ACTION_SIGN_HASH); + // pass params through to activity that it can be returned again later to repeat pgp operation + intent.putExtra(NfcActivity.EXTRA_DATA, data); + intent.putExtra(NfcActivity.EXTRA_PIN, pin); + intent.putExtra(NfcActivity.EXTRA_KEY_ID, keyId); + + intent.putExtra(NfcActivity.EXTRA_NFC_HASH_TO_SIGN, hashToSign); + intent.putExtra(NfcActivity.EXTRA_NFC_HASH_ALGO, hashAlgo); + return PendingIntent.getActivity(getBaseContext(), 0, + intent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + private PendingIntent getNfcDecryptPendingIntent(Intent data, long subKeyId, String pin, byte[] encryptedSessionKey) { + // build PendingIntent for Yubikey NFC operations + Intent intent = new Intent(getBaseContext(), NfcActivity.class); + intent.setAction(NfcActivity.ACTION_DECRYPT_SESSION_KEY); + // pass params through to activity that it can be returned again later to repeat pgp operation + intent.putExtra(NfcActivity.EXTRA_DATA, data); + intent.putExtra(NfcActivity.EXTRA_PIN, pin); + intent.putExtra(NfcActivity.EXTRA_KEY_ID, subKeyId); + + intent.putExtra(NfcActivity.EXTRA_NFC_ENC_SESSION_KEY, encryptedSessionKey); + return PendingIntent.getActivity(getBaseContext(), 0, + intent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + private PendingIntent getKeyserverPendingIntent(Intent data, long masterKeyId) { + // If signature is unknown we return an _additional_ PendingIntent + // to retrieve the missing key + Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class); + intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE); + intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, masterKeyId); + intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data); + + return PendingIntent.getActivity(getBaseContext(), 0, + intent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + private PendingIntent getShowKeyPendingIntent(long masterKeyId) { + Intent intent = new Intent(getBaseContext(), ViewKeyActivity.class); + intent.setData(KeyRings.buildGenericKeyRingUri(masterKeyId)); + + return PendingIntent.getActivity(getBaseContext(), 0, + intent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + private Intent signImpl(Intent data, ParcelFileDescriptor input, ParcelFileDescriptor output, AccountSettings accSettings, boolean cleartextSign) { @@ -274,14 +281,20 @@ public class OpenPgpService extends RemoteService { if (pgpResult.isPending()) { if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) == PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) { - return getPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded()); + return returnPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded()); } else if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_NFC) == PgpSignEncryptResult.RESULT_PENDING_NFC) { // return PendingIntent to execute NFC activity // pass through the signature creation timestamp to be used again on second execution // of PgpSignEncrypt when we have the signed hash! data.putExtra(OpenPgpApi.EXTRA_NFC_SIG_CREATION_TIMESTAMP, pgpResult.getNfcTimestamp().getTime()); - return getNfcSignIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo()); + + // return PendingIntent to be executed by client + Intent result = new Intent(); + result.putExtra(OpenPgpApi.RESULT_INTENT, + getNfcSignPendingIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo())); + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); + return result; } else { throw new PgpGeneralException( "Encountered unhandled type of pending action not supported by API!"); @@ -340,7 +353,7 @@ public class OpenPgpService extends RemoteService { // get key ids based on given user ids String[] userIds = data.getStringArrayExtra(OpenPgpApi.EXTRA_USER_IDS); // give params through to activity... - Intent result = getKeyIdsFromEmails(data, userIds); + Intent result = returnKeyIdsFromEmails(data, userIds); if (result.getIntExtra(OpenPgpApi.RESULT_CODE, 0) == OpenPgpApi.RESULT_CODE_SUCCESS) { keyIds = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS); @@ -391,14 +404,19 @@ public class OpenPgpService extends RemoteService { if (pgpResult.isPending()) { if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) == PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) { - return getPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded()); + return returnPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded()); } else if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_NFC) == PgpSignEncryptResult.RESULT_PENDING_NFC) { // return PendingIntent to execute NFC activity // pass through the signature creation timestamp to be used again on second execution // of PgpSignEncrypt when we have the signed hash! data.putExtra(OpenPgpApi.EXTRA_NFC_SIG_CREATION_TIMESTAMP, pgpResult.getNfcTimestamp().getTime()); - return getNfcSignIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo()); + // return PendingIntent to be executed by client + Intent result = new Intent(); + result.putExtra(OpenPgpApi.RESULT_INTENT, + getNfcSignPendingIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo())); + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); + return result; } else { throw new PgpGeneralException( "Encountered unhandled type of pending action not supported by API!"); @@ -478,15 +496,20 @@ public class OpenPgpService extends RemoteService { if (pgpResult.isPending()) { if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_ASYM_PASSPHRASE) == DecryptVerifyResult.RESULT_PENDING_ASYM_PASSPHRASE) { - return getPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded()); + return returnPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded()); } else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_SYM_PASSPHRASE) == DecryptVerifyResult.RESULT_PENDING_SYM_PASSPHRASE) { throw new PgpGeneralException( "Decryption of symmetric content not supported by API!"); } else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_NFC) == DecryptVerifyResult.RESULT_PENDING_NFC) { - return getNfcDecryptIntent( - data, pgpResult.getNfcSubKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcEncryptedSessionKey()); + + // return PendingIntent to be executed by client + Intent result = new Intent(); + result.putExtra(OpenPgpApi.RESULT_INTENT, + getNfcDecryptPendingIntent(data, pgpResult.getNfcSubKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcEncryptedSessionKey())); + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); + return result; } else { throw new PgpGeneralException( "Encountered unhandled type of pending action not supported by API!"); @@ -509,16 +532,10 @@ public class OpenPgpService extends RemoteService { if (signatureResult.getStatus() == OpenPgpSignatureResult.SIGNATURE_KEY_MISSING) { // If signature is unknown we return an _additional_ PendingIntent // to retrieve the missing key - Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class); - intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE); - intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, signatureResult.getKeyId()); - intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data); - - PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, - intent, - PendingIntent.FLAG_CANCEL_CURRENT); - - result.putExtra(OpenPgpApi.RESULT_INTENT, pi); + result.putExtra(OpenPgpApi.RESULT_INTENT, getKeyserverPendingIntent(data, signatureResult.getKeyId())); + } else { + // If signature key is known, return PendingIntent to show key + result.putExtra(OpenPgpApi.RESULT_INTENT, getShowKeyPendingIntent(signatureResult.getKeyId())); } } @@ -576,33 +593,15 @@ public class OpenPgpService extends RemoteService { Intent result = new Intent(); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); - // also return PendingIntent that opens the key view activity - Intent intent = new Intent(getBaseContext(), ViewKeyActivity.class); - intent.setData(KeyRings.buildGenericKeyRingUri(masterKeyId)); - - PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, - intent, - PendingIntent.FLAG_CANCEL_CURRENT); - - result.putExtra(OpenPgpApi.RESULT_INTENT, pi); + result.putExtra(OpenPgpApi.RESULT_INTENT, getShowKeyPendingIntent(masterKeyId)); return result; } catch (ProviderHelper.NotFoundException e) { - Intent result = new Intent(); - // If keys are not in db we return an additional PendingIntent // to retrieve the missing key - Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class); - intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE); - intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, masterKeyId); - intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data); - - PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, - intent, - PendingIntent.FLAG_CANCEL_CURRENT); - - result.putExtra(OpenPgpApi.RESULT_INTENT, pi); + Intent result = new Intent(); + result.putExtra(OpenPgpApi.RESULT_INTENT, getKeyserverPendingIntent(data, masterKeyId)); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED); return result; } @@ -629,7 +628,7 @@ public class OpenPgpService extends RemoteService { } else { // get key ids based on given user ids String[] userIds = data.getStringArrayExtra(OpenPgpApi.EXTRA_USER_IDS); - return getKeyIdsFromEmails(data, userIds); + return returnKeyIdsFromEmails(data, userIds); } } @@ -669,7 +668,7 @@ public class OpenPgpService extends RemoteService { return result; } - // check if caller is allowed to access openpgp keychain + // check if caller is allowed to access OpenKeychain Intent result = isAllowed(data); if (result != null) { return result; From 009e8e9e393ff2a1a435c44509538e2b75f45380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 18:21:54 +0100 Subject: [PATCH 21/25] Fix compression check in activities --- .../org/sufficientlysecure/keychain/ui/EncryptActivity.java | 1 - .../sufficientlysecure/keychain/ui/EncryptFilesActivity.java | 4 ++-- .../sufficientlysecure/keychain/ui/EncryptTextActivity.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java index c595cc5b8..ed5920cde 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java @@ -23,7 +23,6 @@ import android.content.Intent; import android.os.Bundle; import android.os.Message; import android.os.Messenger; -import android.os.PersistableBundle; import android.view.View; import org.openintents.openpgp.util.OpenPgpApi; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java index eba19df6d..8ab5680d0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java @@ -67,8 +67,8 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi private String mEncryptionUserIds[] = null; private long mSigningKeyId = Constants.key.none; private String mPassphrase = ""; - private boolean mUseArmor; - private boolean mUseCompression; + private boolean mUseArmor = false; + private boolean mUseCompression = true; private boolean mDeleteAfterEncrypt = false; private boolean mShareAfterEncrypt = false; private ArrayList mInputUris; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java index 08ff5b962..ee15cf7b5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java @@ -72,7 +72,7 @@ public class EncryptTextActivity extends EncryptActivity implements EncryptActiv private ArrayList mInputUris; private ArrayList mOutputUris; private String mMessage = ""; - private boolean mUseCompression; + private boolean mUseCompression = true; public boolean isModeSymmetric() { return MODE_SYMMETRIC == mCurrentMode; From 7c22fc843b7f00f63c0f85cbd3565700b5e73698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 18:33:20 +0100 Subject: [PATCH 22/25] Fix ascii armor in encrypt activity --- .../sufficientlysecure/keychain/ui/EncryptFilesActivity.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java index 8ab5680d0..d95b5cda3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java @@ -209,6 +209,7 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi } else { data.setCompressionId(CompressionAlgorithmTags.UNCOMPRESSED); } + data.setEnableAsciiArmorOutput(mUseArmor); data.setSymmetricEncryptionAlgorithm(PgpConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_PREFERRED); data.setSignatureHashAlgorithm(PgpConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_PREFERRED); @@ -409,9 +410,7 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); } - if (extras.containsKey(EXTRA_ASCII_ARMOR)) { - mUseArmor = extras.getBoolean(EXTRA_ASCII_ARMOR, true); - } + mUseArmor = extras.getBoolean(EXTRA_ASCII_ARMOR, false); // preselect keys given by intent mSigningKeyId = extras.getLong(EXTRA_SIGNATURE_KEY_ID); From cc66435e38248880fee3af795619b5794b65d222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 18:59:15 +0100 Subject: [PATCH 23/25] Some fixes for delete after encryption --- .../ui/dialog/DeleteFileDialogFragment.java | 57 ++++++++++--------- .../main/res/layout/file_list_entry_add.xml | 34 +++++------ OpenKeychain/src/main/res/values/strings.xml | 4 +- 3 files changed, 50 insertions(+), 45 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java index 07462b4ff..c4b437593 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java @@ -28,8 +28,10 @@ import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.widget.Toast; +import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.util.FileHelper; +import org.sufficientlysecure.keychain.util.Log; import java.io.File; @@ -69,41 +71,44 @@ public class DeleteFileDialogFragment extends DialogFragment { @Override public void onClick(DialogInterface dialog, int id) { dismiss(); - String scheme = deleteUri.getScheme(); - if(scheme.equals(ContentResolver.SCHEME_FILE)) { - if(new File(deleteUri.getPath()).delete()) { - Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); - return; - } - } - else if(scheme.equals(ContentResolver.SCHEME_CONTENT)) { - // We can not securely delete Uris, so just use usual delete on them - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars + // would not show up! + + // Use DocumentsContract on Android >= 4.4 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) { - Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, + deleteFilename), Toast.LENGTH_LONG).show(); return; } - } - - if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) { - Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); - return; - } - - // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete - // via the path of the Uri - if(new File(deleteUri.getPath()).delete()) { - Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); - return; + } catch (UnsupportedOperationException e) { + Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); } } - Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed, - deleteFilename), Toast.LENGTH_SHORT).show(); + try { + if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) { + Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, + deleteFilename), Toast.LENGTH_LONG).show(); + return; + } + } catch (UnsupportedOperationException e) { + Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e); + } + + // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete + // via the path of the Uri + if (new File(deleteUri.getPath()).delete()) { + Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful, + deleteFilename), Toast.LENGTH_LONG).show(); + return; + } // Note: We can't delete every file... - // If possible we should find out if deletion is possible before even showing the option to do so. + Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed, + deleteFilename), Toast.LENGTH_LONG).show(); } }); alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { diff --git a/OpenKeychain/src/main/res/layout/file_list_entry_add.xml b/OpenKeychain/src/main/res/layout/file_list_entry_add.xml index f2ee4079e..d7f4513d9 100644 --- a/OpenKeychain/src/main/res/layout/file_list_entry_add.xml +++ b/OpenKeychain/src/main/res/layout/file_list_entry_add.xml @@ -1,21 +1,21 @@ + - + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_gravity="center" + android:text="@string/btn_add_files" + android:drawableLeft="@drawable/ic_folder_grey_24dp" + android:drawablePadding="8dp" + android:gravity="center" /> \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 39af9ca28..2c83ac070 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -220,7 +220,7 @@ "Enter PIN to access YubiKey for '%s'" "Hold YubiKey against the back of your device." "Are you sure you want to delete\n%s?" - "Successfully deleted." + "'%s' has been deleted." "Select a file first." "Successfully signed and/or encrypted." "Successfully signed and/or encrypted to clipboard." @@ -261,7 +261,7 @@ no punctuation, all lowercase, they will be put after "error_message", e.g. "Error: file not found" --> - "deleting '%s' failed" + "Deleting '%s' failed. Please do this manually!" "file not found" "no suitable secret key found" "external storage not ready" From 67076b20196cd522f519e6ea156ddc34e20977d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 22:00:44 +0100 Subject: [PATCH 24/25] Make create key wizard step-by-step --- Graphics/get-material-icons.sh | 3 + OpenKeychain/src/main/AndroidManifest.xml | 2 +- .../keychain/ui/CreateKeyActivity.java | 4 +- .../keychain/ui/CreateKeyEmailFragment.java | 134 +++++++++++++++++ .../keychain/ui/CreateKeyFinalFragment.java | 2 +- .../keychain/ui/CreateKeyNameFragment.java | 140 ++++++++++++++++++ ....java => CreateKeyPassphraseFragment.java} | 67 +++++---- .../ic_chevron_left_grey_24dp.png | Bin 0 -> 276 bytes .../ic_chevron_right_grey_24dp.png | Bin 0 -> 271 bytes .../res/drawable-hdpi/ic_person_grey_48dp.png | Bin 0 -> 576 bytes .../ic_chevron_left_grey_24dp.png | Bin 0 -> 240 bytes .../ic_chevron_right_grey_24dp.png | Bin 0 -> 225 bytes .../res/drawable-mdpi/ic_person_grey_48dp.png | Bin 0 -> 431 bytes .../ic_chevron_left_grey_24dp.png | Bin 0 -> 314 bytes .../ic_chevron_right_grey_24dp.png | Bin 0 -> 305 bytes .../drawable-xhdpi/ic_person_grey_48dp.png | Bin 0 -> 751 bytes .../ic_chevron_left_grey_24dp.png | Bin 0 -> 382 bytes .../ic_chevron_right_grey_24dp.png | Bin 0 -> 388 bytes .../drawable-xxhdpi/ic_person_grey_48dp.png | Bin 0 -> 1121 bytes .../ic_chevron_left_grey_24dp.png | Bin 0 -> 481 bytes .../ic_chevron_right_grey_24dp.png | Bin 0 -> 472 bytes .../drawable-xxxhdpi/ic_person_grey_48dp.png | Bin 0 -> 1488 bytes .../res/layout/create_key_email_fragment.xml | 84 +++++++++++ .../res/layout/create_key_final_fragment.xml | 46 ++---- .../res/layout/create_key_name_fragment.xml | 83 +++++++++++ ...xml => create_key_passphrase_fragment.xml} | 87 +++-------- .../src/main/res/values-cs/strings.xml | 2 +- .../src/main/res/values-de/strings.xml | 2 +- .../src/main/res/values-es/strings.xml | 2 +- .../src/main/res/values-fr/strings.xml | 2 +- .../src/main/res/values-it/strings.xml | 2 +- .../src/main/res/values-ja/strings.xml | 2 +- .../src/main/res/values-nl/strings.xml | 2 +- .../src/main/res/values-pl/strings.xml | 2 +- .../src/main/res/values-ru/strings.xml | 2 +- .../src/main/res/values-sr/strings.xml | 2 +- .../src/main/res/values-sv/strings.xml | 2 +- .../src/main/res/values-tr/strings.xml | 2 +- .../src/main/res/values-uk/strings.xml | 2 +- .../src/main/res/values-zh-rTW/strings.xml | 2 +- OpenKeychain/src/main/res/values/strings.xml | 6 +- 41 files changed, 535 insertions(+), 151 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java rename OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/{CreateKeyInputFragment.java => CreateKeyPassphraseFragment.java} (72%) create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png create mode 100644 OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png create mode 100644 OpenKeychain/src/main/res/layout/create_key_email_fragment.xml create mode 100644 OpenKeychain/src/main/res/layout/create_key_name_fragment.xml rename OpenKeychain/src/main/res/layout/{create_key_input_fragment.xml => create_key_passphrase_fragment.xml} (50%) diff --git a/Graphics/get-material-icons.sh b/Graphics/get-material-icons.sh index 3bfec249f..248dcd532 100755 --- a/Graphics/get-material-icons.sh +++ b/Graphics/get-material-icons.sh @@ -37,6 +37,9 @@ python copy OpenKeychain social grey person 24 python copy OpenKeychain social grey person_add 24 python copy OpenKeychain social grey share 24 python copy OpenKeychain communication grey vpn_key 24 +python copy OpenKeychain navigation grey chevron_left 24 +python copy OpenKeychain navigation grey chevron_right 24 +python copy OpenKeychain social grey person 48 # navigation drawer sections python copy OpenKeychain communication black vpn_key 24 diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index a1a6ed02e..fbe89bc28 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -93,7 +93,7 @@ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; +import org.sufficientlysecure.keychain.ui.widget.EmailEditText; + +public class CreateKeyEmailFragment extends Fragment { + + public static final String ARG_NAME = "name"; + public static final String ARG_EMAIL = "email"; + + CreateKeyActivity mCreateKeyActivity; + EmailEditText mEmailEdit; + View mBackButton; + View mNextButton; + + String mName; + + /** + * Creates new instance of this fragment + */ + public static CreateKeyEmailFragment newInstance(String name, String email) { + CreateKeyEmailFragment frag = new CreateKeyEmailFragment(); + + Bundle args = new Bundle(); + args.putString(ARG_NAME, name); + args.putString(ARG_EMAIL, email); + + frag.setArguments(args); + + return frag; + } + + /** + * Checks if text of given EditText is not empty. If it is empty an error is + * set and the EditText gets the focus. + * + * @param context + * @param editText + * @return true if EditText is not empty + */ + private static boolean isEditTextNotEmpty(Context context, EditText editText) { + boolean output = true; + if (editText.getText().toString().length() == 0) { + editText.setError(context.getString(R.string.create_key_empty)); + editText.requestFocus(); + output = false; + } else { + editText.setError(null); + } + + return output; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.create_key_email_fragment, container, false); + + mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email); + mBackButton = view.findViewById(R.id.create_key_back_button); + mNextButton = view.findViewById(R.id.create_key_next_button); + + // initial values + mName = getArguments().getString(ARG_NAME); + String email = getArguments().getString(ARG_EMAIL); + mEmailEdit.setText(email); + + // focus empty edit fields + if (email == null) { + mEmailEdit.requestFocus(); + } + mBackButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mCreateKeyActivity.loadFragment(null, null, FragAction.TO_LEFT); + } + }); + mNextButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createKeyCheck(); + } + }); + + return view; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mCreateKeyActivity = (CreateKeyActivity) getActivity(); + } + + private void createKeyCheck() { + if (isEditTextNotEmpty(getActivity(), mEmailEdit)) { + + CreateKeyPassphraseFragment frag = + CreateKeyPassphraseFragment.newInstance( + mName, + mEmailEdit.getText().toString() + ); + + mCreateKeyActivity.loadFragment(null, frag, FragAction.TO_RIGHT); + } + } + +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java index 920488e3e..dc9f3d4ad 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java @@ -95,7 +95,7 @@ public class CreateKeyFinalFragment extends Fragment { mEmailEdit = (TextView) view.findViewById(R.id.email); mUploadCheckbox = (CheckBox) view.findViewById(R.id.create_key_upload); mBackButton = view.findViewById(R.id.create_key_back_button); - mCreateButton = view.findViewById(R.id.create_key_create_button); + mCreateButton = view.findViewById(R.id.create_key_next_button); mEditText = (TextView) view.findViewById(R.id.create_key_edit_text); mEditButton = view.findViewById(R.id.create_key_edit_button); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java new file mode 100644 index 000000000..50a3bd655 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2014 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; +import org.sufficientlysecure.keychain.ui.widget.EmailEditText; +import org.sufficientlysecure.keychain.ui.widget.NameEditText; + +public class CreateKeyNameFragment extends Fragment { + + public static final String ARG_NAME = "name"; + public static final String ARG_EMAIL = "email"; + + CreateKeyActivity mCreateKeyActivity; + NameEditText mNameEdit; + View mNextButton; + + String mEmail; + + /** + * Creates new instance of this fragment + */ + public static CreateKeyNameFragment newInstance(String name, String email) { + CreateKeyNameFragment frag = new CreateKeyNameFragment(); + + Bundle args = new Bundle(); + args.putString(ARG_NAME, name); + args.putString(ARG_EMAIL, email); + + frag.setArguments(args); + + return frag; + } + + /** + * Checks if text of given EditText is not empty. If it is empty an error is + * set and the EditText gets the focus. + * + * @param context + * @param editText + * @return true if EditText is not empty + */ + private static boolean isEditTextNotEmpty(Context context, EditText editText) { + boolean output = true; + if (editText.getText().toString().length() == 0) { + editText.setError(context.getString(R.string.create_key_empty)); + editText.requestFocus(); + output = false; + } else { + editText.setError(null); + } + + return output; + } + + private static boolean areEditTextsEqual(Context context, EditText editText1, EditText editText2) { + boolean output = true; + if (!editText1.getText().toString().equals(editText2.getText().toString())) { + editText2.setError(context.getString(R.string.create_key_passphrases_not_equal)); + editText2.requestFocus(); + output = false; + } else { + editText2.setError(null); + } + + return output; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.create_key_name_fragment, container, false); + + mNameEdit = (NameEditText) view.findViewById(R.id.create_key_name); + mNextButton = view.findViewById(R.id.create_key_next_button); + + // initial values + String name = getArguments().getString(ARG_NAME); + mEmail = getArguments().getString(ARG_EMAIL); + mNameEdit.setText(name); + + // focus empty edit fields + if (name == null) { + mNameEdit.requestFocus(); + } + mNextButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createKeyCheck(); + } + }); + + return view; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mCreateKeyActivity = (CreateKeyActivity) getActivity(); + } + + private void createKeyCheck() { + if (isEditTextNotEmpty(getActivity(), mNameEdit)) { + + CreateKeyEmailFragment frag = + CreateKeyEmailFragment.newInstance( + mNameEdit.getText().toString(), + mEmail + ); + + mCreateKeyActivity.loadFragment(null, frag, FragAction.TO_RIGHT); + } + } + +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java similarity index 72% rename from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java rename to OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java index 05408e21e..be77d5042 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java @@ -17,6 +17,7 @@ package org.sufficientlysecure.keychain.ui; +import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -28,26 +29,29 @@ import android.widget.EditText; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; -import org.sufficientlysecure.keychain.ui.widget.EmailEditText; -import org.sufficientlysecure.keychain.ui.widget.NameEditText; import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText; -public class CreateKeyInputFragment extends Fragment { +public class CreateKeyPassphraseFragment extends Fragment { public static final String ARG_NAME = "name"; public static final String ARG_EMAIL = "email"; + + // model + String mName; + String mEmail; + + // view CreateKeyActivity mCreateKeyActivity; - NameEditText mNameEdit; - EmailEditText mEmailEdit; PassphraseEditText mPassphraseEdit; EditText mPassphraseEditAgain; - View mCreateButton; + View mBackButton; + View mNextButton; /** * Creates new instance of this fragment */ - public static CreateKeyInputFragment newInstance(String name, String email) { - CreateKeyInputFragment frag = new CreateKeyInputFragment(); + public static CreateKeyPassphraseFragment newInstance(String name, String email) { + CreateKeyPassphraseFragment frag = new CreateKeyPassphraseFragment(); Bundle args = new Bundle(); args.putString(ARG_NAME, name); @@ -94,27 +98,24 @@ public class CreateKeyInputFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.create_key_input_fragment, container, false); + View view = inflater.inflate(R.layout.create_key_passphrase_fragment, container, false); - mNameEdit = (NameEditText) view.findViewById(R.id.create_key_name); mPassphraseEdit = (PassphraseEditText) view.findViewById(R.id.create_key_passphrase); - mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email); mPassphraseEditAgain = (EditText) view.findViewById(R.id.create_key_passphrase_again); - mCreateButton = view.findViewById(R.id.create_key_button); + mBackButton = view.findViewById(R.id.create_key_back_button); + mNextButton = view.findViewById(R.id.create_key_next_button); // initial values - String name = getArguments().getString(ARG_NAME); - String email = getArguments().getString(ARG_EMAIL); - mNameEdit.setText(name); - mEmailEdit.setText(email); - - // focus non-empty edit fields - if (name != null && email != null) { - mPassphraseEdit.requestFocus(); - } else if (name != null) { - mEmailEdit.requestFocus(); - } - mCreateButton.setOnClickListener(new View.OnClickListener() { + mName = getArguments().getString(ARG_NAME); + mEmail = getArguments().getString(ARG_EMAIL); + mPassphraseEdit.requestFocus(); + mBackButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + back(); + } + }); + mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { createKeyCheck(); @@ -125,22 +126,24 @@ public class CreateKeyInputFragment extends Fragment { } @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - + public void onAttach(Activity activity) { + super.onAttach(activity); mCreateKeyActivity = (CreateKeyActivity) getActivity(); } + private void back() { + hideKeyboard(); + mCreateKeyActivity.loadFragment(null, null, FragAction.TO_LEFT); + } + private void createKeyCheck() { - if (isEditTextNotEmpty(getActivity(), mNameEdit) - && isEditTextNotEmpty(getActivity(), mEmailEdit) - && isEditTextNotEmpty(getActivity(), mPassphraseEdit) + if (isEditTextNotEmpty(getActivity(), mPassphraseEdit) && areEditTextsEqual(getActivity(), mPassphraseEdit, mPassphraseEditAgain)) { CreateKeyFinalFragment frag = CreateKeyFinalFragment.newInstance( - mNameEdit.getText().toString(), - mEmailEdit.getText().toString(), + mName, + mEmail, mPassphraseEdit.getText().toString() ); diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..12e39d39dc2b19f585ad1f1e3cd4615afa4490b4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?TY)5S5wg1$~jG*zUI-~ zQ$kY~_$yZL^Eh#d;jQh`W|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?Tu)5S5wAx004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00Fp3L_t(&-tE`TO2R=D#$hq)3TjtbZX)`k?xU6&nimkQ zqJD{8KyB(WL^Nuhx(>r-P}?x6MFdgSLQzgDDf-a=s52%V-Wzz}%$a$|hwpF2ryvC> zNI?oxkXulYJ#ySrrOF*S;!N}oG|4e_%;9{(qKOXHo9VySCgqyc4z^f;N5m5-H3!ll)=hY9tuz-8U#ej0`0zR48%AZaXbef36BrP(OhD%(Bh_ z#}p`1rbdl2MGB0WSiX5AGdXuIEywx3mkE4RL=yV$RYFH1`V*rg)!xG z@~nCrq8H8z*BxORxnj9<&DpaO2a`eo O0000O=~G=WkL6 z;pyTSVsScICsl#hpfAgTl{dg=NgG>RRhvD}FP`fiml*=(PHt$kkXAUgSRzdLIeW*a zjJD7tl~POo=wJ8}dZbOr#o6Sr*P~|9^O=~G=WkJm z>FMGaVsScICsl#hpf9VT!L98-5ATue3#k_85Aa;M;;@HTkjJ|q`{28FkG7*bwmkS$ zB63*iO;ka9kjY`EoTwGc7~6|tqzbf-uVd^l(sGSq7U@q@*ksDUV9Tc@==tE!OrRwU Mp00i_>zopr09`OciU0rr literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..738e3490d01ea88aed5ad31814d74c96ec7e67b7 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=14Fw zFsggHIEF+VetXr{i`h})*hk-|&jfCHaYcUTYubC`h3&uT24$W%bc>h|8kGsL2--SK zI;$EZlDhrGJ~5>XyR@|OV@g&we?KShyT{2|!j476?s*;=&qZgbN_&Kp_ z$_3F2&+=COGfoyh#3He7t$523R)PFA;#z+rUo?g=axhmXtYcaB&0!@=mo9^ms=-Ef zA=L|;*_E`8n%Wk8ykHi8W#8=SGDdOH^{4w*CyGzf%MEe8zhvLJ9eol8OBWQBqceOlU;MtNN!qHNGV@At$ihe~_AfGdMy85}Sb4q9e E0FO6u=l}o! literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7b82b8a5774229761b0bbc24c5fdbb9f6214d8dc GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq zS9-cQhD02Gd(DyWkO7a&#rw80E4ExuYGhH$Rb6+b$SNWv>Fvx%bBh})y=2tit$VU= zT>}%B#)J9;N7|>cpRs8;si<^d?$ho4(-^<(vE1$Qrh`x5qS9@bKeJ}FTw)hnXgbSr z#atcXU%`q(=b}{v`3e$Gvn;8Qm54Cz);XSi;J`7>^%vLturSzU^)c{3Uq2)JqvQj< v;qRt%_NG5uzF#<{PuJ8+EWm+r=WA{)byr2Jx6gk99nIkB>gTe~DWM4fNak$P literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e664e94ac1d1f253280475bd1e2d293060ec5d41 GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s zRFUrK;uunK>+Q|+S;B!L$3G_I%9(I&Ns$wf%wfmL+WAP5B@0zVg~QNl7GU zv9f5*ggoXzFK#ovzneE+E>pa*!q{tl_k`9NCdS3-Mek2Mv~j4DxA^XNZYL|(&vi`< zED8*a91aXj0u3PMZU)t9A2SMFJWeR;+N_%LiE&2iq&oOaqD(f?G}8@839`x&FFRp;aS$BTIDpV<`iPT@S&t{KO#5SE}Gd=Z;G5O9CKkJV^chaV^ zo}0mV=CjE&0pk_lA|D^qV0?VV=Ld<)U+n~%5O*(xp0lW#+2*FLjHg@Z%7m;h$+mrM2c`m fjtBLue;6fJE#zR>_~a@u9Wr>j`njxgN@xNAUm`iW literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..10643ae3fafe3484f2282ba442b232a23b8298f3 GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6#VAt;uw-~@9mA#yoVfkST1;acCbxaWZ@*Vz-JP7hy!y0gJ##ElX9oUW=;L}Z;O5P zHp>OqGFXH>6dEDKulfrg=DIpCS1~M}dW5akV#DMe3tE%a3>~xi3J%Mix4AIw^23SS zomBX^T^<)WxbQK%JpJLA(kJfn{D%Xh48KN8GCOPGngs@ZydozyHaJ< zf2qan^DXvCGnO_xJrcXlDf@1x<3ztl<{5rLF5It`j+*>5j?&iDVw>q%=y=hitLKt& z+04KyZ>vX9FRh=oc>gOu5V| literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..360d3c5ec81099b57d5d547d788d201394b6293d GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6#V1q;uw-~@9mA#yoU?~S{{0`1~77dInmqB+^Q<7;Pr@s>EOkG;gJhBKKZ@8_wCJ` z?cwXLN~TP3WP=c2>=%5x<>|24Z<5=r5bj+sezZ+}>KHD&FDrB!>)Mjb@1B32nyS6! zqKNA%Tj#_jzoNxlvMSr1JaY9*8CIHF6$DjJJE)=*6DTzKn?h%ny@Akmen*u}j?NxA z$2lfsTv(GUCvYH<-}JykhrMb|&W#3q%uJRnE3U6m^xtu4PME;COlH=CD2HaXdBOZr zCaceXmKHg-l6h@u|D!8mD_+dWyz#-;%dqd~giAbY<}C?P-n$?b?(mcVqYKOruBICX Tn74fZh697AtDnm{r-UW|>lu)# literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5f00cf8a213a7c2e8f2d6955b05c16a90b80dd60 GIT binary patch literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ(J6g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO>_%)r1c48n{Iv*t)J zFfiZrba4!+xb^mqcScO8%<+$za=}OSdVF)-H+!xryZKIZm!@lA*Cg?iPJuy>SWK5b z%~r@>YH}ijy(HZ0Y*}J~R zP_da$xc17dEnSe-Hsh$sNuK!yJIorRPJUXU;ip)+?@{Y5CNCqWeJXRDW>{6QJ#8$)lYQ=}Qm7m1+zE!^P zk?YvJ|7mll*D`ytt%>f5Pbio#Rhw~pVaGhuK-IsGKeGNnJui{k`xju$$oxm>h@#TXF z7aGs~F5PtNK+Fmo<14?f?J4N_dZFT4#^;THpX%&h_~FfmW$SrE{w`#weNfCDSKpd{ zQSbfldq*m#v5WTD=3jM^{@~51eT(Pq){E+M7c_RK`pI6mln+hpXAWp$asRpKi0Li1 z#TU=addxaS!BM!`XJdHE{^#bG0(Cqeb8VR~w(F$9IVSC#jYqk-dnPaJe)g(%!$d$5_`HM?VwY z?OW7S*cdGHN%)1q+#27$xdQKO&VS~$4a{A5^IwBi+*6~SO0$y=&R+gZ@~H^#I;N|i zt-^O^Z)H56u;aMty$#1xo^Mn?QE=Sq?Ec?NH_s_yT+tY}Olj%Q^ktRPQ)(LLCC-Qr zJ*@e}>~Lb(t_^Y}6BcqDn|izu0&OO$&VbY%$Ed2*R2(vF{TlL&Jz2cku;$s<&>#U9@8^rVr zy|8^=!SvrUX2ZF8`{%HnV%PlT*s#v>r0|FIFuU`cbF8?x9Pa+sck_)8&n3ZI(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g&? zz`z*k>EaktaqI0ZM?WS-iWm_sJ=o3uk`vGpa!`o^!|4{~ho77Pn}|vu=2r&G7h-^0YrS ztOsVDXP@!;CPTHIc)*17EIpt3BQ!r(HY}sGPgV*QM24T4mH<<%`0_={6 zHGNCJ;t;U^#1odk8j5NbZI+q`js3Ve*YWoDJh&ay#c|GeZ_5MQFhPMk?9nAn|1&1~ ztgyJVR4A+OdS}ZjZa%4n@47l&R_u9FeW+UeK*xus+Ue^rbZj`d?zFRw(uGgi|K1or t+I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g&? zz`z*b>EaktaqI1^gSk$I0xTC6GT1$B`NFJP;N8I)tJ3>nr5?KgM{BT&@$9L`CcXcx z^1J%_{chQ+epd!Y76Auz;yYWD9%|$w>$#A zGMhE6TWBaaMRsQEf?Q2rmQsHm^%t|N3=bA+E2>tk3vFS!zIQ^;112AfQnnM1su>Rb z;A=41Cufj&Y}b27wf^<25|6YQr~R;M(A>wB(7m3~$KvtQ{NViF^XxMoZ)Vg!bMHrt zgJX@_0u?*{0Fn8u8r|oaaz4Zg&)?p{W~cSY*!-jN!n^(N+?`G@XDfHQeOyl5>Gg9n kR^-$RZQ$o2+0`N?DESJ96VG(UY&4+8tt1z{&Zr&hdg| zzsMH{l&^;Ry~$HnY3mJ4SI<6!BSaK;<;2IF)eGX=)W+QRuVUoZyPu!bCzQ6AIL@P`m~x{IroEDg6gyvbu5xbMMBmh2|6=dau5$70|-OL zl7TCLypQfwM_JUIr6=hs*g9 zO9QsaK7et`+{#IV(`wqO5AoQ9Kqsx#rtOwW2h=)3oLnXaiPoO8Re)~3ev=>_60=D# zORh5iNqgn85d}-T8c5Jdn|MeD=H<)H>M0)JldXueS%KTko`T){9y&ZWOU)9n>_q4U z(9~g>niW77lLlHWWrU+cl{7! zXj78RB#ztQhv-4>DKf>%2#CkLDr*?YU}|1hFm<@1jEvT02SP0$wpO_UH!5o=KX?a% z1fK%9`2G6$v1}{kAcRKOF32{x0(+7CCx8D3iU=tfBq-p6YO-{y^|ozAx}G<#t;Ejs zsKr_Iij{oyk@wMgTWL9k%t44EJ{Bd|Xy;w`Si3YL-yW*5fjNZX3fqse*%pH^COr3h zNmg`Szb5&-;HUhJ!(mevOAYy3KYMss}^E-k|~kRf>&RG$}jQM0lVKRb6z=_5gB zXx4V6X85i7bpxs_cUS4XQ2Km#SE>EG0Vi1lIwN=VXRD2lrReeMM<{=ueX6;GB&zSX zf~gxiZ#7acRSVXl9#9$DxL9uv*^rql9R9emKb&@a9p2K|Jx8Tm7u*@3dfUVM_$4j6 zsZEU9=O&2ChZ2Kgv7L6JwKkvWv_+6s&XBQ?L0qw_{hHF^sj{a4FzDi+e0F=Hoy z#ho#dY7&c-D>e~|oMHEdN3vYjIc-ksX&y}8%+XgHQ`)wu)L_~uP#Skb;^e}qM6Sy^ zWPgZAzLthmIHNYL$f>&#xgqP&(MPHXkn%;kOdti$e?mO=|Fh^{nBpdGfXi9w3pPD^ Q22#)h>H$yZdM8@?Ke7^WlmGw# literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml new file mode 100644 index 000000000..a24d1a2ee --- /dev/null +++ b/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml index 84625d1fd..830f039f7 100644 --- a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml @@ -6,7 +6,7 @@ + android:layout_above="@+id/create_key_buttons"> - - + style="?android:attr/borderlessButtonStyle" /> + style="?android:attr/borderlessButtonStyle" /> - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/create_key_name_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_name_fragment.xml new file mode 100644 index 000000000..ea064b00c --- /dev/null +++ b/OpenKeychain/src/main/res/layout/create_key_name_fragment.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml similarity index 50% rename from OpenKeychain/src/main/res/layout/create_key_input_fragment.xml rename to OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml index 2178fcb1f..4b09c6cac 100644 --- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml @@ -1,6 +1,5 @@ @@ -8,7 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" - android:layout_above="@+id/create_key_button_divider"> + android:layout_above="@+id/create_key_buttons"> - - - - - - - - + android:text="@string/create_key_passphrase_text" /> - - - - + android:drawableLeft="@drawable/ic_chevron_left_grey_24dp" + android:drawablePadding="8dp" + android:gravity="left|center_vertical" + android:clickable="true" + style="?android:attr/borderlessButtonStyle" /> + style="?android:attr/borderlessButtonStyle" /> \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml index 903cc50f3..ce4f1cdcf 100644 --- a/OpenKeychain/src/main/res/values-cs/strings.xml +++ b/OpenKeychain/src/main/res/values-cs/strings.xml @@ -464,7 +464,7 @@ Vytvoření klíče může chvíli trvat, mezitím si dejte třeba šálek dobré kávy... (3 podklíče, RSA, 4096 bit) (uživatelská konfigurace klíče) - Zadejte své celé jméno, emailovou adresu a zvolte heslo. + Zadejte své celé jméno, emailovou adresu a zvolte heslo. Celé jméno, např. Jan Novák Změnit konfiguraci klíče diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml index 63b0c4c09..245de82ec 100644 --- a/OpenKeychain/src/main/res/values-de/strings.xml +++ b/OpenKeychain/src/main/res/values-de/strings.xml @@ -528,7 +528,7 @@ Einen Schlüssel zu erzeugen braucht eine Weile, trink in der Zeit einen Kaffee... (3 Unterschlüssel, RSA, 4096 Bit) (Benutzerdefinierte Schlüsseleinstellung) - Vollen Namen und Emailadresse angeben und Passwort wählen. + Vollen Namen und Emailadresse angeben und Passwort wählen. Vollständiger Name, z.B. Max Mustermann Schlüsselkonfiguration ändern diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml index 0d7444c47..d5d8440af 100644 --- a/OpenKeychain/src/main/res/values-es/strings.xml +++ b/OpenKeychain/src/main/res/values-es/strings.xml @@ -575,7 +575,7 @@ Crear una clave puede llevar un tiempo, tómese una taza de café entre tanto... (3 subclaves, RSA, 4096 bits) (configuración de clave personalizada) - Introduzca su nombre completo, dirección de correo electrónico, y elija una frase contraseña. + Introduzca su nombre completo, dirección de correo electrónico, y elija una frase contraseña. Nombre completo, ej. Max Mustermann Cambiar configuración de clave diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml index 50bd53921..8cc1cc735 100644 --- a/OpenKeychain/src/main/res/values-fr/strings.xml +++ b/OpenKeychain/src/main/res/values-fr/strings.xml @@ -573,7 +573,7 @@ Créer une clef peut prendre du temps, prenez donc un café en attendant... (3 sous-clefs, RSA, 4096 bits) (configuration personnalisée de la clef) - Saisissez votre nom complet, votre adresse courriel et choisissez votre phrase de passe. + Saisissez votre nom complet, votre adresse courriel et choisissez votre phrase de passe. Nom complet, p. ex. Marc-Olivier Lagacé Changer la configuration de la clef diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml index d741f7111..f55d16dfc 100644 --- a/OpenKeychain/src/main/res/values-it/strings.xml +++ b/OpenKeychain/src/main/res/values-it/strings.xml @@ -482,7 +482,7 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars La creazione di una chiave richiede un po\' di tempo, prendi un caffè nel frattempo... (3 sottochiavi, RSA, 4096 bit) (personalizza la configurazione della chiave) - Inserisci Nome Completo, Email e scegli una Frase di Accesso. + Inserisci Nome Completo, Email e scegli una Frase di Accesso. Nome completo, es: Mario Rossi Cambia configurazione della chiave diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml index c5318db36..ef817f398 100644 --- a/OpenKeychain/src/main/res/values-ja/strings.xml +++ b/OpenKeychain/src/main/res/values-ja/strings.xml @@ -532,7 +532,7 @@ しばらくの間鍵を生成しています、その間はコーヒーでもどうぞ.... (3副鍵、RSA, 4096 bit) (個別の鍵設定) - フルネーム、Eメールアドレスを入力そしてパスフレーズを選択してください。 + フルネーム、Eメールアドレスを入力そしてパスフレーズを選択してください。 フルネーム、例えば Max Mustermann 鍵の設定変更 diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml index 34b8f1627..f8ee75750 100644 --- a/OpenKeychain/src/main/res/values-nl/strings.xml +++ b/OpenKeychain/src/main/res/values-nl/strings.xml @@ -575,7 +575,7 @@ Een sleutel aanmaken kan even duren, maak intussen een tasje thee klaar… (3 subsleutels, RSA, 4096 bit) (aangepaste sleutelconfiguratie) - Voer je volledige naam en e-mailadres in, en kies een wachtwoord. + Voer je volledige naam en e-mailadres in, en kies een wachtwoord. Volledige naam, bv. Max Mustermann Sleutelconfiguratie wijzigen diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml index 3dc6a2a35..46dd8c313 100644 --- a/OpenKeychain/src/main/res/values-pl/strings.xml +++ b/OpenKeychain/src/main/res/values-pl/strings.xml @@ -540,7 +540,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw Tworzenie klucza może zająć trochę czasu... w międzyczasie idź się napij kawy. (3 pod-klucze, RSA, 4096 bit) (niestandardowa konfiguracja kluczy) - Wpisz swoje imię, adres email oraz wybierz hasło. + Wpisz swoje imię, adres email oraz wybierz hasło. Imię i nazwisko, na przykład, Jan Kowalski Zmień klucz konfiguracji diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml index dc1c81bb4..211433d26 100644 --- a/OpenKeychain/src/main/res/values-ru/strings.xml +++ b/OpenKeychain/src/main/res/values-ru/strings.xml @@ -490,7 +490,7 @@ Создание ключа займет некоторое время, можете пока выпить чашечку кофе... (3 доп. ключа, RSA, 4096 bit) (произвольная конфигурация ключа) - Укажите полное имя, адрес почты и придумайте надежный пароль. + Укажите полное имя, адрес почты и придумайте надежный пароль. Полное имя, напр. Иван Хлестаков Изменить конфигурацию ключа diff --git a/OpenKeychain/src/main/res/values-sr/strings.xml b/OpenKeychain/src/main/res/values-sr/strings.xml index 11639e2eb..73094c5a4 100644 --- a/OpenKeychain/src/main/res/values-sr/strings.xml +++ b/OpenKeychain/src/main/res/values-sr/strings.xml @@ -558,7 +558,7 @@ Прављење кључа може да потраје, попијте кафу у међувремену… (3 поткључа, РСА, 4096 бита) (прилагођена конфигурација кључа) - Унесите пуно име, адресу е-поште и укуцајте лозинку. + Унесите пуно име, адресу е-поште и укуцајте лозинку. Пуно име, нпр. Петар Петровић Промени конфигурацију кључа diff --git a/OpenKeychain/src/main/res/values-sv/strings.xml b/OpenKeychain/src/main/res/values-sv/strings.xml index a24fe7ee7..d22eea22a 100644 --- a/OpenKeychain/src/main/res/values-sv/strings.xml +++ b/OpenKeychain/src/main/res/values-sv/strings.xml @@ -521,7 +521,7 @@ Att skapa en nyckel kan ta ett tag, drick en kopp kaffe under tiden… (3 undernycklar, RSA, 4096 bit) (anpassad nyckelkonfiguration) - Ange ditt fullständiga namn, e-postadress och välj en lösenordsfras. + Ange ditt fullständiga namn, e-postadress och välj en lösenordsfras. Fullständigt namn, t.ex. Kalle Svensson Ändra nyckelkonfiguration diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml index 7b6a976f5..ee5306cc7 100644 --- a/OpenKeychain/src/main/res/values-tr/strings.xml +++ b/OpenKeychain/src/main/res/values-tr/strings.xml @@ -449,7 +449,7 @@ Anahtar oluşturma biraz zaman alabilir, bu sırada bir çay için... (3 alt anahtar, RSA, 4096 bit) (özel anahtar yapılandırması) - Tam isminizi, e-posta adresinizi girin ve bir parola seçin. + Tam isminizi, e-posta adresinizi girin ve bir parola seçin. Tam Ad, örneğin: Max Mustermann Anahtar yapılandırmasını değiştir. diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml index cf586b2d5..365821f4a 100644 --- a/OpenKeychain/src/main/res/values-uk/strings.xml +++ b/OpenKeychain/src/main/res/values-uk/strings.xml @@ -449,7 +449,7 @@ Це поле - обов\'язкове Паролі фрази не збігаються Ви ввели наступну сутність: - Введіть ваше повне ім\'я, електронну адреса та оберіть парольну фразу. + Введіть ваше повне ім\'я, електронну адреса та оберіть парольну фразу. Повне ім\'я, наприклад Степан Бандера diff --git a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml index b6ab2c8a4..b5b57d91f 100644 --- a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml +++ b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml @@ -377,7 +377,7 @@ 必填欄位 口令不相符 建立金鑰可能需要一點時間,來杯咖啡吧… - 輸入你的全名、電子郵件,並選擇一組口令。 + 輸入你的全名、電子郵件,並選擇一組口令。 金鑰 diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 2c83ac070..b45fb1c27 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -626,8 +626,10 @@ "Creating a key may take a while, have a cup of coffee in the meantime…" "(3 subkeys, RSA, 4096 bit)" "(custom key configuration)" - "Enter your full name, email address, and choose a passhrase." - "Full Name, e.g. Max Mustermann" + "Choose a name associated with this key. This can be a full name, e.g., 'John Doe', or a nickname, e.g., 'Johnny'." + "Choose the email address used for encrypted communication." + "Choose a strong passphrase. It protects your key when your device gets stolen." + "Full Name or Nickname" "Change key configuration" From e3547b497932a1c0219c11d586858754c82d19da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Mar 2015 22:09:48 +0100 Subject: [PATCH 25/25] Show passphrase checkbox in create key --- .../ui/CreateKeyPassphraseFragment.java | 19 +++++++++++++++++++ .../layout/create_key_passphrase_fragment.xml | 7 +++++++ OpenKeychain/src/main/res/values/strings.xml | 1 + 3 files changed, 27 insertions(+) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java index be77d5042..00ac00ff4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java @@ -21,10 +21,14 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.text.method.HideReturnsTransformationMethod; +import android.text.method.PasswordTransformationMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; import android.widget.EditText; import org.sufficientlysecure.keychain.R; @@ -44,6 +48,7 @@ public class CreateKeyPassphraseFragment extends Fragment { CreateKeyActivity mCreateKeyActivity; PassphraseEditText mPassphraseEdit; EditText mPassphraseEditAgain; + CheckBox mShowPassphrase; View mBackButton; View mNextButton; @@ -102,6 +107,7 @@ public class CreateKeyPassphraseFragment extends Fragment { mPassphraseEdit = (PassphraseEditText) view.findViewById(R.id.create_key_passphrase); mPassphraseEditAgain = (EditText) view.findViewById(R.id.create_key_passphrase_again); + mShowPassphrase = (CheckBox) view.findViewById(R.id.create_key_show_passphrase); mBackButton = view.findViewById(R.id.create_key_back_button); mNextButton = view.findViewById(R.id.create_key_next_button); @@ -121,6 +127,19 @@ public class CreateKeyPassphraseFragment extends Fragment { createKeyCheck(); } }); + mShowPassphrase.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + mPassphraseEdit.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); + mPassphraseEditAgain.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); + } else { + mPassphraseEdit.setTransformationMethod(PasswordTransformationMethod.getInstance()); + mPassphraseEditAgain.setTransformationMethod(PasswordTransformationMethod.getInstance()); + } + } + }); + return view; } diff --git a/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml index 4b09c6cac..48b86765a 100644 --- a/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml @@ -46,6 +46,13 @@ 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 b45fb1c27..a9d7e10c7 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -128,6 +128,7 @@ "Passphrase" "Unlocking…" "Repeat Passphrase" + "Show Passphrase" "Algorithm" "File ASCII Armor" "Enable ASCII Armor"