aboutsummaryrefslogtreecommitdiffstats
path: root/org_apg
diff options
context:
space:
mode:
Diffstat (limited to 'org_apg')
-rw-r--r--org_apg/AndroidManifest.xml12
-rw-r--r--org_apg/res/layout/key_server_preference.xml63
-rw-r--r--org_apg/res/raw/help_about.html2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ApgApplication.java2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/Constants.java3
-rw-r--r--org_apg/src/org/thialfihar/android/apg/DataDestination.java99
-rw-r--r--org_apg/src/org/thialfihar/android/apg/DataSource.java137
-rw-r--r--org_apg/src/org/thialfihar/android/apg/FileDialog.java138
-rw-r--r--org_apg/src/org/thialfihar/android/apg/HkpKeyServer.java13
-rw-r--r--org_apg/src/org/thialfihar/android/apg/Id.java33
-rw-r--r--org_apg/src/org/thialfihar/android/apg/KeyServer.java2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/Preferences.java6
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/ApgCon.java (renamed from org_apg/src/org/thialfihar/android/apg/util/ApgCon.java)6
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/ApgConInterface.java (renamed from org_apg/src/org/thialfihar/android/apg/util/ApgConInterface.java)2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/ApgService2.java (renamed from org_apg/src/org/thialfihar/android/apg/service/ApgService2.java)24
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/ApgServiceBlobDatabase.java (renamed from org_apg/src/org/thialfihar/android/apg/provider/blob/ApgServiceBlobDatabase.java)3
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/ApgServiceBlobProvider.java (renamed from org_apg/src/org/thialfihar/android/apg/provider/blob/ApgServiceBlobProvider.java)3
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/BlobContract.java (renamed from org_apg/src/org/thialfihar/android/apg/provider/blob/BlobContract.java)1
-rw-r--r--org_apg/src/org/thialfihar/android/apg/deprecated/IApgService2.aidl (renamed from org_apg/src/org/thialfihar/android/apg/service/IApgService2.aidl)2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/helper/FileHelper.java57
-rw-r--r--org_apg/src/org/thialfihar/android/apg/helper/OtherHelper.java74
-rw-r--r--org_apg/src/org/thialfihar/android/apg/helper/PGPConversionHelper.java (renamed from org_apg/src/org/thialfihar/android/apg/util/Utils.java)80
-rw-r--r--org_apg/src/org/thialfihar/android/apg/helper/PGPHelper.java (renamed from org_apg/src/org/thialfihar/android/apg/Apg.java)101
-rw-r--r--org_apg/src/org/thialfihar/android/apg/passphrase/AskForPassphrase.java10
-rw-r--r--org_apg/src/org/thialfihar/android/apg/passphrase/PassphraseCacheService.java4
-rw-r--r--org_apg/src/org/thialfihar/android/apg/provider/Database.java18
-rw-r--r--org_apg/src/org/thialfihar/android/apg/service/ApgService.java394
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/BaseActivity.java8
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java792
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/EditKeyActivity.java68
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java110
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/GeneralActivity.java24
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentAbout.java4
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentHtml.java4
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/ImportFromQRCodeActivity.java22
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java177
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/KeyServerExportActivity.java19
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/KeyServerQueryActivity.java29
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/MailListActivity.java14
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/MainActivity.java8
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/PreferencesActivity.java17
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/PreferencesKeyServerActivity.java (renamed from org_apg/src/org/thialfihar/android/apg/ui/KeyServerPreferenceActivity.java)84
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/PublicKeyListActivity.java28
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SecretKeyListActivity.java18
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java8
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SelectSecretKeyListActivity.java6
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SignKeyActivity.java40
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/dialog/FileDialogFragment.java9
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/dialog/PassphraseDialogFragment.java16
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/widget/KeyEditor.java18
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/widget/SectionView.java11
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapter.java6
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/widget/SelectSecretKeyListAdapter.java6
-rw-r--r--org_apg/src/org/thialfihar/android/apg/util/Constants.java6
-rw-r--r--org_apg/src/org/thialfihar/android/apg/util/InputData.java (renamed from org_apg/src/org/thialfihar/android/apg/InputData.java)3
-rw-r--r--org_apg/src/org/thialfihar/android/apg/util/PositionAwareInputStream.java (renamed from org_apg/src/org/thialfihar/android/apg/PositionAwareInputStream.java)2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/util/Primes.java (renamed from org_apg/src/org/thialfihar/android/apg/Primes.java)2
57 files changed, 1496 insertions, 1352 deletions
diff --git a/org_apg/AndroidManifest.xml b/org_apg/AndroidManifest.xml
index 64bb29ede..34d34c4ae 100644
--- a/org_apg/AndroidManifest.xml
+++ b/org_apg/AndroidManifest.xml
@@ -42,7 +42,7 @@
android:protectionLevel="dangerous" />
<application
- android:name="ApgApplication"
+ android:name=".ApgApplication"
android:hardwareAccelerated="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
@@ -217,9 +217,11 @@
android:configChanges="keyboardHidden|orientation|keyboard"
android:label="@string/title_preferences" />
<activity
- android:name=".ui.KeyServerPreferenceActivity"
+ android:name=".ui.PreferencesKeyServerActivity"
android:configChanges="keyboardHidden|orientation|keyboard"
- android:label="@string/title_keyServerPreference" />
+ android:label="@string/title_keyServerPreference"
+ android:uiOptions="splitActionBarWhenNarrow"
+ android:windowSoftInputMode="stateHidden" />
<activity
android:name=".ui.SignKeyActivity"
android:configChanges="keyboardHidden|orientation|keyboard"
@@ -237,7 +239,7 @@
<!-- TODO: need to be moved into new service model -->
<service
- android:name=".service.ApgService2"
+ android:name=".deprecated.ApgService2"
android:enabled="true"
android:exported="true"
android:permission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"
@@ -256,7 +258,7 @@
android:authorities="org.thialfihar.android.apg.provider"
android:readPermission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS" />
<provider
- android:name=".provider.blob.ApgServiceBlobProvider"
+ android:name=".deprecated.ApgServiceBlobProvider"
android:authorities="org.thialfihar.android.apg.provider.apgserviceblobprovider"
android:permission="org.thialfihar.android.apg.permission.STORE_BLOBS" />
</application>
diff --git a/org_apg/res/layout/key_server_preference.xml b/org_apg/res/layout/key_server_preference.xml
index 2f5645f62..e9b1d5a95 100644
--- a/org_apg/res/layout/key_server_preference.xml
+++ b/org_apg/res/layout/key_server_preference.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
+<!--
+ Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,30 +15,29 @@
limitations under the License.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:orientation="vertical">
+ android:orientation="vertical" >
<LinearLayout
android:id="@+android:id/text_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal"
+ android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:gravity="center_vertical">
+ android:orientation="horizontal" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginBottom="6sp"
android:layout_marginLeft="16sp"
android:layout_marginRight="6sp"
android:layout_marginTop="6sp"
- android:layout_marginBottom="6sp"
android:layout_weight="1"
- android:focusable="true"
- android:background="@android:drawable/menuitem_background">
+ android:background="@android:drawable/menuitem_background"
+ android:focusable="true" >
<TextView
android:id="@+id/title"
@@ -51,65 +51,40 @@
android:id="@+id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:maxLines="2" />
-
+ android:layout_below="@android:id/title"
+ android:maxLines="2"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
<ImageView
android:id="@+id/add"
+ style="@style/PlusButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
android:layout_marginLeft="4dip"
android:layout_marginRight="6dip"
- android:layout_gravity="center_vertical"
- android:clickable="true"
- style="@style/PlusButton"/>
-
+ android:clickable="true" />
</LinearLayout>
<View
android:id="@+id/separator"
android:layout_width="fill_parent"
android:layout_height="1dip"
- android:background="?android:attr/listDivider"/>
+ android:background="?android:attr/listDivider" />
<ScrollView
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
- android:orientation="vertical">
+ android:orientation="vertical" >
<LinearLayout
android:id="@+id/editors"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:orientation="vertical"/>
-
+ android:orientation="vertical" />
</ScrollView>
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- style="@android:style/ButtonBar">
-
- <Button
- android:text="@android:string/ok"
- android:id="@+id/btn_ok"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
-
- <Button
- android:text="@android:string/cancel"
- android:id="@+id/btn_cancel"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
-
- </LinearLayout>
-
-</LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/org_apg/res/raw/help_about.html b/org_apg/res/raw/help_about.html
index 62b577031..3cd5dadf7 100644
--- a/org_apg/res/raw/help_about.html
+++ b/org_apg/res/raw/help_about.html
@@ -8,7 +8,7 @@ And don't add newlines before or after p tags because of transifex -->
<p><a href="https://github.com/dschuermann/apg">https://github.com/dschuermann/apg</a></p>
<p>Android Privacy Guard (APG) is a OpenPGP implementation for Android.</p>
<p>License: Apache License v2</p>
-<p>Developer: Thialfihar (Main developer), Senecaso (QRCode, sign key, upload key), Markus Doits (AIDL), Oliver Runge, Dominik Schürmann (Version 2 and up)</p>
+<p>Developer: Thialfihar (Main developer v1.x), Senecaso (QRCode, sign key, upload key), Markus Doits (AIDL), Oliver Runge, Dominik Schürmann (Developer v2.x)</p>
<h2>Libraries</h2>
<p>• <a href="http://actionbarsherlock.com/">ActionBarSherlock</a> (Apache License v2)
diff --git a/org_apg/src/org/thialfihar/android/apg/ApgApplication.java b/org_apg/src/org/thialfihar/android/apg/ApgApplication.java
index b56e3182d..586685109 100644
--- a/org_apg/src/org/thialfihar/android/apg/ApgApplication.java
+++ b/org_apg/src/org/thialfihar/android/apg/ApgApplication.java
@@ -26,7 +26,7 @@ public class ApgApplication extends Application {
public void onCreate() {
super.onCreate();
- /** Start passphrase cache service */
+ /* Start passphrase cache service */
PassphraseCacheService.startCacheService(this);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/Constants.java b/org_apg/src/org/thialfihar/android/apg/Constants.java
index a0aaf5b5f..a9c4d04df 100644
--- a/org_apg/src/org/thialfihar/android/apg/Constants.java
+++ b/org_apg/src/org/thialfihar/android/apg/Constants.java
@@ -27,8 +27,6 @@ public final class Constants {
}
public static final class pref {
- public static final String HAS_SEEN_HELP = "seenHelp";
- public static final String HAS_SEEN_CHANGE_LOG = "seenChangeLogDialog";
public static final String DEFAULT_ENCRYPTION_ALGORITHM = "defaultEncryptionAlgorithm";
public static final String DEFAULT_HASH_ALGORITHM = "defaultHashAlgorithm";
public static final String DEFAULT_ASCII_ARMOUR = "defaultAsciiArmour";
@@ -44,6 +42,7 @@ public final class Constants {
public static final String KEY_SERVERS = "pool.sks-keyservers.net, subkeys.pgp.net, pgp.mit.edu";
}
+ // TODO: rework!
public static final class extras {
public static final String PROGRESS = "progress";
public static final String PROGRESS_MAX = "max";
diff --git a/org_apg/src/org/thialfihar/android/apg/DataDestination.java b/org_apg/src/org/thialfihar/android/apg/DataDestination.java
deleted file mode 100644
index 6fa60889c..000000000
--- a/org_apg/src/org/thialfihar/android/apg/DataDestination.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.thialfihar.android.apg;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Serializable;
-
-import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg.GeneralException;
-
-import android.content.Context;
-import android.os.Environment;
-
-public class DataDestination implements Serializable {
-
- private static final long serialVersionUID = -6478075911319320498L;
-
- private String mStreamFilename;
- private String mFilename;
- private int mMode = Id.mode.undefined;
-
- public DataDestination() {
-
- }
-
- public void setMode(int mode) {
- mMode = mode;
- }
-
- public void setFilename(String filename) {
- mFilename = filename;
- }
-
- public String getStreamFilename() {
- return mStreamFilename;
- }
-
- public OutputStream getOutputStream(Context context) throws Apg.GeneralException,
- FileNotFoundException, IOException {
- OutputStream out = null;
- mStreamFilename = null;
-
- switch (mMode) {
- case Id.mode.stream: {
- try {
- while (true) {
- mStreamFilename = Apg.generateRandomString(32);
- if (mStreamFilename == null) {
- throw new Apg.GeneralException("couldn't generate random file name");
- }
- context.openFileInput(mStreamFilename).close();
- }
- } catch (FileNotFoundException e) {
- // found a name that isn't used yet
- }
- out = context.openFileOutput(mStreamFilename, Context.MODE_PRIVATE);
- break;
- }
-
- case Id.mode.byte_array: {
- out = new ByteArrayOutputStream();
- break;
- }
-
- case Id.mode.file: {
- if (mFilename.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
- if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- throw new GeneralException(
- context.getString(R.string.error_externalStorageNotReady));
- }
- }
- out = new FileOutputStream(mFilename);
- break;
- }
-
- default: {
- break;
- }
- }
-
- return out;
- }
-}
diff --git a/org_apg/src/org/thialfihar/android/apg/DataSource.java b/org_apg/src/org/thialfihar/android/apg/DataSource.java
deleted file mode 100644
index 503e0867f..000000000
--- a/org_apg/src/org/thialfihar/android/apg/DataSource.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.thialfihar.android.apg;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-
-import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg.GeneralException;
-
-import android.content.Context;
-import android.net.Uri;
-import android.os.Environment;
-
-public class DataSource implements Serializable {
-
- private static final long serialVersionUID = 2377217399907415255L;
-
- private Uri mContentUri = null;
- private String mText = null;
- private byte[] mData = null;
-
- public DataSource() {
-
- }
-
- public void setUri(Uri uri) {
- mContentUri = uri;
- mText = null;
- mData = null;
- }
-
- public void setUri(String uri) {
- if (uri.startsWith("/")) {
- setUri(Uri.parse("file://" + uri));
- } else {
- setUri(Uri.parse(uri));
- }
- }
-
- public Uri getUri() {
- return mContentUri;
- }
-
- public void setText(String text) {
- mText = text;
- mData = null;
- mContentUri = null;
- }
-
- public void setData(byte[] data) {
- mData = data;
- mText = null;
- mContentUri = null;
- }
-
- public boolean isText() {
- return mText != null;
- }
-
- public boolean isBinary() {
- return mData != null || mContentUri != null;
- }
-
- public byte[] getBytes() {
- byte[] bytes = null;
- if (mData != null) {
- bytes = mData;
- } else {
- bytes = mText.getBytes();
- }
-
- return bytes;
- }
-
- public InputData getInputData(Context context, boolean withSize) throws GeneralException,
- FileNotFoundException, IOException {
- InputStream in = null;
- long size = 0;
-
- if (mContentUri != null) {
- if (mContentUri.getScheme().equals("file")) {
- // get the rest after "file://"
- String path = Uri.decode(mContentUri.toString().substring(7));
- if (path.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
- if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- throw new GeneralException(
- context.getString(R.string.error_externalStorageNotReady));
- }
- }
- in = new FileInputStream(path);
- File file = new File(path);
- if (withSize) {
- size = file.length();
- }
- } else {
- in = context.getContentResolver().openInputStream(mContentUri);
- if (withSize) {
- InputStream tmp = context.getContentResolver().openInputStream(mContentUri);
- size = Apg.getLengthOfStream(tmp);
- tmp.close();
- }
- }
- } else if (mText != null || mData != null) {
- byte[] bytes = null;
- if (mData != null) {
- bytes = mData;
- } else {
- bytes = mText.getBytes();
- }
- in = new ByteArrayInputStream(bytes);
- if (withSize) {
- size = bytes.length;
- }
- }
-
- return new InputData(in, size);
- }
-
-}
diff --git a/org_apg/src/org/thialfihar/android/apg/FileDialog.java b/org_apg/src/org/thialfihar/android/apg/FileDialog.java
deleted file mode 100644
index 742379a27..000000000
--- a/org_apg/src/org/thialfihar/android/apg/FileDialog.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.thialfihar.android.apg;
-
-import org.thialfihar.android.apg.R;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.net.Uri;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.Toast;
-
-/**
- *
- *
- * SHOUDL BE DELTED, DileDialogFragment is the new implementation
- *
- *
- * @author ds1
- *
- */
-public class FileDialog {
- private static EditText mFilename;
- private static ImageButton mBrowse;
- private static CheckBox mCheckBox;
- private static Activity mActivity;
- private static int mRequestCode;
-
- public static interface OnClickListener {
- public void onCancelClick();
-
- public void onOkClick(String filename, boolean checkbox);
- }
-
- public static AlertDialog build(Activity activity, String title, String message,
- String defaultFile, OnClickListener onClickListener, String fileManagerTitle,
- String fileManagerButton, String checkboxText, int requestCode) {
- // TODO: fileManagerTitle and fileManagerButton are deprecated, no use for them right now,
- // but maybe the Intent now used will someday support them again, so leaving them in
- LayoutInflater inflater = (LayoutInflater) activity
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- AlertDialog.Builder alert = new AlertDialog.Builder(activity);
-
- alert.setTitle(title);
- alert.setMessage(message);
-
- View view = inflater.inflate(R.layout.file_dialog, null);
-
- mActivity = activity;
- mFilename = (EditText) view.findViewById(R.id.input);
- mFilename.setText(defaultFile);
- mBrowse = (ImageButton) view.findViewById(R.id.btn_browse);
- mBrowse.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- openFile();
- }
- });
- mRequestCode = requestCode;
- mCheckBox = (CheckBox) view.findViewById(R.id.checkbox);
- if (checkboxText == null) {
- mCheckBox.setEnabled(false);
- mCheckBox.setVisibility(View.GONE);
- } else {
- mCheckBox.setEnabled(true);
- mCheckBox.setVisibility(View.VISIBLE);
- mCheckBox.setText(checkboxText);
- }
-
- alert.setView(view);
-
- final OnClickListener clickListener = onClickListener;
-
- alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- boolean checked = false;
- if (mCheckBox.isEnabled()) {
- checked = mCheckBox.isChecked();
- }
- clickListener.onOkClick(mFilename.getText().toString(), checked);
- }
- });
-
- alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- clickListener.onCancelClick();
- }
- });
- return alert.create();
- }
-
- public static void setFilename(String filename) {
- if (mFilename != null) {
- mFilename.setText(filename);
- }
- }
-
- /**
- * Opens the file manager to select a file to open.
- */
- private static void openFile() {
- String filename = mFilename.getText().toString();
-
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.addCategory(Intent.CATEGORY_OPENABLE);
-
- intent.setData(Uri.parse("file://" + filename));
- intent.setType("text/plain"); // only .asc or .gpg files
-
- try {
- mActivity.startActivityForResult(intent, mRequestCode);
- } catch (ActivityNotFoundException e) {
- // No compatible file manager was found.
- Toast.makeText(mActivity, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show();
- }
- }
-}
diff --git a/org_apg/src/org/thialfihar/android/apg/HkpKeyServer.java b/org_apg/src/org/thialfihar/android/apg/HkpKeyServer.java
index bfbb30c8c..aa3131a92 100644
--- a/org_apg/src/org/thialfihar/android/apg/HkpKeyServer.java
+++ b/org_apg/src/org/thialfihar/android/apg/HkpKeyServer.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2011 Senecaso
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -42,6 +44,7 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
+import org.thialfihar.android.apg.helper.PGPHelper;
import android.text.Html;
@@ -178,8 +181,8 @@ public class HkpKeyServer extends KeyServer {
KeyInfo info = new KeyInfo();
info.size = Integer.parseInt(matcher.group(1));
info.algorithm = matcher.group(2);
- info.keyId = Apg.keyFromHex(matcher.group(3));
- info.fingerPrint = Apg.getSmallFingerPrint(info.keyId);
+ info.keyId = PGPHelper.keyFromHex(matcher.group(3));
+ info.fingerPrint = PGPHelper.getSmallFingerPrint(info.keyId);
String chunks[] = matcher.group(4).split("-");
info.date = new GregorianCalendar(Integer.parseInt(chunks[0]),
Integer.parseInt(chunks[1]), Integer.parseInt(chunks[2])).getTime();
@@ -210,7 +213,7 @@ public class HkpKeyServer extends KeyServer {
HttpClient client = new DefaultHttpClient();
try {
HttpGet get = new HttpGet("http://" + mHost + ":" + mPort
- + "/pks/lookup?op=get&search=0x" + Apg.keyToHex(keyId));
+ + "/pks/lookup?op=get&search=0x" + PGPHelper.keyToHex(keyId));
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
@@ -220,7 +223,7 @@ public class HkpKeyServer extends KeyServer {
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
String data = readAll(is, EntityUtils.getContentCharSet(entity));
- Matcher matcher = Apg.PGP_PUBLIC_KEY.matcher(data);
+ Matcher matcher = PGPHelper.PGP_PUBLIC_KEY.matcher(data);
if (matcher.find()) {
return matcher.group(1);
}
@@ -234,7 +237,7 @@ public class HkpKeyServer extends KeyServer {
}
@Override
- void add(String armouredText) throws AddKeyException {
+ public void add(String armouredText) throws AddKeyException {
HttpClient client = new DefaultHttpClient();
try {
HttpPost post = new HttpPost("http://" + mHost + ":" + mPort + "/pks/add");
diff --git a/org_apg/src/org/thialfihar/android/apg/Id.java b/org_apg/src/org/thialfihar/android/apg/Id.java
index d4d23b80e..bc40f59e6 100644
--- a/org_apg/src/org/thialfihar/android/apg/Id.java
+++ b/org_apg/src/org/thialfihar/android/apg/Id.java
@@ -18,6 +18,13 @@ package org.thialfihar.android.apg;
import org.spongycastle.bcpg.CompressionAlgorithmTags;
+/**
+ *
+ * TODO:
+ *
+ * - refactor ids, some are not needed and can be done with xml
+ *
+ */
public final class Id {
public static final String TAG = "APG";
@@ -83,7 +90,7 @@ public final class Id {
// public static final int query_done = 0x21070010;
// public static final int unknown_signature_key = 0x21070011;
// }
-
+
// use only lower 16 bits due to compatibility lib
public static final class request {
public static final int public_keys = 0x00007001;
@@ -96,18 +103,18 @@ public final class Id {
public static final int import_from_qr_code = 0x00007008;
public static final int sign_key = 0x00007009;
}
-
-// public static final class request {
-// public static final int public_keys = 0x21070001;
-// public static final int secret_keys = 0x21070002;
-// public static final int filename = 0x21070003;
-// public static final int output_filename = 0x21070004;
-// public static final int key_server_preference = 0x21070005;
-// public static final int look_up_key_id = 0x21070006;
-// public static final int export_to_server = 0x21070007;
-// public static final int import_from_qr_code = 0x21070008;
-// public static final int sign_key = 0x21070009;
-// }
+
+ // public static final class request {
+ // public static final int public_keys = 0x21070001;
+ // public static final int secret_keys = 0x21070002;
+ // public static final int filename = 0x21070003;
+ // public static final int output_filename = 0x21070004;
+ // public static final int key_server_preference = 0x21070005;
+ // public static final int look_up_key_id = 0x21070006;
+ // public static final int export_to_server = 0x21070007;
+ // public static final int import_from_qr_code = 0x21070008;
+ // public static final int sign_key = 0x21070009;
+ // }
public static final class dialog {
public static final int pass_phrase = 0x21070001;
diff --git a/org_apg/src/org/thialfihar/android/apg/KeyServer.java b/org_apg/src/org/thialfihar/android/apg/KeyServer.java
index bf9335a0c..b1420ad0f 100644
--- a/org_apg/src/org/thialfihar/android/apg/KeyServer.java
+++ b/org_apg/src/org/thialfihar/android/apg/KeyServer.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2011 Senecaso
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
diff --git a/org_apg/src/org/thialfihar/android/apg/Preferences.java b/org_apg/src/org/thialfihar/android/apg/Preferences.java
index d0b19b5d0..5c7c348ed 100644
--- a/org_apg/src/org/thialfihar/android/apg/Preferences.java
+++ b/org_apg/src/org/thialfihar/android/apg/Preferences.java
@@ -1,4 +1,7 @@
/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ * Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -23,8 +26,7 @@ import android.content.SharedPreferences;
import java.util.Vector;
/**
- * Singelton Implementation of a Preference Helper
- *
+ * Singleton Implementation of a Preference Helper
*/
public class Preferences {
private static Preferences mPreferences;
diff --git a/org_apg/src/org/thialfihar/android/apg/util/ApgCon.java b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgCon.java
index 7341341d5..d4d8d9a9c 100644
--- a/org_apg/src/org/thialfihar/android/apg/util/ApgCon.java
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgCon.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg.util;
+package org.thialfihar.android.apg.deprecated;
-import org.thialfihar.android.apg.service.IApgService2;
-import org.thialfihar.android.apg.util.ApgConInterface.OnCallFinishListener;
+import org.thialfihar.android.apg.deprecated.ApgConInterface.OnCallFinishListener;
+import org.thialfihar.android.apg.deprecated.IApgService2;
import android.content.ComponentName;
import android.content.ContentResolver;
diff --git a/org_apg/src/org/thialfihar/android/apg/util/ApgConInterface.java b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgConInterface.java
index 406427231..45eb3c5ef 100644
--- a/org_apg/src/org/thialfihar/android/apg/util/ApgConInterface.java
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgConInterface.java
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg.util;
+package org.thialfihar.android.apg.deprecated;
public interface ApgConInterface {
public static interface OnCallFinishListener {
diff --git a/org_apg/src/org/thialfihar/android/apg/service/ApgService2.java b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgService2.java
index 5b3de8050..e424c200c 100644
--- a/org_apg/src/org/thialfihar/android/apg/service/ApgService2.java
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgService2.java
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg.service;
+package org.thialfihar.android.apg.deprecated;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -25,19 +25,19 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import org.thialfihar.android.apg.Apg;
-import org.thialfihar.android.apg.service.IApgService2;
+import org.thialfihar.android.apg.deprecated.IApgService2;
import org.thialfihar.android.apg.Id;
-import org.thialfihar.android.apg.InputData;
import org.thialfihar.android.apg.Preferences;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.service.IApgService2.Stub;
+import org.thialfihar.android.apg.deprecated.IApgService2.Stub;
import org.thialfihar.android.apg.Id.database;
import org.thialfihar.android.apg.R.string;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
import org.thialfihar.android.apg.provider.KeyRings;
import org.thialfihar.android.apg.provider.Keys;
import org.thialfihar.android.apg.provider.UserIds;
+import org.thialfihar.android.apg.util.InputData;
import android.content.ContentResolver;
import android.content.Intent;
@@ -204,7 +204,7 @@ public class ApgService2 extends PassphraseCacheService {
typeWhere = KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?";
typeVal = new String[] { "" + pParams.get("key_type") };
}
- return qb.query(Apg.getDatabase().db(), (String[]) pParams.get("columns"), typeWhere,
+ return qb.query(PGPHelper.getDatabase().db(), (String[]) pParams.get("columns"), typeWhere,
typeVal, null, null, orderBy);
}
@@ -253,7 +253,7 @@ public class ApgService2 extends PassphraseCacheService {
long curMkey = mCursor.getLong(0);
String curUser = mCursor.getString(1);
- String curFprint = Apg.getSmallFingerPrint(curMkey);
+ String curFprint = PGPHelper.getSmallFingerPrint(curMkey);
if (LOCAL_LOGV)
Log.v(TAG, "current user: " + curUser + " (" + curFprint + ")");
if (pSearchKeys.contains(curFprint) || pSearchKeys.contains(curUser)) {
@@ -427,7 +427,7 @@ public class ApgService2 extends PassphraseCacheService {
}
private boolean prepareArgs(String pCall, Bundle pArgs, Bundle pReturn) {
- Apg.initialize(getBaseContext());
+ PGPHelper.initialize(getBaseContext());
/* add default return values for all functions */
addDefaultReturns(pReturn);
@@ -493,7 +493,7 @@ public class ApgService2 extends PassphraseCacheService {
if (LOCAL_LOGV)
Log.v(TAG, "About to encrypt");
try {
- Apg.encrypt(getBaseContext(), // context
+ PGPHelper.encrypt(getBaseContext(), // context
in, // input stream
out, // output stream
pArgs.getBoolean(arg.ARMORED_OUTPUT.name()), // ARMORED_OUTPUT
@@ -569,8 +569,8 @@ public class ApgService2 extends PassphraseCacheService {
ArrayList<String> ids = new ArrayList<String>();
while (cursor.moveToNext()) {
if (LOCAL_LOGV)
- Log.v(TAG, "adding key " + Apg.getSmallFingerPrint(cursor.getLong(0)));
- fPrints.add(Apg.getSmallFingerPrint(cursor.getLong(0)));
+ Log.v(TAG, "adding key " + PGPHelper.getSmallFingerPrint(cursor.getLong(0)));
+ fPrints.add(PGPHelper.getSmallFingerPrint(cursor.getLong(0)));
ids.add(cursor.getString(1));
}
cursor.close();
@@ -625,7 +625,7 @@ public class ApgService2 extends PassphraseCacheService {
if (LOCAL_LOGV)
Log.v(TAG, "About to decrypt");
try {
- Apg.decrypt(getBaseContext(), in, out, passphrase, null, // progress
+ PGPHelper.decrypt(getBaseContext(), in, out, passphrase, null, // progress
pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) != null // symmetric
);
} catch (Exception e) {
diff --git a/org_apg/src/org/thialfihar/android/apg/provider/blob/ApgServiceBlobDatabase.java b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgServiceBlobDatabase.java
index 5122f9da1..cb06ee9ae 100644
--- a/org_apg/src/org/thialfihar/android/apg/provider/blob/ApgServiceBlobDatabase.java
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgServiceBlobDatabase.java
@@ -12,9 +12,8 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg.provider.blob;
+package org.thialfihar.android.apg.deprecated;
-import org.thialfihar.android.apg.service.ApgService2;
import android.content.ContentUris;
import android.content.ContentValues;
diff --git a/org_apg/src/org/thialfihar/android/apg/provider/blob/ApgServiceBlobProvider.java b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgServiceBlobProvider.java
index b16bc398e..823aac989 100644
--- a/org_apg/src/org/thialfihar/android/apg/provider/blob/ApgServiceBlobProvider.java
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/ApgServiceBlobProvider.java
@@ -12,10 +12,9 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg.provider.blob;
+package org.thialfihar.android.apg.deprecated;
import org.thialfihar.android.apg.Constants;
-import org.thialfihar.android.apg.service.ApgService2;
import android.content.ContentProvider;
import android.content.ContentValues;
diff --git a/org_apg/src/org/thialfihar/android/apg/provider/blob/BlobContract.java b/org_apg/src/org/thialfihar/android/apg/deprecated/BlobContract.java
index dd9bd2069..0d720dabb 100644
--- a/org_apg/src/org/thialfihar/android/apg/provider/blob/BlobContract.java
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/BlobContract.java
@@ -1,3 +1,4 @@
+package org.thialfihar.android.apg.deprecated;
//package org.thialfihar.android.apg.provider.blob;
//
//import android.net.Uri;
diff --git a/org_apg/src/org/thialfihar/android/apg/service/IApgService2.aidl b/org_apg/src/org/thialfihar/android/apg/deprecated/IApgService2.aidl
index 4eba62655..8b8a35bf3 100644
--- a/org_apg/src/org/thialfihar/android/apg/service/IApgService2.aidl
+++ b/org_apg/src/org/thialfihar/android/apg/deprecated/IApgService2.aidl
@@ -1,4 +1,4 @@
-package org.thialfihar.android.apg.service;
+package org.thialfihar.android.apg.deprecated;
interface IApgService2 {
diff --git a/org_apg/src/org/thialfihar/android/apg/helper/FileHelper.java b/org_apg/src/org/thialfihar/android/apg/helper/FileHelper.java
new file mode 100644
index 000000000..9f8b3ca8c
--- /dev/null
+++ b/org_apg/src/org/thialfihar/android/apg/helper/FileHelper.java
@@ -0,0 +1,57 @@
+package org.thialfihar.android.apg.helper;
+
+import org.thialfihar.android.apg.R;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Environment;
+import android.widget.Toast;
+
+public class FileHelper {
+
+ /**
+ * Checks if external storage is mounted if file is located on external storage
+ *
+ * @param file
+ * @return true if storage is mounted
+ */
+ public static boolean isStorageMounted(String file) {
+ if (file.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
+ if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Opens the preferred installed file manager on Android and shows a toast if no manager is
+ * installed.
+ *
+ * @param activity
+ * @param filename
+ * default selected file, not supported by all file managers
+ * @param type
+ * can be text/plain for example
+ * @param requestCode
+ * requestCode used to identify the result coming back from file manager to
+ * onActivityResult() in your activity
+ */
+ public static void openFile(Activity activity, String filename, String type, int requestCode) {
+ Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ intent.setData(Uri.parse("file://" + filename));
+ intent.setType(type);
+
+ try {
+ activity.startActivityForResult(intent, requestCode);
+ } catch (ActivityNotFoundException e) {
+ // No compatible file manager was found.
+ Toast.makeText(activity, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show();
+ }
+ }
+}
diff --git a/org_apg/src/org/thialfihar/android/apg/helper/OtherHelper.java b/org_apg/src/org/thialfihar/android/apg/helper/OtherHelper.java
new file mode 100644
index 000000000..6833e9060
--- /dev/null
+++ b/org_apg/src/org/thialfihar/android/apg/helper/OtherHelper.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.thialfihar.android.apg.helper;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import android.content.Context;
+
+public class OtherHelper {
+
+ /**
+ * Reads html files from /res/raw/example.html to output them as string. See
+ * http://www.monocube.com/2011/02/08/android-tutorial-html-file-in-webview/
+ *
+ * @param context
+ * current context
+ * @param resourceID
+ * of html file to read
+ * @return content of html file with formatting
+ */
+ public static String readContentFromResource(Context context, int resourceID) {
+ InputStream raw = context.getResources().openRawResource(resourceID);
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ int i;
+ try {
+ i = raw.read();
+ while (i != -1) {
+ stream.write(i);
+ i = raw.read();
+ }
+ raw.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return stream.toString();
+ }
+
+ /**
+ * Return the number if days between two dates
+ *
+ * @param first
+ * @param second
+ * @return number of days
+ */
+ public static long getNumDaysBetween(GregorianCalendar first, GregorianCalendar second) {
+ GregorianCalendar tmp = new GregorianCalendar();
+ tmp.setTime(first.getTime());
+ long numDays = (second.getTimeInMillis() - first.getTimeInMillis()) / 1000 / 86400;
+ tmp.add(Calendar.DAY_OF_MONTH, (int) numDays);
+ while (tmp.before(second)) {
+ tmp.add(Calendar.DAY_OF_MONTH, 1);
+ ++numDays;
+ }
+ return numDays;
+ }
+
+}
diff --git a/org_apg/src/org/thialfihar/android/apg/util/Utils.java b/org_apg/src/org/thialfihar/android/apg/helper/PGPConversionHelper.java
index d8b76ad33..a406bf6e8 100644
--- a/org_apg/src/org/thialfihar/android/apg/util/Utils.java
+++ b/org_apg/src/org/thialfihar/android/apg/helper/PGPConversionHelper.java
@@ -14,14 +14,11 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg.util;
+package org.thialfihar.android.apg.helper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Vector;
@@ -29,82 +26,10 @@ import org.spongycastle.openpgp.PGPObjectFactory;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.PGPSecretKeyRing;
import org.thialfihar.android.apg.Constants;
-import org.thialfihar.android.apg.R;
-import android.app.Activity;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
import android.util.Log;
-import android.widget.Toast;
-
-public class Utils {
-
- /**
- * Opens the file manager to select a file to open.
- */
- public static void openFile(Activity activity, String filename, String type, int requestCode) {
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.addCategory(Intent.CATEGORY_OPENABLE);
-
- intent.setData(Uri.parse("file://" + filename));
- intent.setType(type);
-
- try {
- activity.startActivityForResult(intent, requestCode);
- } catch (ActivityNotFoundException e) {
- // No compatible file manager was found.
- Toast.makeText(activity, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show();
- }
- }
-
- /**
- * Reads html files from /res/raw/example.html to output them as string. See
- * http://www.monocube.com/2011/02/08/android-tutorial-html-file-in-webview/
- *
- * @param context
- * current context
- * @param resourceID
- * of html file to read
- * @return content of html file with formatting
- */
- public static String readContentFromResource(Context context, int resourceID) {
- InputStream raw = context.getResources().openRawResource(resourceID);
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- int i;
- try {
- i = raw.read();
- while (i != -1) {
- stream.write(i);
- i = raw.read();
- }
- raw.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return stream.toString();
- }
-
- /**
- * Return the number if days between two dates
- *
- * @param first
- * @param second
- * @return number of days
- */
- public static long getNumDaysBetween(GregorianCalendar first, GregorianCalendar second) {
- GregorianCalendar tmp = new GregorianCalendar();
- tmp.setTime(first.getTime());
- long numDays = (second.getTimeInMillis() - first.getTimeInMillis()) / 1000 / 86400;
- tmp.add(Calendar.DAY_OF_MONTH, (int) numDays);
- while (tmp.before(second)) {
- tmp.add(Calendar.DAY_OF_MONTH, 1);
- ++numDays;
- }
- return numDays;
- }
+public class PGPConversionHelper {
/**
* Converts Vector<PGPSecretKey> to a byte[] array to send it by intent to service
*
@@ -185,5 +110,4 @@ public class Utils {
return null;
}
}
-
}
diff --git a/org_apg/src/org/thialfihar/android/apg/Apg.java b/org_apg/src/org/thialfihar/android/apg/helper/PGPHelper.java
index 2c939f895..5eb83363f 100644
--- a/org_apg/src/org/thialfihar/android/apg/Apg.java
+++ b/org_apg/src/org/thialfihar/android/apg/helper/PGPHelper.java
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
* Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,7 +15,7 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg;
+package org.thialfihar.android.apg.helper;
import org.spongycastle.bcpg.ArmoredInputStream;
import org.spongycastle.bcpg.ArmoredOutputStream;
@@ -62,20 +63,37 @@ import org.spongycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBu
import org.spongycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
+import org.thialfihar.android.apg.Id.choice;
+import org.thialfihar.android.apg.Id.content;
+import org.thialfihar.android.apg.Id.database;
+import org.thialfihar.android.apg.Id.key;
import org.thialfihar.android.apg.Id.return_value;
+import org.thialfihar.android.apg.Id.type;
+import org.thialfihar.android.apg.Id.choice.algorithm;
+import org.thialfihar.android.apg.Id.choice.compression;
+import org.thialfihar.android.apg.Id.choice.usage;
import org.thialfihar.android.apg.KeyServer.AddKeyException;
+import org.thialfihar.android.apg.R.string;
import org.thialfihar.android.apg.passphrase.CachedPassPhrase;
import org.thialfihar.android.apg.provider.DataProvider;
import org.thialfihar.android.apg.provider.Database;
import org.thialfihar.android.apg.provider.KeyRings;
import org.thialfihar.android.apg.provider.Keys;
import org.thialfihar.android.apg.provider.UserIds;
+import org.thialfihar.android.apg.service.ApgService;
import org.thialfihar.android.apg.ui.BaseActivity;
import org.thialfihar.android.apg.ui.widget.KeyEditor;
import org.thialfihar.android.apg.ui.widget.SectionView;
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
+import org.thialfihar.android.apg.util.InputData;
import org.thialfihar.android.apg.util.IterableIterator;
-import org.thialfihar.android.apg.util.Utils;
+import org.thialfihar.android.apg.util.PositionAwareInputStream;
+import org.thialfihar.android.apg.util.Primes;
+import org.thialfihar.android.apg.Constants;
+import org.thialfihar.android.apg.HkpKeyServer;
+import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.KeyServer;
+import org.thialfihar.android.apg.ProgressDialogUpdater;
import org.thialfihar.android.apg.R;
import android.app.Activity;
@@ -122,7 +140,15 @@ import java.util.Map;
import java.util.Vector;
import java.util.regex.Pattern;
-public class Apg {
+/**
+ * TODO:
+ *
+ * - Externalize the constants
+ *
+ * - Separate this file into different helpers
+ *
+ */
+public class PGPHelper {
static {
// register spongy castle provider
@@ -161,13 +187,9 @@ public class Apg {
public static final String EXTRA_ENCRYPTED_MESSAGE = "encryptedMessage";
public static final String EXTRA_ENCRYPTED_DATA = "encryptedData";
public static final String EXTRA_RESULT_URI = "resultUri";
- public static final String EXTRA_SIGNATURE = "signature";
- public static final String EXTRA_SIGNATURE_KEY_ID = "signatureKeyId";
- public static final String EXTRA_SIGNATURE_USER_ID = "signatureUserId";
- public static final String EXTRA_SIGNATURE_SUCCESS = "signatureSuccess";
- public static final String EXTRA_SIGNATURE_UNKNOWN = "signatureUnknown";
public static final String EXTRA_SIGNATURE_DATA = "signatureData";
public static final String EXTRA_SIGNATURE_TEXT = "signatureText";
+ public static final String EXTRA_SIGNATURE_KEY_ID = "signatureKeyId";
public static final String EXTRA_USER_ID = "userId";
public static final String EXTRA_USER_IDS = "userIds";
public static final String EXTRA_KEY_ID = "keyId";
@@ -426,7 +448,7 @@ public class Apg {
public static void buildSecretKey(Context context, ArrayList<String> userIds,
ArrayList<PGPSecretKey> keys, ArrayList<Integer> keysUsages, long masterKeyId,
String oldPassPhrase, String newPassPhrase, ProgressDialogUpdater progress)
- throws Apg.GeneralException, NoSuchProviderException, PGPException,
+ throws PGPHelper.GeneralException, NoSuchProviderException, PGPException,
NoSuchAlgorithmException, SignatureException, IOException, Database.GeneralException {
if (progress != null)
@@ -1143,9 +1165,9 @@ public class Apg {
}
public static String getFingerPrint(long keyId) {
- PGPPublicKey key = Apg.getPublicKey(keyId);
+ PGPPublicKey key = PGPHelper.getPublicKey(keyId);
if (key == null) {
- PGPSecretKey secretKey = Apg.getSecretKey(keyId);
+ PGPSecretKey secretKey = PGPHelper.getSecretKey(keyId);
if (secretKey == null) {
return "";
}
@@ -1654,9 +1676,9 @@ public class Apg {
progress.setProgress(R.string.progress_done, 100, 100);
}
- public static long getDecryptionKeyId(Context context, InputData data) throws GeneralException,
- NoAsymmetricEncryptionException, IOException {
- InputStream in = PGPUtil.getDecoderStream(data.getInputStream());
+ public static long getDecryptionKeyId(Context context, InputStream inputStream)
+ throws GeneralException, NoAsymmetricEncryptionException, IOException {
+ InputStream in = PGPUtil.getDecoderStream(inputStream);
PGPObjectFactory pgpF = new PGPObjectFactory(in);
PGPEncryptedDataList enc;
Object o = pgpF.nextObject();
@@ -1700,9 +1722,9 @@ public class Apg {
return secretKey.getKeyID();
}
- public static boolean hasSymmetricEncryption(Context context, InputData data)
+ public static boolean hasSymmetricEncryption(Context context, InputStream inputStream)
throws GeneralException, IOException {
- InputStream in = PGPUtil.getDecoderStream(data.getInputStream());
+ InputStream in = PGPUtil.getDecoderStream(inputStream);
PGPObjectFactory pgpF = new PGPObjectFactory(in);
PGPEncryptedDataList enc;
Object o = pgpF.nextObject();
@@ -1850,7 +1872,7 @@ public class Apg {
if (dataChunk instanceof PGPOnePassSignatureList) {
if (progress != null)
progress.setProgress(R.string.progress_processingSignature, currentProgress, 100);
- returnData.putBoolean(EXTRA_SIGNATURE, true);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE, true);
PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk;
for (int i = 0; i < sigList.size(); ++i) {
signature = sigList.get(i);
@@ -1868,17 +1890,17 @@ public class Apg {
if (sigKeyRing != null) {
userId = getMainUserId(getMasterKey(sigKeyRing));
}
- returnData.putString(EXTRA_SIGNATURE_USER_ID, userId);
+ returnData.putString(ApgService.EXTRA_SIGNATURE_USER_ID, userId);
break;
}
}
- returnData.putLong(EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
+ returnData.putLong(ApgService.EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
if (signature != null) {
signature.initVerify(signatureKey, new BouncyCastleProvider());
} else {
- returnData.putBoolean(EXTRA_SIGNATURE_UNKNOWN, true);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE_UNKNOWN, true);
}
dataChunk = plainFact.nextObject();
@@ -1915,7 +1937,7 @@ public class Apg {
try {
signature.update(buffer, 0, n);
} catch (SignatureException e) {
- returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, false);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, false);
signature = null;
}
}
@@ -1938,9 +1960,9 @@ public class Apg {
PGPSignatureList signatureList = (PGPSignatureList) plainFact.nextObject();
PGPSignature messageSignature = signatureList.get(signatureIndex);
if (signature.verify(messageSignature)) {
- returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, true);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, true);
} else {
- returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, false);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, false);
}
}
}
@@ -1963,7 +1985,7 @@ public class Apg {
return returnData;
}
- public static Bundle verifyText(BaseActivity context, InputData data, OutputStream outStream,
+ public static Bundle verifyText(Context context, InputData data, OutputStream outStream,
ProgressDialogUpdater progress) throws IOException, GeneralException, PGPException,
SignatureException {
Bundle returnData = new Bundle();
@@ -1995,7 +2017,7 @@ public class Apg {
byte[] clearText = out.toByteArray();
outStream.write(clearText);
- returnData.putBoolean(EXTRA_SIGNATURE, true);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE, true);
if (progress != null)
progress.setProgress(R.string.progress_processingSignature, 60, 100);
@@ -2015,16 +2037,17 @@ public class Apg {
signatureKeyId = signature.getKeyID();
}
if (signatureKey == null) {
- Bundle pauseData = new Bundle();
- pauseData.putInt(Constants.extras.STATUS, Id.message.unknown_signature_key);
- pauseData.putLong(Constants.extras.KEY_ID, signatureKeyId);
- Message msg = new Message();
- msg.setData(pauseData);
- context.sendMessage(msg);
- // pause here
- context.getRunningThread().pause();
- // see whether the key was found in the meantime
- signatureKey = getPublicKey(signature.getKeyID());
+ // TODO: reimplement!
+ // Bundle pauseData = new Bundle();
+ // pauseData.putInt(Constants.extras.STATUS, Id.message.unknown_signature_key);
+ // pauseData.putLong(Constants.extras.KEY_ID, signatureKeyId);
+ // Message msg = new Message();
+ // msg.setData(pauseData);
+ // context.sendMessage(msg);
+ // // pause here
+ // context.getRunningThread().pause();
+ // // see whether the key was found in the meantime
+ // signatureKey = getPublicKey(signature.getKeyID());
}
if (signatureKey == null) {
@@ -2036,15 +2059,15 @@ public class Apg {
if (sigKeyRing != null) {
userId = getMainUserId(getMasterKey(sigKeyRing));
}
- returnData.putString(EXTRA_SIGNATURE_USER_ID, userId);
+ returnData.putString(ApgService.EXTRA_SIGNATURE_USER_ID, userId);
break;
}
}
- returnData.putLong(EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
+ returnData.putLong(ApgService.EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
if (signature == null) {
- returnData.putBoolean(EXTRA_SIGNATURE_UNKNOWN, true);
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE_UNKNOWN, true);
if (progress != null)
progress.setProgress(R.string.progress_done, 100, 100);
return returnData;
@@ -2069,7 +2092,7 @@ public class Apg {
} while (lookAhead != -1);
}
- returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, signature.verify());
+ returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, signature.verify());
if (progress != null)
progress.setProgress(R.string.progress_done, 100, 100);
diff --git a/org_apg/src/org/thialfihar/android/apg/passphrase/AskForPassphrase.java b/org_apg/src/org/thialfihar/android/apg/passphrase/AskForPassphrase.java
index 27cb0a41e..5711a16a8 100644
--- a/org_apg/src/org/thialfihar/android/apg/passphrase/AskForPassphrase.java
+++ b/org_apg/src/org/thialfihar/android/apg/passphrase/AskForPassphrase.java
@@ -20,9 +20,9 @@ import org.spongycastle.jce.provider.BouncyCastleProvider;
import org.spongycastle.openpgp.PGPException;
import org.spongycastle.openpgp.PGPPrivateKey;
import org.spongycastle.openpgp.PGPSecretKey;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.helper.PGPHelper;
import android.app.Activity;
import android.app.AlertDialog;
@@ -55,7 +55,7 @@ public class AskForPassphrase {
secretKey = null;
alert.setMessage(context.getString(R.string.passPhraseForSymmetricEncryption));
} else {
- secretKey = Apg.getMasterKey(Apg.getSecretKeyRing(secretKeyId));
+ secretKey = PGPHelper.getMasterKey(PGPHelper.getSecretKeyRing(secretKeyId));
if (secretKey == null) {
alert.setTitle(R.string.title_keyNotFound);
alert.setMessage(context.getString(R.string.keyNotFound, secretKeyId));
@@ -67,7 +67,7 @@ public class AskForPassphrase {
alert.setCancelable(false);
return alert.create();
}
- String userId = Apg.getMainUserIdSafe(context, secretKey);
+ String userId = PGPHelper.getMainUserIdSafe(context, secretKey);
alert.setMessage(context.getString(R.string.passPhraseFor, userId));
}
@@ -111,7 +111,7 @@ public class AskForPassphrase {
}
// cache again
- Apg.setCachedPassPhrase(keyId, passPhrase);
+ PGPHelper.setCachedPassPhrase(keyId, passPhrase);
// return by callback
cb.passPhraseCallback(keyId, passPhrase);
}
@@ -133,7 +133,7 @@ public class AskForPassphrase {
Log.d("APG", "Key has no passphrase!");
// cache null
- Apg.setCachedPassPhrase(secretKey.getKeyID(), null);
+ PGPHelper.setCachedPassPhrase(secretKey.getKeyID(), null);
// return by callback
cb.passPhraseCallback(secretKey.getKeyID(), null);
diff --git a/org_apg/src/org/thialfihar/android/apg/passphrase/PassphraseCacheService.java b/org_apg/src/org/thialfihar/android/apg/passphrase/PassphraseCacheService.java
index 9ef6eedb8..d38d0391f 100644
--- a/org_apg/src/org/thialfihar/android/apg/passphrase/PassphraseCacheService.java
+++ b/org_apg/src/org/thialfihar/android/apg/passphrase/PassphraseCacheService.java
@@ -14,8 +14,8 @@
package org.thialfihar.android.apg.passphrase;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Preferences;
+import org.thialfihar.android.apg.helper.PGPHelper;
import android.app.Service;
import android.content.Context;
@@ -47,7 +47,7 @@ public class PassphraseCacheService extends Service {
delay = 60000;
}
- delay = Apg.cleanUpCache(mPassPhraseCacheTtl, delay);
+ delay = PGPHelper.cleanUpCache(mPassPhraseCacheTtl, delay);
// don't check too often, even if we were close
if (delay < 5000) {
delay = 5000;
diff --git a/org_apg/src/org/thialfihar/android/apg/provider/Database.java b/org_apg/src/org/thialfihar/android/apg/provider/Database.java
index 8040eb56c..40e2b9203 100644
--- a/org_apg/src/org/thialfihar/android/apg/provider/Database.java
+++ b/org_apg/src/org/thialfihar/android/apg/provider/Database.java
@@ -19,8 +19,8 @@ import org.spongycastle.openpgp.PGPPublicKey;
import org.spongycastle.openpgp.PGPPublicKeyRing;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.PGPSecretKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.util.IterableIterator;
import android.content.ContentValues;
@@ -318,11 +318,11 @@ public class Database extends SQLiteOpenHelper {
values.put(Keys.IS_MASTER_KEY, key.isMasterKey());
values.put(Keys.ALGORITHM, key.getAlgorithm());
values.put(Keys.KEY_SIZE, key.getBitStrength());
- values.put(Keys.CAN_SIGN, Apg.isSigningKey(key));
- values.put(Keys.CAN_ENCRYPT, Apg.isEncryptionKey(key));
+ values.put(Keys.CAN_SIGN, PGPHelper.isSigningKey(key));
+ values.put(Keys.CAN_ENCRYPT, PGPHelper.isEncryptionKey(key));
values.put(Keys.IS_REVOKED, key.isRevoked());
- values.put(Keys.CREATION, Apg.getCreationDate(key).getTime() / 1000);
- Date expiryDate = Apg.getExpiryDate(key);
+ values.put(Keys.CREATION, PGPHelper.getCreationDate(key).getTime() / 1000);
+ Date expiryDate = PGPHelper.getExpiryDate(key);
if (expiryDate != null) {
values.put(Keys.EXPIRY, expiryDate.getTime() / 1000);
}
@@ -367,11 +367,11 @@ public class Database extends SQLiteOpenHelper {
values.put(Keys.IS_MASTER_KEY, key.isMasterKey());
values.put(Keys.ALGORITHM, key.getPublicKey().getAlgorithm());
values.put(Keys.KEY_SIZE, key.getPublicKey().getBitStrength());
- values.put(Keys.CAN_SIGN, Apg.isSigningKey(key));
- values.put(Keys.CAN_ENCRYPT, Apg.isEncryptionKey(key));
+ values.put(Keys.CAN_SIGN, PGPHelper.isSigningKey(key));
+ values.put(Keys.CAN_ENCRYPT, PGPHelper.isEncryptionKey(key));
values.put(Keys.IS_REVOKED, key.getPublicKey().isRevoked());
- values.put(Keys.CREATION, Apg.getCreationDate(key).getTime() / 1000);
- Date expiryDate = Apg.getExpiryDate(key);
+ values.put(Keys.CREATION, PGPHelper.getCreationDate(key).getTime() / 1000);
+ Date expiryDate = PGPHelper.getExpiryDate(key);
if (expiryDate != null) {
values.put(Keys.EXPIRY, expiryDate.getTime() / 1000);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/service/ApgService.java b/org_apg/src/org/thialfihar/android/apg/service/ApgService.java
index 6123beee8..ca9d7a817 100644
--- a/org_apg/src/org/thialfihar/android/apg/service/ApgService.java
+++ b/org_apg/src/org/thialfihar/android/apg/service/ApgService.java
@@ -28,23 +28,23 @@ import java.util.ArrayList;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.PGPSecretKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
-import org.thialfihar.android.apg.InputData;
import org.thialfihar.android.apg.Preferences;
import org.thialfihar.android.apg.ProgressDialogUpdater;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg.GeneralException;
+import org.thialfihar.android.apg.helper.FileHelper;
+import org.thialfihar.android.apg.helper.PGPHelper;
+import org.thialfihar.android.apg.helper.PGPHelper.GeneralException;
+import org.thialfihar.android.apg.helper.PGPConversionHelper;
import org.thialfihar.android.apg.provider.DataProvider;
-import org.thialfihar.android.apg.util.Utils;
+import org.thialfihar.android.apg.util.InputData;
import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Environment;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
@@ -55,7 +55,16 @@ import android.util.Log;
* data from the activities or other apps, queues these intents, executes them, and stops itself
* after doing them.
*/
-// TODO: ProgressDialogUpdater rework???
+
+/**
+ * TODO:
+ *
+ * - ProgressDialogUpdater rework???
+ *
+ * - put recurring things into private functions when possible
+ *
+ *
+ */
public class ApgService extends IntentService implements ProgressDialogUpdater {
// extras that can be given by intent
@@ -64,6 +73,26 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
public static final String EXTRA_DATA = "data";
// keys for data bundle
+
+ // encrypt
+ public static final String SECRET_KEY_ID = "secret_key_id";
+ public static final String USE_ASCII_AMOR = "use_ascii_amor";
+ public static final String ENCRYPTION_KEYS_IDS = "encryption_keys_ids";
+ public static final String SIGNATURE_KEY_ID = "signature_key_id";
+ public static final String COMPRESSION_ID = "compression_id";
+ public static final String GENERATE_SIGNATURE = "generate_signature";
+ public static final String SIGN_ONLY = "sign_only";
+ public static final String MESSAGE_BYTES = "message_bytes";
+ public static final String INPUT_FILE = "input_file";
+ public static final String OUTPUT_FILE = "output_file";
+ public static final String PROVIDER_URI = "provider_uri";
+
+ // decrypt
+ public static final String SIGNED_ONLY = "signed_only";
+ public static final String RETURN_BYTES = "return_binary";
+ public static final String CIPHERTEXT_BYTES = "ciphertext_bytes";
+ public static final String ASSUME_SYMMETRIC = "assume_symmetric";
+
// edit keys
public static final String NEW_PASSPHRASE = "new_passphrase";
public static final String CURRENT_PASSPHRASE = "current_passphrase";
@@ -78,41 +107,44 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
public static final String SYMMETRIC_PASSPHRASE = "passphrase";
public static final String MASTER_KEY = "master_key";
- // encrypt
- public static final String SECRET_KEY_ID = "secret_key_id";
- public static final String USE_ASCII_AMOR = "use_ascii_amor";
- public static final String ENCRYPTION_KEYS_IDS = "encryption_keys_ids";
- public static final String SIGNATURE_KEY_ID = "signature_key_id";
- public static final String COMPRESSION_ID = "compression_id";
- public static final String GENERATE_SIGNATURE = "generate_signature";
- public static final String SIGN_ONLY = "sign_only";
- public static final String BYTES = "bytes";
- public static final String INPUT_FILE = "input_file";
- public static final String OUTPUT_FILE = "output_file";
- public static final String PROVIDER_URI = "provider_uri";
-
// delete file securely
public static final String DELETE_FILE = "delete_file";
- // possible ints for EXTRA_ACTION
- public static final int ACTION_SAVE_KEYRING = 1;
- public static final int ACTION_GENERATE_KEY = 2;
- public static final int ACTION_GENERATE_DEFAULT_RSA_KEYS = 3;
+ // possible EXTRA_ACTIONs
+ public static final int ACTION_ENCRYPT_SIGN_BYTES = 10;
+ public static final int ACTION_ENCRYPT_SIGN_FILE = 11;
+ public static final int ACTION_ENCRYPT_SIGN_STREAM = 12;
- public static final int ACTION_ENCRYPT_SIGN_BYTES = 4;
- public static final int ACTION_ENCRYPT_SIGN_FILE = 5;
- public static final int ACTION_ENCRYPT_SIGN_STREAM = 6;
+ public static final int ACTION_DECRYPT_BYTES = 20;
+ public static final int ACTION_DECRYPT_FILE = 21;
+ public static final int ACTION_DECRYPT_STREAM = 22;
- public static final int ACTION_DELETE_FILE_SECURELY = 7;
+ public static final int ACTION_SAVE_KEYRING = 30;
+ public static final int ACTION_GENERATE_KEY = 31;
+ public static final int ACTION_GENERATE_DEFAULT_RSA_KEYS = 32;
+
+ public static final int ACTION_DELETE_FILE_SECURELY = 40;
// possible data keys as result
+ // keys
public static final String RESULT_NEW_KEY = "new_key";
public static final String RESULT_NEW_KEY2 = "new_key2";
- public static final String RESULT_SIGNATURE_DATA = "signatureData";
- public static final String RESULT_SIGNATURE_TEXT = "signatureText";
- public static final String RESULT_ENCRYPTED_MESSAGE = "encryptedMessage";
- public static final String RESULT_ENCRYPTED_DATA = "encryptedData";
- public static final String RESULT_URI = "resultUri";
+
+ // encrypt
+ public static final String RESULT_SIGNATURE_DATA = "signature_data";
+ public static final String RESULT_SIGNATURE_TEXT = "signature_text";
+ public static final String RESULT_ENCRYPTED_MESSAGE = "encrypted_message";
+ public static final String RESULT_ENCRYPTED_DATA = "encrypted_data";
+ public static final String RESULT_URI = "result_uri";
+
+ // decrypt
+ public static final String RESULT_DECRYPTED_MESSAGE = "decrypted_message";
+ public static final String RESULT_DECRYPTED_DATA = "decrypted_data";
+ public static final String EXTRA_SIGNATURE = "signature";
+ public static final String EXTRA_SIGNATURE_KEY_ID = "signature_key_id";
+ public static final String EXTRA_SIGNATURE_USER_ID = "signature_user_id";
+ public static final String EXTRA_SIGNATURE_SUCCESS = "signature_success";
+ public static final String EXTRA_SIGNATURE_UNKNOWN = "signature_unknown";
Messenger mMessenger;
@@ -149,7 +181,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_SAVE_KEYRING:
try {
- // Input
+ /* Input */
String oldPassPhrase = data.getString(CURRENT_PASSPHRASE);
String newPassPhrase = data.getString(NEW_PASSPHRASE);
if (newPassPhrase == null) {
@@ -157,19 +189,19 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
}
@SuppressWarnings("unchecked")
ArrayList<String> userIds = (ArrayList<String>) data.getSerializable(USER_IDS);
- ArrayList<PGPSecretKey> keys = Utils.BytesToPGPSecretKeyList(data
+ ArrayList<PGPSecretKey> keys = PGPConversionHelper.BytesToPGPSecretKeyList(data
.getByteArray(KEYS));
@SuppressWarnings("unchecked")
ArrayList<Integer> keysUsages = (ArrayList<Integer>) data
.getSerializable(KEYS_USAGES);
long masterKeyId = data.getLong(MASTER_KEY_ID);
- // Operation
- Apg.buildSecretKey(this, userIds, keys, keysUsages, masterKeyId, oldPassPhrase,
- newPassPhrase, this);
- Apg.setCachedPassPhrase(masterKeyId, newPassPhrase);
+ /* Operation */
+ PGPHelper.buildSecretKey(this, userIds, keys, keysUsages, masterKeyId,
+ oldPassPhrase, newPassPhrase, this);
+ PGPHelper.setCachedPassPhrase(masterKeyId, newPassPhrase);
- // Output
+ /* Output */
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
} catch (Exception e) {
sendErrorToHandler(e);
@@ -180,22 +212,24 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_GENERATE_KEY:
try {
- // Input
+ /* Input */
int algorithm = data.getInt(ALGORITHM);
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
int keysize = data.getInt(KEY_SIZE);
PGPSecretKey masterKey = null;
if (data.containsKey(MASTER_KEY)) {
- masterKey = Utils.BytesToPGPSecretKey(data.getByteArray(MASTER_KEY));
+ masterKey = PGPConversionHelper.BytesToPGPSecretKey(data
+ .getByteArray(MASTER_KEY));
}
- // Operation
- PGPSecretKeyRing newKeyRing = Apg.createKey(this, algorithm, keysize, passphrase,
- masterKey);
+ /* Operation */
+ PGPSecretKeyRing newKeyRing = PGPHelper.createKey(this, algorithm, keysize,
+ passphrase, masterKey);
- // Output
+ /* Output */
Bundle resultData = new Bundle();
- resultData.putByteArray(RESULT_NEW_KEY, Utils.PGPSecretKeyRingToBytes(newKeyRing));
+ resultData.putByteArray(RESULT_NEW_KEY,
+ PGPConversionHelper.PGPSecretKeyRingToBytes(newKeyRing));
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
} catch (Exception e) {
sendErrorToHandler(e);
@@ -206,20 +240,22 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_GENERATE_DEFAULT_RSA_KEYS:
// generate one RSA 2048 key for signing and one subkey for encrypting!
try {
+ /* Input */
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
- // Operation
- PGPSecretKeyRing masterKeyRing = Apg.createKey(this, Id.choice.algorithm.rsa, 2048,
- passphrase, null);
+ /* Operation */
+ PGPSecretKeyRing masterKeyRing = PGPHelper.createKey(this, Id.choice.algorithm.rsa,
+ 2048, passphrase, null);
- PGPSecretKeyRing subKeyRing = Apg.createKey(this, Id.choice.algorithm.rsa, 2048,
- passphrase, masterKeyRing.getSecretKey());
+ PGPSecretKeyRing subKeyRing = PGPHelper.createKey(this, Id.choice.algorithm.rsa,
+ 2048, passphrase, masterKeyRing.getSecretKey());
- // Output
+ /* Output */
Bundle resultData = new Bundle();
resultData.putByteArray(RESULT_NEW_KEY,
- Utils.PGPSecretKeyRingToBytes(masterKeyRing));
- resultData.putByteArray(RESULT_NEW_KEY2, Utils.PGPSecretKeyRingToBytes(subKeyRing));
+ PGPConversionHelper.PGPSecretKeyRingToBytes(masterKeyRing));
+ resultData.putByteArray(RESULT_NEW_KEY2,
+ PGPConversionHelper.PGPSecretKeyRingToBytes(subKeyRing));
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
} catch (Exception e) {
sendErrorToHandler(e);
@@ -230,11 +266,11 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_ENCRYPT_SIGN_BYTES:
try {
- // Input
+ /* Input */
long secretKeyId = data.getLong(SECRET_KEY_ID);
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
- byte[] bytes = data.getByteArray(BYTES);
+ byte[] bytes = data.getByteArray(MESSAGE_BYTES);
boolean useAsciiArmour = data.getBoolean(USE_ASCII_AMOR);
long encryptionKeyIds[] = data.getLongArray(ENCRYPTION_KEYS_IDS);
@@ -243,7 +279,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
boolean signOnly = data.getBoolean(SIGN_ONLY);
- // Operation
+ /* Operation */
ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
int inLength = bytes.length;
@@ -252,20 +288,20 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
if (generateSignature) {
Log.d(Constants.TAG, "generate signature...");
- Apg.generateSignature(this, inputData, outStream, useAsciiArmour, false,
- secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
+ PGPHelper.generateSignature(this, inputData, outStream, useAsciiArmour, false,
+ secretKeyId, PGPHelper.getCachedPassPhrase(secretKeyId), Preferences
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
.getPreferences(this).getForceV3Signatures(), this);
} else if (signOnly) {
Log.d(Constants.TAG, "sign only...");
- Apg.signText(this, inputData, outStream, secretKeyId, Apg
+ PGPHelper.signText(this, inputData, outStream, secretKeyId, PGPHelper
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
.getForceV3Signatures(), this);
} else {
Log.d(Constants.TAG, "encrypt...");
- Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
- signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
+ PGPHelper.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
+ signatureKeyId, PGPHelper.getCachedPassPhrase(signatureKeyId), this,
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
@@ -274,7 +310,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
outStream.close();
- // Output
+ /* Output */
Bundle resultData = new Bundle();
if (useAsciiArmour) {
@@ -302,7 +338,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_ENCRYPT_SIGN_FILE:
try {
- // Input
+ /* Input */
long secretKeyId = data.getLong(SECRET_KEY_ID);
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
@@ -316,51 +352,41 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
boolean signOnly = data.getBoolean(SIGN_ONLY);
+ /* Operation */
+ // check if storage is ready
+ if (!FileHelper.isStorageMounted(inputFile)
+ || !FileHelper.isStorageMounted(outputFile)) {
+ sendErrorToHandler(new GeneralException(
+ getString(R.string.error_externalStorageNotReady)));
+ return;
+ }
+
// InputStream
long inLength = -1;
- FileInputStream inStream = null;
- if (inputFile.startsWith(Environment.getExternalStorageDirectory()
- .getAbsolutePath())) {
- if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- sendErrorToHandler(new GeneralException(
- getString(R.string.error_externalStorageNotReady)));
- return;
- }
- }
- inStream = new FileInputStream(inputFile);
+ FileInputStream inStream = new FileInputStream(inputFile);
File file = new File(inputFile);
inLength = file.length();
-
InputData inputData = new InputData(inStream, inLength);
// OutputStream
- if (outputFile.startsWith(Environment.getExternalStorageDirectory()
- .getAbsolutePath())) {
- if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- sendErrorToHandler(new GeneralException(
- getString(R.string.error_externalStorageNotReady)));
- return;
- }
- }
FileOutputStream outStream = new FileOutputStream(outputFile);
- // Operation
if (generateSignature) {
Log.d(Constants.TAG, "generate signature...");
- Apg.generateSignature(this, inputData, outStream, useAsciiArmour, true,
- secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
+ PGPHelper.generateSignature(this, inputData, outStream, useAsciiArmour, true,
+ secretKeyId, PGPHelper.getCachedPassPhrase(secretKeyId), Preferences
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
.getPreferences(this).getForceV3Signatures(), this);
} else if (signOnly) {
Log.d(Constants.TAG, "sign only...");
- Apg.signText(this, inputData, outStream, secretKeyId, Apg
+ PGPHelper.signText(this, inputData, outStream, secretKeyId, PGPHelper
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
.getForceV3Signatures(), this);
} else {
Log.d(Constants.TAG, "encrypt...");
- Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
- signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
+ PGPHelper.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
+ signatureKeyId, PGPHelper.getCachedPassPhrase(signatureKeyId), this,
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
@@ -369,6 +395,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
outStream.close();
+ /* Output */
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
} catch (Exception e) {
sendErrorToHandler(e);
@@ -377,7 +404,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_ENCRYPT_SIGN_STREAM:
try {
- // Input
+ /* Input */
long secretKeyId = data.getLong(SECRET_KEY_ID);
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
@@ -389,20 +416,21 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
int compressionId = data.getInt(COMPRESSION_ID);
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
boolean signOnly = data.getBoolean(SIGN_ONLY);
-
+
+ /* Operation */
// InputStream
InputStream in = getContentResolver().openInputStream(providerUri);
- long inLength = Apg.getLengthOfStream(in);
-
+ long inLength = PGPHelper.getLengthOfStream(in);
InputData inputData = new InputData(in, inLength);
// OutputStream
String streamFilename = null;
try {
while (true) {
- streamFilename = Apg.generateRandomString(32);
+ streamFilename = PGPHelper.generateRandomString(32);
if (streamFilename == null) {
- throw new Apg.GeneralException("couldn't generate random file name");
+ throw new PGPHelper.GeneralException(
+ "couldn't generate random file name");
}
openFileInput(streamFilename).close();
}
@@ -411,20 +439,19 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
}
FileOutputStream outStream = openFileOutput(streamFilename, Context.MODE_PRIVATE);
- // Operation
if (generateSignature) {
- Apg.generateSignature(this, inputData, outStream, useAsciiArmour, true,
- secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
+ PGPHelper.generateSignature(this, inputData, outStream, useAsciiArmour, true,
+ secretKeyId, PGPHelper.getCachedPassPhrase(secretKeyId), Preferences
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
.getPreferences(this).getForceV3Signatures(), this);
} else if (signOnly) {
- Apg.signText(this, inputData, outStream, secretKeyId, Apg
+ PGPHelper.signText(this, inputData, outStream, secretKeyId, PGPHelper
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
.getForceV3Signatures(), this);
} else {
- Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
- signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
+ PGPHelper.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
+ signatureKeyId, PGPHelper.getCachedPassPhrase(signatureKeyId), this,
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
@@ -433,7 +460,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
outStream.close();
- // Output
+ /* Output */
Bundle resultData = new Bundle();
String uri = "content://" + DataProvider.AUTHORITY + "/data/" + streamFilename;
@@ -448,21 +475,21 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
case ACTION_DELETE_FILE_SECURELY:
try {
- // Input
+ /* Input */
String deleteFile = data.getString(DELETE_FILE);
- // Operation
+ /* Operation */
try {
- Apg.deleteFileSecurely(this, new File(deleteFile), this);
+ PGPHelper.deleteFileSecurely(this, new File(deleteFile), this);
} catch (FileNotFoundException e) {
- throw new Apg.GeneralException(getString(R.string.error_fileNotFound,
+ throw new PGPHelper.GeneralException(getString(R.string.error_fileNotFound,
deleteFile));
} catch (IOException e) {
- throw new Apg.GeneralException(getString(R.string.error_fileDeleteFailed,
+ throw new PGPHelper.GeneralException(getString(R.string.error_fileDeleteFailed,
deleteFile));
}
- // Output
+ /* Output */
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
} catch (Exception e) {
sendErrorToHandler(e);
@@ -470,6 +497,157 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
break;
+ case ACTION_DECRYPT_BYTES:
+ try {
+ /* Input */
+ long secretKeyId = data.getLong(SECRET_KEY_ID);
+ byte[] bytes = data.getByteArray(CIPHERTEXT_BYTES);
+ boolean signedOnly = data.getBoolean(SIGNED_ONLY);
+ boolean returnBytes = data.getBoolean(RETURN_BYTES);
+ boolean assumeSymmetricEncryption = data.getBoolean(ASSUME_SYMMETRIC);
+
+ /* Operation */
+ ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
+ int inLength = bytes.length;
+
+ InputData inputData = new InputData(inStream, inLength);
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+
+ Bundle resultData = new Bundle();
+
+ // verifyText and decrypt returning additional resultData values for the
+ // verification of signatures
+ if (signedOnly) {
+ resultData = PGPHelper.verifyText(this, inputData, outStream, this);
+ } else {
+ resultData = PGPHelper.decrypt(this, inputData, outStream,
+ PGPHelper.getCachedPassPhrase(secretKeyId), this,
+ assumeSymmetricEncryption);
+ }
+
+ outStream.close();
+
+ /* Output */
+ if (returnBytes) {
+ byte output[] = outStream.toByteArray();
+ resultData.putByteArray(RESULT_DECRYPTED_DATA, output);
+ } else {
+ String output = new String(outStream.toByteArray());
+ resultData.putString(RESULT_DECRYPTED_MESSAGE, output);
+ }
+
+ sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
+ } catch (Exception e) {
+ sendErrorToHandler(e);
+ }
+
+ break;
+
+ case ACTION_DECRYPT_FILE:
+ try {
+ /* Input */
+ long secretKeyId = data.getLong(SECRET_KEY_ID);
+ boolean signedOnly = data.getBoolean(SIGNED_ONLY);
+ boolean assumeSymmetricEncryption = data.getBoolean(ASSUME_SYMMETRIC);
+
+ String inputFile = data.getString(INPUT_FILE);
+ String outputFile = data.getString(OUTPUT_FILE);
+
+ /* Operation */
+ // check if storage is ready
+ if (!FileHelper.isStorageMounted(inputFile)
+ || !FileHelper.isStorageMounted(outputFile)) {
+ sendErrorToHandler(new GeneralException(
+ getString(R.string.error_externalStorageNotReady)));
+ return;
+ }
+
+ // InputStream
+ long inLength = -1;
+ FileInputStream inStream = new FileInputStream(inputFile);
+ File file = new File(inputFile);
+ inLength = file.length();
+ InputData inputData = new InputData(inStream, inLength);
+
+ // OutputStream
+ FileOutputStream outStream = new FileOutputStream(outputFile);
+
+ Bundle resultData = new Bundle();
+
+ // verifyText and decrypt returning additional output values for the
+ // verification of signatures
+ if (signedOnly) {
+ resultData = PGPHelper.verifyText(this, inputData, outStream, this);
+ } else {
+ resultData = PGPHelper.decrypt(this, inputData, outStream,
+ PGPHelper.getCachedPassPhrase(secretKeyId), this,
+ assumeSymmetricEncryption);
+ }
+
+ outStream.close();
+
+ /* Output */
+ sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
+ } catch (Exception e) {
+ sendErrorToHandler(e);
+ }
+ break;
+
+ case ACTION_DECRYPT_STREAM:
+ try {
+ /* Input */
+ long secretKeyId = data.getLong(SECRET_KEY_ID);
+ boolean signedOnly = data.getBoolean(SIGNED_ONLY);
+ boolean assumeSymmetricEncryption = data.getBoolean(ASSUME_SYMMETRIC);
+ Uri providerUri = Uri.parse(data.getString(PROVIDER_URI));
+
+ /* Operation */
+ // InputStream
+ InputStream in = getContentResolver().openInputStream(providerUri);
+ long inLength = PGPHelper.getLengthOfStream(in);
+ InputData inputData = new InputData(in, inLength);
+
+ // OutputStream
+ String streamFilename = null;
+ try {
+ while (true) {
+ streamFilename = PGPHelper.generateRandomString(32);
+ if (streamFilename == null) {
+ throw new PGPHelper.GeneralException(
+ "couldn't generate random file name");
+ }
+ openFileInput(streamFilename).close();
+ }
+ } catch (FileNotFoundException e) {
+ // found a name that isn't used yet
+ }
+ FileOutputStream outStream = openFileOutput(streamFilename, Context.MODE_PRIVATE);
+
+ Bundle resultData = new Bundle();
+
+ // verifyText and decrypt returning additional output values for the
+ // verification of signatures
+ if (signedOnly) {
+ resultData = PGPHelper.verifyText(this, inputData, outStream, this);
+ } else {
+ resultData = PGPHelper.decrypt(this, inputData, outStream,
+ PGPHelper.getCachedPassPhrase(secretKeyId), this,
+ assumeSymmetricEncryption);
+ }
+
+ outStream.close();
+
+ /* Output */
+ String uri = "content://" + DataProvider.AUTHORITY + "/data/" + streamFilename;
+ resultData.putString(RESULT_URI, uri);
+
+ sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
+ } catch (Exception e) {
+ sendErrorToHandler(e);
+ }
+
+ break;
+
default:
break;
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/BaseActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/BaseActivity.java
index 5310c2fb9..39fc30347 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/BaseActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/BaseActivity.java
@@ -21,12 +21,12 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.PausableThread;
import org.thialfihar.android.apg.Preferences;
import org.thialfihar.android.apg.ProgressDialogUpdater;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.passphrase.AskForPassphrase;
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
@@ -79,7 +79,7 @@ public class BaseActivity extends SherlockFragmentActivity implements Runnable,
// not needed later:
mPreferences = Preferences.getPreferences(this);
- Apg.initialize(this);
+ PGPHelper.initialize(this);
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File dir = new File(Constants.path.APP_DIR);
@@ -275,7 +275,7 @@ public class BaseActivity extends SherlockFragmentActivity implements Runnable,
case Id.request.secret_keys: {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
- setSecretKeyId(bundle.getLong(Apg.EXTRA_KEY_ID));
+ setSecretKeyId(bundle.getLong(PGPHelper.EXTRA_KEY_ID));
} else {
setSecretKeyId(Id.key.none);
}
@@ -378,7 +378,7 @@ public class BaseActivity extends SherlockFragmentActivity implements Runnable,
public void passPhraseCallback(long keyId, String passPhrase) {
// TODO: Not needed anymore, now implemented in AskForSecretKeyPass
- Apg.setCachedPassPhrase(keyId, passPhrase);
+ PGPHelper.setCachedPassPhrase(keyId, passPhrase);
}
public void sendMessage(Message msg) {
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 63adb9826..a19f6c5b6 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/DecryptActivity.java
@@ -19,31 +19,40 @@ package org.thialfihar.android.apg.ui;
import org.spongycastle.jce.provider.BouncyCastleProvider;
import org.spongycastle.openpgp.PGPException;
import org.spongycastle.openpgp.PGPPublicKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
-import org.thialfihar.android.apg.DataDestination;
-import org.thialfihar.android.apg.DataSource;
-import org.thialfihar.android.apg.FileDialog;
import org.thialfihar.android.apg.Id;
-import org.thialfihar.android.apg.InputData;
import org.thialfihar.android.apg.PausableThread;
+import org.thialfihar.android.apg.helper.FileHelper;
+import org.thialfihar.android.apg.helper.PGPHelper;
+import org.thialfihar.android.apg.helper.OtherHelper;
+import org.thialfihar.android.apg.helper.PGPHelper.GeneralException;
import org.thialfihar.android.apg.provider.DataProvider;
+import org.thialfihar.android.apg.service.ApgHandler;
+import org.thialfihar.android.apg.service.ApgService;
+import org.thialfihar.android.apg.ui.dialog.DeleteFileDialogFragment;
+import org.thialfihar.android.apg.ui.dialog.FileDialogFragment;
+import org.thialfihar.android.apg.ui.dialog.PassphraseDialogFragment;
+import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
import org.thialfihar.android.apg.util.Compatibility;
-import org.thialfihar.android.apg.util.Utils;
+import org.thialfihar.android.apg.util.InputData;
import org.thialfihar.android.apg.R;
import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.os.Message;
+import android.os.Messenger;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
@@ -57,8 +66,10 @@ import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -67,7 +78,7 @@ import java.security.Security;
import java.security.SignatureException;
import java.util.regex.Matcher;
-public class DecryptActivity extends BaseActivity {
+public class DecryptActivity extends SherlockFragmentActivity {
private long mSignatureKeyId = 0;
private Intent mIntent;
@@ -110,11 +121,24 @@ public class DecryptActivity extends BaseActivity {
private byte[] mData = null;
private boolean mReturnBinary = false;
- private DataSource mDataSource = null;
- private DataDestination mDataDestination = null;
+ // private DataSource mDataSource = null;
+ // private DataDestination mDataDestination = null;
private long mUnknownSignatureKeyId = 0;
+ private long mSecretKeyId = Id.key.none;
+
+ private ProgressDialogFragment mDecryptingDialog;
+ private FileDialogFragment mFileDialog;
+
+ public void setSecretKeyId(long id) {
+ mSecretKeyId = id;
+ }
+
+ public long getSecretKeyId() {
+ return mSecretKeyId;
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
@@ -163,6 +187,18 @@ public class DecryptActivity extends BaseActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.decrypt);
+ // set actionbar without home button if called from another app
+ final ActionBar actionBar = getSupportActionBar();
+ Log.d(Constants.TAG, "calling package (only set when using startActivityForResult)="
+ + getCallingPackage());
+ if (getCallingPackage() != null && getCallingPackage().equals(PGPHelper.PACKAGE_NAME)) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
+ } else {
+ actionBar.setDisplayHomeAsUpEnabled(false);
+ actionBar.setHomeButtonEnabled(false);
+ }
+
mSource = (ViewFlipper) findViewById(R.id.source);
mSourceLabel = (TextView) findViewById(R.id.sourceLabel);
mSourcePrevious = (ImageView) findViewById(R.id.sourcePrevious);
@@ -213,7 +249,7 @@ public class DecryptActivity extends BaseActivity {
mBrowse = (ImageButton) findViewById(R.id.btn_browse);
mBrowse.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- Utils.openFile(DecryptActivity.this, mFilename.getText().toString(), "*/*",
+ FileHelper.openFile(DecryptActivity.this, mFilename.getText().toString(), "*/*",
Id.request.filename);
}
});
@@ -246,7 +282,7 @@ public class DecryptActivity extends BaseActivity {
} catch (IOException e) {
// ignore, then
}
- } else if (Apg.Intent.DECRYPT.equals(mIntent.getAction())) {
+ } else if (PGPHelper.Intent.DECRYPT.equals(mIntent.getAction())) {
Log.d(Constants.TAG, "Apg Intent DECRYPT startet");
Bundle extras = mIntent.getExtras();
if (extras == null) {
@@ -256,17 +292,17 @@ public class DecryptActivity extends BaseActivity {
Log.d(Constants.TAG, "got extras");
}
- mData = extras.getByteArray(Apg.EXTRA_DATA);
+ mData = extras.getByteArray(PGPHelper.EXTRA_DATA);
String textData = null;
if (mData == null) {
Log.d(Constants.TAG, "EXTRA_DATA was null");
- textData = extras.getString(Apg.EXTRA_TEXT);
+ textData = extras.getString(PGPHelper.EXTRA_TEXT);
} else {
Log.d(Constants.TAG, "Got data from EXTRA_DATA");
}
if (textData != null) {
Log.d(Constants.TAG, "textData null, matching text ...");
- Matcher matcher = Apg.PGP_MESSAGE.matcher(textData);
+ Matcher matcher = PGPHelper.PGP_MESSAGE.matcher(textData);
if (matcher.matches()) {
Log.d(Constants.TAG, "PGP_MESSAGE matched");
textData = matcher.group(1);
@@ -274,7 +310,7 @@ public class DecryptActivity extends BaseActivity {
textData = textData.replaceAll("\\xa0", " ");
mMessage.setText(textData);
} else {
- matcher = Apg.PGP_SIGNED_MESSAGE.matcher(textData);
+ matcher = PGPHelper.PGP_SIGNED_MESSAGE.matcher(textData);
if (matcher.matches()) {
Log.d(Constants.TAG, "PGP_SIGNED_MESSAGE matched");
textData = matcher.group(1);
@@ -290,9 +326,9 @@ public class DecryptActivity extends BaseActivity {
}
}
}
- mReplyTo = extras.getString(Apg.EXTRA_REPLY_TO);
- mSubject = extras.getString(Apg.EXTRA_SUBJECT);
- } else if (Apg.Intent.DECRYPT_FILE.equals(mIntent.getAction())) {
+ mReplyTo = extras.getString(PGPHelper.EXTRA_REPLY_TO);
+ mSubject = extras.getString(PGPHelper.EXTRA_SUBJECT);
+ } else if (PGPHelper.Intent.DECRYPT_FILE.equals(mIntent.getAction())) {
mInputFilename = mIntent.getDataString();
if ("file".equals(mIntent.getScheme())) {
mInputFilename = Uri.decode(mInputFilename.substring(7));
@@ -304,37 +340,27 @@ public class DecryptActivity extends BaseActivity {
while (mSource.getCurrentView().getId() != R.id.sourceFile) {
mSource.showNext();
}
- } else if (Apg.Intent.DECRYPT_AND_RETURN.equals(mIntent.getAction())) {
+ } else if (PGPHelper.Intent.DECRYPT_AND_RETURN.equals(mIntent.getAction())) {
mContentUri = mIntent.getData();
Bundle extras = mIntent.getExtras();
if (extras == null) {
extras = new Bundle();
}
- // set actionbar without home button if called from another app
- final ActionBar actionBar = getSupportActionBar();
- if (getCallingPackage() != null && getCallingPackage().equals(Apg.PACKAGE_NAME)) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setHomeButtonEnabled(true);
- } else {
- actionBar.setDisplayHomeAsUpEnabled(false);
- actionBar.setHomeButtonEnabled(false);
- }
-
- mReturnBinary = extras.getBoolean(Apg.EXTRA_BINARY, false);
+ mReturnBinary = extras.getBoolean(PGPHelper.EXTRA_BINARY, false);
if (mContentUri == null) {
- mData = extras.getByteArray(Apg.EXTRA_DATA);
- String data = extras.getString(Apg.EXTRA_TEXT);
+ mData = extras.getByteArray(PGPHelper.EXTRA_DATA);
+ String data = extras.getString(PGPHelper.EXTRA_TEXT);
if (data != null) {
- Matcher matcher = Apg.PGP_MESSAGE.matcher(data);
+ Matcher matcher = PGPHelper.PGP_MESSAGE.matcher(data);
if (matcher.matches()) {
data = matcher.group(1);
// replace non breakable spaces
data = data.replaceAll("\\xa0", " ");
mMessage.setText(data);
} else {
- matcher = Apg.PGP_SIGNED_MESSAGE.matcher(data);
+ matcher = PGPHelper.PGP_SIGNED_MESSAGE.matcher(data);
if (matcher.matches()) {
data = matcher.group(1);
// replace non breakable spaces
@@ -358,9 +384,9 @@ public class DecryptActivity extends BaseActivity {
String data = "";
if (clipboardText != null) {
- Matcher matcher = Apg.PGP_MESSAGE.matcher(clipboardText);
+ Matcher matcher = PGPHelper.PGP_MESSAGE.matcher(clipboardText);
if (!matcher.matches()) {
- matcher = Apg.PGP_SIGNED_MESSAGE.matcher(clipboardText);
+ matcher = PGPHelper.PGP_SIGNED_MESSAGE.matcher(clipboardText);
}
if (matcher.matches()) {
data = matcher.group(1);
@@ -376,11 +402,11 @@ public class DecryptActivity extends BaseActivity {
if (mSignatureKeyId == 0) {
return;
}
- PGPPublicKeyRing key = Apg.getPublicKeyRing(mSignatureKeyId);
+ PGPPublicKeyRing key = PGPHelper.getPublicKeyRing(mSignatureKeyId);
if (key != null) {
Intent intent = new Intent(DecryptActivity.this, KeyServerQueryActivity.class);
- intent.setAction(Apg.Intent.LOOK_UP_KEY_ID);
- intent.putExtra(Apg.EXTRA_KEY_ID, mSignatureKeyId);
+ intent.setAction(PGPHelper.Intent.LOOK_UP_KEY_ID);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, mSignatureKeyId);
startActivity(intent);
}
}
@@ -483,7 +509,7 @@ public class DecryptActivity extends BaseActivity {
if (mDecryptTarget == Id.target.message) {
String messageData = mMessage.getText().toString();
- Matcher matcher = Apg.PGP_SIGNED_MESSAGE.matcher(messageData);
+ Matcher matcher = PGPHelper.PGP_SIGNED_MESSAGE.matcher(messageData);
if (matcher.matches()) {
mSignedOnly = true;
decryptStart();
@@ -493,248 +519,466 @@ public class DecryptActivity extends BaseActivity {
// else treat it as an decrypted message/file
mSignedOnly = false;
- String error = null;
- fillDataSource();
+
+ getDecryptionKeyFromInputStream();
+
+ Log.d(Constants.TAG, "secretKeyId: " + getSecretKeyId());
+
+ // if we need a symmetric passphrase or a passphrase to use a sekret key ask for it
+ if (getSecretKeyId() == Id.key.symmetric
+ || PGPHelper.getCachedPassPhrase(getSecretKeyId()) == null) {
+ // showDialog(Id.dialog.pass_phrase);
+ showPassphraseDialog();
+ } else {
+ if (mDecryptTarget == Id.target.file) {
+ askForOutputFilename();
+ } else {
+ decryptStart();
+ }
+ }
+ }
+
+ /**
+ * Shows passphrase dialog to cache a new passphrase the user enters for using it later for
+ * encryption. Based on mSecretKeyId it asks for a passphrase to open a private key or it asks
+ * for a symmetric passphrase
+ */
+ private void showPassphraseDialog() {
+ // Message is received after passphrase is cached
+ Handler returnHandler = new Handler() {
+ @Override
+ public void handleMessage(Message message) {
+ if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) {
+ if (mDecryptTarget == Id.target.file) {
+ askForOutputFilename();
+ } else {
+ decryptStart();
+ }
+ }
+ }
+ };
+
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(returnHandler);
+
try {
- InputData in = mDataSource.getInputData(this, false);
+ PassphraseDialogFragment passphraseDialog = PassphraseDialogFragment.newInstance(
+ messenger, mSecretKeyId);
+
+ passphraseDialog.show(getSupportFragmentManager(), "passphraseDialog");
+ } catch (PGPHelper.GeneralException e) {
+ Log.d(Constants.TAG, "No passphrase for this secret key, encrypt directly!");
+ // send message to handler to start encryption directly
+ returnHandler.sendEmptyMessage(PassphraseDialogFragment.MESSAGE_OKAY);
+ }
+ }
+
+ /**
+ * TODO: externalize this into ApgService???
+ */
+ private void getDecryptionKeyFromInputStream() {
+ InputStream inStream = null;
+ if (mContentUri != null) {
+ try {
+ inStream = getContentResolver().openInputStream(mContentUri);
+ } catch (FileNotFoundException e) {
+ Log.e(Constants.TAG, "File not found!", e);
+ Toast.makeText(this, getString(R.string.error_fileNotFound, e.getMessage()),
+ Toast.LENGTH_SHORT).show();
+ }
+ } else if (mDecryptTarget == Id.target.file) {
+ // check if storage is ready
+ if (!FileHelper.isStorageMounted(mInputFilename)) {
+ Toast.makeText(this, getString(R.string.error_externalStorageNotReady),
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+
try {
- setSecretKeyId(Apg.getDecryptionKeyId(this, in));
+ inStream = new FileInputStream(mInputFilename);
+ } catch (FileNotFoundException e) {
+ Log.e(Constants.TAG, "File not found!", e);
+ Toast.makeText(this, getString(R.string.error_fileNotFound, e.getMessage()),
+ Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ if (mData != null) {
+ inStream = new ByteArrayInputStream(mData);
+ } else {
+ inStream = new ByteArrayInputStream(mMessage.getText().toString().getBytes());
+
+ }
+ }
+
+ try {
+ try {
+ setSecretKeyId(PGPHelper.getDecryptionKeyId(this, inStream));
if (getSecretKeyId() == Id.key.none) {
- throw new Apg.GeneralException(getString(R.string.error_noSecretKeyFound));
+ throw new PGPHelper.GeneralException(getString(R.string.error_noSecretKeyFound));
}
mAssumeSymmetricEncryption = false;
- } catch (Apg.NoAsymmetricEncryptionException e) {
+ } catch (PGPHelper.NoAsymmetricEncryptionException e) {
setSecretKeyId(Id.key.symmetric);
- in = mDataSource.getInputData(this, false);
- if (!Apg.hasSymmetricEncryption(this, in)) {
- throw new Apg.GeneralException(getString(R.string.error_noKnownEncryptionFound));
+ if (!PGPHelper.hasSymmetricEncryption(this, inStream)) {
+ throw new PGPHelper.GeneralException(
+ getString(R.string.error_noKnownEncryptionFound));
}
mAssumeSymmetricEncryption = true;
}
-
- if (getSecretKeyId() == Id.key.symmetric
- || Apg.getCachedPassPhrase(getSecretKeyId()) == null) {
- showDialog(Id.dialog.pass_phrase);
- } else {
- if (mDecryptTarget == Id.target.file) {
- askForOutputFilename();
- } else {
- decryptStart();
- }
- }
- } catch (FileNotFoundException e) {
- error = getString(R.string.error_fileNotFound);
- } catch (IOException e) {
- error = "" + e;
- } catch (Apg.GeneralException e) {
- error = "" + e;
- }
- if (error != null) {
- Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
- .show();
+ } catch (Exception e) {
+ Toast.makeText(this, getString(R.string.errorMessage, e.getMessage()),
+ Toast.LENGTH_SHORT).show();
}
}
private void replyClicked() {
Intent intent = new Intent(this, EncryptActivity.class);
- intent.setAction(Apg.Intent.ENCRYPT);
+ intent.setAction(PGPHelper.Intent.ENCRYPT);
String data = mMessage.getText().toString();
data = data.replaceAll("(?m)^", "> ");
data = "\n\n" + data;
- intent.putExtra(Apg.EXTRA_TEXT, data);
- intent.putExtra(Apg.EXTRA_SUBJECT, "Re: " + mSubject);
- intent.putExtra(Apg.EXTRA_SEND_TO, mReplyTo);
- intent.putExtra(Apg.EXTRA_SIGNATURE_KEY_ID, getSecretKeyId());
- intent.putExtra(Apg.EXTRA_ENCRYPTION_KEY_IDS, new long[] { mSignatureKeyId });
+ intent.putExtra(PGPHelper.EXTRA_TEXT, data);
+ intent.putExtra(PGPHelper.EXTRA_SUBJECT, "Re: " + mSubject);
+ intent.putExtra(PGPHelper.EXTRA_SEND_TO, mReplyTo);
+ intent.putExtra(PGPHelper.EXTRA_SIGNATURE_KEY_ID, getSecretKeyId());
+ intent.putExtra(PGPHelper.EXTRA_ENCRYPTION_KEY_IDS, new long[] { mSignatureKeyId });
startActivity(intent);
}
private void askForOutputFilename() {
- showDialog(Id.dialog.output_filename);
- }
+ // Message is received after passphrase is cached
+ Handler returnHandler = new Handler() {
+ @Override
+ public void handleMessage(Message message) {
+ if (message.what == FileDialogFragment.MESSAGE_OKAY) {
+ Bundle data = message.getData();
+ mOutputFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME);
+ decryptStart();
+ }
+ }
+ };
+
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(returnHandler);
+
+ mFileDialog = FileDialogFragment.newInstance(messenger,
+ getString(R.string.title_decryptToFile),
+ getString(R.string.specifyFileToDecryptTo), mOutputFilename, null,
+ Id.request.output_filename);
+
+ mFileDialog.show(getSupportFragmentManager(), "fileDialog");
- @Override
- public void passPhraseCallback(long keyId, String passPhrase) {
- super.passPhraseCallback(keyId, passPhrase);
- if (mDecryptTarget == Id.target.file) {
- askForOutputFilename();
- } else {
- decryptStart();
- }
}
private void decryptStart() {
- showDialog(Id.dialog.decrypting);
- startThread();
- }
+ Log.d(Constants.TAG, "decryptStart");
- @Override
- public void run() {
- String error = null;
- Security.addProvider(new BouncyCastleProvider());
+ // Send all information needed to service to edit key in other thread
+ Intent intent = new Intent(this, ApgService.class);
+ // fill values for this action
Bundle data = new Bundle();
- Message msg = new Message();
- fillDataSource();
- fillDataDestination();
- try {
- InputData in = mDataSource.getInputData(this, true);
- OutputStream out = mDataDestination.getOutputStream(this);
- if (mSignedOnly) {
- data = Apg.verifyText(this, in, out, this);
- } else {
- data = Apg.decrypt(this, in, out, Apg.getCachedPassPhrase(getSecretKeyId()), this,
- mAssumeSymmetricEncryption);
- }
+ // choose action based on input: decrypt stream, file or bytes
+ if (mContentUri != null) {
+ intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_DECRYPT_STREAM);
+ data.putString(ApgService.PROVIDER_URI, mContentUri.toString());
- out.close();
+ } else if (mDecryptTarget == Id.target.file) {
+ intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_DECRYPT_FILE);
- if (mDataDestination.getStreamFilename() != null) {
- data.putString(Apg.EXTRA_RESULT_URI, "content://" + DataProvider.AUTHORITY
- + "/data/" + mDataDestination.getStreamFilename());
- } else if (mDecryptTarget == Id.target.message) {
- if (mReturnBinary) {
- data.putByteArray(Apg.EXTRA_DECRYPTED_DATA,
- ((ByteArrayOutputStream) out).toByteArray());
- } else {
- data.putString(Apg.EXTRA_DECRYPTED_MESSAGE, new String(
- ((ByteArrayOutputStream) out).toByteArray()));
- }
+ Log.d(Constants.TAG, "mInputFilename=" + mInputFilename + ", mOutputFilename="
+ + mOutputFilename);
+
+ data.putString(ApgService.INPUT_FILE, mInputFilename);
+ data.putString(ApgService.OUTPUT_FILE, mOutputFilename);
+
+ } else {
+ intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_DECRYPT_BYTES);
+
+ if (mData != null) {
+ data.putByteArray(ApgService.CIPHERTEXT_BYTES, mData);
+ } else {
+ String message = mMessage.getText().toString();
+ data.putByteArray(ApgService.CIPHERTEXT_BYTES, message.getBytes());
}
- } catch (PGPException e) {
- error = "" + e;
- } catch (IOException e) {
- error = "" + e;
- } catch (SignatureException e) {
- error = "" + e;
- } catch (Apg.GeneralException e) {
- error = "" + e;
}
- data.putInt(Constants.extras.STATUS, Id.message.done);
+ data.putLong(ApgService.SECRET_KEY_ID, getSecretKeyId());
- if (error != null) {
- data.putString(Apg.EXTRA_ERROR, error);
- }
+ data.putBoolean(ApgService.SIGNED_ONLY, mSignedOnly);
+ data.putBoolean(ApgService.RETURN_BYTES, mReturnBinary);
+ data.putBoolean(ApgService.ASSUME_SYMMETRIC, mAssumeSymmetricEncryption);
- msg.setData(data);
- sendMessage(msg);
- }
+ intent.putExtra(ApgService.EXTRA_DATA, data);
- @Override
- public void handlerCallback(Message msg) {
- Bundle data = msg.getData();
- if (data == null) {
- return;
- }
+ // create progress dialog
+ mDecryptingDialog = ProgressDialogFragment.newInstance(R.string.progress_decrypting,
+ ProgressDialog.STYLE_HORIZONTAL);
- if (data.getInt(Constants.extras.STATUS) == Id.message.unknown_signature_key) {
- mUnknownSignatureKeyId = data.getLong(Constants.extras.KEY_ID);
- showDialog(Id.dialog.lookup_unknown_key);
- return;
- }
+ // Message is received after encrypting is done in ApgService
+ ApgHandler saveHandler = new ApgHandler(this, mDecryptingDialog) {
+ public void handleMessage(Message message) {
+ // handle messages by standard ApgHandler first
+ super.handleMessage(message);
- super.handlerCallback(msg);
- }
+ if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
+ // get returned data bundle
+ Bundle data = message.getData();
- @Override
- public void doneCallback(Message msg) {
- super.doneCallback(msg);
+ mSignatureKeyId = 0;
+ mSignatureLayout.setVisibility(View.GONE);
+ mReplyEnabled = false;
- Bundle data = msg.getData();
- removeDialog(Id.dialog.decrypting);
- mSignatureKeyId = 0;
- mSignatureLayout.setVisibility(View.GONE);
- mReplyEnabled = false;
+ // build new action bar
+ invalidateOptionsMenu();
- // build new action bar
- invalidateOptionsMenu();
+ Toast.makeText(DecryptActivity.this, R.string.decryptionSuccessful,
+ Toast.LENGTH_SHORT).show();
+ if (mReturnResult) {
+ Intent intent = new Intent();
+ intent.putExtras(data);
+ setResult(RESULT_OK, intent);
+ finish();
+ return;
+ }
- String error = data.getString(Apg.EXTRA_ERROR);
- if (error != null) {
- Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
- .show();
- return;
- }
+ switch (mDecryptTarget) {
+ case Id.target.message: {
+ String decryptedMessage = data
+ .getString(ApgService.RESULT_DECRYPTED_MESSAGE);
+ mMessage.setText(decryptedMessage);
+ mMessage.setHorizontallyScrolling(false);
+ mReplyEnabled = false;
- Toast.makeText(this, R.string.decryptionSuccessful, Toast.LENGTH_SHORT).show();
- if (mReturnResult) {
- Intent intent = new Intent();
- intent.putExtras(data);
- setResult(RESULT_OK, intent);
- finish();
- return;
- }
+ // build new action bar
+ invalidateOptionsMenu();
+ break;
+ }
- switch (mDecryptTarget) {
- case Id.target.message: {
- String decryptedMessage = data.getString(Apg.EXTRA_DECRYPTED_MESSAGE);
- mMessage.setText(decryptedMessage);
- mMessage.setHorizontallyScrolling(false);
- mReplyEnabled = false;
+ case Id.target.file: {
+ if (mDeleteAfter.isChecked()) {
+ // Create and show dialog to delete original file
+ DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment
+ .newInstance(mInputFilename);
+ deleteFileDialog.show(getSupportFragmentManager(), "deleteDialog");
+ }
+ break;
+ }
- // build new action bar
- invalidateOptionsMenu();
- break;
- }
+ default: {
+ // shouldn't happen
+ break;
+ }
+ }
- case Id.target.file: {
- if (mDeleteAfter.isChecked()) {
- setDeleteFile(mInputFilename);
- showDialog(Id.dialog.delete_file);
- }
- break;
- }
+ if (data.getBoolean(ApgService.EXTRA_SIGNATURE)) {
+ String userId = data.getString(ApgService.EXTRA_SIGNATURE_USER_ID);
+ mSignatureKeyId = data.getLong(ApgService.EXTRA_SIGNATURE_KEY_ID);
+ mUserIdRest
+ .setText("id: " + PGPHelper.getSmallFingerPrint(mSignatureKeyId));
+ if (userId == null) {
+ userId = getResources().getString(R.string.unknownUserId);
+ }
+ String chunks[] = userId.split(" <", 2);
+ userId = chunks[0];
+ if (chunks.length > 1) {
+ mUserIdRest.setText("<" + chunks[1]);
+ }
+ mUserId.setText(userId);
+
+ if (data.getBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS)) {
+ mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
+ } else if (data.getBoolean(ApgService.EXTRA_SIGNATURE_UNKNOWN)) {
+ mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
+ Toast.makeText(DecryptActivity.this,
+ R.string.unknownSignatureKeyTouchToLookUp, Toast.LENGTH_LONG)
+ .show();
+ } else {
+ mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
+ }
+ mSignatureLayout.setVisibility(View.VISIBLE);
+ }
+ }
+ };
+ };
- default: {
- // shouldn't happen
- break;
- }
- }
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(saveHandler);
+ intent.putExtra(ApgService.EXTRA_MESSENGER, messenger);
- if (data.getBoolean(Apg.EXTRA_SIGNATURE)) {
- String userId = data.getString(Apg.EXTRA_SIGNATURE_USER_ID);
- mSignatureKeyId = data.getLong(Apg.EXTRA_SIGNATURE_KEY_ID);
- mUserIdRest.setText("id: " + Apg.getSmallFingerPrint(mSignatureKeyId));
- if (userId == null) {
- userId = getResources().getString(R.string.unknownUserId);
- }
- String chunks[] = userId.split(" <", 2);
- userId = chunks[0];
- if (chunks.length > 1) {
- mUserIdRest.setText("<" + chunks[1]);
- }
- mUserId.setText(userId);
-
- if (data.getBoolean(Apg.EXTRA_SIGNATURE_SUCCESS)) {
- mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
- } else if (data.getBoolean(Apg.EXTRA_SIGNATURE_UNKNOWN)) {
- mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
- Toast.makeText(this, R.string.unknownSignatureKeyTouchToLookUp, Toast.LENGTH_LONG)
- .show();
- } else {
- mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
- }
- mSignatureLayout.setVisibility(View.VISIBLE);
- }
+ // show progress dialog
+ mDecryptingDialog.show(getSupportFragmentManager(), "decryptingDialog");
+
+ // start service with intent
+ startService(intent);
}
+ // @Override
+ // public void run() {
+ // String error = null;
+ // Security.addProvider(new BouncyCastleProvider());
+ //
+ // Bundle data = new Bundle();
+ // Message msg = new Message();
+ // fillDataSource();
+ // fillDataDestination();
+ // try {
+ // InputData in = mDataSource.getInputData(this, true);
+ // OutputStream out = mDataDestination.getOutputStream(this);
+ //
+ // if (mSignedOnly) {
+ // data = Apg.verifyText(this, in, out, this);
+ // } else {
+ // data = Apg.decrypt(this, in, out, Apg.getCachedPassPhrase(getSecretKeyId()), this,
+ // mAssumeSymmetricEncryption);
+ // }
+ //
+ // out.close();
+ //
+ // if (mDataDestination.getStreamFilename() != null) {
+ // data.putString(Apg.EXTRA_RESULT_URI, "content://" + DataProvider.AUTHORITY
+ // + "/data/" + mDataDestination.getStreamFilename());
+ // } else if (mDecryptTarget == Id.target.message) {
+ // if (mReturnBinary) {
+ // data.putByteArray(Apg.EXTRA_DECRYPTED_DATA,
+ // ((ByteArrayOutputStream) out).toByteArray());
+ // } else {
+ // data.putString(Apg.EXTRA_DECRYPTED_MESSAGE, new String(
+ // ((ByteArrayOutputStream) out).toByteArray()));
+ // }
+ // }
+ // } catch (PGPException e) {
+ // error = "" + e;
+ // } catch (IOException e) {
+ // error = "" + e;
+ // } catch (SignatureException e) {
+ // error = "" + e;
+ // } catch (Apg.GeneralException e) {
+ // error = "" + e;
+ // }
+ //
+ // data.putInt(Constants.extras.STATUS, Id.message.done);
+ //
+ // if (error != null) {
+ // data.putString(Apg.EXTRA_ERROR, error);
+ // }
+ //
+ // msg.setData(data);
+ // sendMessage(msg);
+ // }
+ //
+ // @Override
+ // public void handlerCallback(Message msg) {
+ // Bundle data = msg.getData();
+ // if (data == null) {
+ // return;
+ // }
+ //
+ // if (data.getInt(Constants.extras.STATUS) == Id.message.unknown_signature_key) {
+ // mUnknownSignatureKeyId = data.getLong(Constants.extras.KEY_ID);
+ // showDialog(Id.dialog.lookup_unknown_key);
+ // return;
+ // }
+ //
+ // super.handlerCallback(msg);
+ // }
+ //
+ // @Override
+ // public void doneCallback(Message msg) {
+ // super.doneCallback(msg);
+ //
+ // Bundle data = msg.getData();
+ // removeDialog(Id.dialog.decrypting);
+ // mSignatureKeyId = 0;
+ // mSignatureLayout.setVisibility(View.GONE);
+ // mReplyEnabled = false;
+ //
+ // // build new action bar
+ // invalidateOptionsMenu();
+ //
+ // String error = data.getString(Apg.EXTRA_ERROR);
+ // if (error != null) {
+ // Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
+ // .show();
+ // return;
+ // }
+ //
+ // Toast.makeText(this, R.string.decryptionSuccessful, Toast.LENGTH_SHORT).show();
+ // if (mReturnResult) {
+ // Intent intent = new Intent();
+ // intent.putExtras(data);
+ // setResult(RESULT_OK, intent);
+ // finish();
+ // return;
+ // }
+ //
+ // switch (mDecryptTarget) {
+ // case Id.target.message: {
+ // String decryptedMessage = data.getString(Apg.EXTRA_DECRYPTED_MESSAGE);
+ // mMessage.setText(decryptedMessage);
+ // mMessage.setHorizontallyScrolling(false);
+ // mReplyEnabled = false;
+ //
+ // // build new action bar
+ // invalidateOptionsMenu();
+ // break;
+ // }
+ //
+ // case Id.target.file: {
+ // if (mDeleteAfter.isChecked()) {
+ // //TODO
+ // // setDeleteFile(mInputFilename);
+ // // showDialog(Id.dialog.delete_file);
+ // }
+ // break;
+ // }
+ //
+ // default: {
+ // // shouldn't happen
+ // break;
+ // }
+ // }
+ //
+ // if (data.getBoolean(Apg.EXTRA_SIGNATURE)) {
+ // String userId = data.getString(Apg.EXTRA_SIGNATURE_USER_ID);
+ // mSignatureKeyId = data.getLong(Apg.EXTRA_SIGNATURE_KEY_ID);
+ // mUserIdRest.setText("id: " + Apg.getSmallFingerPrint(mSignatureKeyId));
+ // if (userId == null) {
+ // userId = getResources().getString(R.string.unknownUserId);
+ // }
+ // String chunks[] = userId.split(" <", 2);
+ // userId = chunks[0];
+ // if (chunks.length > 1) {
+ // mUserIdRest.setText("<" + chunks[1]);
+ // }
+ // mUserId.setText(userId);
+ //
+ // if (data.getBoolean(Apg.EXTRA_SIGNATURE_SUCCESS)) {
+ // mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
+ // } else if (data.getBoolean(Apg.EXTRA_SIGNATURE_UNKNOWN)) {
+ // mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
+ // Toast.makeText(this, R.string.unknownSignatureKeyTouchToLookUp, Toast.LENGTH_LONG)
+ // .show();
+ // } else {
+ // mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
+ // }
+ // mSignatureLayout.setVisibility(View.VISIBLE);
+ // }
+ // }
+
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case Id.request.filename: {
if (resultCode == RESULT_OK && data != null) {
- String filename = data.getDataString();
- if (filename != null) {
- // Get rid of URI prefix:
- if (filename.startsWith("file://")) {
- filename = filename.substring(7);
- }
- // replace %20 and so on
- filename = Uri.decode(filename);
+ try {
+ String path = data.getData().getPath();
+ Log.d(Constants.TAG, "path=" + path);
- mFilename.setText(filename);
+ mFilename.setText(path);
+ } catch (NullPointerException e) {
+ Log.e(Constants.TAG, "Nullpointer while retrieving path!");
}
}
return;
@@ -742,26 +986,24 @@ public class DecryptActivity extends BaseActivity {
case Id.request.output_filename: {
if (resultCode == RESULT_OK && data != null) {
- String filename = data.getDataString();
- if (filename != null) {
- // Get rid of URI prefix:
- if (filename.startsWith("file://")) {
- filename = filename.substring(7);
- }
- // replace %20 and so on
- filename = Uri.decode(filename);
+ try {
+ String path = data.getData().getPath();
+ Log.d(Constants.TAG, "path=" + path);
- FileDialog.setFilename(filename);
+ mFileDialog.setFilename(path);
+ } catch (NullPointerException e) {
+ Log.e(Constants.TAG, "Nullpointer while retrieving path!");
}
}
return;
}
case Id.request.look_up_key_id: {
- PausableThread thread = getRunningThread();
- if (thread != null && thread.isPaused()) {
- thread.unpause();
- }
+ // TODO
+ // PausableThread thread = getRunningThread();
+ // if (thread != null && thread.isPaused()) {
+ // thread.unpause();
+ // }
return;
}
@@ -776,22 +1018,22 @@ public class DecryptActivity extends BaseActivity {
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
- case Id.dialog.output_filename: {
- return FileDialog.build(this, getString(R.string.title_decryptToFile),
- getString(R.string.specifyFileToDecryptTo), mOutputFilename,
- new FileDialog.OnClickListener() {
- public void onOkClick(String filename, boolean checked) {
- removeDialog(Id.dialog.output_filename);
- mOutputFilename = filename;
- decryptStart();
- }
-
- public void onCancelClick() {
- removeDialog(Id.dialog.output_filename);
- }
- }, getString(R.string.filemanager_titleSave),
- getString(R.string.filemanager_btnSave), null, Id.request.output_filename);
- }
+ // case Id.dialog.output_filename: {
+ // return FileDialog.build(this, getString(R.string.title_decryptToFile),
+ // getString(R.string.specifyFileToDecryptTo), mOutputFilename,
+ // new FileDialog.OnClickListener() {
+ // public void onOkClick(String filename, boolean checked) {
+ // removeDialog(Id.dialog.output_filename);
+ // mOutputFilename = filename;
+ // decryptStart();
+ // }
+ //
+ // public void onCancelClick() {
+ // removeDialog(Id.dialog.output_filename);
+ // }
+ // }, getString(R.string.filemanager_titleSave),
+ // getString(R.string.filemanager_btnSave), null, Id.request.output_filename);
+ // }
case Id.dialog.lookup_unknown_key: {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
@@ -799,24 +1041,25 @@ public class DecryptActivity extends BaseActivity {
alert.setIcon(android.R.drawable.ic_dialog_alert);
alert.setTitle(R.string.title_unknownSignatureKey);
alert.setMessage(getString(R.string.lookupUnknownKey,
- Apg.getSmallFingerPrint(mUnknownSignatureKeyId)));
+ PGPHelper.getSmallFingerPrint(mUnknownSignatureKeyId)));
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
removeDialog(Id.dialog.lookup_unknown_key);
Intent intent = new Intent(DecryptActivity.this, KeyServerQueryActivity.class);
- intent.setAction(Apg.Intent.LOOK_UP_KEY_ID);
- intent.putExtra(Apg.EXTRA_KEY_ID, mUnknownSignatureKeyId);
+ intent.setAction(PGPHelper.Intent.LOOK_UP_KEY_ID);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, mUnknownSignatureKeyId);
startActivityForResult(intent, Id.request.look_up_key_id);
}
});
alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
removeDialog(Id.dialog.lookup_unknown_key);
- PausableThread thread = getRunningThread();
- if (thread != null && thread.isPaused()) {
- thread.unpause();
- }
+ // TODO
+ // PausableThread thread = getRunningThread();
+ // if (thread != null && thread.isPaused()) {
+ // thread.unpause();
+ // }
}
});
alert.setCancelable(true);
@@ -831,31 +1074,4 @@ public class DecryptActivity extends BaseActivity {
return super.onCreateDialog(id);
}
-
- protected void fillDataSource() {
- mDataSource = new DataSource();
- if (mContentUri != null) {
- mDataSource.setUri(mContentUri);
- } else if (mDecryptTarget == Id.target.file) {
- mDataSource.setUri(mInputFilename);
- } else {
- if (mData != null) {
- mDataSource.setData(mData);
- } else {
- mDataSource.setText(mMessage.getText().toString());
- }
- }
- }
-
- protected void fillDataDestination() {
- mDataDestination = new DataDestination();
- if (mContentUri != null) {
- mDataDestination.setMode(Id.mode.stream);
- } else if (mDecryptTarget == Id.target.file) {
- mDataDestination.setFilename(mOutputFilename);
- mDataDestination.setMode(Id.mode.file);
- } else {
- mDataDestination.setMode(Id.mode.byte_array);
- }
- }
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/EditKeyActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/EditKeyActivity.java
index ab3956abc..7870a80c3 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/EditKeyActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/EditKeyActivity.java
@@ -19,9 +19,11 @@ package org.thialfihar.android.apg.ui;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.PGPSecretKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
+import org.thialfihar.android.apg.helper.OtherHelper;
+import org.thialfihar.android.apg.helper.PGPConversionHelper;
import org.thialfihar.android.apg.service.ApgHandler;
import org.thialfihar.android.apg.service.ApgService;
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
@@ -29,7 +31,6 @@ import org.thialfihar.android.apg.ui.widget.KeyEditor;
import org.thialfihar.android.apg.ui.widget.SectionView;
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
import org.thialfihar.android.apg.util.IterableIterator;
-import org.thialfihar.android.apg.util.Utils;
import org.thialfihar.android.apg.R;
import com.actionbarsherlock.app.ActionBar;
@@ -132,7 +133,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
mActionBar.setDisplayShowTitleEnabled(true);
// set actionbar without home button if called from another app
- if (getCallingPackage() != null && getCallingPackage().equals(Apg.PACKAGE_NAME)) {
+ if (getCallingPackage() != null && getCallingPackage().equals(PGPHelper.PACKAGE_NAME)) {
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
} else {
@@ -153,7 +154,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
// Handle intents
Bundle extras = mIntent.getExtras();
- if (Apg.Intent.CREATE_KEY.equals(mIntent.getAction())) {
+ if (PGPHelper.Intent.CREATE_KEY.equals(mIntent.getAction())) {
mActionBar.setTitle(R.string.title_createKey);
@@ -161,14 +162,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
if (extras != null) {
// if userId is given, prefill the fields
- if (extras.containsKey(Apg.EXTRA_USER_IDS)) {
+ if (extras.containsKey(PGPHelper.EXTRA_USER_IDS)) {
Log.d(Constants.TAG, "UserIds are given!");
- mUserIds.add(extras.getString(Apg.EXTRA_USER_IDS));
+ mUserIds.add(extras.getString(PGPHelper.EXTRA_USER_IDS));
}
// if no passphrase is given
- if (extras.containsKey(Apg.EXTRA_NO_PASSPHRASE)) {
- boolean noPassphrase = extras.getBoolean(Apg.EXTRA_NO_PASSPHRASE);
+ if (extras.containsKey(PGPHelper.EXTRA_NO_PASSPHRASE)) {
+ boolean noPassphrase = extras.getBoolean(PGPHelper.EXTRA_NO_PASSPHRASE);
if (noPassphrase) {
// check "no passphrase" checkbox and remove button
mNoPassphrase.setChecked(true);
@@ -177,9 +178,9 @@ public class EditKeyActivity extends SherlockFragmentActivity {
}
// generate key
- if (extras.containsKey(Apg.EXTRA_GENERATE_DEFAULT_KEYS)) {
+ if (extras.containsKey(PGPHelper.EXTRA_GENERATE_DEFAULT_KEYS)) {
boolean generateDefaultKeys = extras
- .getBoolean(Apg.EXTRA_GENERATE_DEFAULT_KEYS);
+ .getBoolean(PGPHelper.EXTRA_GENERATE_DEFAULT_KEYS);
if (generateDefaultKeys) {
// build layout in handler after generating keys not directly in onCreate
@@ -209,10 +210,10 @@ public class EditKeyActivity extends SherlockFragmentActivity {
if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
// get new key from data bundle returned from service
Bundle data = message.getData();
- PGPSecretKeyRing masterKeyRing = Utils
+ PGPSecretKeyRing masterKeyRing = PGPConversionHelper
.BytesToPGPSecretKeyRing(data
.getByteArray(ApgService.RESULT_NEW_KEY));
- PGPSecretKeyRing subKeyRing = Utils
+ PGPSecretKeyRing subKeyRing = PGPConversionHelper
.BytesToPGPSecretKeyRing(data
.getByteArray(ApgService.RESULT_NEW_KEY2));
@@ -243,11 +244,11 @@ public class EditKeyActivity extends SherlockFragmentActivity {
}
}
}
- } else if (Apg.Intent.EDIT_KEY.equals(mIntent.getAction())) {
+ } else if (PGPHelper.Intent.EDIT_KEY.equals(mIntent.getAction())) {
mActionBar.setTitle(R.string.title_editKey);
- mCurrentPassPhrase = Apg.getEditPassPhrase();
+ mCurrentPassPhrase = PGPHelper.getEditPassPhrase();
if (mCurrentPassPhrase == null) {
mCurrentPassPhrase = "";
}
@@ -260,14 +261,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
if (extras != null) {
- if (extras.containsKey(Apg.EXTRA_KEY_ID)) {
- long keyId = mIntent.getExtras().getLong(Apg.EXTRA_KEY_ID);
+ if (extras.containsKey(PGPHelper.EXTRA_KEY_ID)) {
+ long keyId = mIntent.getExtras().getLong(PGPHelper.EXTRA_KEY_ID);
if (keyId != 0) {
PGPSecretKey masterKey = null;
- mKeyRing = Apg.getSecretKeyRing(keyId);
+ mKeyRing = PGPHelper.getSecretKeyRing(keyId);
if (mKeyRing != null) {
- masterKey = Apg.getMasterKey(mKeyRing);
+ masterKey = PGPHelper.getMasterKey(mKeyRing);
for (PGPSecretKey key : new IterableIterator<PGPSecretKey>(
mKeyRing.getSecretKeys())) {
mKeys.add(key);
@@ -411,7 +412,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
try {
if (!isPassphraseSet()) {
- throw new Apg.GeneralException(this.getString(R.string.setAPassPhrase));
+ throw new PGPHelper.GeneralException(this.getString(R.string.setAPassPhrase));
}
// Send all information needed to service to edit key in other thread
@@ -425,7 +426,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
data.putString(ApgService.NEW_PASSPHRASE, mNewPassPhrase);
data.putSerializable(ApgService.USER_IDS, getUserIds(mUserIdsView));
Vector<PGPSecretKey> keys = getKeys(mKeysView);
- data.putByteArray(ApgService.KEYS, Utils.PGPSecretKeyListToBytes(keys));
+ data.putByteArray(ApgService.KEYS, PGPConversionHelper.PGPSecretKeyListToBytes(keys));
data.putSerializable(ApgService.KEYS_USAGES, getKeysUsages(mKeysView));
data.putLong(ApgService.MASTER_KEY_ID, getMasterKeyId());
@@ -455,7 +456,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
// start service with intent
startService(intent);
- } catch (Apg.GeneralException e) {
+ } catch (PGPHelper.GeneralException e) {
Toast.makeText(this, getString(R.string.errorMessage, e.getMessage()),
Toast.LENGTH_SHORT).show();
}
@@ -467,7 +468,8 @@ public class EditKeyActivity extends SherlockFragmentActivity {
* @param userIdsView
* @return
*/
- private Vector<String> getUserIds(SectionView userIdsView) throws Apg.GeneralException {
+ private Vector<String> getUserIds(SectionView userIdsView)
+ throws PGPHelper.GeneralException {
Vector<String> userIds = new Vector<String>();
ViewGroup userIdEditors = userIdsView.getEditors();
@@ -479,12 +481,13 @@ public class EditKeyActivity extends SherlockFragmentActivity {
try {
userId = editor.getValue();
} catch (UserIdEditor.NoNameException e) {
- throw new Apg.GeneralException(this.getString(R.string.error_userIdNeedsAName));
+ throw new PGPHelper.GeneralException(
+ this.getString(R.string.error_userIdNeedsAName));
} catch (UserIdEditor.NoEmailException e) {
- throw new Apg.GeneralException(
+ throw new PGPHelper.GeneralException(
this.getString(R.string.error_userIdNeedsAnEmailAddress));
} catch (UserIdEditor.InvalidEmailException e) {
- throw new Apg.GeneralException(e.getMessage());
+ throw new PGPHelper.GeneralException(e.getMessage());
}
if (userId.equals("")) {
@@ -500,11 +503,12 @@ public class EditKeyActivity extends SherlockFragmentActivity {
}
if (userIds.size() == 0) {
- throw new Apg.GeneralException(getString(R.string.error_keyNeedsAUserId));
+ throw new PGPHelper.GeneralException(getString(R.string.error_keyNeedsAUserId));
}
if (!gotMainUserId) {
- throw new Apg.GeneralException(getString(R.string.error_mainUserIdMustNotBeEmpty));
+ throw new PGPHelper.GeneralException(
+ getString(R.string.error_mainUserIdMustNotBeEmpty));
}
return userIds;
@@ -516,13 +520,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
* @param keysView
* @return
*/
- private Vector<PGPSecretKey> getKeys(SectionView keysView) throws Apg.GeneralException {
+ private Vector<PGPSecretKey> getKeys(SectionView keysView)
+ throws PGPHelper.GeneralException {
Vector<PGPSecretKey> keys = new Vector<PGPSecretKey>();
ViewGroup keyEditors = keysView.getEditors();
if (keyEditors.getChildCount() == 0) {
- throw new Apg.GeneralException(getString(R.string.error_keyNeedsMasterKey));
+ throw new PGPHelper.GeneralException(getString(R.string.error_keyNeedsMasterKey));
}
for (int i = 0; i < keyEditors.getChildCount(); ++i) {
@@ -539,13 +544,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
* @param keysView
* @return
*/
- private Vector<Integer> getKeysUsages(SectionView keysView) throws Apg.GeneralException {
+ private Vector<Integer> getKeysUsages(SectionView keysView)
+ throws PGPHelper.GeneralException {
Vector<Integer> getKeysUsages = new Vector<Integer>();
ViewGroup keyEditors = keysView.getEditors();
if (keyEditors.getChildCount() == 0) {
- throw new Apg.GeneralException(getString(R.string.error_keyNeedsMasterKey));
+ throw new PGPHelper.GeneralException(getString(R.string.error_keyNeedsMasterKey));
}
for (int i = 0; i < keyEditors.getChildCount(); ++i) {
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 05dd17b8e..2d365f926 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
@@ -21,10 +21,11 @@ import org.spongycastle.openpgp.PGPPublicKey;
import org.spongycastle.openpgp.PGPPublicKeyRing;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.PGPSecretKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.Preferences;
+import org.thialfihar.android.apg.helper.FileHelper;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.service.ApgHandler;
import org.thialfihar.android.apg.service.ApgService;
import org.thialfihar.android.apg.ui.dialog.DeleteFileDialogFragment;
@@ -33,7 +34,6 @@ import org.thialfihar.android.apg.ui.dialog.PassphraseDialogFragment;
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
import org.thialfihar.android.apg.util.Choice;
import org.thialfihar.android.apg.util.Compatibility;
-import org.thialfihar.android.apg.util.Utils;
import org.thialfihar.android.apg.R;
import com.actionbarsherlock.app.ActionBar;
@@ -181,6 +181,18 @@ public class EncryptActivity extends SherlockFragmentActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.encrypt);
+ // set actionbar without home button if called from another app
+ final ActionBar actionBar = getSupportActionBar();
+ Log.d(Constants.TAG, "calling package (only set when using startActivityForResult)="
+ + getCallingPackage());
+ if (getCallingPackage() != null && getCallingPackage().equals(PGPHelper.PACKAGE_NAME)) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
+ } else {
+ actionBar.setDisplayHomeAsUpEnabled(false);
+ actionBar.setHomeButtonEnabled(false);
+ }
+
mGenerateSignature = false;
mSource = (ViewFlipper) findViewById(R.id.source);
@@ -268,7 +280,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
mBrowse = (ImageButton) findViewById(R.id.btn_browse);
mBrowse.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- Utils.openFile(EncryptActivity.this, mFilename.getText().toString(), "*/*",
+ FileHelper.openFile(EncryptActivity.this, mFilename.getText().toString(), "*/*",
Id.request.filename);
}
});
@@ -323,61 +335,49 @@ public class EncryptActivity extends SherlockFragmentActivity {
});
mIntent = getIntent();
- if (Apg.Intent.ENCRYPT.equals(mIntent.getAction())
- || Apg.Intent.ENCRYPT_FILE.equals(mIntent.getAction())
- || Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
- || Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
+ if (PGPHelper.Intent.ENCRYPT.equals(mIntent.getAction())
+ || PGPHelper.Intent.ENCRYPT_FILE.equals(mIntent.getAction())
+ || PGPHelper.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
+ || PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
mContentUri = mIntent.getData();
Bundle extras = mIntent.getExtras();
if (extras == null) {
extras = new Bundle();
}
- // set actionbar without home button if called from another app
- final ActionBar actionBar = getSupportActionBar();
- Log.d(Constants.TAG, "calling package (only set when using startActivityForResult)="
- + getCallingPackage());
- if (getCallingPackage() != null && getCallingPackage().equals(Apg.PACKAGE_NAME)) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setHomeButtonEnabled(true);
- } else {
- actionBar.setDisplayHomeAsUpEnabled(false);
- actionBar.setHomeButtonEnabled(false);
- }
-
- if (Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
- || Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
+ if (PGPHelper.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
+ || PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
mReturnResult = true;
}
- if (Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
+ if (PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
mGenerateSignature = true;
mOverrideAsciiArmour = true;
mAsciiArmourDemand = false;
}
- if (extras.containsKey(Apg.EXTRA_ASCII_ARMOUR)) {
- mAsciiArmourDemand = extras.getBoolean(Apg.EXTRA_ASCII_ARMOUR, true);
+ if (extras.containsKey(PGPHelper.EXTRA_ASCII_ARMOUR)) {
+ mAsciiArmourDemand = extras.getBoolean(PGPHelper.EXTRA_ASCII_ARMOUR, true);
mOverrideAsciiArmour = true;
mAsciiArmour.setChecked(mAsciiArmourDemand);
}
- mData = extras.getByteArray(Apg.EXTRA_DATA);
+ mData = extras.getByteArray(PGPHelper.EXTRA_DATA);
String textData = null;
if (mData == null) {
- textData = extras.getString(Apg.EXTRA_TEXT);
+ textData = extras.getString(PGPHelper.EXTRA_TEXT);
}
- mSendTo = extras.getString(Apg.EXTRA_SEND_TO);
- mSubject = extras.getString(Apg.EXTRA_SUBJECT);
- long signatureKeyId = extras.getLong(Apg.EXTRA_SIGNATURE_KEY_ID);
- long encryptionKeyIds[] = extras.getLongArray(Apg.EXTRA_ENCRYPTION_KEY_IDS);
+ mSendTo = extras.getString(PGPHelper.EXTRA_SEND_TO);
+ mSubject = extras.getString(PGPHelper.EXTRA_SUBJECT);
+ long signatureKeyId = extras.getLong(PGPHelper.EXTRA_SIGNATURE_KEY_ID);
+ long encryptionKeyIds[] = extras.getLongArray(PGPHelper.EXTRA_ENCRYPTION_KEY_IDS);
if (signatureKeyId != 0) {
- PGPSecretKeyRing keyRing = Apg.getSecretKeyRing(signatureKeyId);
+ PGPSecretKeyRing keyRing = PGPHelper.getSecretKeyRing(signatureKeyId);
PGPSecretKey masterKey = null;
if (keyRing != null) {
- masterKey = Apg.getMasterKey(keyRing);
+ masterKey = PGPHelper.getMasterKey(keyRing);
if (masterKey != null) {
- Vector<PGPSecretKey> signKeys = Apg.getUsableSigningKeys(keyRing);
+ Vector<PGPSecretKey> signKeys = PGPHelper.getUsableSigningKeys(keyRing);
if (signKeys.size() > 0) {
setSecretKeyId(masterKey.getKeyID());
}
@@ -388,16 +388,16 @@ public class EncryptActivity extends SherlockFragmentActivity {
if (encryptionKeyIds != null) {
Vector<Long> goodIds = new Vector<Long>();
for (int i = 0; i < encryptionKeyIds.length; ++i) {
- PGPPublicKeyRing keyRing = Apg.getPublicKeyRing(encryptionKeyIds[i]);
+ PGPPublicKeyRing keyRing = PGPHelper.getPublicKeyRing(encryptionKeyIds[i]);
PGPPublicKey masterKey = null;
if (keyRing == null) {
continue;
}
- masterKey = Apg.getMasterKey(keyRing);
+ masterKey = PGPHelper.getMasterKey(keyRing);
if (masterKey == null) {
continue;
}
- Vector<PGPPublicKey> encryptKeys = Apg.getUsableEncryptKeys(keyRing);
+ Vector<PGPPublicKey> encryptKeys = PGPHelper.getUsableEncryptKeys(keyRing);
if (encryptKeys.size() == 0) {
continue;
}
@@ -411,9 +411,9 @@ public class EncryptActivity extends SherlockFragmentActivity {
}
}
- if (Apg.Intent.ENCRYPT.equals(mIntent.getAction())
- || Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
- || Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
+ if (PGPHelper.Intent.ENCRYPT.equals(mIntent.getAction())
+ || PGPHelper.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
+ || PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
if (textData != null) {
mMessage.setText(textData);
}
@@ -422,7 +422,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
while (mSource.getCurrentView().getId() != R.id.sourceMessage) {
mSource.showNext();
}
- } else if (Apg.Intent.ENCRYPT_FILE.equals(mIntent.getAction())) {
+ } else if (PGPHelper.Intent.ENCRYPT_FILE.equals(mIntent.getAction())) {
if ("file".equals(mIntent.getScheme())) {
mInputFilename = Uri.decode(mIntent.getDataString().replace("file://", ""));
mFilename.setText(mInputFilename);
@@ -651,7 +651,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
return;
}
- if (getSecretKeyId() != 0 && Apg.getCachedPassPhrase(getSecretKeyId()) == null) {
+ if (getSecretKeyId() != 0 && PGPHelper.getCachedPassPhrase(getSecretKeyId()) == null) {
showPassphraseDialog();
return;
@@ -659,7 +659,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
}
if (mEncryptTarget == Id.target.file) {
- askForOutputFilename();
+ showOutputFileDialog();
} else {
encryptStart();
}
@@ -676,7 +676,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
public void handleMessage(Message message) {
if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) {
if (mEncryptTarget == Id.target.file) {
- askForOutputFilename();
+ showOutputFileDialog();
} else {
encryptStart();
}
@@ -692,15 +692,15 @@ public class EncryptActivity extends SherlockFragmentActivity {
messenger, mSecretKeyId);
passphraseDialog.show(getSupportFragmentManager(), "passphraseDialog");
- } catch (Apg.GeneralException e) {
+ } catch (PGPHelper.GeneralException e) {
Log.d(Constants.TAG, "No passphrase for this secret key, encrypt directly!");
// send message to handler to start encryption directly
returnHandler.sendEmptyMessage(PassphraseDialogFragment.MESSAGE_OKAY);
}
}
- private void askForOutputFilename() {
- // Message is received after passphrase is cached
+ private void showOutputFileDialog() {
+ // Message is received after file is selected
Handler returnHandler = new Handler() {
@Override
public void handleMessage(Message message) {
@@ -721,7 +721,6 @@ public class EncryptActivity extends SherlockFragmentActivity {
Id.request.output_filename);
mFileDialog.show(getSupportFragmentManager(), "fileDialog");
-
}
private void encryptStart() {
@@ -743,7 +742,6 @@ public class EncryptActivity extends SherlockFragmentActivity {
if (passPhrase.length() == 0) {
passPhrase = null;
}
- // signatureKeyId = Id.key.symmetric;
data.putString(ApgService.SYMMETRIC_PASSPHRASE, passPhrase);
} else {
@@ -776,13 +774,13 @@ public class EncryptActivity extends SherlockFragmentActivity {
intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_ENCRYPT_SIGN_BYTES);
if (mData != null) {
- data.putByteArray(ApgService.BYTES, mData);
+ data.putByteArray(ApgService.MESSAGE_BYTES, mData);
} else {
String message = mMessage.getText().toString();
if (signOnly && !mReturnResult) {
fixBadCharactersForGmail(message);
}
- data.putByteArray(ApgService.BYTES, message.getBytes());
+ data.putByteArray(ApgService.MESSAGE_BYTES, message.getBytes());
}
}
@@ -919,11 +917,11 @@ public class EncryptActivity extends SherlockFragmentActivity {
} else {
String uid = getResources().getString(R.string.unknownUserId);
String uidExtra = "";
- PGPSecretKeyRing keyRing = Apg.getSecretKeyRing(getSecretKeyId());
+ PGPSecretKeyRing keyRing = PGPHelper.getSecretKeyRing(getSecretKeyId());
if (keyRing != null) {
- PGPSecretKey key = Apg.getMasterKey(keyRing);
+ PGPSecretKey key = PGPHelper.getMasterKey(keyRing);
if (key != null) {
- String userId = Apg.getMainUserIdSafe(this, key);
+ String userId = PGPHelper.getMainUserIdSafe(this, key);
String chunks[] = userId.split(" <", 2);
uid = chunks[0];
if (chunks.length > 1) {
@@ -957,7 +955,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
initialKeyIds[i] = keyIds.get(i);
}
}
- intent.putExtra(Apg.EXTRA_SELECTION, initialKeyIds);
+ intent.putExtra(PGPHelper.EXTRA_SELECTION, initialKeyIds);
startActivityForResult(intent, Id.request.public_keys);
}
@@ -1000,7 +998,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
case Id.request.public_keys: {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
- mEncryptionKeyIds = bundle.getLongArray(Apg.EXTRA_SELECTION);
+ mEncryptionKeyIds = bundle.getLongArray(PGPHelper.EXTRA_SELECTION);
}
updateView();
break;
@@ -1009,7 +1007,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
case Id.request.secret_keys: {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
- setSecretKeyId(bundle.getLong(Apg.EXTRA_KEY_ID));
+ setSecretKeyId(bundle.getLong(PGPHelper.EXTRA_KEY_ID));
} else {
setSecretKeyId(Id.key.none);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/GeneralActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/GeneralActivity.java
index 76a5dc92c..dde247bdf 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/GeneralActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/GeneralActivity.java
@@ -21,8 +21,8 @@ import java.io.InputStream;
import java.util.Vector;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.util.Choice;
import android.content.Intent;
@@ -83,7 +83,7 @@ public class GeneralActivity extends BaseActivity {
int contentType = Id.content.unknown;
try {
- contentType = Apg.getStreamContent(this, inStream);
+ contentType = PGPHelper.getStreamContent(this, inStream);
inStream.close();
} catch (IOException e) {
// just means that there's no PGP data in there
@@ -134,10 +134,10 @@ public class GeneralActivity extends BaseActivity {
case Id.choice.action.encrypt: {
intent.setClass(this, EncryptActivity.class);
if (mDataString != null) {
- intent.setAction(Apg.Intent.ENCRYPT);
- intent.putExtra(Apg.EXTRA_TEXT, mDataString);
+ intent.setAction(PGPHelper.Intent.ENCRYPT);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
} else if (mDataUri != null) {
- intent.setAction(Apg.Intent.ENCRYPT_FILE);
+ intent.setAction(PGPHelper.Intent.ENCRYPT_FILE);
intent.setDataAndType(mDataUri, mIntent.getType());
}
@@ -147,10 +147,10 @@ public class GeneralActivity extends BaseActivity {
case Id.choice.action.decrypt: {
intent.setClass(this, DecryptActivity.class);
if (mDataString != null) {
- intent.setAction(Apg.Intent.DECRYPT);
- intent.putExtra(Apg.EXTRA_TEXT, mDataString);
+ intent.setAction(PGPHelper.Intent.DECRYPT);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
} else if (mDataUri != null) {
- intent.setAction(Apg.Intent.DECRYPT_FILE);
+ intent.setAction(PGPHelper.Intent.DECRYPT_FILE);
intent.setDataAndType(mDataUri, mIntent.getType());
}
@@ -159,9 +159,9 @@ public class GeneralActivity extends BaseActivity {
case Id.choice.action.import_public: {
intent.setClass(this, PublicKeyListActivity.class);
- intent.setAction(Apg.Intent.IMPORT);
+ intent.setAction(PGPHelper.Intent.IMPORT);
if (mDataString != null) {
- intent.putExtra(Apg.EXTRA_TEXT, mDataString);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
} else if (mDataUri != null) {
intent.setDataAndType(mDataUri, mIntent.getType());
}
@@ -170,9 +170,9 @@ public class GeneralActivity extends BaseActivity {
case Id.choice.action.import_secret: {
intent.setClass(this, SecretKeyListActivity.class);
- intent.setAction(Apg.Intent.IMPORT);
+ intent.setAction(PGPHelper.Intent.IMPORT);
if (mDataString != null) {
- intent.putExtra(Apg.EXTRA_TEXT, mDataString);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
} else if (mDataUri != null) {
intent.setDataAndType(mDataUri, mIntent.getType());
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentAbout.java b/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentAbout.java
index 3dec32446..bb42aa20c 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentAbout.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentAbout.java
@@ -18,7 +18,7 @@ package org.thialfihar.android.apg.ui;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.util.Utils;
+import org.thialfihar.android.apg.helper.OtherHelper;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -52,7 +52,7 @@ public class HelpFragmentAbout extends SherlockFragment {
View view = inflater.inflate(R.layout.help_fragment_about, container, false);
// load html from html file from /res/raw
- String aboutText = Utils.readContentFromResource(this.getActivity(), R.raw.help_about);
+ String aboutText = OtherHelper.readContentFromResource(this.getActivity(), R.raw.help_about);
TextView versionText = (TextView) view.findViewById(R.id.help_about_version);
versionText.setText(getString(R.string.help_about_version) + " " + getVersion());
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentHtml.java b/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentHtml.java
index 35f6fb3e6..ea90d6855 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentHtml.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/HelpFragmentHtml.java
@@ -16,7 +16,7 @@
package org.thialfihar.android.apg.ui;
-import org.thialfihar.android.apg.util.Utils;
+import org.thialfihar.android.apg.helper.OtherHelper;
import android.app.Activity;
import android.os.Bundle;
@@ -68,7 +68,7 @@ public class HelpFragmentHtml extends SherlockFragment {
htmlFile = getArguments().getInt(ARG_HTML_FILE);
// load html from html file from /res/raw
- String helpText = Utils.readContentFromResource(this.getActivity(), htmlFile);
+ String helpText = OtherHelper.readContentFromResource(this.getActivity(), htmlFile);
mActivity = getActivity();
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/ImportFromQRCodeActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/ImportFromQRCodeActivity.java
index 6f1043467..c9fb89cc7 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/ImportFromQRCodeActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/ImportFromQRCodeActivity.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2011 Senecaso
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -19,11 +21,11 @@ import java.io.IOException;
import org.spongycastle.openpgp.PGPKeyRing;
import org.spongycastle.openpgp.PGPPublicKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.HkpKeyServer;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.KeyServer.QueryException;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.R;
import android.content.Intent;
@@ -60,33 +62,33 @@ public class ImportFromQRCodeActivity extends BaseActivity {
HkpKeyServer server = new HkpKeyServer(mPreferences.getKeyServers()[0]); // TODO: there should be only 1
String encodedKey = server.get(keyId);
- PGPKeyRing keyring = Apg.decodeKeyRing(new ByteArrayInputStream(encodedKey.getBytes()));
+ PGPKeyRing keyring = PGPHelper.decodeKeyRing(new ByteArrayInputStream(encodedKey.getBytes()));
if (keyring != null && keyring instanceof PGPPublicKeyRing) {
PGPPublicKeyRing publicKeyRing = (PGPPublicKeyRing) keyring;
// make sure the fingerprints match before we cache this thing
- String actualFingerprint = Apg.convertToHex(publicKeyRing.getPublicKey().getFingerprint());
+ String actualFingerprint = PGPHelper.convertToHex(publicKeyRing.getPublicKey().getFingerprint());
if (expectedFingerprint.equals(actualFingerprint)) {
// store the signed key in our local cache
- int retval = Apg.storeKeyRingInCache(publicKeyRing);
+ int retval = PGPHelper.storeKeyRingInCache(publicKeyRing);
if (retval != Id.return_value.ok && retval != Id.return_value.updated) {
- status.putString(Apg.EXTRA_ERROR, "Failed to store signed key in local cache");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to store signed key in local cache");
} else {
Intent intent = new Intent(ImportFromQRCodeActivity.this, SignKeyActivity.class);
- intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
startActivityForResult(intent, Id.request.sign_key);
}
} else {
- status.putString(Apg.EXTRA_ERROR, "Scanned fingerprint does NOT match the fingerprint of the received key. You shouldnt trust this key.");
+ status.putString(PGPHelper.EXTRA_ERROR, "Scanned fingerprint does NOT match the fingerprint of the received key. You shouldnt trust this key.");
}
}
} catch (QueryException e) {
Log.e(TAG, "Failed to query KeyServer", e);
- status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to query KeyServer");
status.putInt(Constants.extras.STATUS, Id.message.done);
} catch (IOException e) {
Log.e(TAG, "Failed to query KeyServer", e);
- status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to query KeyServer");
status.putInt(Constants.extras.STATUS, Id.message.done);
}
}
@@ -140,7 +142,7 @@ public class ImportFromQRCodeActivity extends BaseActivity {
super.doneCallback(msg);
Bundle data = msg.getData();
- String error = data.getString(Apg.EXTRA_ERROR);
+ String error = data.getString(PGPHelper.EXTRA_ERROR);
if (error != null) {
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT).show();
return;
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 787afd431..8e2bcaecb 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/KeyListActivity.java
@@ -19,14 +19,14 @@ package org.thialfihar.android.apg.ui;
import org.spongycastle.openpgp.PGPException;
import org.spongycastle.openpgp.PGPPublicKeyRing;
import org.spongycastle.openpgp.PGPSecretKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
-import org.thialfihar.android.apg.FileDialog;
import org.thialfihar.android.apg.Id;
-import org.thialfihar.android.apg.InputData;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.provider.KeyRings;
import org.thialfihar.android.apg.provider.Keys;
import org.thialfihar.android.apg.provider.UserIds;
+import org.thialfihar.android.apg.ui.dialog.FileDialogFragment;
+import org.thialfihar.android.apg.util.InputData;
import org.thialfihar.android.apg.R;
import com.actionbarsherlock.view.MenuItem;
@@ -42,7 +42,10 @@ 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;
+import android.os.Messenger;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -83,6 +86,8 @@ public class KeyListActivity extends BaseActivity {
protected int mKeyType = Id.type.public_key;
+ FileDialogFragment mFileDialog;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -134,11 +139,11 @@ public class KeyListActivity extends BaseActivity {
mListAdapter = new KeyListAdapter(this, searchString);
mList.setAdapter(mListAdapter);
- if (Apg.Intent.IMPORT.equals(intent.getAction())) {
+ if (PGPHelper.Intent.IMPORT.equals(intent.getAction())) {
if ("file".equals(intent.getScheme()) && intent.getDataString() != null) {
mImportFilename = Uri.decode(intent.getDataString().replace("file://", ""));
} else {
- mImportData = intent.getStringExtra(Apg.EXTRA_TEXT);
+ mImportData = intent.getStringExtra(PGPHelper.EXTRA_TEXT);
}
importKeys();
}
@@ -148,12 +153,14 @@ public class KeyListActivity extends BaseActivity {
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Id.menu.option.import_keys: {
- showDialog(Id.dialog.import_keys);
+ // showDialog(Id.dialog.import_keys);
+ showImportKeysDialog();
return true;
}
case Id.menu.option.export_keys: {
- showDialog(Id.dialog.export_keys);
+ // showDialog(Id.dialog.export_keys);
+ showExportKeysDialog(false);
return true;
}
@@ -163,6 +170,59 @@ public class KeyListActivity extends BaseActivity {
}
}
+ private void showImportKeysDialog() {
+ // Message is received after file is selected
+ Handler returnHandler = new Handler() {
+ @Override
+ public void handleMessage(Message message) {
+ if (message.what == FileDialogFragment.MESSAGE_OKAY) {
+ Bundle data = message.getData();
+ mImportFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME);
+
+ mDeleteAfterImport = data.getBoolean(FileDialogFragment.MESSAGE_DATA_CHECKED);
+ importKeys();
+ }
+ }
+ };
+
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(returnHandler);
+
+ mFileDialog = FileDialogFragment.newInstance(messenger,
+ getString(R.string.title_importKeys), getString(R.string.specifyFileToImportFrom),
+ mImportFilename, null, Id.request.filename);
+
+ mFileDialog.show(getSupportFragmentManager(), "fileDialog");
+ }
+
+ private void showExportKeysDialog(boolean singleKeyExport) {
+ String title = (singleKeyExport ? getString(R.string.title_exportKey)
+ : getString(R.string.title_exportKeys));
+ String message = getString(mKeyType == Id.type.public_key ? R.string.specifyFileToExportTo
+ : R.string.specifyFileToExportSecretKeysTo);
+
+ // Message is received after file is selected
+ Handler returnHandler = new Handler() {
+ @Override
+ public void handleMessage(Message message) {
+ if (message.what == FileDialogFragment.MESSAGE_OKAY) {
+ Bundle data = message.getData();
+ mExportFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME);
+
+ exportKeys();
+ }
+ }
+ };
+
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(returnHandler);
+
+ mFileDialog = FileDialogFragment.newInstance(messenger, title, message, mExportFilename,
+ null, Id.request.filename);
+
+ mFileDialog.show(getSupportFragmentManager(), "fileDialog");
+ }
+
@Override
public boolean onContextItemSelected(android.view.MenuItem menuItem) {
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
@@ -176,7 +236,7 @@ public class KeyListActivity extends BaseActivity {
switch (menuItem.getItemId()) {
case Id.menu.export: {
mSelectedItem = groupPosition;
- showDialog(Id.dialog.export_key);
+ showExportKeysDialog(true);
return true;
}
@@ -194,7 +254,6 @@ public class KeyListActivity extends BaseActivity {
@Override
protected Dialog onCreateDialog(int id) {
- boolean singleKeyExport = false;
switch (id) {
case Id.dialog.delete_key: {
@@ -202,14 +261,14 @@ public class KeyListActivity extends BaseActivity {
mSelectedItem = -1;
// TODO: better way to do this?
String userId = "<unknown>";
- Object keyRing = Apg.getKeyRing(keyRingId);
+ Object keyRing = PGPHelper.getKeyRing(keyRingId);
if (keyRing != null) {
if (keyRing instanceof PGPPublicKeyRing) {
- userId = Apg.getMainUserIdSafe(this,
- Apg.getMasterKey((PGPPublicKeyRing) keyRing));
+ userId = PGPHelper.getMainUserIdSafe(this,
+ PGPHelper.getMasterKey((PGPPublicKeyRing) keyRing));
} else {
- userId = Apg.getMainUserIdSafe(this,
- Apg.getMasterKey((PGPSecretKeyRing) keyRing));
+ userId = PGPHelper.getMainUserIdSafe(this,
+ PGPHelper.getMasterKey((PGPSecretKeyRing) keyRing));
}
}
@@ -234,54 +293,6 @@ public class KeyListActivity extends BaseActivity {
return builder.create();
}
- case Id.dialog.import_keys: {
- return FileDialog.build(this, getString(R.string.title_importKeys),
- getString(R.string.specifyFileToImportFrom), mImportFilename,
- new FileDialog.OnClickListener() {
- public void onOkClick(String filename, boolean checked) {
- removeDialog(Id.dialog.import_keys);
- mDeleteAfterImport = checked;
- mImportFilename = filename;
- importKeys();
- }
-
- public void onCancelClick() {
- removeDialog(Id.dialog.import_keys);
- }
- }, getString(R.string.filemanager_titleOpen),
- getString(R.string.filemanager_btnOpen),
- getString(R.string.label_deleteAfterImport), Id.request.filename);
- }
-
- case Id.dialog.export_key: {
- singleKeyExport = true;
- // break intentionally omitted, to use the Id.dialog.export_keys dialog
- }
-
- case Id.dialog.export_keys: {
- String title = (singleKeyExport ? getString(R.string.title_exportKey)
- : getString(R.string.title_exportKeys));
-
- final int thisDialogId = (singleKeyExport ? Id.dialog.export_key
- : Id.dialog.export_keys);
-
- return FileDialog.build(this, title,
- getString(mKeyType == Id.type.public_key ? R.string.specifyFileToExportTo
- : R.string.specifyFileToExportSecretKeysTo), mExportFilename,
- new FileDialog.OnClickListener() {
- public void onOkClick(String filename, boolean checked) {
- removeDialog(thisDialogId);
- mExportFilename = filename;
- exportKeys();
- }
-
- public void onCancelClick() {
- removeDialog(thisDialogId);
- }
- }, getString(R.string.filemanager_titleSave),
- getString(R.string.filemanager_btnSave), null, Id.request.filename);
- }
-
default: {
return super.onCreateDialog(id);
}
@@ -325,12 +336,12 @@ public class KeyListActivity extends BaseActivity {
}
if (mTask == Id.task.import_keys) {
- data = Apg.importKeyRings(this, mKeyType, new InputData(importInputStream, size),
- this);
+ data = PGPHelper.importKeyRings(this, mKeyType, new InputData(importInputStream,
+ size), this);
} else {
Vector<Integer> keyRingIds = new Vector<Integer>();
if (mSelectedItem == -1) {
- keyRingIds = Apg
+ keyRingIds = PGPHelper
.getKeyRingIds(mKeyType == Id.type.public_key ? Id.database.type_public
: Id.database.type_secret);
} else {
@@ -338,7 +349,7 @@ public class KeyListActivity extends BaseActivity {
keyRingIds.add(keyRingId);
mSelectedItem = -1;
}
- data = Apg.exportKeyRings(this, keyRingIds, exportOutputStream, this);
+ data = PGPHelper.exportKeyRings(this, keyRingIds, exportOutputStream, this);
}
} catch (FileNotFoundException e) {
error = getString(R.string.error_fileNotFound);
@@ -346,7 +357,7 @@ public class KeyListActivity extends BaseActivity {
error = "" + e;
} catch (PGPException e) {
error = "" + e;
- } catch (Apg.GeneralException e) {
+ } catch (PGPHelper.GeneralException e) {
error = "" + e;
}
@@ -359,7 +370,7 @@ public class KeyListActivity extends BaseActivity {
}
if (error != null) {
- data.putString(Apg.EXTRA_ERROR, error);
+ data.putString(PGPHelper.EXTRA_ERROR, error);
}
msg.setData(data);
@@ -367,7 +378,7 @@ public class KeyListActivity extends BaseActivity {
}
protected void deleteKey(int keyRingId) {
- Apg.deleteKey(keyRingId);
+ PGPHelper.deleteKey(keyRingId);
refreshList();
}
@@ -387,7 +398,7 @@ public class KeyListActivity extends BaseActivity {
case Id.message.import_done: {
removeDialog(Id.dialog.importing);
- String error = data.getString(Apg.EXTRA_ERROR);
+ String error = data.getString(PGPHelper.EXTRA_ERROR);
if (error != null) {
Toast.makeText(KeyListActivity.this, getString(R.string.errorMessage, error),
Toast.LENGTH_SHORT).show();
@@ -434,7 +445,7 @@ public class KeyListActivity extends BaseActivity {
case Id.message.export_done: {
removeDialog(Id.dialog.exporting);
- String error = data.getString(Apg.EXTRA_ERROR);
+ String error = data.getString(PGPHelper.EXTRA_ERROR);
if (error != null) {
Toast.makeText(KeyListActivity.this, getString(R.string.errorMessage, error),
Toast.LENGTH_SHORT).show();
@@ -508,7 +519,7 @@ public class KeyListActivity extends BaseActivity {
mSearchString = searchString;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mDatabase = Apg.getDatabase().db();
+ mDatabase = PGPHelper.getDatabase().db();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + "("
+ KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + Keys.TABLE_NAME + "."
@@ -600,7 +611,8 @@ public class KeyListActivity extends BaseActivity {
c.close();
if (masterKeyId != -1) {
- children.insertElementAt(new KeyChild(Apg.getFingerPrint(fingerPrintId), true), 0);
+ children.insertElementAt(
+ new KeyChild(PGPHelper.getFingerPrint(fingerPrintId), true), 0);
c = mDatabase.query(UserIds.TABLE_NAME, new String[] { UserIds.USER_ID, // 0
}, UserIds.KEY_ID + " = ? AND " + UserIds.RANK + " > 0", new String[] { ""
+ masterKeyId }, null, null, UserIds.RANK + " ASC");
@@ -703,10 +715,10 @@ public class KeyListActivity extends BaseActivity {
}
TextView keyId = (TextView) view.findViewById(R.id.keyId);
- String keyIdStr = Apg.getSmallFingerPrint(child.keyId);
+ String keyIdStr = PGPHelper.getSmallFingerPrint(child.keyId);
keyId.setText(keyIdStr);
TextView keyDetails = (TextView) view.findViewById(R.id.keyDetails);
- String algorithmStr = Apg.getAlgorithmInfo(child.algorithm, child.keySize);
+ String algorithmStr = PGPHelper.getAlgorithmInfo(child.algorithm, child.keySize);
keyDetails.setText("(" + algorithmStr + ")");
ImageView encryptIcon = (ImageView) view.findViewById(R.id.ic_encryptKey);
@@ -745,16 +757,13 @@ public class KeyListActivity extends BaseActivity {
switch (requestCode) {
case Id.request.filename: {
if (resultCode == RESULT_OK && data != null) {
- String filename = data.getDataString();
- if (filename != null) {
- // Get rid of URI prefix:
- if (filename.startsWith("file://")) {
- filename = filename.substring(7);
- }
- // replace %20 and so on
- filename = Uri.decode(filename);
+ try {
+ String path = data.getData().getPath();
+ Log.d(Constants.TAG, "path=" + path);
- FileDialog.setFilename(filename);
+ mFileDialog.setFilename(path);
+ } catch (NullPointerException e) {
+ Log.e(Constants.TAG, "Nullpointer while retrieving path!");
}
}
return;
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/KeyServerExportActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/KeyServerExportActivity.java
index 877ae0164..17d80296b 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/KeyServerExportActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/KeyServerExportActivity.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2011 Senecaso
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -16,11 +18,11 @@ package org.thialfihar.android.apg.ui;
import org.spongycastle.openpgp.PGPKeyRing;
import org.spongycastle.openpgp.PGPPublicKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.HkpKeyServer;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.helper.PGPHelper;
import com.actionbarsherlock.view.MenuItem;
@@ -49,7 +51,10 @@ public class KeyServerExportActivity extends BaseActivity {
switch (item.getItemId()) {
case android.R.id.home:
- startActivity(new Intent(this, PublicKeyListActivity.class));
+ // app icon in Action Bar clicked; go home
+ Intent intent = new Intent(this, PublicKeyListActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
return true;
default:
@@ -94,11 +99,11 @@ public class KeyServerExportActivity extends BaseActivity {
HkpKeyServer server = new HkpKeyServer((String) keyServer.getSelectedItem());
- int keyRingId = getIntent().getIntExtra(Apg.EXTRA_KEY_ID, -1);
+ int keyRingId = getIntent().getIntExtra(PGPHelper.EXTRA_KEY_ID, -1);
- PGPKeyRing keyring = Apg.getKeyRing(keyRingId);
+ PGPKeyRing keyring = PGPHelper.getKeyRing(keyRingId);
if (keyring != null && keyring instanceof PGPPublicKeyRing) {
- boolean uploaded = Apg.uploadKeyRingToServer(server, (PGPPublicKeyRing) keyring);
+ boolean uploaded = PGPHelper.uploadKeyRingToServer(server, (PGPPublicKeyRing) keyring);
if (!uploaded) {
error = "Unable to export key to selected server";
}
@@ -107,7 +112,7 @@ public class KeyServerExportActivity extends BaseActivity {
data.putInt(Constants.extras.STATUS, Id.message.export_done);
if (error != null) {
- data.putString(Apg.EXTRA_ERROR, error);
+ data.putString(PGPHelper.EXTRA_ERROR, error);
}
msg.setData(data);
@@ -119,7 +124,7 @@ public class KeyServerExportActivity extends BaseActivity {
super.doneCallback(msg);
Bundle data = msg.getData();
- String error = data.getString(Apg.EXTRA_ERROR);
+ String error = data.getString(PGPHelper.EXTRA_ERROR);
if (error != null) {
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
.show();
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/KeyServerQueryActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/KeyServerQueryActivity.java
index 2009441ab..7a1b94335 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/KeyServerQueryActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/KeyServerQueryActivity.java
@@ -18,7 +18,6 @@ import java.util.List;
import java.util.Vector;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.HkpKeyServer;
import org.thialfihar.android.apg.Id;
@@ -26,6 +25,7 @@ import org.thialfihar.android.apg.KeyServer.InsufficientQuery;
import org.thialfihar.android.apg.KeyServer.KeyInfo;
import org.thialfihar.android.apg.KeyServer.QueryException;
import org.thialfihar.android.apg.KeyServer.TooManyResponses;
+import org.thialfihar.android.apg.helper.PGPHelper;
import com.actionbarsherlock.view.MenuItem;
@@ -71,7 +71,10 @@ public class KeyServerQueryActivity extends BaseActivity {
switch (item.getItemId()) {
case android.R.id.home:
- startActivity(new Intent(this, PublicKeyListActivity.class));
+ // app icon in Action Bar clicked; go home
+ Intent intent = new Intent(this, PublicKeyListActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
return true;
default:
@@ -118,11 +121,11 @@ public class KeyServerQueryActivity extends BaseActivity {
});
Intent intent = getIntent();
- if (Apg.Intent.LOOK_UP_KEY_ID.equals(intent.getAction())
- || Apg.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(intent.getAction())) {
- long keyId = intent.getLongExtra(Apg.EXTRA_KEY_ID, 0);
+ if (PGPHelper.Intent.LOOK_UP_KEY_ID.equals(intent.getAction())
+ || PGPHelper.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(intent.getAction())) {
+ long keyId = intent.getLongExtra(PGPHelper.EXTRA_KEY_ID, 0);
if (keyId != 0) {
- String query = "0x" + Apg.keyToHex(keyId);
+ String query = "0x" + PGPHelper.keyToHex(keyId);
mQuery.setText(query);
search(query);
}
@@ -176,7 +179,7 @@ public class KeyServerQueryActivity extends BaseActivity {
data.putInt(Constants.extras.STATUS, Id.message.done);
if (error != null) {
- data.putString(Apg.EXTRA_ERROR, error);
+ data.putString(PGPHelper.EXTRA_ERROR, error);
}
msg.setData(data);
@@ -190,7 +193,7 @@ public class KeyServerQueryActivity extends BaseActivity {
removeDialog(Id.dialog.querying);
Bundle data = msg.getData();
- String error = data.getString(Apg.EXTRA_ERROR);
+ String error = data.getString(PGPHelper.EXTRA_ERROR);
if (error != null) {
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
.show();
@@ -205,10 +208,10 @@ public class KeyServerQueryActivity extends BaseActivity {
}
} else if (mQueryType == Id.keyserver.get) {
Intent orgIntent = getIntent();
- if (Apg.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(orgIntent.getAction())) {
+ if (PGPHelper.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(orgIntent.getAction())) {
if (mKeyData != null) {
Intent intent = new Intent();
- intent.putExtra(Apg.EXTRA_TEXT, mKeyData);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, mKeyData);
setResult(RESULT_OK, intent);
} else {
setResult(RESULT_CANCELED);
@@ -217,8 +220,8 @@ public class KeyServerQueryActivity extends BaseActivity {
} else {
if (mKeyData != null) {
Intent intent = new Intent(this, PublicKeyListActivity.class);
- intent.setAction(Apg.Intent.IMPORT);
- intent.putExtra(Apg.EXTRA_TEXT, mKeyData);
+ intent.setAction(PGPHelper.Intent.IMPORT);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, mKeyData);
startActivity(intent);
}
}
@@ -284,7 +287,7 @@ public class KeyServerQueryActivity extends BaseActivity {
mainUserId.setText(userId);
}
- keyId.setText(Apg.getSmallFingerPrint(keyInfo.keyId));
+ keyId.setText(PGPHelper.getSmallFingerPrint(keyInfo.keyId));
if (mainUserIdRest.getText().length() == 0) {
mainUserIdRest.setVisibility(View.GONE);
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/MailListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/MailListActivity.java
index 639aab6eb..fd8efb530 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/MailListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/MailListActivity.java
@@ -20,8 +20,8 @@ import java.util.Vector;
import java.util.regex.Matcher;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Preferences;
+import org.thialfihar.android.apg.helper.PGPHelper;
import android.app.ListActivity;
import android.content.Context;
@@ -121,11 +121,11 @@ public class MailListActivity extends ListActivity {
String data = messageCursor.getString(bodyIndex);
data = Html.fromHtml(data).toString();
boolean signedOnly = false;
- Matcher matcher = Apg.PGP_MESSAGE.matcher(data);
+ Matcher matcher = PGPHelper.PGP_MESSAGE.matcher(data);
if (matcher.matches()) {
data = matcher.group(1);
} else {
- matcher = Apg.PGP_SIGNED_MESSAGE.matcher(data);
+ matcher = PGPHelper.PGP_SIGNED_MESSAGE.matcher(data);
if (matcher.matches()) {
data = matcher.group(1);
signedOnly = true;
@@ -149,11 +149,11 @@ public class MailListActivity extends ListActivity {
getListView().setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
Intent intent = new Intent(MailListActivity.this, DecryptActivity.class);
- intent.setAction(Apg.Intent.DECRYPT);
+ intent.setAction(PGPHelper.Intent.DECRYPT);
Message message = (Message) ((MailboxAdapter) getListAdapter()).getItem(position);
- intent.putExtra(Apg.EXTRA_TEXT, message.data);
- intent.putExtra(Apg.EXTRA_SUBJECT, message.subject);
- intent.putExtra(Apg.EXTRA_REPLY_TO, message.replyTo);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, message.data);
+ intent.putExtra(PGPHelper.EXTRA_SUBJECT, message.subject);
+ intent.putExtra(PGPHelper.EXTRA_REPLY_TO, message.replyTo);
startActivity(intent);
}
});
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/MainActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/MainActivity.java
index 4bfee0e14..24d636627 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/MainActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/MainActivity.java
@@ -20,9 +20,9 @@ package org.thialfihar.android.apg.ui;
import java.security.Security;
import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.helper.PGPHelper;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
@@ -48,19 +48,19 @@ public class MainActivity extends SherlockActivity {
public void encryptOnClick(View view) {
Intent intent = new Intent(MainActivity.this, EncryptActivity.class);
- intent.setAction(Apg.Intent.ENCRYPT);
+ intent.setAction(PGPHelper.Intent.ENCRYPT);
startActivityForResult(intent, 0); // used instead of startActivity to get callingPackage
}
public void decryptOnClick(View view) {
Intent intent = new Intent(MainActivity.this, DecryptActivity.class);
- intent.setAction(Apg.Intent.DECRYPT);
+ intent.setAction(PGPHelper.Intent.DECRYPT);
startActivityForResult(intent, 0); // used instead of startActivity to get callingPackage
}
public void scanQrcodeOnClick(View view) {
Intent intent = new Intent(this, ImportFromQRCodeActivity.class);
- intent.setAction(Apg.Intent.IMPORT_FROM_QR_CODE);
+ intent.setAction(PGPHelper.Intent.IMPORT_FROM_QR_CODE);
startActivityForResult(intent, Id.request.import_from_qr_code);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/PreferencesActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/PreferencesActivity.java
index b602e92b8..3cc6155b0 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/PreferencesActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/PreferencesActivity.java
@@ -18,10 +18,10 @@ package org.thialfihar.android.apg.ui;
import org.spongycastle.bcpg.HashAlgorithmTags;
import org.spongycastle.openpgp.PGPEncryptedData;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.Preferences;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
import org.thialfihar.android.apg.ui.widget.IntegerListPreference;
import org.thialfihar.android.apg.R;
@@ -36,7 +36,6 @@ import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
-
public class PreferencesActivity extends SherlockPreferenceActivity {
private IntegerListPreference mPassPhraseCacheTtl = null;
private IntegerListPreference mEncryptionAlgorithm = null;
@@ -56,6 +55,7 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
addPreferencesFromResource(R.xml.apg_preferences);
@@ -68,7 +68,7 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
mPassPhraseCacheTtl.setValue(newValue.toString());
mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry());
mPreferences.setPassPhraseCacheTtl(Integer.parseInt(newValue.toString()));
-
+
// restart cache service with new ttl
PassphraseCacheService.startCacheService(PreferencesActivity.this);
return false;
@@ -194,8 +194,8 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(PreferencesActivity.this,
- KeyServerPreferenceActivity.class);
- intent.putExtra(Apg.EXTRA_KEY_SERVERS, mPreferences.getKeyServers());
+ PreferencesKeyServerActivity.class);
+ intent.putExtra(PGPHelper.EXTRA_KEY_SERVERS, mPreferences.getKeyServers());
startActivityForResult(intent, Id.request.key_server_preference);
return false;
}
@@ -209,7 +209,7 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
if (resultCode == RESULT_CANCELED || data == null) {
return;
}
- String servers[] = data.getStringArrayExtra(Apg.EXTRA_KEY_SERVERS);
+ String servers[] = data.getStringArrayExtra(PGPHelper.EXTRA_KEY_SERVERS);
mPreferences.setKeyServers(servers);
mKeyServerPreference.setSummary(getResources().getString(R.string.nKeyServers,
servers.length));
@@ -228,7 +228,10 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
switch (item.getItemId()) {
case android.R.id.home:
- startActivity(new Intent(this, MainActivity.class));
+ // app icon in Action Bar clicked; go home
+ Intent intent = new Intent(this, MainActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
return true;
default:
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/KeyServerPreferenceActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/PreferencesKeyServerActivity.java
index e1233661f..ae2cfa0ea 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/KeyServerPreferenceActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/PreferencesKeyServerActivity.java
@@ -18,13 +18,17 @@ package org.thialfihar.android.apg.ui;
import java.util.Vector;
+import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.ui.widget.Editor;
import org.thialfihar.android.apg.ui.widget.KeyServerEditor;
import org.thialfihar.android.apg.ui.widget.Editor.EditorListener;
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuItem;
import android.content.Context;
import android.content.Intent;
@@ -33,10 +37,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import android.widget.Button;
import android.widget.TextView;
-public class KeyServerPreferenceActivity extends BaseActivity implements OnClickListener,
+public class PreferencesKeyServerActivity extends SherlockActivity implements OnClickListener,
EditorListener {
private LayoutInflater mInflater;
private ViewGroup mEditors;
@@ -45,10 +48,60 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
private TextView mSummary;
@Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+
+ case android.R.id.home:
+ // app icon in Action Bar clicked; go home
+ Intent intent = new Intent(this, PreferencesActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+
+ return true;
+
+ case Id.menu.option.okay:
+ okClicked();
+
+ return true;
+
+ case Id.menu.option.cancel:
+ cancelClicked();
+
+ return true;
+
+ default:
+ break;
+
+ }
+ return false;
+ }
+
+ /**
+ * ActionBar menu is created based on class variables to change it at runtime
+ *
+ */
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+
+ menu.add(1, Id.menu.option.cancel, 0, android.R.string.cancel).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+
+ menu.add(1, Id.menu.option.okay, 1, android.R.string.ok).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+
+ return true;
+ }
+
+ @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.key_server_preference);
+ final ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
+
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTitle = (TextView) findViewById(R.id.title);
@@ -61,7 +114,7 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
mAdd.setOnClickListener(this);
Intent intent = getIntent();
- String servers[] = intent.getStringArrayExtra(Apg.EXTRA_KEY_SERVERS);
+ String servers[] = intent.getStringArrayExtra(PGPHelper.EXTRA_KEY_SERVERS);
if (servers != null) {
for (int i = 0; i < servers.length; ++i) {
KeyServerEditor view = (KeyServerEditor) mInflater.inflate(
@@ -71,20 +124,6 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
mEditors.addView(view);
}
}
-
- Button okButton = (Button) findViewById(R.id.btn_ok);
- okButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- okClicked();
- }
- });
-
- Button cancelButton = (Button) findViewById(R.id.btn_cancel);
- cancelButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- cancelClicked();
- }
- });
}
public void onDeleted(Editor editor) {
@@ -114,15 +153,8 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
}
}
String[] dummy = new String[0];
- data.putExtra(Apg.EXTRA_KEY_SERVERS, servers.toArray(dummy));
+ data.putExtra(PGPHelper.EXTRA_KEY_SERVERS, servers.toArray(dummy));
setResult(RESULT_OK, data);
finish();
}
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // override this, so no option menu is added (as would be in BaseActivity), since
- // we're still in preferences
- return true;
- }
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/PublicKeyListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/PublicKeyListActivity.java
index a2551b769..21a7ddee5 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/PublicKeyListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/PublicKeyListActivity.java
@@ -17,10 +17,10 @@
package org.thialfihar.android.apg.ui;
import org.spongycastle.openpgp.PGPPublicKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.helper.PGPHelper;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
@@ -71,7 +71,7 @@ public class PublicKeyListActivity extends KeyListActivity {
}
case Id.menu.option.scanQRCode: {
Intent intent = new Intent(this, ImportFromQRCodeActivity.class);
- intent.setAction(Apg.Intent.IMPORT_FROM_QR_CODE);
+ intent.setAction(PGPHelper.Intent.IMPORT_FROM_QR_CODE);
startActivityForResult(intent, Id.request.import_from_qr_code);
return true;
@@ -114,9 +114,9 @@ public class PublicKeyListActivity extends KeyListActivity {
mSelectedItem = groupPosition;
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
long keyId = 0;
- Object keyRing = Apg.getKeyRing(keyRingId);
+ Object keyRing = PGPHelper.getKeyRing(keyRingId);
if (keyRing != null && keyRing instanceof PGPPublicKeyRing) {
- keyId = Apg.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
+ keyId = PGPHelper.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
}
if (keyId == 0) {
// this shouldn't happen
@@ -124,8 +124,8 @@ public class PublicKeyListActivity extends KeyListActivity {
}
Intent intent = new Intent(this, KeyServerQueryActivity.class);
- intent.setAction(Apg.Intent.LOOK_UP_KEY_ID_AND_RETURN);
- intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
+ intent.setAction(PGPHelper.Intent.LOOK_UP_KEY_ID_AND_RETURN);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
startActivityForResult(intent, Id.request.look_up_key_id);
return true;
@@ -136,8 +136,8 @@ public class PublicKeyListActivity extends KeyListActivity {
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
Intent intent = new Intent(this, KeyServerExportActivity.class);
- intent.setAction(Apg.Intent.EXPORT_KEY_TO_SERVER);
- intent.putExtra(Apg.EXTRA_KEY_ID, keyRingId);
+ intent.setAction(PGPHelper.Intent.EXPORT_KEY_TO_SERVER);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyRingId);
startActivityForResult(intent, Id.request.export_to_server);
return true;
@@ -147,9 +147,9 @@ public class PublicKeyListActivity extends KeyListActivity {
mSelectedItem = groupPosition;
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
long keyId = 0;
- Object keyRing = Apg.getKeyRing(keyRingId);
+ Object keyRing = PGPHelper.getKeyRing(keyRingId);
if (keyRing != null && keyRing instanceof PGPPublicKeyRing) {
- keyId = Apg.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
+ keyId = PGPHelper.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
}
if (keyId == 0) {
@@ -158,7 +158,7 @@ public class PublicKeyListActivity extends KeyListActivity {
}
Intent intent = new Intent(this, SignKeyActivity.class);
- intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
startActivity(intent);
return true;
@@ -175,13 +175,13 @@ public class PublicKeyListActivity extends KeyListActivity {
switch (requestCode) {
case Id.request.look_up_key_id: {
if (resultCode == RESULT_CANCELED || data == null
- || data.getStringExtra(Apg.EXTRA_TEXT) == null) {
+ || data.getStringExtra(PGPHelper.EXTRA_TEXT) == null) {
return;
}
Intent intent = new Intent(this, PublicKeyListActivity.class);
- intent.setAction(Apg.Intent.IMPORT);
- intent.putExtra(Apg.EXTRA_TEXT, data.getStringExtra(Apg.EXTRA_TEXT));
+ intent.setAction(PGPHelper.Intent.IMPORT);
+ intent.putExtra(PGPHelper.EXTRA_TEXT, data.getStringExtra(PGPHelper.EXTRA_TEXT));
handleIntent(intent);
break;
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SecretKeyListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/SecretKeyListActivity.java
index b0475c147..290fe7479 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/SecretKeyListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/SecretKeyListActivity.java
@@ -17,9 +17,9 @@
package org.thialfihar.android.apg.ui;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.passphrase.AskForPassphrase;
import com.actionbarsherlock.view.Menu;
@@ -111,7 +111,7 @@ public class SecretKeyListActivity extends KeyListActivity implements OnChildCli
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter())
.getGroupId(mSelectedItem);
- String msg = keyId + "," + Apg.getFingerPrint(keyId);
+ String msg = keyId + "," + PGPHelper.getFingerPrint(keyId);
new IntentIntegrator(this).shareText(msg);
}
@@ -146,11 +146,11 @@ public class SecretKeyListActivity extends KeyListActivity implements OnChildCli
public void checkPassPhraseAndEdit() {
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter()).getGroupId(mSelectedItem);
- String passPhrase = Apg.getCachedPassPhrase(keyId);
+ String passPhrase = PGPHelper.getCachedPassPhrase(keyId);
if (passPhrase == null) {
showDialog(Id.dialog.pass_phrase);
} else {
- Apg.setEditPassPhrase(passPhrase);
+ PGPHelper.setEditPassPhrase(passPhrase);
editKey();
}
}
@@ -158,20 +158,20 @@ public class SecretKeyListActivity extends KeyListActivity implements OnChildCli
@Override
public void passPhraseCallback(long keyId, String passPhrase) {
super.passPhraseCallback(keyId, passPhrase);
- Apg.setEditPassPhrase(passPhrase);
+ PGPHelper.setEditPassPhrase(passPhrase);
editKey();
}
private void createKey() {
- Apg.setEditPassPhrase("");
- Intent intent = new Intent(Apg.Intent.CREATE_KEY);
+ PGPHelper.setEditPassPhrase("");
+ Intent intent = new Intent(PGPHelper.Intent.CREATE_KEY);
startActivityForResult(intent, Id.message.create_key);
}
private void editKey() {
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter()).getGroupId(mSelectedItem);
- Intent intent = new Intent(Apg.Intent.EDIT_KEY);
- intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
+ Intent intent = new Intent(PGPHelper.Intent.EDIT_KEY);
+ intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
startActivityForResult(intent, Id.message.edit_key);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java
index 07ad60d89..93434912d 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java
@@ -19,8 +19,8 @@ package org.thialfihar.android.apg.ui;
import java.util.Vector;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.ui.widget.SelectPublicKeyListAdapter;
import com.actionbarsherlock.app.ActionBar;
@@ -89,7 +89,7 @@ public class SelectPublicKeyListActivity extends BaseActivity {
}
long selectedKeyIds[] = null;
- selectedKeyIds = intent.getLongArrayExtra(Apg.EXTRA_SELECTION);
+ selectedKeyIds = intent.getLongArrayExtra(PGPHelper.EXTRA_SELECTION);
if (selectedKeyIds == null) {
Vector<Long> vector = new Vector<Long>();
@@ -151,8 +151,8 @@ public class SelectPublicKeyListActivity extends BaseActivity {
selectedKeyIds[i] = keys.get(i);
}
String userIdArray[] = new String[0];
- data.putExtra(Apg.EXTRA_SELECTION, selectedKeyIds);
- data.putExtra(Apg.EXTRA_USER_IDS, userIds.toArray(userIdArray));
+ data.putExtra(PGPHelper.EXTRA_SELECTION, selectedKeyIds);
+ data.putExtra(PGPHelper.EXTRA_USER_IDS, userIds.toArray(userIdArray));
setResult(RESULT_OK, data);
finish();
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SelectSecretKeyListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/SelectSecretKeyListActivity.java
index dec88dd7f..1f5607d94 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/SelectSecretKeyListActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/SelectSecretKeyListActivity.java
@@ -17,8 +17,8 @@
package org.thialfihar.android.apg.ui;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.ui.widget.SelectSecretKeyListAdapter;
import com.actionbarsherlock.app.ActionBar;
@@ -62,8 +62,8 @@ public class SelectSecretKeyListActivity extends BaseActivity {
mList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent data = new Intent();
- data.putExtra(Apg.EXTRA_KEY_ID, id);
- data.putExtra(Apg.EXTRA_USER_ID, (String) mList.getItemAtPosition(position));
+ data.putExtra(PGPHelper.EXTRA_KEY_ID, id);
+ data.putExtra(PGPHelper.EXTRA_USER_ID, (String) mList.getItemAtPosition(position));
setResult(RESULT_OK, data);
finish();
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SignKeyActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/SignKeyActivity.java
index d853873e1..43c481a74 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/SignKeyActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/SignKeyActivity.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2011 Senecaso
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -30,11 +32,11 @@ import org.spongycastle.openpgp.PGPSignatureGenerator;
import org.spongycastle.openpgp.PGPSignatureSubpacketGenerator;
import org.spongycastle.openpgp.PGPSignatureSubpacketVector;
import org.spongycastle.openpgp.PGPUtil;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.HkpKeyServer;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.helper.PGPHelper;
import com.actionbarsherlock.view.MenuItem;
@@ -122,7 +124,7 @@ public class SignKeyActivity extends BaseActivity {
}
});
- pubKeyId = getIntent().getLongExtra(Apg.EXTRA_KEY_ID, 0);
+ pubKeyId = getIntent().getLongExtra(PGPHelper.EXTRA_KEY_ID, 0);
if (pubKeyId == 0) {
finish(); // nothing to do if we dont know what key to sign
} else {
@@ -137,7 +139,7 @@ public class SignKeyActivity extends BaseActivity {
* handles the UI bits of the signing process on the UI thread
*/
private void initiateSigning() {
- PGPPublicKeyRing pubring = Apg.getPublicKeyRing(pubKeyId);
+ PGPPublicKeyRing pubring = PGPHelper.getPublicKeyRing(pubKeyId);
if (pubring != null) {
// if we have already signed this key, dont bother doing it again
boolean alreadySigned = false;
@@ -156,7 +158,7 @@ public class SignKeyActivity extends BaseActivity {
/*
* get the user's passphrase for this key (if required)
*/
- String passphrase = Apg.getCachedPassPhrase(masterKeyId);
+ String passphrase = PGPHelper.getCachedPassPhrase(masterKeyId);
if (passphrase == null) {
showDialog(Id.dialog.pass_phrase);
return; // bail out; need to wait until the user has entered the passphrase
@@ -168,7 +170,7 @@ public class SignKeyActivity extends BaseActivity {
final Bundle status = new Bundle();
Message msg = new Message();
- status.putString(Apg.EXTRA_ERROR, "Key has already been signed");
+ status.putString(PGPHelper.EXTRA_ERROR, "Key has already been signed");
status.putInt(Constants.extras.STATUS, Id.message.done);
@@ -206,16 +208,16 @@ public class SignKeyActivity extends BaseActivity {
Message msg = new Message();
try {
- String passphrase = Apg.getCachedPassPhrase(masterKeyId);
+ String passphrase = PGPHelper.getCachedPassPhrase(masterKeyId);
if (passphrase == null || passphrase.length() <= 0) {
- status.putString(Apg.EXTRA_ERROR, "Unable to obtain passphrase");
+ status.putString(PGPHelper.EXTRA_ERROR, "Unable to obtain passphrase");
} else {
- PGPPublicKeyRing pubring = Apg.getPublicKeyRing(pubKeyId);
+ PGPPublicKeyRing pubring = PGPHelper.getPublicKeyRing(pubKeyId);
/*
* sign the incoming key
*/
- PGPSecretKey secretKey = Apg.getSecretKey(masterKeyId);
+ PGPSecretKey secretKey = PGPHelper.getSecretKey(masterKeyId);
PGPPrivateKey signingKey = secretKey.extractPrivateKey(passphrase.toCharArray(),
BouncyCastleProvider.PROVIDER_NAME);
PGPSignatureGenerator sGen = new PGPSignatureGenerator(secretKey.getPublicKey()
@@ -241,33 +243,33 @@ public class SignKeyActivity extends BaseActivity {
* upload the newly signed key to the key server
*/
- Apg.uploadKeyRingToServer(server, pubring);
+ PGPHelper.uploadKeyRingToServer(server, pubring);
}
// store the signed key in our local cache
- int retval = Apg.storeKeyRingInCache(pubring);
+ int retval = PGPHelper.storeKeyRingInCache(pubring);
if (retval != Id.return_value.ok && retval != Id.return_value.updated) {
- status.putString(Apg.EXTRA_ERROR, "Failed to store signed key in local cache");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to store signed key in local cache");
}
}
} catch (PGPException e) {
Log.e(TAG, "Failed to sign key", e);
- status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.STATUS, Id.message.done);
return;
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "Failed to sign key", e);
- status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.STATUS, Id.message.done);
return;
} catch (NoSuchProviderException e) {
Log.e(TAG, "Failed to sign key", e);
- status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.STATUS, Id.message.done);
return;
} catch (SignatureException e) {
Log.e(TAG, "Failed to sign key", e);
- status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
+ status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.STATUS, Id.message.done);
return;
}
@@ -277,7 +279,7 @@ public class SignKeyActivity extends BaseActivity {
msg.setData(status);
sendMessage(msg);
- if (status.containsKey(Apg.EXTRA_ERROR)) {
+ if (status.containsKey(PGPHelper.EXTRA_ERROR)) {
setResult(Id.return_value.error);
} else {
setResult(Id.return_value.ok);
@@ -291,7 +293,7 @@ public class SignKeyActivity extends BaseActivity {
switch (requestCode) {
case Id.request.secret_keys: {
if (resultCode == RESULT_OK) {
- masterKeyId = data.getLongExtra(Apg.EXTRA_KEY_ID, 0);
+ masterKeyId = data.getLongExtra(PGPHelper.EXTRA_KEY_ID, 0);
// re-enable the sign button so the user can initiate the sign process
Button sign = (Button) findViewById(R.id.sign);
@@ -314,7 +316,7 @@ public class SignKeyActivity extends BaseActivity {
removeDialog(Id.dialog.signing);
Bundle data = msg.getData();
- String error = data.getString(Apg.EXTRA_ERROR);
+ String error = data.getString(PGPHelper.EXTRA_ERROR);
if (error != null) {
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
.show();
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/dialog/FileDialogFragment.java b/org_apg/src/org/thialfihar/android/apg/ui/dialog/FileDialogFragment.java
index 7f1fbf87b..531cddfcf 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/dialog/FileDialogFragment.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/dialog/FileDialogFragment.java
@@ -18,7 +18,8 @@ package org.thialfihar.android.apg.ui.dialog;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.util.Utils;
+import org.thialfihar.android.apg.helper.FileHelper;
+import org.thialfihar.android.apg.helper.OtherHelper;
import android.app.Activity;
import android.app.AlertDialog;
@@ -51,7 +52,7 @@ public class FileDialogFragment extends DialogFragment {
public static final int MESSAGE_OKAY = 1;
public static final String MESSAGE_DATA_FILENAME = "filename";
- public static final String MESSAGE_CHECKED = "checked";
+ public static final String MESSAGE_DATA_CHECKED = "checked";
/**
* Creates new instance of this file dialog fragment
@@ -107,7 +108,7 @@ public class FileDialogFragment extends DialogFragment {
mBrowse.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// only .asc or .gpg files
- Utils.openFile(activity, mFilename.getText().toString(), "text/plain", requestCode);
+ FileHelper.openFile(activity, mFilename.getText().toString(), "text/plain", requestCode);
}
});
@@ -135,7 +136,7 @@ public class FileDialogFragment extends DialogFragment {
// return resulting data back to activity
Bundle data = new Bundle();
data.putString(MESSAGE_DATA_FILENAME, mFilename.getText().toString());
- data.putBoolean(MESSAGE_CHECKED, checked);
+ data.putBoolean(MESSAGE_DATA_CHECKED, checked);
sendMessageToHandler(MESSAGE_OKAY, data);
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/dialog/PassphraseDialogFragment.java b/org_apg/src/org/thialfihar/android/apg/ui/dialog/PassphraseDialogFragment.java
index 3b83aaaa3..ce08c6c86 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/dialog/PassphraseDialogFragment.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/dialog/PassphraseDialogFragment.java
@@ -21,8 +21,8 @@ import org.spongycastle.openpgp.PGPPrivateKey;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.operator.PBESecretKeyDecryptor;
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
-import org.thialfihar.android.apg.Apg;
-import org.thialfihar.android.apg.Apg.GeneralException;
+import org.thialfihar.android.apg.helper.PGPHelper;
+import org.thialfihar.android.apg.helper.PGPHelper.GeneralException;
import org.thialfihar.android.apg.Constants;
import org.thialfihar.android.apg.Id;
import org.thialfihar.android.apg.R;
@@ -68,7 +68,7 @@ public class PassphraseDialogFragment extends DialogFragment {
// check if secret key has a passphrase
if (!(secretKeyId == Id.key.symmetric || secretKeyId == Id.key.none)) {
if (!hasPassphrase(secretKeyId)) {
- throw new Apg.GeneralException("No passphrase! No passphrase dialog needed!");
+ throw new PGPHelper.GeneralException("No passphrase! No passphrase dialog needed!");
}
}
@@ -91,7 +91,7 @@ public class PassphraseDialogFragment extends DialogFragment {
private static boolean hasPassphrase(long secretKeyId) {
// check if the key has no passphrase
try {
- PGPSecretKey secretKey = Apg.getMasterKey(Apg.getSecretKeyRing(secretKeyId));
+ PGPSecretKey secretKey = PGPHelper.getMasterKey(PGPHelper.getSecretKeyRing(secretKeyId));
Log.d(Constants.TAG, "Check if key has no passphrase...");
PBESecretKeyDecryptor keyDecryptor = new JcePBESecretKeyDecryptorBuilder().setProvider(
@@ -101,7 +101,7 @@ public class PassphraseDialogFragment extends DialogFragment {
Log.d(Constants.TAG, "Key has no passphrase! Caches empty passphrase!");
// cache empty passphrase
- Apg.setCachedPassPhrase(secretKey.getKeyID(), "");
+ PGPHelper.setCachedPassPhrase(secretKey.getKeyID(), "");
return false;
}
@@ -132,7 +132,7 @@ public class PassphraseDialogFragment extends DialogFragment {
secretKey = null;
alert.setMessage(getString(R.string.passPhraseForSymmetricEncryption));
} else {
- secretKey = Apg.getMasterKey(Apg.getSecretKeyRing(secretKeyId));
+ secretKey = PGPHelper.getMasterKey(PGPHelper.getSecretKeyRing(secretKeyId));
if (secretKey == null) {
alert.setTitle(R.string.title_keyNotFound);
alert.setMessage(getString(R.string.keyNotFound, secretKeyId));
@@ -144,7 +144,7 @@ public class PassphraseDialogFragment extends DialogFragment {
alert.setCancelable(false);
return alert.create();
}
- String userId = Apg.getMainUserIdSafe(activity, secretKey);
+ String userId = PGPHelper.getMainUserIdSafe(activity, secretKey);
alert.setMessage(getString(R.string.passPhraseFor, userId));
}
@@ -189,7 +189,7 @@ public class PassphraseDialogFragment extends DialogFragment {
// cache the new passphrase
Log.d(Constants.TAG, "Everything okay! Caching entered passphrase");
- Apg.setCachedPassPhrase(keyId, passPhrase);
+ PGPHelper.setCachedPassPhrase(keyId, passPhrase);
sendMessageToHandler(MESSAGE_OKAY);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/widget/KeyEditor.java b/org_apg/src/org/thialfihar/android/apg/ui/widget/KeyEditor.java
index 9f7b756eb..87d715fd9 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/widget/KeyEditor.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/widget/KeyEditor.java
@@ -18,8 +18,8 @@ package org.thialfihar.android.apg.ui.widget;
import org.spongycastle.openpgp.PGPPublicKey;
import org.spongycastle.openpgp.PGPSecretKey;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.util.Choice;
import org.thialfihar.android.apg.R;
@@ -133,9 +133,9 @@ public class KeyEditor extends LinearLayout implements Editor, OnClickListener {
mDeleteButton.setVisibility(View.INVISIBLE);
}
- mAlgorithm.setText(Apg.getAlgorithmInfo(key));
- String keyId1Str = Apg.getSmallFingerPrint(key.getKeyID());
- String keyId2Str = Apg.getSmallFingerPrint(key.getKeyID() >> 32);
+ mAlgorithm.setText(PGPHelper.getAlgorithmInfo(key));
+ String keyId1Str = PGPHelper.getSmallFingerPrint(key.getKeyID());
+ String keyId2Str = PGPHelper.getSmallFingerPrint(key.getKeyID() >> 32);
mKeyId.setText(keyId1Str + " " + keyId2Str);
Vector<Choice> choices = new Vector<Choice>();
@@ -160,8 +160,8 @@ public class KeyEditor extends LinearLayout implements Editor, OnClickListener {
// Set value in choice dropdown to key
int selectId = 0;
- if (Apg.isEncryptionKey(key)) {
- if (Apg.isSigningKey(key)) {
+ if (PGPHelper.isEncryptionKey(key)) {
+ if (PGPHelper.isSigningKey(key)) {
selectId = Id.choice.usage.sign_and_encrypt;
} else {
selectId = Id.choice.usage.encrypt_only;
@@ -184,14 +184,14 @@ public class KeyEditor extends LinearLayout implements Editor, OnClickListener {
}
GregorianCalendar cal = new GregorianCalendar();
- cal.setTime(Apg.getCreationDate(key));
+ cal.setTime(PGPHelper.getCreationDate(key));
mCreationDate.setText(DateFormat.getDateInstance().format(cal.getTime()));
cal = new GregorianCalendar();
- Date date = Apg.getExpiryDate(key);
+ Date date = PGPHelper.getExpiryDate(key);
if (date == null) {
setExpiryDate(null);
} else {
- cal.setTime(Apg.getExpiryDate(key));
+ cal.setTime(PGPHelper.getExpiryDate(key));
setExpiryDate(cal);
}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/widget/SectionView.java b/org_apg/src/org/thialfihar/android/apg/ui/widget/SectionView.java
index 98532a00b..22a2ecb5b 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/widget/SectionView.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/widget/SectionView.java
@@ -18,14 +18,14 @@ package org.thialfihar.android.apg.ui.widget;
import org.spongycastle.openpgp.PGPSecretKey;
import org.spongycastle.openpgp.PGPSecretKeyRing;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
+import org.thialfihar.android.apg.helper.PGPConversionHelper;
import org.thialfihar.android.apg.service.ApgHandler;
import org.thialfihar.android.apg.service.ApgService;
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
import org.thialfihar.android.apg.ui.widget.Editor.EditorListener;
import org.thialfihar.android.apg.util.Choice;
-import org.thialfihar.android.apg.util.Utils;
import org.thialfihar.android.apg.R;
import com.actionbarsherlock.app.SherlockFragmentActivity;
@@ -259,9 +259,10 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
String passPhrase;
if (mEditors.getChildCount() > 0) {
PGPSecretKey masterKey = ((KeyEditor) mEditors.getChildAt(0)).getValue();
- passPhrase = Apg.getCachedPassPhrase(masterKey.getKeyID());
+ passPhrase = PGPHelper.getCachedPassPhrase(masterKey.getKeyID());
- data.putByteArray(ApgService.MASTER_KEY, Utils.PGPSecretKeyToBytes(masterKey));
+ data.putByteArray(ApgService.MASTER_KEY,
+ PGPConversionHelper.PGPSecretKeyToBytes(masterKey));
} else {
passPhrase = "";
}
@@ -284,7 +285,7 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
// get new key from data bundle returned from service
Bundle data = message.getData();
- PGPSecretKeyRing newKeyRing = Utils.BytesToPGPSecretKeyRing(data
+ PGPSecretKeyRing newKeyRing = PGPConversionHelper.BytesToPGPSecretKeyRing(data
.getByteArray(ApgService.RESULT_NEW_KEY));
boolean isMasterKey = (mEditors.getChildCount() == 0);
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapter.java b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapter.java
index 39e68fb81..240d6a078 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapter.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapter.java
@@ -19,8 +19,8 @@ package org.thialfihar.android.apg.ui.widget;
import java.util.Date;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.provider.KeyRings;
import org.thialfihar.android.apg.provider.Keys;
import org.thialfihar.android.apg.provider.UserIds;
@@ -53,7 +53,7 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
mActivity = activity;
mParent = parent;
- mDatabase = Apg.getDatabase().db();
+ mDatabase = PGPHelper.getDatabase().db();
mInflater = (LayoutInflater) parent.getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
long now = new Date().getTime() / 1000;
@@ -177,7 +177,7 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
}
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
- keyId.setText(Apg.getSmallFingerPrint(masterKeyId));
+ keyId.setText(PGPHelper.getSmallFingerPrint(masterKeyId));
if (mainUserIdRest.getText().length() == 0) {
mainUserIdRest.setVisibility(View.GONE);
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectSecretKeyListAdapter.java b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectSecretKeyListAdapter.java
index 0f4c8e6d1..fc8c4e8b0 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectSecretKeyListAdapter.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectSecretKeyListAdapter.java
@@ -17,8 +17,8 @@ package org.thialfihar.android.apg.ui.widget;
import java.util.Date;
import org.thialfihar.android.apg.R;
-import org.thialfihar.android.apg.Apg;
import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.provider.KeyRings;
import org.thialfihar.android.apg.provider.Keys;
import org.thialfihar.android.apg.provider.UserIds;
@@ -48,7 +48,7 @@ public class SelectSecretKeyListAdapter extends BaseAdapter {
mActivity = activity;
mParent = parent;
- mDatabase = Apg.getDatabase().db();
+ mDatabase = PGPHelper.getDatabase().db();
mInflater = (LayoutInflater) parent.getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
long now = new Date().getTime() / 1000;
@@ -151,7 +151,7 @@ public class SelectSecretKeyListAdapter extends BaseAdapter {
}
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
- keyId.setText(Apg.getSmallFingerPrint(masterKeyId));
+ keyId.setText(PGPHelper.getSmallFingerPrint(masterKeyId));
if (mainUserIdRest.getText().length() == 0) {
mainUserIdRest.setVisibility(View.GONE);
diff --git a/org_apg/src/org/thialfihar/android/apg/util/Constants.java b/org_apg/src/org/thialfihar/android/apg/util/Constants.java
deleted file mode 100644
index fac9be649..000000000
--- a/org_apg/src/org/thialfihar/android/apg/util/Constants.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.thialfihar.android.apg.util;
-
-public class Constants {
- public static final String TAG = "APG";
-
-}
diff --git a/org_apg/src/org/thialfihar/android/apg/InputData.java b/org_apg/src/org/thialfihar/android/apg/util/InputData.java
index ba6caa1c5..6b357e6de 100644
--- a/org_apg/src/org/thialfihar/android/apg/InputData.java
+++ b/org_apg/src/org/thialfihar/android/apg/util/InputData.java
@@ -12,10 +12,11 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg;
+package org.thialfihar.android.apg.util;
import java.io.InputStream;
+
public class InputData {
private PositionAwareInputStream mInputStream;
private long mSize;
diff --git a/org_apg/src/org/thialfihar/android/apg/PositionAwareInputStream.java b/org_apg/src/org/thialfihar/android/apg/util/PositionAwareInputStream.java
index d49713ae6..7850e2513 100644
--- a/org_apg/src/org/thialfihar/android/apg/PositionAwareInputStream.java
+++ b/org_apg/src/org/thialfihar/android/apg/util/PositionAwareInputStream.java
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg;
+package org.thialfihar.android.apg.util;
import java.io.IOException;
import java.io.InputStream;
diff --git a/org_apg/src/org/thialfihar/android/apg/Primes.java b/org_apg/src/org/thialfihar/android/apg/util/Primes.java
index f0f391291..071673c13 100644
--- a/org_apg/src/org/thialfihar/android/apg/Primes.java
+++ b/org_apg/src/org/thialfihar/android/apg/util/Primes.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.thialfihar.android.apg;
+package org.thialfihar.android.apg.util;
import java.math.BigInteger;