aboutsummaryrefslogtreecommitdiffstats
path: root/org_apg
diff options
context:
space:
mode:
authorDominik <dominik@dominikschuermann.de>2012-09-12 16:03:39 +0200
committerDominik <dominik@dominikschuermann.de>2012-09-12 16:03:39 +0200
commit511cc4af9f7e9c9a0282a7b256f0503b8c8fe246 (patch)
treea097077aa8e31ab315541e016d7f2d3df77cca44 /org_apg
parentb9abe386cdfa222d76a6b9de9ee8c4f82cd0006b (diff)
downloadopen-keychain-511cc4af9f7e9c9a0282a7b256f0503b8c8fe246.tar.gz
open-keychain-511cc4af9f7e9c9a0282a7b256f0503b8c8fe246.tar.bz2
open-keychain-511cc4af9f7e9c9a0282a7b256f0503b8c8fe246.zip
better definition of intent filters to open from file managers
Diffstat (limited to 'org_apg')
-rw-r--r--org_apg/AndroidManifest.xml144
-rw-r--r--org_apg/res/values/strings.xml7
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java59
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java8
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java9
5 files changed, 130 insertions, 97 deletions
diff --git a/org_apg/AndroidManifest.xml b/org_apg/AndroidManifest.xml
index 2fdbd5e45..fe1bffaee 100644
--- a/org_apg/AndroidManifest.xml
+++ b/org_apg/AndroidManifest.xml
@@ -18,10 +18,31 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.thialfihar.android.apg"
android:installLocation="auto"
- android:versionCode="50"
+ android:versionCode="20000"
android:versionName="2.0" >
- <!-- APG 2 starting with versionCode 50! -->
+ <!--
+ General remarks
+ ===============
+ - APG 2 starting with versionCode 20000!
+
+
+ Registration of APG to file types
+ =================================
+ General remarks about file ending conventions:
+ - *.gpg for binary files
+ - *.asc for ascii armored files
+
+ The actual content can be anything.
+ The file ending only shows if it is binary or ascii encoded.
+
+ Remarks about the ugly android:pathPattern:
+ We are matching all files with a specific file ending.
+ This is done in an ugly way because of Android limitations.
+ Read http://stackoverflow.com/questions/1733195/android-intent-filter-for-a-particular-file-extension
+ and http://stackoverflow.com/questions/3400072/pathpattern-to-match-file-extension-does-not-work-if-a-period-exists-elsewhere-i/8599921
+ for more information.
+ -->
<uses-sdk
android:minSdkVersion="7"
@@ -67,6 +88,55 @@
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
+ <intent-filter android:label="@string/intent_import_key" >
+ <action android:name="org.thialfihar.android.apg.intent.IMPORT" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+
+ <data android:mimeType="*/*" />
+ </intent-filter>
+ <intent-filter android:label="@string/intent_import_key" >
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data android:host="*" />
+ <data android:scheme="file" />
+ <data android:scheme="content" />
+ <data android:mimeType="*/*" />
+ <data android:pathPattern=".*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
+ </intent-filter>
+ <intent-filter android:label="@string/intent_import_key" >
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data android:host="*" />
+ <data android:scheme="file" />
+ <data android:scheme="content" />
+ <data android:mimeType="*/*" />
+ <data android:pathPattern=".*\\.asc" />
+ <data android:pathPattern=".*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.asc" />
+ <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.asc" />
+ </intent-filter>
<meta-data
android:name="android.app.searchable"
@@ -168,23 +238,7 @@
<data android:mimeType="*/*" />
</intent-filter>
-
- <!--
- General remarks about file ending conventions:
- - *.gpg for binary files
- - *.asc for ascii armored files
-
- The actual content can be anything.
- The file ending only shows if it is binary or ascii encoded.
-
- Remarks about the ugly android:pathPattern:
- We are matching all files with a specific file ending.
- This is done in an ugly way because of Android limitations.
- Read http://stackoverflow.com/questions/1733195/android-intent-filter-for-a-particular-file-extension
- and http://stackoverflow.com/questions/3400072/pathpattern-to-match-file-extension-does-not-work-if-a-period-exists-elsewhere-i/8599921
- for more information.
- -->
- <intent-filter>
+ <intent-filter android:label="@string/intent_decrypt_file" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
@@ -205,7 +259,7 @@
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gpg" />
</intent-filter>
- <intent-filter>
+ <intent-filter android:label="@string/intent_decrypt_file" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
@@ -227,47 +281,6 @@
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.asc" />
</intent-filter>
</activity>
- <!-- <activity -->
- <!-- android:name=".deprecated.GeneralActivity" -->
- <!-- android:configChanges="orientation|screenSize|keyboardHidden|keyboard" -->
- <!-- android:label="@string/app_name" -->
- <!-- android:theme="@android:style/Theme.Dialog" > -->
- <!-- <intent-filter> -->
- <!-- <action android:name="android.intent.action.VIEW" /> -->
- <!-- <action android:name="android.intent.action.SEND" /> -->
-
-
- <!-- <category android:name="android.intent.category.DEFAULT" /> -->
-
-
- <!-- <data -->
- <!-- android:mimeType="*/*" -->
- <!-- android:scheme="file" /> -->
- <!-- </intent-filter> -->
- <!-- <intent-filter> -->
- <!-- <action android:name="android.intent.action.VIEW" /> -->
- <!-- <action android:name="android.intent.action.SEND" /> -->
-
-
- <!-- <category android:name="android.intent.category.DEFAULT" /> -->
- <!-- </intent-filter> -->
- <!-- <intent-filter> -->
- <!-- <action android:name="android.intent.action.VIEW" /> -->
- <!-- <action android:name="android.intent.action.SEND" /> -->
-
-
- <!-- <category android:name="android.intent.category.DEFAULT" /> -->
-
-
- <!-- <data -->
- <!-- android:mimeType="text/*" -->
- <!-- android:scheme="" /> -->
- <!-- </intent-filter> -->
- <!-- </activity> -->
- <activity
- android:name=".ui.MailListActivity"
- android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
- android:label="@string/title_mailInbox" />
<activity
android:name=".ui.KeyServerQueryActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
@@ -301,6 +314,11 @@
<service android:name=".service.PassphraseCacheService" />
<service android:name=".service.ApgService" />
+ <provider
+ android:name=".provider.DataProvider"
+ android:authorities="org.thialfihar.android.apg.provider"
+ android:readPermission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS" />
+
<!-- TODO: need to be moved into new service model -->
<service
android:name=".deprecated.ApgService2"
@@ -318,10 +336,6 @@
</service>
<provider
- android:name=".provider.DataProvider"
- android:authorities="org.thialfihar.android.apg.provider"
- android:readPermission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS" />
- <provider
android:name=".deprecated.ApgServiceBlobProvider"
android:authorities="org.thialfihar.android.apg.provider.apgserviceblobprovider"
android:permission="org.thialfihar.android.apg.permission.STORE_BLOBS" />
diff --git a/org_apg/res/values/strings.xml b/org_apg/res/values/strings.xml
index 5783386e9..e5bc7504e 100644
--- a/org_apg/res/values/strings.xml
+++ b/org_apg/res/values/strings.xml
@@ -334,10 +334,15 @@
<string name="help_about_version">Version:</string>
<!-- Import from QR Code -->
-
<string name="import_from_qr_code_import">Import key (only locally)</string>
<string name="import_from_qr_code_import_sign_and_upload">Import, Sign, and upload key</string>
<string name="import_from_qr_code_scan_again">Scan qr code again</string>
<string name="import_from_qr_code_finish">Finish</string>
+ <!-- Intent labels -->
+ <string name="intent_decrypt_file">APG: Decrypt File</string>
+ <string name="intent_import_key">APG: Import Key</string>
+ <string name="intent_send_encrypt">APG: Encrypt</string>
+ <string name="intent_send_decrypt">APG: Decrypt</string>
+
</resources> \ No newline at end of file
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java
index b2463c5ac..e9b26935c 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java
@@ -251,26 +251,39 @@ public class DecryptActivity extends SherlockFragmentActivity {
mSource.showNext();
}
+ boolean decryptImmediately = false;
+
mIntent = getIntent();
+
+ // handled separately from other actions as it uses mIntent.setAction()
if (Intent.ACTION_VIEW.equals(mIntent.getAction())) {
- Uri uri = mIntent.getData();
- try {
- InputStream attachment = getContentResolver().openInputStream(uri);
- ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
- byte bytes[] = new byte[1 << 16];
- int length;
- while ((length = attachment.read(bytes)) > 0) {
- byteOut.write(bytes, 0, length);
- }
- byteOut.close();
- String data = new String(byteOut.toByteArray());
- mMessage.setText(data);
- } catch (FileNotFoundException e) {
- // ignore, then
- } catch (IOException e) {
- // ignore, then
- }
- } else if (ACTION_DECRYPT.equals(mIntent.getAction())) {
+
+ // TODO: old implementation of ACTION_VIEW. Is this used in K9?
+
+ // Uri uri = mIntent.getData();
+ // try {
+ // InputStream attachment = getContentResolver().openInputStream(uri);
+ // ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ // byte bytes[] = new byte[1 << 16];
+ // int length;
+ // while ((length = attachment.read(bytes)) > 0) {
+ // byteOut.write(bytes, 0, length);
+ // }
+ // byteOut.close();
+ // String data = new String(byteOut.toByteArray());
+ // mMessage.setText(data);
+ // } catch (FileNotFoundException e) {
+ // // ignore, then
+ // } catch (IOException e) {
+ // // ignore, then
+ // }
+
+ // same as ACTION_DECRYPT_FILE but decrypt it immediately
+ mIntent.setAction(ACTION_DECRYPT_FILE);
+ decryptImmediately = true;
+ }
+
+ if (ACTION_DECRYPT.equals(mIntent.getAction())) {
Log.d(Constants.TAG, "Apg Intent DECRYPT startet");
Bundle extras = mIntent.getExtras();
if (extras == null) {
@@ -317,10 +330,7 @@ public class DecryptActivity extends SherlockFragmentActivity {
mReplyTo = extras.getString(EXTRA_REPLY_TO);
mSubject = extras.getString(EXTRA_SUBJECT);
} else if (ACTION_DECRYPT_FILE.equals(mIntent.getAction())) {
- mInputFilename = mIntent.getDataString();
- if ("file".equals(mIntent.getScheme())) {
- mInputFilename = Uri.decode(mInputFilename.substring(7));
- }
+ mInputFilename = mIntent.getData().getPath();
mFilename.setText(mInputFilename);
guessOutputFilename();
mSource.setInAnimation(null);
@@ -420,8 +430,9 @@ public class DecryptActivity extends SherlockFragmentActivity {
updateSource();
- if (mSource.getCurrentView().getId() == R.id.sourceMessage
- && (mMessage.getText().length() > 0 || mData != null || mContentUri != null)) {
+ if (decryptImmediately
+ || (mSource.getCurrentView().getId() == R.id.sourceMessage && (mMessage.getText()
+ .length() > 0 || mData != null || mContentUri != null))) {
decryptClicked();
}
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
index 831f33273..a65f2fc72 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
@@ -432,11 +432,9 @@ public class EncryptActivity extends SherlockFragmentActivity {
mSource.showNext();
}
} else if (ACTION_ENCRYPT_FILE.equals(mIntent.getAction())) {
- if ("file".equals(mIntent.getScheme())) {
- mInputFilename = Uri.decode(mIntent.getDataString().replace("file://", ""));
- mFilename.setText(mInputFilename);
- guessOutputFilename();
- }
+ mInputFilename = mIntent.getData().getPath();
+ mFilename.setText(mInputFilename);
+ guessOutputFilename();
mSource.setInAnimation(null);
mSource.setOutAnimation(null);
while (mSource.getCurrentView().getId() != R.id.sourceFile) {
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java
index f992862a0..c77e8b01b 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java
@@ -44,7 +44,6 @@ import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -143,9 +142,15 @@ public class KeyListActivity extends SherlockFragmentActivity {
mListAdapter = new KeyListAdapter(this, searchString);
mList.setAdapter(mListAdapter);
+ // handled separately from other actions as it uses intent.setAction()
+ if (Intent.ACTION_VIEW.equals(intent.getAction())) {
+ // same as ACTION_IMPORT invoked from a file manager
+ intent.setAction(ACTION_IMPORT);
+ }
+
if (ACTION_IMPORT.equals(intent.getAction())) {
if ("file".equals(intent.getScheme()) && intent.getDataString() != null) {
- mImportFilename = Uri.decode(intent.getDataString().replace("file://", ""));
+ mImportFilename = intent.getData().getPath();
} else {
mImportData = intent.getStringExtra(EXTRA_TEXT);
}