diff --git a/Graphics/drawables/ic_action_encrypt_copy.svg b/Graphics/drawables/ic_action_encrypt_copy.svg
new file mode 100644
index 000000000..229c2524b
--- /dev/null
+++ b/Graphics/drawables/ic_action_encrypt_copy.svg
@@ -0,0 +1,59 @@
+
+
diff --git a/Graphics/drawables/ic_action_encrypt_save.svg b/Graphics/drawables/ic_action_encrypt_save.svg
new file mode 100644
index 000000000..7bb435a5d
--- /dev/null
+++ b/Graphics/drawables/ic_action_encrypt_save.svg
@@ -0,0 +1,59 @@
+
+
diff --git a/Graphics/drawables/ic_action_encrypt_share.svg b/Graphics/drawables/ic_action_encrypt_share.svg
new file mode 100644
index 000000000..35d0d3960
--- /dev/null
+++ b/Graphics/drawables/ic_action_encrypt_share.svg
@@ -0,0 +1,59 @@
+
+
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 000000000..48a199076
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_24dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_24dp.png
new file mode 100644
index 000000000..c714df0c5
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_24dp.png differ
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 000000000..8c79f01cd
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_36dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_48dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_48dp.png
new file mode 100644
index 000000000..1462c86c6
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_black_48dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_18dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_18dp.png
new file mode 100644
index 000000000..43249ddf8
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_18dp.png differ
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 000000000..c48a3b463
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..36e7c5ab2
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_36dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_48dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_48dp.png
new file mode 100644
index 000000000..de5de6042
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_grey600_48dp.png differ
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 000000000..d182f623e
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_24dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_24dp.png
new file mode 100644
index 000000000..b6eee07b7
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_24dp.png differ
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 000000000..07f15d82b
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_36dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_48dp.png b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_48dp.png
new file mode 100644
index 000000000..64182c537
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-hdpi/ic_comment_text_white_48dp.png differ
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 000000000..a5677ee1f
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_18dp.png differ
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 000000000..c477421c7
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_24dp.png differ
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 000000000..c714df0c5
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_36dp.png differ
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 000000000..0ddeb8411
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_black_48dp.png differ
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 000000000..86169288c
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_24dp.png b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..d50c008c7
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..c48a3b463
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_36dp.png differ
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 000000000..0e14a9500
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_grey600_48dp.png differ
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 000000000..d83ee85a4
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_18dp.png differ
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 000000000..a0ec2d374
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_24dp.png differ
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 000000000..b6eee07b7
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_36dp.png differ
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 000000000..edfd394c6
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-mdpi/ic_comment_text_white_48dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_18dp.png
new file mode 100644
index 000000000..c714df0c5
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_18dp.png differ
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 000000000..0ddeb8411
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_24dp.png differ
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 000000000..1462c86c6
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_36dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_48dp.png
new file mode 100644
index 000000000..b27583006
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_black_48dp.png differ
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 000000000..c48a3b463
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_18dp.png differ
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 000000000..0e14a9500
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..de5de6042
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_36dp.png differ
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 000000000..9dae1a4a0
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_grey600_48dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_18dp.png
new file mode 100644
index 000000000..b6eee07b7
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_18dp.png differ
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 000000000..edfd394c6
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_24dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_36dp.png
new file mode 100644
index 000000000..64182c537
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_36dp.png differ
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 000000000..2bbe5a4fb
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xhdpi/ic_comment_text_white_48dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_18dp.png
new file mode 100644
index 000000000..8c79f01cd
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_24dp.png
new file mode 100644
index 000000000..1462c86c6
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_24dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_36dp.png
new file mode 100644
index 000000000..dcbed74fc
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_36dp.png differ
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 000000000..b06e29150
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_black_48dp.png differ
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 000000000..36e7c5ab2
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..de5de6042
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..adc9c1349
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_36dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_48dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_48dp.png
new file mode 100644
index 000000000..6532b6aa4
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_grey600_48dp.png differ
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 000000000..07f15d82b
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_24dp.png
new file mode 100644
index 000000000..64182c537
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_24dp.png differ
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 000000000..6d6107cea
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_36dp.png differ
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 000000000..2ce4c9935
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxhdpi/ic_comment_text_white_48dp.png differ
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 000000000..1462c86c6
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_18dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_24dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_24dp.png
new file mode 100644
index 000000000..b27583006
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_24dp.png differ
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 000000000..b06e29150
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_36dp.png differ
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 000000000..5fc7d8ab7
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_black_48dp.png differ
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 000000000..de5de6042
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_18dp.png differ
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 000000000..9dae1a4a0
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_36dp.png
new file mode 100644
index 000000000..6532b6aa4
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_36dp.png differ
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 000000000..71a9e5dea
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_grey600_48dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_18dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_18dp.png
new file mode 100644
index 000000000..64182c537
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_18dp.png differ
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 000000000..2bbe5a4fb
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_24dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_36dp.png b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_36dp.png
new file mode 100644
index 000000000..2ce4c9935
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_36dp.png differ
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 000000000..34ac08b53
Binary files /dev/null and b/Graphics/drawables/originals/comment-text/drawable-xxxhdpi/ic_comment_text_white_48dp.png differ
diff --git a/Graphics/drawables/originals/comment-text/drawable/comment-text.xml b/Graphics/drawables/originals/comment-text/drawable/comment-text.xml
new file mode 100644
index 000000000..507b362c3
--- /dev/null
+++ b/Graphics/drawables/originals/comment-text/drawable/comment-text.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ 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/get-material-icons.sh b/Graphics/get-material-icons.sh
index d34e572fc..248dcd532 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
@@ -36,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/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/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index 886a8f7a5..3030cdbf2 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 54%
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 b496d40fd..00ac00ff4 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java
@@ -17,43 +17,46 @@
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.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.ArrayAdapter;
-import android.widget.AutoCompleteTextView;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
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.passwordstrengthindicator.PasswordStrengthView;
-import org.sufficientlysecure.keychain.util.ContactHelper;
+import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText;
-public class CreateKeyInputFragment extends Fragment {
-
- CreateKeyActivity mCreateKeyActivity;
-
- PasswordStrengthView mPassphraseStrengthView;
- AutoCompleteTextView mNameEdit;
- EmailEditText mEmailEdit;
- PasswordEditText mPassphraseEdit;
- EditText mPassphraseEditAgain;
- View mCreateButton;
+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;
+ PassphraseEditText mPassphraseEdit;
+ EditText mPassphraseEditAgain;
+ CheckBox mShowPassphrase;
+ 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);
@@ -64,107 +67,6 @@ public class CreateKeyInputFragment extends Fragment {
return frag;
}
- @Override
- 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);
- 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);
-
- // 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();
- }
-
- 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())
- )
- );
-
- // 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) {
- createKeyCheck();
- }
- });
-
- return view;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- mCreateKeyActivity = (CreateKeyActivity) getActivity();
- }
-
- private void createKeyCheck() {
- if (isEditTextNotEmpty(getActivity(), mNameEdit)
- && isEditTextNotEmpty(getActivity(), mEmailEdit)
- && isEditTextNotEmpty(getActivity(), mPassphraseEdit)
- && areEditTextsEqual(getActivity(), mPassphraseEdit, mPassphraseEditAgain)) {
-
- CreateKeyFinalFragment frag =
- CreateKeyFinalFragment.newInstance(
- mNameEdit.getText().toString(),
- mEmailEdit.getText().toString(),
- mPassphraseEdit.getText().toString()
- );
-
- hideKeyboard();
- mCreateKeyActivity.loadFragment(null, frag, FragAction.TO_RIGHT);
- }
- }
-
- private void hideKeyboard() {
- if (getActivity() == null) {
- return;
- }
- InputMethodManager inputManager = (InputMethodManager) getActivity()
- .getSystemService(Context.INPUT_METHOD_SERVICE);
-
- // check if no view has focus
- View v = getActivity().getCurrentFocus();
- if (v == null)
- return;
-
- 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.
@@ -199,4 +101,89 @@ public class CreateKeyInputFragment extends Fragment {
return output;
}
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.create_key_passphrase_fragment, container, false);
+
+ 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);
+
+ // initial values
+ 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();
+ }
+ });
+ 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;
+ }
+
+ @Override
+ 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(), mPassphraseEdit)
+ && areEditTextsEqual(getActivity(), mPassphraseEdit, mPassphraseEditAgain)) {
+
+ CreateKeyFinalFragment frag =
+ CreateKeyFinalFragment.newInstance(
+ mName,
+ mEmail,
+ mPassphraseEdit.getText().toString()
+ );
+
+ hideKeyboard();
+ mCreateKeyActivity.loadFragment(null, frag, FragAction.TO_RIGHT);
+ }
+ }
+
+ private void hideKeyboard() {
+ if (getActivity() == null) {
+ return;
+ }
+ InputMethodManager inputManager = (InputMethodManager) getActivity()
+ .getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ // check if no view has focus
+ View v = getActivity().getCurrentFocus();
+ if (v == null)
+ return;
+
+ inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
+ }
+
}
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..ed5920cde 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,29 @@
+/*
+ * 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.view.View;
import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.R;
@@ -26,6 +45,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..d95b5cda3 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;
@@ -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);
@@ -314,15 +315,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 +331,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 +365,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
*
@@ -418,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);
@@ -428,7 +418,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/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;
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/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/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/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/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java
index 9e1f21f60..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
@@ -43,8 +43,7 @@ import android.widget.Toast;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.ui.widget.PasswordEditText;
-import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView;
+import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText;
import org.sufficientlysecure.keychain.util.Log;
public class SetPassphraseDialogFragment extends DialogFragment implements OnEditorActionListener {
@@ -57,10 +56,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 +98,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/EmailEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java
index 697f5a61e..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
@@ -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;
@@ -34,35 +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);
+ 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);
+ 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);
+ 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();
+ initAdapter();
}
TextWatcher textWatcher = new TextWatcher() {
@@ -82,16 +81,32 @@ 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 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;
+ setRawInputType(inputType);
+ }
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java
similarity index 50%
rename from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java
rename to OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java
index ed373a938..f086c5696 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java
@@ -17,32 +17,54 @@
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;
-/**
- * Hack to re-enable keyboard auto correction in AutoCompleteTextView.
- * From http://stackoverflow.com/a/22512858
- */
-public class AutoCorrectAutoCompleteTextView extends AutoCompleteTextView {
+import org.sufficientlysecure.keychain.util.ContactHelper;
- public AutoCorrectAutoCompleteTextView(Context context) {
+public class NameEditText extends AutoCompleteTextView {
+ public NameEditText(Context context) {
super(context);
- removeFlag();
+ init();
}
- public AutoCorrectAutoCompleteTextView(Context context, AttributeSet attrs) {
+ public NameEditText(Context context, AttributeSet attrs) {
super(context, attrs);
- removeFlag();
+ init();
}
- public AutoCorrectAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- removeFlag();
+ public NameEditText(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
}
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public NameEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ 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;
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..377f701d1
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java
@@ -0,0 +1,88 @@
+/*
+ * 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;
+
+public class PassphraseEditText extends EditText {
+
+ PasswordStrengthBarView mPasswordStrengthBarView;
+ int mPasswordBarWidth;
+ int mPasswordBarHeight;
+ float barGap;
+
+ 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);
+
+ 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);
+ mPasswordStrengthBarView.setShowGuides(false);
+
+ 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/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;
- }
-}
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/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
index c66dc04d0..08c7c02fb 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);
}
@@ -75,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;
}
@@ -256,7 +278,7 @@ public class ContactHelper {
}
public static Bitmap loadPhotoByMasterKeyId(ContentResolver contentResolver, long masterKeyId,
- boolean highRes) {
+ boolean highRes) {
if (masterKeyId == -1) {
return null;
}
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 000000000..25a7ed445
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..ef17796fb
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png differ
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 000000000..402d792c0
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png differ
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 000000000..12e39d39d
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..7eef500d4
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png differ
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 000000000..d5a928783
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..c48a3b463
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..de2a86e89
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png differ
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 000000000..9517e1fec
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..162981140
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png differ
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 000000000..779ba94d3
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..56ab24da9
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..d6581fe23
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png differ
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 000000000..4ebf8a227
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..d50c008c7
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..738e3490d
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png differ
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 000000000..9df8ff01a
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..eef0635b7
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..d359cd6ab
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..df0518a68
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png differ
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 000000000..7b82b8a57
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png differ
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 000000000..ed2b2525f
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png differ
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 000000000..0e14a9500
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..e664e94ac
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png differ
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 000000000..cf184c78d
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png differ
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 000000000..5620e2595
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..b364c7603
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png differ
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 000000000..10643ae3f
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png differ
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 000000000..360d3c5ec
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png differ
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 000000000..08f59ea1e
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png differ
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 000000000..de5de6042
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png differ
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 000000000..5f00cf8a2
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png differ
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 000000000..c3078ee92
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png differ
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 000000000..4146f9262
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png differ
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 000000000..925cb2d9e
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..a5fb05c28
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..a71c5b3fc
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png differ
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 000000000..c5d79caff
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png differ
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 000000000..9dae1a4a0
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..001fe6607
Binary files /dev/null and b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png differ
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" />
-
-
-
-
-
+
+
+
+
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" />
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_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
deleted file mode 100644
index b320885d0..000000000
--- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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_passphrase_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml
new file mode 100644
index 000000000..48b86765a
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
index 67f17fa81..809e64f02 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_text_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_inner_layout_white.xml b/OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.xml
new file mode 100644
index 000000000..a626efb09
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.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_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/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
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 @@
-
(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 4a2be2eb8..9753e4d60 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -11,8 +11,8 @@
"Select Keys"
"Select Your Key"
- "Encrypt Text"
- "Encrypt Files"
+ "Encrypt"
+ "Encrypt"
"Decrypt"
"Unlock Key"
"Add subkey"
@@ -26,7 +26,7 @@
"Share fingerprint with…"
"Share key with…"
"Share file with…"
- "Share message with…"
+ "Share text with…"
"Encrypt To File"
"Decrypt To File"
"Import Keys"
@@ -73,9 +73,10 @@
"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"
"Save"
"Cancel"
"Delete"
@@ -87,7 +88,8 @@
"No"
"Fingerprints match"
"Lookup key"
- "Encrypt and share message"
+ "Encrypt and share text"
+ "Encrypt and copy text"
"View certification key"
"Create key"
"Add file(s)"
@@ -119,7 +121,7 @@
"Export Log"
- "Message"
+ "Text"
"File"
"File(s)"
"File:"
@@ -127,6 +129,7 @@
"Passphrase"
"Unlocking…"
"Repeat Passphrase"
+ "Show Passphrase"
"Algorithm"
"File ASCII Armor"
"Enable ASCII Armor"
@@ -144,7 +147,7 @@
"Encrypt with passphrase"
"Cache time"
"Cache passphrases by subkey"
- "Message compression"
+ "Text compression"
"File compression"
"Keyservers"
"Key ID"
@@ -219,7 +222,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."
@@ -260,7 +263,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"
@@ -557,7 +560,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: "
@@ -625,8 +628,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"