Support for Android 6 ACTION_PROCESS_TEXT
59
Graphics/drawables/ic_action_encrypt_paste.svg
Normal file
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg2"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="ic_action_encrypt_paste.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="2558"
|
||||
inkscape:window-height="1419"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333333"
|
||||
inkscape:cx="0.10169504"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="19"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
id="path3076"
|
||||
d="m 17.363197,9.8980016 a 0.84079901,0.84079901 0 0 0 0.840798,-0.8408 c 0,-0.466643 -0.378359,-0.840799 -0.840798,-0.840799 a 0.84079901,0.84079901 0 0 0 -0.8408,0.840799 0.84079901,0.84079901 0 0 0 0.8408,0.8408 m 2.522396,-3.783596 a 0.84079901,0.84079901 0 0 1 0.8408,0.840799 V 11.159199 A 0.84079901,0.84079901 0 0 1 19.885593,12 H 14.840799 A 0.84079901,0.84079901 0 0 1 14,11.159199 V 6.9552046 c 0,-0.466644 0.37836,-0.840799 0.840799,-0.840799 h 0.4204 v -0.840799 a 2.1019975,2.1019975 0 0 1 2.101998,-2.101997 2.1019975,2.1019975 0 0 1 2.101997,2.101997 v 0.840799 h 0.420399 m -2.522396,-2.101998 a 1.2611986,1.2611986 0 0 0 -1.261198,1.261199 v 0.840799 h 2.522396 v -0.840799 a 1.2611986,1.2611986 0 0 0 -1.261198,-1.261199 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3053"
|
||||
d="M 15.283513,19.502312 H 6.4607096 V 9.4191068 H 7.7211105 V 11.309707 H 14.023111 V 9.4191068 h 1.260402 M 10.87211,8.1587061 a 0.63020031,0.63020031 0 0 1 0.630201,0.6302004 0.63020031,0.63020031 0 0 1 -0.630201,0.6302003 0.63020031,0.63020031 0 0 1 -0.6302,-0.6302003 0.63020031,0.63020031 0 0 1 0.6302,-0.6302004 m 4.411405,0 h -2.63424 C 12.384592,7.427674 11.691372,6.8983055 10.87211,6.8983055 c -0.819259,0 -1.5124797,0.5293685 -1.7771628,1.2604006 H 6.4607096 A 1.2604005,1.2604005 0 0 0 5.200309,9.4191068 V 19.502312 a 1.2604005,1.2604005 0 0 0 1.2604006,1.260399 h 8.8228034 a 1.2604005,1.2604005 0 0 0 1.2604,-1.260399 V 9.4191068 a 1.2604005,1.2604005 0 0 0 -1.2604,-1.2604007 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
After Width: | Height: | Size: 3 KiB |
|
@ -12,7 +12,7 @@
|
|||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg2"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="ic_action_encrypt_save.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
|
@ -41,8 +41,8 @@
|
|||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333333"
|
||||
inkscape:cx="12.20339"
|
||||
inkscape:cy="12"
|
||||
inkscape:cx="-4.7288134"
|
||||
inkscape:cy="11.949153"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="19"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -50,10 +50,11 @@
|
|||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 12.355932,11.847458 H 4.7288135 V 8.7966102 H 12.355932 M 10.067797,19.474576 a 2.2881356,2.2881356 0 0 1 -2.288136,-2.288135 2.2881356,2.2881356 0 0 1 2.288136,-2.288136 2.2881356,2.2881356 0 0 1 2.288135,2.288136 2.2881356,2.2881356 0 0 1 -2.288135,2.288135 M 13.881356,7.2711864 H 4.7288135 c -0.8466101,0 -1.5254237,0.6864407 -1.5254237,1.5254238 V 19.474576 A 1.5254237,1.5254237 0 0 0 4.7288135,21 H 15.40678 a 1.5254237,1.5254237 0 0 0 1.525424,-1.525424 V 10.322034 L 13.881356,7.2711864 z"
|
||||
id="path4-7" />
|
||||
id="path4-7"
|
||||
style="fill:#000000;fill-opacity:1" />
|
||||
<path
|
||||
id="path3076-1"
|
||||
d="m 17.363197,9.8980016 a 0.84079901,0.84079901 0 0 0 0.840798,-0.8408 c 0,-0.466643 -0.378359,-0.840799 -0.840798,-0.840799 a 0.84079901,0.84079901 0 0 0 -0.8408,0.840799 0.84079901,0.84079901 0 0 0 0.8408,0.8408 m 2.522396,-3.783596 a 0.84079901,0.84079901 0 0 1 0.8408,0.840799 V 11.159199 A 0.84079901,0.84079901 0 0 1 19.885593,12 H 14.840799 A 0.84079901,0.84079901 0 0 1 14,11.159199 V 6.9552046 c 0,-0.466644 0.37836,-0.840799 0.840799,-0.840799 h 0.4204 v -0.840799 a 2.1019975,2.1019975 0 0 1 2.101998,-2.101997 2.1019975,2.1019975 0 0 1 2.101997,2.101997 v 0.840799 h 0.420399 m -2.522396,-2.101998 a 1.2611986,1.2611986 0 0 0 -1.261198,1.261199 v 0.840799 h 2.522396 v -0.840799 a 1.2611986,1.2611986 0 0 0 -1.261198,-1.261199 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000" />
|
||||
style="fill:#000000;fill-opacity:1" />
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.9 KiB |
1
Graphics/drawables/originals/content-paste.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M19,20H5V4H7V7H17V4H19M12,2A1,1 0 0,1 13,3A1,1 0 0,1 12,4A1,1 0 0,1 11,3A1,1 0 0,1 12,2M19,2H14.82C14.4,0.84 13.3,0 12,0C10.7,0 9.6,0.84 9.18,2H5A2,2 0 0,0 3,4V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V4A2,2 0 0,0 19,2Z" /></svg>
|
After Width: | Height: | Size: 509 B |
|
@ -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" "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" "yubi_icon" "ic_stat_notify" "status_signature_verified_inner" "link" "octo_link"
|
||||
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_paste" "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" "yubi_icon" "ic_stat_notify" "status_signature_verified_inner" "link" "octo_link"
|
||||
do
|
||||
echo $NAME
|
||||
inkscape -w 24 -h 24 -e "$MDPI_DIR/${NAME}_24dp.png" "$SRC_DIR/$NAME.svg"
|
||||
|
|
|
@ -210,6 +210,12 @@
|
|||
<data android:mimeType="text/*" />
|
||||
<data android:mimeType="message/*" />
|
||||
</intent-filter>
|
||||
<!-- Android 6 Floating Action Mode -->
|
||||
<intent-filter >
|
||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="text/plain" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.DisplayTextActivity"
|
||||
|
|
|
@ -60,6 +60,9 @@ public class EncryptTextActivity extends EncryptActivity {
|
|||
extras = new Bundle();
|
||||
}
|
||||
|
||||
String textData = extras.getString(EXTRA_TEXT);
|
||||
boolean returnProcessText = false;
|
||||
|
||||
// When sending to OpenKeychain Encrypt via share menu
|
||||
if (Intent.ACTION_SEND.equals(action) && type != null) {
|
||||
Log.logDebugBundle(extras, "extras");
|
||||
|
@ -95,12 +98,33 @@ public class EncryptTextActivity extends EncryptActivity {
|
|||
}
|
||||
// handle like normal text encryption, override action and extras to later
|
||||
// executeServiceMethod ACTION_ENCRYPT_TEXT in main actions
|
||||
extras.putString(EXTRA_TEXT, sharedText);
|
||||
textData = sharedText;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
String textData = extras.getString(EXTRA_TEXT);
|
||||
// Android 6, PROCESS_TEXT Intent
|
||||
if (Intent.ACTION_PROCESS_TEXT.equals(action) && type != null) {
|
||||
|
||||
String sharedText = null;
|
||||
if (extras.containsKey(Intent.EXTRA_PROCESS_TEXT)) {
|
||||
sharedText = extras.getString(Intent.EXTRA_PROCESS_TEXT);
|
||||
returnProcessText = true;
|
||||
} else if (extras.containsKey(Intent.EXTRA_PROCESS_TEXT_READONLY)) {
|
||||
sharedText = extras.getString(Intent.EXTRA_PROCESS_TEXT_READONLY);
|
||||
}
|
||||
|
||||
if (sharedText != null) {
|
||||
if (sharedText.length() > Constants.TEXT_LENGTH_LIMIT) {
|
||||
sharedText = sharedText.substring(0, Constants.TEXT_LENGTH_LIMIT);
|
||||
Notify.create(this, R.string.snack_shared_text_too_long, Style.WARN).show();
|
||||
}
|
||||
// handle like normal text encryption, override action and extras to later
|
||||
// executeServiceMethod ACTION_ENCRYPT_TEXT in main actions
|
||||
textData = sharedText;
|
||||
}
|
||||
}
|
||||
|
||||
if (textData == null) {
|
||||
textData = "";
|
||||
}
|
||||
|
@ -108,7 +132,7 @@ public class EncryptTextActivity extends EncryptActivity {
|
|||
if (savedInstanceState == null) {
|
||||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||||
|
||||
EncryptTextFragment encryptFragment = EncryptTextFragment.newInstance(textData);
|
||||
EncryptTextFragment encryptFragment = EncryptTextFragment.newInstance(textData, returnProcessText);
|
||||
transaction.replace(R.id.encrypt_text_container, encryptFragment);
|
||||
transaction.commit();
|
||||
}
|
||||
|
|
|
@ -56,8 +56,10 @@ public class EncryptTextFragment
|
|||
|
||||
public static final String ARG_TEXT = "text";
|
||||
public static final String ARG_USE_COMPRESSION = "use_compression";
|
||||
public static final String ARG_RETURN_PROCESS_TEXT = "return_process_text";
|
||||
|
||||
private boolean mShareAfterEncrypt;
|
||||
private boolean mReturnProcessTextAfterEncrypt;
|
||||
private boolean mUseCompression;
|
||||
private boolean mHiddenRecipients = false;
|
||||
|
||||
|
@ -66,11 +68,12 @@ public class EncryptTextFragment
|
|||
/**
|
||||
* Creates new instance of this fragment
|
||||
*/
|
||||
public static EncryptTextFragment newInstance(String text) {
|
||||
public static EncryptTextFragment newInstance(String text, boolean returnProcessTextAfterEncrypt) {
|
||||
EncryptTextFragment frag = new EncryptTextFragment();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_TEXT, text);
|
||||
args.putBoolean(ARG_RETURN_PROCESS_TEXT, returnProcessTextAfterEncrypt);
|
||||
frag.setArguments(args);
|
||||
|
||||
return frag;
|
||||
|
@ -128,6 +131,7 @@ public class EncryptTextFragment
|
|||
super.onCreate(savedInstanceState);
|
||||
if (savedInstanceState == null) {
|
||||
mMessage = getArguments().getString(ARG_TEXT);
|
||||
mReturnProcessTextAfterEncrypt = getArguments().getBoolean(ARG_RETURN_PROCESS_TEXT, false);
|
||||
}
|
||||
|
||||
Preferences prefs = Preferences.getPreferences(getActivity());
|
||||
|
@ -151,6 +155,12 @@ public class EncryptTextFragment
|
|||
inflater.inflate(R.menu.encrypt_text_fragment, menu);
|
||||
|
||||
menu.findItem(R.id.check_enable_compression).setChecked(mUseCompression);
|
||||
|
||||
if (mReturnProcessTextAfterEncrypt) {
|
||||
menu.findItem(R.id.encrypt_paste).setVisible(true);
|
||||
menu.findItem(R.id.encrypt_copy).setVisible(false);
|
||||
menu.findItem(R.id.encrypt_share).setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -177,6 +187,11 @@ public class EncryptTextFragment
|
|||
cryptoOperation(new CryptoInputParcel(new Date()));
|
||||
break;
|
||||
}
|
||||
case R.id.encrypt_paste: {
|
||||
hideKeyboard();
|
||||
cryptoOperation(new CryptoInputParcel(new Date()));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
@ -328,6 +343,11 @@ public class EncryptTextFragment
|
|||
// Share encrypted message/file
|
||||
startActivity(Intent.createChooser(createSendIntent(result.getResultBytes()),
|
||||
getString(R.string.title_share_message)));
|
||||
} else if (mReturnProcessTextAfterEncrypt) {
|
||||
Intent resultIntent = new Intent();
|
||||
resultIntent.putExtra(Intent.EXTRA_PROCESS_TEXT, new String(result.getResultBytes()));
|
||||
getActivity().setResult(Activity.RESULT_OK, resultIntent);
|
||||
getActivity().finish();
|
||||
} else {
|
||||
// Copy to clipboard
|
||||
copyToClipboard(result);
|
||||
|
|
After Width: | Height: | Size: 590 B |
After Width: | Height: | Size: 433 B |
After Width: | Height: | Size: 684 B |
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 986 B |
After Width: | Height: | Size: 1.3 KiB |
|
@ -2,6 +2,14 @@
|
|||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/encrypt_paste"
|
||||
android:title="@string/btn_paste_encrypted_signed"
|
||||
android:icon="@drawable/ic_action_encrypt_paste_24dp"
|
||||
android:orderInCategory="1"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/encrypt_copy"
|
||||
android:title="@string/btn_copy_encrypted_signed"
|
||||
|
|
|
@ -88,6 +88,7 @@
|
|||
<string name="btn_match_phrases">"Phrases match"</string>
|
||||
<string name="btn_share_encrypted_signed">"Encrypt/sign and share text"</string>
|
||||
<string name="btn_copy_encrypted_signed">"Encrypt/sign and copy text"</string>
|
||||
<string name="btn_paste_encrypted_signed">"Encrypt/sign and paste text"</string>
|
||||
<string name="btn_view_cert_key">"View certification key"</string>
|
||||
<string name="btn_create_key">"Create key"</string>
|
||||
<string name="btn_add_files">"Add file(s)"</string>
|
||||
|
|