API changes

This commit is contained in:
Dominik Schürmann 2012-12-12 19:14:09 +01:00
parent e3fea30abe
commit 2dcaad3d3b
34 changed files with 302 additions and 786 deletions

View File

@ -22,36 +22,36 @@ import java.util.Arrays;
public class ApgData implements Serializable {
private static final long serialVersionUID = 6314045536270848410L;
protected long mEncryptionKeyIds[] = null;
protected long mSignatureKeyId = 0;
protected String mSignatureUserId = null;
protected long mPublicKeyIds[] = null;
protected long mSecretKeyId = 0;
protected String mSecretKeyUserId = null;
protected boolean mSignatureSuccess = false;
protected boolean mSignatureUnknown = false;
protected String mDecryptedData = null;
protected String mEncryptedData = null;
public void setSignatureKeyId(long keyId) {
mSignatureKeyId = keyId;
public void setSecretKeyId(long keyId) {
mSecretKeyId = keyId;
}
public long getSignatureKeyId() {
return mSignatureKeyId;
public long getSecretKeyId() {
return mSecretKeyId;
}
public void setEncryptionKeys(long keyIds[]) {
mEncryptionKeyIds = keyIds;
public void setPublicKeys(long keyIds[]) {
mPublicKeyIds = keyIds;
}
public long[] getEncryptionKeys() {
return mEncryptionKeyIds;
public long[] getPublicKeys() {
return mPublicKeyIds;
}
public boolean hasSignatureKey() {
return mSignatureKeyId != 0;
public boolean hasSecretKey() {
return mSecretKeyId != 0;
}
public boolean hasEncryptionKeys() {
return (mEncryptionKeyIds != null) && (mEncryptionKeyIds.length > 0);
public boolean hasPublicKeys() {
return (mPublicKeyIds != null) && (mPublicKeyIds.length > 0);
}
public String getEncryptedData() {
@ -70,12 +70,12 @@ public class ApgData implements Serializable {
mDecryptedData = data;
}
public void setSignatureUserId(String userId) {
mSignatureUserId = userId;
public void setSecretKeyUserId(String userId) {
mSecretKeyUserId = userId;
}
public String getSignatureUserId() {
return mSignatureUserId;
public String getSecretKeyUserId() {
return mSecretKeyUserId;
}
public boolean getSignatureSuccess() {
@ -96,11 +96,11 @@ public class ApgData implements Serializable {
@Override
public String toString() {
String output = "mEncryptionKeyIds: " + Arrays.toString(mEncryptionKeyIds)
+ "\nmSignatureKeyId: " + mSignatureKeyId + "\nmSignatureUserId: "
+ mSignatureUserId + "\nmSignatureSuccess: " + mSignatureSuccess
+ "\nmSignatureUnknown: " + mSignatureUnknown + "\nmDecryptedData: "
+ mDecryptedData + "\nmEncryptedData: " + mEncryptedData;
String output = "mPublicKeyIds: " + Arrays.toString(mPublicKeyIds) + "\nmSecretKeyId: "
+ mSecretKeyId + "\nmSecretKeyUserId: " + mSecretKeyUserId
+ "\nmSignatureSuccess: " + mSignatureSuccess + "\nmSignatureUnknown: "
+ mSignatureUnknown + "\nmDecryptedData: " + mDecryptedData + "\nmEncryptedData: "
+ mEncryptedData;
return output;
}

View File

@ -27,12 +27,32 @@ public class ApgIntentHelper {
public static final String APG_INTENT_PREFIX = "org.thialfihar.android.apg.intent.";
// Intents
public static final String ACTION_DECRYPT = APG_INTENT_PREFIX + "DECRYPT";
/**
* Encrypt
*/
// without permission
public static final String ACTION_ENCRYPT = APG_INTENT_PREFIX + "ENCRYPT";
public static final String ACTION_DECRYPT_FILE = APG_INTENT_PREFIX + "DECRYPT_FILE";
public static final String ACTION_ENCRYPT_FILE = APG_INTENT_PREFIX + "ENCRYPT_FILE";
public static final String ACTION_DECRYPT_AND_RETURN = APG_INTENT_PREFIX + "DECRYPT_AND_RETURN";
// with permission
public static final String ACTION_ENCRYPT_AND_RETURN = APG_INTENT_PREFIX + "ENCRYPT_AND_RETURN";
public static final String ACTION_GENERATE_SIGNATURE_AND_RETURN = APG_INTENT_PREFIX
+ "GENERATE_SIGNATURE_AND_RETURN";
public static final String ACTION_ENCRYPT_STREAM_AND_RETURN = APG_INTENT_PREFIX
+ "ENCRYPT_STREAM_AND_RETURN";
/**
* Decrypt
*/
// without permission
public static final String ACTION_DECRYPT = APG_INTENT_PREFIX + "DECRYPT";
public static final String ACTION_DECRYPT_FILE = APG_INTENT_PREFIX + "DECRYPT_FILE";
// with permission
public static final String ACTION_DECRYPT_AND_RETURN = APG_INTENT_PREFIX + "DECRYPT_AND_RETURN";
public static final String ACTION_DECRYPT_STREAM_AND_RETURN = APG_INTENT_PREFIX
+ "DECRYPT_STREAM_AND_RETURN";
public static final String ACTION_SELECT_PUBLIC_KEYS = APG_INTENT_PREFIX + "SELECT_PUBLIC_KEYS";
public static final String ACTION_SELECT_SECRET_KEY = APG_INTENT_PREFIX + "SELECT_SECRET_KEY";
public static final String ACTION_CREATE_KEY = APG_INTENT_PREFIX + "CREATE_KEY";
@ -61,14 +81,18 @@ public class ApgIntentHelper {
public static final String RESULT_EXTRA_MASTER_KEY_IDS = "masterKeyIds";
public static final String RESULT_EXTRA_USER_IDS = "userIds";
// result from EditKey
public static final String RESULT_EXTRA_MASTER_KEY_ID = "masterKeyId";
public static final String RESULT_EXTRA_USER_ID = "userId";
public static final String INTENT_VERSION = "1";
public static final int DECRYPT_MESSAGE = 0x21070001;
public static final int ENCRYPT_MESSAGE = 0x21070002;
public static final int SELECT_PUBLIC_KEYS = 0x21070003;
public static final int SELECT_SECRET_KEY = 0x21070004;
public static final int CREATE_KEY = 0x21070005;
public static final int EDIT_KEY = 0x21070006;
public static final int DECRYPT_MESSAGE = 0x00007121;
public static final int ENCRYPT_MESSAGE = 0x00007122;
public static final int SELECT_PUBLIC_KEYS = 0x00007123;
public static final int SELECT_SECRET_KEY = 0x00007124;
public static final int CREATE_KEY = 0x00007125;
public static final int EDIT_KEY = 0x00007126;
private Activity activity;
@ -221,44 +245,53 @@ public class ApgIntentHelper {
public boolean onActivityResult(int requestCode, int resultCode, Intent data, ApgData apgData) {
switch (requestCode) {
case CREATE_KEY:
if (resultCode != Activity.RESULT_OK || data == null) {
// user canceled!
break;
}
apgData.setSecretKeyId(data.getLongExtra(RESULT_EXTRA_MASTER_KEY_ID, 0));
apgData.setSecretKeyUserId(data.getStringExtra(RESULT_EXTRA_USER_ID));
break;
case SELECT_SECRET_KEY:
if (resultCode != Activity.RESULT_OK || data == null) {
// user canceled!
break;
}
apgData.setSignatureKeyId(data.getLongExtra(EXTRA_KEY_ID, 0));
apgData.setSignatureUserId(data.getStringExtra(EXTRA_USER_ID));
break;
apgData.setSecretKeyId(data.getLongExtra(EXTRA_KEY_ID, 0));
apgData.setSecretKeyUserId(data.getStringExtra(EXTRA_USER_ID));
break;
case SELECT_PUBLIC_KEYS:
if (resultCode != Activity.RESULT_OK || data == null) {
apgData.setEncryptionKeys(null);
apgData.setPublicKeys(null);
break;
}
apgData.setEncryptionKeys(data.getLongArrayExtra(RESULT_EXTRA_MASTER_KEY_IDS));
break;
apgData.setPublicKeys(data.getLongArrayExtra(RESULT_EXTRA_MASTER_KEY_IDS));
break;
case ENCRYPT_MESSAGE:
if (resultCode != Activity.RESULT_OK || data == null) {
apgData.setEncryptionKeys(null);
apgData.setPublicKeys(null);
break;
}
apgData.setEncryptedData(data.getStringExtra(EXTRA_ENCRYPTED_MESSAGE));
break;
break;
case DECRYPT_MESSAGE:
if (resultCode != Activity.RESULT_OK || data == null) {
break;
}
apgData.setSignatureUserId(data.getStringExtra(EXTRA_SIGNATURE_USER_ID));
apgData.setSignatureKeyId(data.getLongExtra(EXTRA_SIGNATURE_KEY_ID, 0));
apgData.setSecretKeyUserId(data.getStringExtra(EXTRA_SIGNATURE_USER_ID));
apgData.setSecretKeyId(data.getLongExtra(EXTRA_SIGNATURE_KEY_ID, 0));
apgData.setSignatureSuccess(data.getBooleanExtra(EXTRA_SIGNATURE_SUCCESS, false));
apgData.setSignatureUnknown(data.getBooleanExtra(EXTRA_SIGNATURE_UNKNOWN, false));
apgData.setDecryptedData(data.getStringExtra(EXTRA_DECRYPTED_MESSAGE));
break;
break;
default:
return false;
}
@ -273,8 +306,8 @@ public class ApgIntentHelper {
* The emails that should be used for preselection.
* @return true when activity was found and executed successfully
*/
public boolean selectEncryptionKeys(String emails) {
return selectEncryptionKeys(emails, null);
public boolean selectPublicKeys(String emails) {
return selectPublicKeys(emails, null);
}
/**
@ -286,19 +319,17 @@ public class ApgIntentHelper {
* ApgData with encryption keys and signature keys preselected
* @return true when activity was found and executed successfully
*/
public boolean selectEncryptionKeys(String emails, ApgData apgData) {
public boolean selectPublicKeys(String emails, ApgData apgData) {
Intent intent = new Intent(ACTION_SELECT_PUBLIC_KEYS);
intent.putExtra(EXTRA_INTENT_VERSION, INTENT_VERSION);
long[] initialKeyIds = null;
if (apgData == null || !apgData.hasEncryptionKeys()) {
if (apgData == null || !apgData.hasPublicKeys()) {
ApgContentProviderHelper cPHelper = new ApgContentProviderHelper(activity);
initialKeyIds = cPHelper.getPublicKeyIdsFromEmail(emails);
} else {
initialKeyIds = apgData.getEncryptionKeys();
initialKeyIds = apgData.getPublicKeys();
}
intent.putExtra(EXTRA_SELECTION, initialKeyIds);

View File

@ -23,7 +23,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.widget.Toast;
public class Util {
public class ApgUtil {
/**
* Check whether APG is installed and at a high enough version.
@ -48,4 +48,25 @@ public class Util {
return false;
}
/**
* Splits userId string into naming part and email part
*
* @param userId
* @return array with naming (0) and email (1)
*/
public static String[] splitUserId(String userId) {
String[] output = new String[2];
String chunks[] = userId.split(" <", 2);
userId = chunks[0];
if (chunks.length > 1) {
output[1] = "<" + chunks[1];
output[1] = output[1].replaceAll("<", "");
output[1] = output[1].replaceAll(">", "");
}
output[0] = userId;
return output;
}
}

View File

@ -77,7 +77,7 @@
android:hardwareAccelerated="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock.Light.ForceOverflow" >
android:theme="@style/Theme.Sherlock.Light" >
<activity
android:name=".ui.MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 B

View File

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source Project
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.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abs__tab_unselected_holo" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abs__tab_selected_holo" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abs__tab_unselected_focused_holo" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abs__tab_selected_focused_holo" />
<!-- Pressed -->
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abs__tab_unselected_pressed_holo" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abs__tab_selected_pressed_holo" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abs__tab_unselected_pressed_holo" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abs__tab_selected_pressed_holo" />
</selector>

View File

@ -1,144 +0,0 @@
package android.support.v4.app;
import android.util.Log;
import android.view.View;
import android.view.Window;
import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener;
import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener;
import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import java.util.ArrayList;
/** I'm in ur package. Stealing ur variables. */
public abstract class _ActionBarSherlockTrojanHorse extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener {
private static final boolean DEBUG = false;
private static final String TAG = "_ActionBarSherlockTrojanHorse";
/** Fragment interface for menu creation callback. */
public interface OnCreateOptionsMenuListener {
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater);
}
/** Fragment interface for menu preparation callback. */
public interface OnPrepareOptionsMenuListener {
public void onPrepareOptionsMenu(Menu menu);
}
/** Fragment interface for menu item selection callback. */
public interface OnOptionsItemSelectedListener {
public boolean onOptionsItemSelected(MenuItem item);
}
private ArrayList<Fragment> mCreatedMenus;
///////////////////////////////////////////////////////////////////////////
// Sherlock menu handling
///////////////////////////////////////////////////////////////////////////
@Override
public boolean onCreatePanelMenu(int featureId, Menu menu) {
if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
if (featureId == Window.FEATURE_OPTIONS_PANEL) {
boolean result = onCreateOptionsMenu(menu);
if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result);
MenuInflater inflater = getSupportMenuInflater();
boolean show = false;
ArrayList<Fragment> newMenus = null;
if (mFragments.mActive != null) {
for (int i = 0; i < mFragments.mAdded.size(); i++) {
Fragment f = mFragments.mAdded.get(i);
if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnCreateOptionsMenuListener) {
show = true;
((OnCreateOptionsMenuListener)f).onCreateOptionsMenu(menu, inflater);
if (newMenus == null) {
newMenus = new ArrayList<Fragment>();
}
newMenus.add(f);
}
}
}
if (mCreatedMenus != null) {
for (int i = 0; i < mCreatedMenus.size(); i++) {
Fragment f = mCreatedMenus.get(i);
if (newMenus == null || !newMenus.contains(f)) {
f.onDestroyOptionsMenu();
}
}
}
mCreatedMenus = newMenus;
if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + show);
result |= show;
if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
return result;
}
return false;
}
@Override
public boolean onPreparePanel(int featureId, View view, Menu menu) {
if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu);
if (featureId == Window.FEATURE_OPTIONS_PANEL) {
boolean result = onPrepareOptionsMenu(menu);
if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result);
boolean show = false;
if (mFragments.mActive != null) {
for (int i = 0; i < mFragments.mAdded.size(); i++) {
Fragment f = mFragments.mAdded.get(i);
if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnPrepareOptionsMenuListener) {
show = true;
((OnPrepareOptionsMenuListener)f).onPrepareOptionsMenu(menu);
}
}
}
if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + show);
result |= show;
result &= menu.hasVisibleItems();
if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
return result;
}
return false;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
if (featureId == Window.FEATURE_OPTIONS_PANEL) {
if (onOptionsItemSelected(item)) {
return true;
}
if (mFragments.mActive != null) {
for (int i = 0; i < mFragments.mAdded.size(); i++) {
Fragment f = mFragments.mAdded.get(i);
if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnOptionsItemSelectedListener) {
if (((OnOptionsItemSelectedListener)f).onOptionsItemSelected(item)) {
return true;
}
}
}
}
}
return false;
}
public abstract boolean onCreateOptionsMenu(Menu menu);
public abstract boolean onPrepareOptionsMenu(Menu menu);
public abstract boolean onOptionsItemSelected(MenuItem item);
public abstract MenuInflater getSupportMenuInflater();
}

View File

@ -1,234 +0,0 @@
package com.actionbarsherlock.internal.view.menu;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.ActionProvider;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
/** Used to carry an instance of our version of MenuItem through a native channel. */
public class MenuItemMule implements MenuItem {
private static final String ERROR = "Cannot interact with object designed for temporary "
+ "instance passing. Make sure you using both SherlockFragmentActivity and "
+ "SherlockFragment.";
private final com.actionbarsherlock.view.MenuItem mItem;
public MenuItemMule(com.actionbarsherlock.view.MenuItem item) {
mItem = item;
}
public com.actionbarsherlock.view.MenuItem unwrap() {
return mItem;
}
@Override
public boolean collapseActionView() {
throw new IllegalStateException(ERROR);
}
@Override
public boolean expandActionView() {
throw new IllegalStateException(ERROR);
}
@Override
public ActionProvider getActionProvider() {
throw new IllegalStateException(ERROR);
}
@Override
public View getActionView() {
throw new IllegalStateException(ERROR);
}
@Override
public char getAlphabeticShortcut() {
throw new IllegalStateException(ERROR);
}
@Override
public int getGroupId() {
throw new IllegalStateException(ERROR);
}
@Override
public Drawable getIcon() {
throw new IllegalStateException(ERROR);
}
@Override
public Intent getIntent() {
throw new IllegalStateException(ERROR);
}
@Override
public int getItemId() {
throw new IllegalStateException(ERROR);
}
@Override
public ContextMenuInfo getMenuInfo() {
throw new IllegalStateException(ERROR);
}
@Override
public char getNumericShortcut() {
throw new IllegalStateException(ERROR);
}
@Override
public int getOrder() {
throw new IllegalStateException(ERROR);
}
@Override
public SubMenu getSubMenu() {
throw new IllegalStateException(ERROR);
}
@Override
public CharSequence getTitle() {
throw new IllegalStateException(ERROR);
}
@Override
public CharSequence getTitleCondensed() {
return mItem.getTitleCondensed();
//throw new IllegalStateException(ERROR);
}
@Override
public boolean hasSubMenu() {
throw new IllegalStateException(ERROR);
}
@Override
public boolean isActionViewExpanded() {
throw new IllegalStateException(ERROR);
}
@Override
public boolean isCheckable() {
throw new IllegalStateException(ERROR);
}
@Override
public boolean isChecked() {
throw new IllegalStateException(ERROR);
}
@Override
public boolean isEnabled() {
throw new IllegalStateException(ERROR);
}
@Override
public boolean isVisible() {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setActionProvider(ActionProvider arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setActionView(View arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setActionView(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setAlphabeticShortcut(char arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setCheckable(boolean arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setChecked(boolean arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setEnabled(boolean arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setIcon(Drawable arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setIcon(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setIntent(Intent arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setNumericShortcut(char arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setOnActionExpandListener(OnActionExpandListener arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setShortcut(char arg0, char arg1) {
throw new IllegalStateException(ERROR);
}
@Override
public void setShowAsAction(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setShowAsActionFlags(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setTitle(CharSequence arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setTitle(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setTitleCondensed(CharSequence arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem setVisible(boolean arg0) {
throw new IllegalStateException(ERROR);
}
}

View File

@ -1,151 +0,0 @@
package com.actionbarsherlock.internal.view.menu;
import android.content.ComponentName;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
/** Used to carry an instance of our version of Menu through a native channel. */
public class MenuMule implements Menu {
private static final String ERROR = "Cannot interact with object designed for temporary "
+ "instance passing. Make sure you using both SherlockFragmentActivity and "
+ "SherlockFragment.";
private final com.actionbarsherlock.view.Menu mMenu;
public boolean mDispatchShow = false;
public MenuMule(com.actionbarsherlock.view.Menu menu) {
mMenu = menu;
}
public com.actionbarsherlock.view.Menu unwrap() {
return mMenu;
}
@Override
public MenuItem add(CharSequence arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem add(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem add(int arg0, int arg1, int arg2, CharSequence arg3) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem add(int arg0, int arg1, int arg2, int arg3) {
throw new IllegalStateException(ERROR);
}
@Override
public int addIntentOptions(int arg0, int arg1, int arg2,
ComponentName arg3, Intent[] arg4, Intent arg5, int arg6,
MenuItem[] arg7) {
throw new IllegalStateException(ERROR);
}
@Override
public SubMenu addSubMenu(CharSequence arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public SubMenu addSubMenu(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public SubMenu addSubMenu(int arg0, int arg1, int arg2, CharSequence arg3) {
throw new IllegalStateException(ERROR);
}
@Override
public SubMenu addSubMenu(int arg0, int arg1, int arg2, int arg3) {
throw new IllegalStateException(ERROR);
}
@Override
public void clear() {
throw new IllegalStateException(ERROR);
}
@Override
public void close() {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem findItem(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public MenuItem getItem(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public boolean hasVisibleItems() {
return mMenu.hasVisibleItems();
//throw new IllegalStateException(ERROR);
}
@Override
public boolean isShortcutKey(int arg0, KeyEvent arg1) {
throw new IllegalStateException(ERROR);
}
@Override
public boolean performIdentifierAction(int arg0, int arg1) {
throw new IllegalStateException(ERROR);
}
@Override
public boolean performShortcut(int arg0, KeyEvent arg1, int arg2) {
throw new IllegalStateException(ERROR);
}
@Override
public void removeGroup(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public void removeItem(int arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public void setGroupCheckable(int arg0, boolean arg1, boolean arg2) {
throw new IllegalStateException(ERROR);
}
@Override
public void setGroupEnabled(int arg0, boolean arg1) {
throw new IllegalStateException(ERROR);
}
@Override
public void setGroupVisible(int arg0, boolean arg1) {
throw new IllegalStateException(ERROR);
}
@Override
public void setQwertyMode(boolean arg0) {
throw new IllegalStateException(ERROR);
}
@Override
public int size() {
throw new IllegalStateException(ERROR);
}
}

View File

@ -22,8 +22,8 @@
<string name="title_mailInbox">Mail Inbox</string>
<string name="title_managePublicKeys">Manage Public Keys</string>
<string name="title_manageSecretKeys">Manage Secret Keys</string>
<string name="title_selectRecipients">Select Recipients</string>
<string name="title_selectSignature">Select Signature</string>
<string name="title_selectRecipients">Select Public Key</string>
<string name="title_selectSignature">Select Secret Key</string>
<string name="title_encrypt">Encrypt</string>
<string name="title_decrypt">Decrypt</string>
<string name="title_authentication">Passphrase</string>
@ -324,8 +324,8 @@
<!-- Dashboard -->
<string name="dashboard_manage_keys">Manage Keys</string>
<string name="dashboard_my_keys">My Keys</string>
<string name="dashboard_manage_keys">Manage Public Keys</string>
<string name="dashboard_my_keys">My Secret Keys</string>
<string name="dashboard_encrypt">Encrypt</string>
<string name="dashboard_decrypt">Decrypt</string>
<string name="dashboard_help">Help</string>

View File

@ -98,37 +98,37 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
public static final int TARGET_STREAM = 3;
// encrypt
public static final String SECRET_KEY_ID = "secretKeyId";
public static final String USE_ASCII_AMOR = "useAsciiAmor";
public static final String ENCRYPTION_KEYS_IDS = "encryptionKeysIds";
public static final String COMPRESSION_ID = "compressionId";
public static final String GENERATE_SIGNATURE = "generateSignature";
public static final String SIGN_ONLY = "signOnly";
public static final String MESSAGE_BYTES = "messageBytes";
public static final String INPUT_FILE = "inputFile";
public static final String OUTPUT_FILE = "outputFile";
public static final String PROVIDER_URI = "providerUri";
public static final String ENCRYPT_SECRET_KEY_ID = "secretKeyId";
public static final String ENCRYPT_USE_ASCII_AMOR = "useAsciiAmor";
public static final String ENCRYPT_ENCRYPTION_KEYS_IDS = "encryptionKeysIds";
public static final String ENCRYPT_COMPRESSION_ID = "compressionId";
public static final String ENCRYPT_GENERATE_SIGNATURE = "generateSignature";
public static final String ENCRYPT_SIGN_ONLY = "signOnly";
public static final String ENCRYPT_MESSAGE_BYTES = "messageBytes";
public static final String ENCRYPT_INPUT_FILE = "inputFile";
public static final String ENCRYPT_OUTPUT_FILE = "outputFile";
public static final String ENCRYPT_PROVIDER_URI = "providerUri";
// decrypt/verify
public static final String SIGNED_ONLY = "signedOnly";
public static final String RETURN_BYTES = "returnBinary";
public static final String CIPHERTEXT_BYTES = "ciphertextBytes";
public static final String ASSUME_SYMMETRIC = "assumeSymmetric";
public static final String LOOKUP_UNKNOWN_KEY = "lookupUnknownKey";
public static final String DECRYPT_SIGNED_ONLY = "signedOnly";
public static final String DECRYPT_RETURN_BYTES = "returnBinary";
public static final String DECRYPT_CIPHERTEXT_BYTES = "ciphertextBytes";
public static final String DECRYPT_ASSUME_SYMMETRIC = "assumeSymmetric";
public static final String DECRYPT_LOOKUP_UNKNOWN_KEY = "lookupUnknownKey";
// edit keys
public static final String NEW_PASSPHRASE = "newPassphrase";
public static final String CURRENT_PASSPHRASE = "currentPassphrase";
public static final String USER_IDS = "userIds";
public static final String KEYS = "keys";
public static final String KEYS_USAGES = "keysUsages";
public static final String MASTER_KEY_ID = "masterKeyId";
// save keyring
public static final String SAVE_KEYRING_NEW_PASSPHRASE = "newPassphrase";
public static final String SAVE_KEYRING_CURRENT_PASSPHRASE = "currentPassphrase";
public static final String SAVE_KEYRING_USER_IDS = "userIds";
public static final String SAVE_KEYRING_KEYS = "keys";
public static final String SAVE_KEYRING_KEYS_USAGES = "keysUsages";
public static final String SAVE_KEYRING_MASTER_KEY_ID = "masterKeyId";
// generate key
public static final String ALGORITHM = "algorithm";
public static final String KEY_SIZE = "keySize";
public static final String SYMMETRIC_PASSPHRASE = "passphrase";
public static final String MASTER_KEY = "masterKey";
public static final String GENERATE_KEY_ALGORITHM = "algorithm";
public static final String GENERATE_KEY_KEY_SIZE = "keySize";
public static final String GENERATE_KEY_SYMMETRIC_PASSPHRASE = "passphrase";
public static final String GENERATE_KEY_MASTER_KEY = "masterKey";
// delete file securely
public static final String DELETE_FILE = "deleteFile";
@ -238,14 +238,14 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
/* Input */
int target = data.getInt(TARGET);
long secretKeyId = data.getLong(SECRET_KEY_ID);
String encryptionPassphrase = data.getString(SYMMETRIC_PASSPHRASE);
long secretKeyId = data.getLong(ENCRYPT_SECRET_KEY_ID);
String encryptionPassphrase = data.getString(GENERATE_KEY_SYMMETRIC_PASSPHRASE);
boolean useAsciiArmor = data.getBoolean(USE_ASCII_AMOR);
long encryptionKeyIds[] = data.getLongArray(ENCRYPTION_KEYS_IDS);
int compressionId = data.getInt(COMPRESSION_ID);
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
boolean signOnly = data.getBoolean(SIGN_ONLY);
boolean useAsciiArmor = data.getBoolean(ENCRYPT_USE_ASCII_AMOR);
long encryptionKeyIds[] = data.getLongArray(ENCRYPT_ENCRYPTION_KEYS_IDS);
int compressionId = data.getInt(ENCRYPT_COMPRESSION_ID);
boolean generateSignature = data.getBoolean(ENCRYPT_GENERATE_SIGNATURE);
boolean signOnly = data.getBoolean(ENCRYPT_SIGN_ONLY);
InputStream inStream = null;
long inLength = -1;
@ -254,7 +254,7 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
String streamFilename = null;
switch (target) {
case TARGET_BYTES: /* encrypting bytes directly */
byte[] bytes = data.getByteArray(MESSAGE_BYTES);
byte[] bytes = data.getByteArray(ENCRYPT_MESSAGE_BYTES);
inStream = new ByteArrayInputStream(bytes);
inLength = bytes.length;
@ -264,8 +264,8 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
break;
case TARGET_FILE: /* encrypting file */
String inputFile = data.getString(INPUT_FILE);
String outputFile = data.getString(OUTPUT_FILE);
String inputFile = data.getString(ENCRYPT_INPUT_FILE);
String outputFile = data.getString(ENCRYPT_OUTPUT_FILE);
// check if storage is ready
if (!FileHelper.isStorageMounted(inputFile)
@ -284,7 +284,7 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
break;
case TARGET_STREAM: /* Encrypting stream from content uri */
Uri providerUri = (Uri) data.getParcelable(PROVIDER_URI);
Uri providerUri = (Uri) data.getParcelable(ENCRYPT_PROVIDER_URI);
// InputStream
InputStream in = getContentResolver().openInputStream(providerUri);
@ -390,13 +390,13 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
/* Input */
int target = data.getInt(TARGET);
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);
long secretKeyId = data.getLong(ENCRYPT_SECRET_KEY_ID);
byte[] bytes = data.getByteArray(DECRYPT_CIPHERTEXT_BYTES);
boolean signedOnly = data.getBoolean(DECRYPT_SIGNED_ONLY);
boolean returnBytes = data.getBoolean(DECRYPT_RETURN_BYTES);
boolean assumeSymmetricEncryption = data.getBoolean(DECRYPT_ASSUME_SYMMETRIC);
boolean lookupUnknownKey = data.getBoolean(LOOKUP_UNKNOWN_KEY);
boolean lookupUnknownKey = data.getBoolean(DECRYPT_LOOKUP_UNKNOWN_KEY);
InputStream inStream = null;
long inLength = -1;
@ -414,8 +414,8 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
break;
case TARGET_FILE: /* decrypting file */
String inputFile = data.getString(INPUT_FILE);
String outputFile = data.getString(OUTPUT_FILE);
String inputFile = data.getString(ENCRYPT_INPUT_FILE);
String outputFile = data.getString(ENCRYPT_OUTPUT_FILE);
// check if storage is ready
if (!FileHelper.isStorageMounted(inputFile)
@ -437,7 +437,7 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
break;
case TARGET_STREAM: /* decrypting stream from content uri */
Uri providerUri = (Uri) data.getParcelable(PROVIDER_URI);
Uri providerUri = (Uri) data.getParcelable(ENCRYPT_PROVIDER_URI);
// InputStream
InputStream in = getContentResolver().openInputStream(providerUri);
@ -521,16 +521,16 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
try {
/* Input */
String oldPassPhrase = data.getString(CURRENT_PASSPHRASE);
String newPassPhrase = data.getString(NEW_PASSPHRASE);
String oldPassPhrase = data.getString(SAVE_KEYRING_CURRENT_PASSPHRASE);
String newPassPhrase = data.getString(SAVE_KEYRING_NEW_PASSPHRASE);
if (newPassPhrase == null) {
newPassPhrase = oldPassPhrase;
}
ArrayList<String> userIds = data.getStringArrayList(USER_IDS);
ArrayList<String> userIds = data.getStringArrayList(SAVE_KEYRING_USER_IDS);
ArrayList<PGPSecretKey> keys = PGPConversionHelper.BytesToPGPSecretKeyList(data
.getByteArray(KEYS));
ArrayList<Integer> keysUsages = data.getIntegerArrayList(KEYS_USAGES);
long masterKeyId = data.getLong(MASTER_KEY_ID);
.getByteArray(SAVE_KEYRING_KEYS));
ArrayList<Integer> keysUsages = data.getIntegerArrayList(SAVE_KEYRING_KEYS_USAGES);
long masterKeyId = data.getLong(SAVE_KEYRING_MASTER_KEY_ID);
/* Operation */
PGPMain.buildSecretKey(this, userIds, keys, keysUsages, masterKeyId, oldPassPhrase,
@ -549,13 +549,13 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
try {
/* Input */
int algorithm = data.getInt(ALGORITHM);
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
int keysize = data.getInt(KEY_SIZE);
int algorithm = data.getInt(GENERATE_KEY_ALGORITHM);
String passphrase = data.getString(GENERATE_KEY_SYMMETRIC_PASSPHRASE);
int keysize = data.getInt(GENERATE_KEY_KEY_SIZE);
PGPSecretKey masterKey = null;
if (data.containsKey(MASTER_KEY)) {
if (data.containsKey(GENERATE_KEY_MASTER_KEY)) {
masterKey = PGPConversionHelper.BytesToPGPSecretKey(data
.getByteArray(MASTER_KEY));
.getByteArray(GENERATE_KEY_MASTER_KEY));
}
/* Operation */
@ -580,7 +580,7 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
// generate one RSA 2048 key for signing and one subkey for encrypting!
try {
/* Input */
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
String passphrase = data.getString(GENERATE_KEY_SYMMETRIC_PASSPHRASE);
/* Operation */
PGPSecretKeyRing masterKeyRing = PGPMain.createKey(this, Id.choice.algorithm.rsa,
@ -739,7 +739,8 @@ public class ApgIntentService extends IntentService implements ProgressDialogUpd
/* Operation */
HkpKeyServer server = new HkpKeyServer(keyServer);
PGPPublicKeyRing keyring = ProviderHelper.getPGPPublicKeyRingByRowId(this, keyRingRowId);
PGPPublicKeyRing keyring = ProviderHelper.getPGPPublicKeyRingByRowId(this,
keyRingRowId);
if (keyring != null) {
boolean uploaded = PGPMain.uploadKeyRingToServer(server,
(PGPPublicKeyRing) keyring);

View File

@ -76,27 +76,27 @@ public class ApgService extends Service {
}
}
void encryptAndSignImplementation(byte[] inputBytes, String inputUri, boolean useAsciiArmor,
int compression, long[] encryptionKeyIds, String encryptionPassphrase,
int symmetricEncryptionAlgorithm, long signatureKeyId, int signatureHashAlgorithm,
boolean signatureForceV3, String signaturePassphrase, IApgEncryptDecryptHandler handler)
throws RemoteException {
private void encryptAndSignImplementation(byte[] inputBytes, String inputUri,
boolean useAsciiArmor, int compression, long[] encryptionKeyIds,
String encryptionPassphrase, int symmetricEncryptionAlgorithm, long signatureKeyId,
int signatureHashAlgorithm, boolean signatureForceV3, String signaturePassphrase,
IApgEncryptSignHandler handler) throws RemoteException {
try {
// TODO use inputUri
// InputStream inStream = null;
// if (isBlob) {
// ContentResolver cr = getContentResolver();
// try {
// inStream = cr.openInputStream(Uri.parse(pArgs.getString(arg.BLOB.name())));
// } catch (Exception e) {
// Log.e(TAG, "... exception on opening blob", e);
// }
// } else {
// inStream = new ByteArrayInputStream(pArgs.getString(arg.MESSAGE.name()).getBytes());
// }
// InputData in = new InputData(inStream, 0); // XXX Size second param?
// InputStream inStream = null;
// if (isBlob) {
// ContentResolver cr = getContentResolver();
// try {
// inStream = cr.openInputStream(Uri.parse(pArgs.getString(arg.BLOB.name())));
// } catch (Exception e) {
// Log.e(TAG, "... exception on opening blob", e);
// }
// } else {
// inStream = new ByteArrayInputStream(pArgs.getString(arg.MESSAGE.name()).getBytes());
// }
// InputData in = new InputData(inStream, 0); // XXX Size second param?
// build InputData and write into OutputStream
InputStream inputStream = new ByteArrayInputStream(inputBytes);
@ -111,19 +111,19 @@ public class ApgService extends Service {
output.close();
// if (isBlob) {
// ContentResolver cr = getContentResolver();
// try {
// OutputStream outStream = cr.openOutputStream(Uri.parse(pArgs.getString(arg.BLOB
// .name())));
// writeToOutputStream(new ByteArrayInputStream(out.toString().getBytes()), outStream);
// outStream.close();
// } catch (Exception e) {
// Log.e(TAG, "... exception on writing blob", e);
// }
// } else {
// pReturn.putString(ret.RESULT.name(), out.toString());
// }
// if (isBlob) {
// ContentResolver cr = getContentResolver();
// try {
// OutputStream outStream = cr.openOutputStream(Uri.parse(pArgs.getString(arg.BLOB
// .name())));
// writeToOutputStream(new ByteArrayInputStream(out.toString().getBytes()), outStream);
// outStream.close();
// } catch (Exception e) {
// Log.e(TAG, "... exception on writing blob", e);
// }
// } else {
// pReturn.putString(ret.RESULT.name(), out.toString());
// }
byte[] outputBytes = ((ByteArrayOutputStream) output).toByteArray();
@ -140,8 +140,8 @@ public class ApgService extends Service {
}
}
public void decryptAndVerifyImplementation(byte[] inputBytes, String inputUri,
String passphrase, boolean assumeSymmetric, IApgEncryptDecryptHandler handler)
private void decryptAndVerifyImplementation(byte[] inputBytes, String inputUri,
String passphrase, boolean assumeSymmetric, IApgDecryptVerifyHandler handler)
throws RemoteException {
try {
@ -232,7 +232,7 @@ public class ApgService extends Service {
@Override
public void encryptAsymmetric(byte[] inputBytes, String inputUri, boolean useAsciiArmor,
int compression, long[] encryptionKeyIds, int symmetricEncryptionAlgorithm,
IApgEncryptDecryptHandler handler) throws RemoteException {
IApgEncryptSignHandler handler) throws RemoteException {
encryptAndSignImplementation(inputBytes, inputUri, useAsciiArmor, compression,
encryptionKeyIds, null, symmetricEncryptionAlgorithm, Id.key.none, 0, false,
@ -242,7 +242,7 @@ public class ApgService extends Service {
@Override
public void encryptSymmetric(byte[] inputBytes, String inputUri, boolean useAsciiArmor,
int compression, String encryptionPassphrase, int symmetricEncryptionAlgorithm,
IApgEncryptDecryptHandler handler) throws RemoteException {
IApgEncryptSignHandler handler) throws RemoteException {
encryptAndSignImplementation(inputBytes, inputUri, useAsciiArmor, compression, null,
encryptionPassphrase, symmetricEncryptionAlgorithm, Id.key.none, 0, false,
@ -253,8 +253,8 @@ public class ApgService extends Service {
public void encryptAndSignAsymmetric(byte[] inputBytes, String inputUri,
boolean useAsciiArmor, int compression, long[] encryptionKeyIds,
int symmetricEncryptionAlgorithm, long signatureKeyId, int signatureHashAlgorithm,
boolean signatureForceV3, String signaturePassphrase,
IApgEncryptDecryptHandler handler) throws RemoteException {
boolean signatureForceV3, String signaturePassphrase, IApgEncryptSignHandler handler)
throws RemoteException {
encryptAndSignImplementation(inputBytes, inputUri, useAsciiArmor, compression,
encryptionKeyIds, null, symmetricEncryptionAlgorithm, signatureKeyId,
@ -265,8 +265,8 @@ public class ApgService extends Service {
public void encryptAndSignSymmetric(byte[] inputBytes, String inputUri,
boolean useAsciiArmor, int compression, String encryptionPassphrase,
int symmetricEncryptionAlgorithm, long signatureKeyId, int signatureHashAlgorithm,
boolean signatureForceV3, String signaturePassphrase,
IApgEncryptDecryptHandler handler) throws RemoteException {
boolean signatureForceV3, String signaturePassphrase, IApgEncryptSignHandler handler)
throws RemoteException {
encryptAndSignImplementation(inputBytes, inputUri, useAsciiArmor, compression, null,
encryptionPassphrase, symmetricEncryptionAlgorithm, signatureKeyId,
@ -275,14 +275,14 @@ public class ApgService extends Service {
@Override
public void decryptAndVerifyAsymmetric(byte[] inputBytes, String inputUri,
String keyPassphrase, IApgEncryptDecryptHandler handler) throws RemoteException {
String keyPassphrase, IApgDecryptVerifyHandler handler) throws RemoteException {
decryptAndVerifyImplementation(inputBytes, inputUri, keyPassphrase, false, handler);
}
@Override
public void decryptAndVerifySymmetric(byte[] inputBytes, String inputUri,
String encryptionPassphrase, IApgEncryptDecryptHandler handler)
String encryptionPassphrase, IApgDecryptVerifyHandler handler)
throws RemoteException {
decryptAndVerifyImplementation(inputBytes, inputUri, encryptionPassphrase, true,

View File

@ -16,17 +16,15 @@
package org.thialfihar.android.apg.service;
interface IApgEncryptDecryptHandler {
/**
* Either output or streamUri is given. One of them is null
*
*/
oneway void onSuccessEncrypt(in byte[] outputBytes, in String outputUri);
interface IApgDecryptVerifyHandler {
oneway void onSuccessDecrypt(in byte[] outputBytes, in String outputUri, in boolean signature,
in long signatureKeyId, in String signatureUserId, in boolean signatureSuccess,
in boolean signatureUnknown);
oneway void onSuccessVerify(in boolean signature, in long signatureKeyId,
in String signatureUserId, in boolean signatureSuccess, in boolean signatureUnknown);
oneway void onException(in int exceptionNumber, in String message);
}

View File

@ -16,11 +16,14 @@
package org.thialfihar.android.apg.service;
interface IApgSignVerifyHandler {
oneway void onSuccessSign(in byte[] outputBytes, in String outputUri);
interface IApgEncryptSignHandler {
/**
* Either output or streamUri is given. One of them is null
*
*/
oneway void onSuccessEncrypt(in byte[] outputBytes, in String outputUri);
oneway void onSuccessVerify(in boolean signature, in long signatureKeyId,
in String signatureUserId, in boolean signatureSuccess, in boolean signatureUnknown);
oneway void onSuccessSign(in byte[] outputBytes, in String outputUri);
oneway void onException(in int exceptionNumber, in String message);

View File

@ -16,8 +16,8 @@
package org.thialfihar.android.apg.service;
import org.thialfihar.android.apg.service.IApgEncryptDecryptHandler;
import org.thialfihar.android.apg.service.IApgSignVerifyHandler;
import org.thialfihar.android.apg.service.IApgEncryptSignHandler;
import org.thialfihar.android.apg.service.IApgDecryptVerifyHandler;
import org.thialfihar.android.apg.service.IApgHelperHandler;
/**
@ -50,7 +50,7 @@ interface IApgService {
*/
oneway void encryptAsymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor,
in int compression, in long[] encryptionKeyIds, in int symmetricEncryptionAlgorithm,
in IApgEncryptDecryptHandler handler);
in IApgEncryptSignHandler handler);
/**
* Same as encryptAsymmetric but using a passphrase for symmetric encryption
@ -60,7 +60,7 @@ interface IApgService {
*/
oneway void encryptSymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor,
in int compression, in String encryptionPassphrase, in int symmetricEncryptionAlgorithm,
in IApgEncryptDecryptHandler handler);
in IApgEncryptSignHandler handler);
/**
* Encrypt and sign
@ -97,7 +97,7 @@ interface IApgService {
in boolean useAsciiArmor, in int compression, in long[] encryptionKeyIds,
in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm,
in boolean signatureForceV3, in String signaturePassphrase,
in IApgEncryptDecryptHandler handler);
in IApgEncryptSignHandler handler);
/**
* Same as encryptAndSignAsymmetric but using a passphrase for symmetric encryption
@ -109,7 +109,7 @@ interface IApgService {
in boolean useAsciiArmor, in int compression, in String encryptionPassphrase,
in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm,
in boolean signatureForceV3, in String signaturePassphrase,
in IApgEncryptDecryptHandler handler);
in IApgEncryptSignHandler handler);
/**
* Decrypts and verifies given input bytes. If no signature is present this method
@ -125,7 +125,7 @@ interface IApgService {
* Handler where to return results to after successful encryption
*/
oneway void decryptAndVerifyAsymmetric(in byte[] inputBytes, in String inputUri,
in String keyPassphrase, in IApgEncryptDecryptHandler handler);
in String keyPassphrase, in IApgDecryptVerifyHandler handler);
/**
* Same as decryptAndVerifyAsymmetric but for symmetric decryption.
@ -134,7 +134,7 @@ interface IApgService {
* Passphrase to decrypt
*/
oneway void decryptAndVerifySymmetric(in byte[] inputBytes, in String inputUri,
in String encryptionPassphrase, in IApgEncryptDecryptHandler handler);
in String encryptionPassphrase, in IApgDecryptVerifyHandler handler);
/**
*

View File

@ -68,16 +68,18 @@ import java.util.regex.Matcher;
public class DecryptActivity extends SherlockFragmentActivity {
// possible intent actions for this activity
/* Intents */
// without permission
public static final String ACTION_DECRYPT = Constants.INTENT_PREFIX + "DECRYPT";
public static final String ACTION_DECRYPT_FILE = Constants.INTENT_PREFIX + "DECRYPT_FILE";
// with permission
public static final String ACTION_DECRYPT_AND_RETURN = Constants.INTENT_PREFIX
+ "DECRYPT_AND_RETURN";
public static final String ACTION_DECRYPT_FILE = Constants.INTENT_PREFIX + "DECRYPT_FILE";
public static final String ACTION_DECRYPT_STREAM_AND_RETURN = Constants.INTENT_PREFIX
+ "DECRYPT_STREAM_AND_RETURN";
// possible extra keys
/* EXTRA keys for input */
public static final String EXTRA_TEXT = "text";
public static final String EXTRA_DATA = "data";
public static final String EXTRA_REPLY_TO = "replyTo";
@ -755,32 +757,32 @@ public class DecryptActivity extends SherlockFragmentActivity {
if (mContentUri != null) {
data.putInt(ApgIntentService.TARGET, ApgIntentService.TARGET_STREAM);
data.putParcelable(ApgIntentService.PROVIDER_URI, mContentUri);
data.putParcelable(ApgIntentService.ENCRYPT_PROVIDER_URI, mContentUri);
} else if (mDecryptTarget == Id.target.file) {
data.putInt(ApgIntentService.TARGET, ApgIntentService.TARGET_FILE);
Log.d(Constants.TAG, "mInputFilename=" + mInputFilename + ", mOutputFilename="
+ mOutputFilename);
data.putString(ApgIntentService.INPUT_FILE, mInputFilename);
data.putString(ApgIntentService.OUTPUT_FILE, mOutputFilename);
data.putString(ApgIntentService.ENCRYPT_INPUT_FILE, mInputFilename);
data.putString(ApgIntentService.ENCRYPT_OUTPUT_FILE, mOutputFilename);
} else {
data.putInt(ApgIntentService.TARGET, ApgIntentService.TARGET_BYTES);
if (mDataBytes != null) {
data.putByteArray(ApgIntentService.CIPHERTEXT_BYTES, mDataBytes);
data.putByteArray(ApgIntentService.DECRYPT_CIPHERTEXT_BYTES, mDataBytes);
} else {
String message = mMessage.getText().toString();
data.putByteArray(ApgIntentService.CIPHERTEXT_BYTES, message.getBytes());
data.putByteArray(ApgIntentService.DECRYPT_CIPHERTEXT_BYTES, message.getBytes());
}
}
data.putLong(ApgIntentService.SECRET_KEY_ID, mSecretKeyId);
data.putLong(ApgIntentService.ENCRYPT_SECRET_KEY_ID, mSecretKeyId);
data.putBoolean(ApgIntentService.SIGNED_ONLY, mSignedOnly);
data.putBoolean(ApgIntentService.LOOKUP_UNKNOWN_KEY, mLookupUnknownKey);
data.putBoolean(ApgIntentService.RETURN_BYTES, mReturnBinary);
data.putBoolean(ApgIntentService.ASSUME_SYMMETRIC, mAssumeSymmetricEncryption);
data.putBoolean(ApgIntentService.DECRYPT_SIGNED_ONLY, mSignedOnly);
data.putBoolean(ApgIntentService.DECRYPT_LOOKUP_UNKNOWN_KEY, mLookupUnknownKey);
data.putBoolean(ApgIntentService.DECRYPT_RETURN_BYTES, mReturnBinary);
data.putBoolean(ApgIntentService.DECRYPT_ASSUME_SYMMETRIC, mAssumeSymmetricEncryption);
intent.putExtra(ApgIntentService.EXTRA_DATA, data);

View File

@ -25,6 +25,7 @@ import org.thialfihar.android.apg.helper.OtherHelper;
import org.thialfihar.android.apg.helper.PGPHelper;
import org.thialfihar.android.apg.helper.PGPMain;
import org.thialfihar.android.apg.helper.PGPConversionHelper;
import org.thialfihar.android.apg.helper.PGPMain.ApgGeneralException;
import org.thialfihar.android.apg.provider.ProviderHelper;
import org.thialfihar.android.apg.service.ApgIntentServiceHandler;
import org.thialfihar.android.apg.service.ApgIntentService;
@ -75,6 +76,10 @@ public class EditKeyActivity extends SherlockFragmentActivity {
public static final String EXTRA_GENERATE_DEFAULT_KEYS = "generateDefaultKeys";
public static final String EXTRA_KEY_ID = "keyId";
// results when saving key
public static final String RESULT_EXTRA_MASTER_KEY_ID = "masterKeyId";
public static final String RESULT_EXTRA_USER_ID = "userId";
private ActionBar mActionBar;
private PGPSecretKeyRing mKeyRing = null;
@ -121,7 +126,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
return true;
case Id.menu.option.cancel:
finish();
cancelClicked();
return true;
default:
@ -236,7 +241,8 @@ public class EditKeyActivity extends SherlockFragmentActivity {
// fill values for this action
Bundle data = new Bundle();
data.putString(ApgIntentService.SYMMETRIC_PASSPHRASE, mCurrentPassPhrase);
data.putString(ApgIntentService.GENERATE_KEY_SYMMETRIC_PASSPHRASE,
mCurrentPassPhrase);
serviceIntent.putExtra(ApgIntentService.EXTRA_DATA, data);
@ -424,14 +430,16 @@ public class EditKeyActivity extends SherlockFragmentActivity {
// fill values for this action
Bundle data = new Bundle();
data.putString(ApgIntentService.CURRENT_PASSPHRASE, mCurrentPassPhrase);
data.putString(ApgIntentService.NEW_PASSPHRASE, mNewPassPhrase);
data.putStringArrayList(ApgIntentService.USER_IDS, getUserIds(mUserIdsView));
data.putString(ApgIntentService.SAVE_KEYRING_CURRENT_PASSPHRASE, mCurrentPassPhrase);
data.putString(ApgIntentService.SAVE_KEYRING_NEW_PASSPHRASE, mNewPassPhrase);
data.putStringArrayList(ApgIntentService.SAVE_KEYRING_USER_IDS,
getUserIds(mUserIdsView));
ArrayList<PGPSecretKey> keys = getKeys(mKeysView);
data.putByteArray(ApgIntentService.KEYS,
data.putByteArray(ApgIntentService.SAVE_KEYRING_KEYS,
PGPConversionHelper.PGPSecretKeyArrayListToBytes(keys));
data.putIntegerArrayList(ApgIntentService.KEYS_USAGES, getKeysUsages(mKeysView));
data.putLong(ApgIntentService.MASTER_KEY_ID, getMasterKeyId());
data.putIntegerArrayList(ApgIntentService.SAVE_KEYRING_KEYS_USAGES,
getKeysUsages(mKeysView));
data.putLong(ApgIntentService.SAVE_KEYRING_MASTER_KEY_ID, getMasterKeyId());
intent.putExtra(ApgIntentService.EXTRA_DATA, data);
@ -443,6 +451,16 @@ public class EditKeyActivity extends SherlockFragmentActivity {
super.handleMessage(message);
if (message.arg1 == ApgIntentServiceHandler.MESSAGE_OKAY) {
Intent data = new Intent();
data.putExtra(RESULT_EXTRA_MASTER_KEY_ID, getMasterKeyId());
ArrayList<String> userIds = null;
try {
userIds = getUserIds(mUserIdsView);
} catch (ApgGeneralException e) {
Log.e(Constants.TAG, "exception while getting user ids", e);
}
data.putExtra(RESULT_EXTRA_USER_ID, userIds.get(0));
setResult(RESULT_OK, data);
finish();
}
};
@ -462,6 +480,11 @@ public class EditKeyActivity extends SherlockFragmentActivity {
}
}
private void cancelClicked() {
setResult(RESULT_CANCELED);
finish();
}
/**
* Returns user ids from the SectionView
*

View File

@ -70,18 +70,20 @@ import java.util.Vector;
public class EncryptActivity extends SherlockFragmentActivity {
// possible intent actions for this activity
/* Intents */
// without permission
public static final String ACTION_ENCRYPT = Constants.INTENT_PREFIX + "ENCRYPT";
public static final String ACTION_ENCRYPT_FILE = Constants.INTENT_PREFIX + "ENCRYPT_FILE";
// with permission
public static final String ACTION_ENCRYPT_AND_RETURN = Constants.INTENT_PREFIX
+ "ENCRYPT_AND_RETURN";
public static final String ACTION_GENERATE_SIGNATURE_AND_RETURN = Constants.INTENT_PREFIX
+ "GENERATE_SIGNATURE";
public static final String ACTION_ENCRYPT_FILE = Constants.INTENT_PREFIX + "ENCRYPT_FILE";
+ "GENERATE_SIGNATURE_AND_RETURN";
public static final String ACTION_ENCRYPT_STREAM_AND_RETURN = Constants.INTENT_PREFIX
+ "ENCRYPT_STREAM_AND_RETURN";
// possible extra keys
/* EXTRA keys for input */
public static final String EXTRA_TEXT = "text";
public static final String EXTRA_DATA = "data";
public static final String EXTRA_ASCII_ARMOUR = "asciiArmour";
@ -339,7 +341,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
} else if (ACTION_ENCRYPT_STREAM_AND_RETURN.equals(action)) {
// TODO: Set mStreamAndReturnUri that is used later to encrypt a stream!
mStreamAndReturnUri = null;
mStreamAndReturnUri = uri;
}
}
@ -684,7 +686,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
passPhrase = null;
}
data.putString(ApgIntentService.SYMMETRIC_PASSPHRASE, passPhrase);
data.putString(ApgIntentService.GENERATE_KEY_SYMMETRIC_PASSPHRASE, passPhrase);
} else {
encryptionKeyIds = mEncryptionKeyIds;
signOnly = (mEncryptionKeyIds == null || mEncryptionKeyIds.length == 0);
@ -696,7 +698,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
if (mStreamAndReturnUri != null) {
// mIntentDataUri is only defined when ACTION_ENCRYPT_STREAM_AND_RETURN is used
data.putInt(ApgIntentService.TARGET, ApgIntentService.TARGET_STREAM);
data.putParcelable(ApgIntentService.PROVIDER_URI, mStreamAndReturnUri);
data.putParcelable(ApgIntentService.ENCRYPT_PROVIDER_URI, mStreamAndReturnUri);
} else if (mEncryptTarget == Id.target.file) {
useAsciiArmor = mAsciiArmour.isChecked();
@ -707,8 +709,8 @@ public class EncryptActivity extends SherlockFragmentActivity {
Log.d(Constants.TAG, "mInputFilename=" + mInputFilename + ", mOutputFilename="
+ mOutputFilename);
data.putString(ApgIntentService.INPUT_FILE, mInputFilename);
data.putString(ApgIntentService.OUTPUT_FILE, mOutputFilename);
data.putString(ApgIntentService.ENCRYPT_INPUT_FILE, mInputFilename);
data.putString(ApgIntentService.ENCRYPT_OUTPUT_FILE, mOutputFilename);
} else {
useAsciiArmor = true;
@ -717,13 +719,13 @@ public class EncryptActivity extends SherlockFragmentActivity {
data.putInt(ApgIntentService.TARGET, ApgIntentService.TARGET_BYTES);
if (mData != null) {
data.putByteArray(ApgIntentService.MESSAGE_BYTES, mData);
data.putByteArray(ApgIntentService.ENCRYPT_MESSAGE_BYTES, mData);
} else {
String message = mMessage.getText().toString();
if (signOnly && !mEncryptImmediately) {
fixBadCharactersForGmail(message);
}
data.putByteArray(ApgIntentService.MESSAGE_BYTES, message.getBytes());
data.putByteArray(ApgIntentService.ENCRYPT_MESSAGE_BYTES, message.getBytes());
}
}
@ -731,12 +733,12 @@ public class EncryptActivity extends SherlockFragmentActivity {
useAsciiArmor = mAsciiArmorDemand;
}
data.putLong(ApgIntentService.SECRET_KEY_ID, mSecretKeyId);
data.putBoolean(ApgIntentService.USE_ASCII_AMOR, useAsciiArmor);
data.putLongArray(ApgIntentService.ENCRYPTION_KEYS_IDS, encryptionKeyIds);
data.putInt(ApgIntentService.COMPRESSION_ID, compressionId);
data.putBoolean(ApgIntentService.GENERATE_SIGNATURE, mGenerateSignature);
data.putBoolean(ApgIntentService.SIGN_ONLY, signOnly);
data.putLong(ApgIntentService.ENCRYPT_SECRET_KEY_ID, mSecretKeyId);
data.putBoolean(ApgIntentService.ENCRYPT_USE_ASCII_AMOR, useAsciiArmor);
data.putLongArray(ApgIntentService.ENCRYPT_ENCRYPTION_KEYS_IDS, encryptionKeyIds);
data.putInt(ApgIntentService.ENCRYPT_COMPRESSION_ID, compressionId);
data.putBoolean(ApgIntentService.ENCRYPT_GENERATE_SIGNATURE, mGenerateSignature);
data.putBoolean(ApgIntentService.ENCRYPT_SIGN_ONLY, signOnly);
intent.putExtra(ApgIntentService.EXTRA_DATA, data);

View File

@ -281,7 +281,7 @@ public class KeyListActivity extends SherlockFragmentActivity {
@Override
public void handleMessage(Message message) {
if (message.what == DeleteKeyDialogFragment.MESSAGE_OKAY) {
// refreshList();
// no further actions needed
}
}
};
@ -368,8 +368,6 @@ public class KeyListActivity extends SherlockFragmentActivity {
.newInstance(mImportFilename);
deleteFileDialog.show(getSupportFragmentManager(), "deleteDialog");
}
// refreshList();
}
};
};

View File

@ -262,14 +262,14 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
passPhrase = PassphraseCacheService
.getCachedPassphrase(mActivity, masterKey.getKeyID());
data.putByteArray(ApgIntentService.MASTER_KEY,
data.putByteArray(ApgIntentService.GENERATE_KEY_MASTER_KEY,
PGPConversionHelper.PGPSecretKeyToBytes(masterKey));
} else {
passPhrase = "";
}
data.putString(ApgIntentService.SYMMETRIC_PASSPHRASE, passPhrase);
data.putInt(ApgIntentService.ALGORITHM, mNewKeyAlgorithmChoice.getId());
data.putInt(ApgIntentService.KEY_SIZE, mNewKeySize);
data.putString(ApgIntentService.GENERATE_KEY_SYMMETRIC_PASSPHRASE, passPhrase);
data.putInt(ApgIntentService.GENERATE_KEY_ALGORITHM, mNewKeyAlgorithmChoice.getId());
data.putInt(ApgIntentService.GENERATE_KEY_KEY_SIZE, mNewKeySize);
intent.putExtra(ApgIntentService.EXTRA_DATA, data);