API update: boolean to allow/disallow user interaction allow real background pgp operations that will not require user input

This commit is contained in:
Dominik Schürmann 2013-09-16 12:16:54 +02:00
parent 53f33dc3cb
commit 4e23cf2edc
4 changed files with 59 additions and 32 deletions

View File

@ -33,10 +33,13 @@ interface IOpenPgpService {
* User Ids (emails) of recipients * User Ids (emails) of recipients
* @param asciiArmor * @param asciiArmor
* Encode for ASCII (Radix-64, 33 percent overhead compared to binary) * Encode for ASCII (Radix-64, 33 percent overhead compared to binary)
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void encrypt(in byte[] inputBytes, in String[] encryptionUserIds, in boolean asciiArmor, in IOpenPgpCallback callback); oneway void encrypt(in byte[] inputBytes, in String[] encryptionUserIds,
in boolean asciiArmor, in boolean allowUserInteraction, in IOpenPgpCallback callback);
/** /**
* Sign * Sign
@ -45,10 +48,13 @@ interface IOpenPgpService {
* Byte array you want to encrypt * Byte array you want to encrypt
* @param asciiArmor * @param asciiArmor
* Encode for ASCII (Radix-64, 33 percent overhead compared to binary) * Encode for ASCII (Radix-64, 33 percent overhead compared to binary)
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void sign(in byte[] inputBytes, in boolean asciiArmor, in IOpenPgpCallback callback); oneway void sign(in byte[] inputBytes, in boolean asciiArmor, in boolean allowUserInteraction,
in IOpenPgpCallback callback);
/** /**
* Sign then encrypt * Sign then encrypt
@ -61,10 +67,13 @@ interface IOpenPgpService {
* User Ids (email) of sender * User Ids (email) of sender
* @param asciiArmor * @param asciiArmor
* Encode for ASCII (Radix-64, 33 percent overhead compared to binary) * Encode for ASCII (Radix-64, 33 percent overhead compared to binary)
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void signAndEncrypt(in byte[] inputBytes, in String[] encryptionUserIds, in boolean asciiArmor, in IOpenPgpCallback callback); oneway void signAndEncrypt(in byte[] inputBytes, in String[] encryptionUserIds,
in boolean asciiArmor, in boolean allowUserInteraction, in IOpenPgpCallback callback);
/** /**
* Decrypts and verifies given input bytes. If no signature is present this method * Decrypts and verifies given input bytes. If no signature is present this method
@ -72,9 +81,12 @@ interface IOpenPgpService {
* *
* @param inputBytes * @param inputBytes
* Byte array you want to decrypt and verify * Byte array you want to decrypt and verify
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void decryptAndVerify(in byte[] inputBytes, in IOpenPgpCallback callback); oneway void decryptAndVerify(in byte[] inputBytes, in boolean allowUserInteraction,
in IOpenPgpCallback callback);
} }

View File

@ -139,7 +139,7 @@ public class OpenPgpProviderActivity extends Activity {
try { try {
mCryptoServiceConnection.getService().encrypt(inputBytes, mCryptoServiceConnection.getService().encrypt(inputBytes,
mEncryptUserIds.getText().toString().split(","), true, encryptCallback); mEncryptUserIds.getText().toString().split(","), true, true, encryptCallback);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "CryptoProviderDemo", e); Log.e(Constants.TAG, "CryptoProviderDemo", e);
} }
@ -149,7 +149,7 @@ public class OpenPgpProviderActivity extends Activity {
byte[] inputBytes = mMessage.getText().toString().getBytes(); byte[] inputBytes = mMessage.getText().toString().getBytes();
try { try {
mCryptoServiceConnection.getService().sign(inputBytes, true, encryptCallback); mCryptoServiceConnection.getService().sign(inputBytes, true, true, encryptCallback);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "CryptoProviderDemo", e); Log.e(Constants.TAG, "CryptoProviderDemo", e);
} }
@ -160,7 +160,7 @@ public class OpenPgpProviderActivity extends Activity {
try { try {
mCryptoServiceConnection.getService().signAndEncrypt(inputBytes, mCryptoServiceConnection.getService().signAndEncrypt(inputBytes,
mEncryptUserIds.getText().toString().split(","), true, encryptCallback); mEncryptUserIds.getText().toString().split(","), true, true, encryptCallback);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "CryptoProviderDemo", e); Log.e(Constants.TAG, "CryptoProviderDemo", e);
} }
@ -170,7 +170,7 @@ public class OpenPgpProviderActivity extends Activity {
byte[] inputBytes = mCiphertext.getText().toString().getBytes(); byte[] inputBytes = mCiphertext.getText().toString().getBytes();
try { try {
mCryptoServiceConnection.getService().decryptAndVerify(inputBytes, mCryptoServiceConnection.getService().decryptAndVerify(inputBytes, true,
decryptAndVerifyCallback); decryptAndVerifyCallback);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "CryptoProviderDemo", e); Log.e(Constants.TAG, "CryptoProviderDemo", e);
@ -228,8 +228,8 @@ public class OpenPgpProviderActivity extends Activity {
if (!providerList.isEmpty()) { if (!providerList.isEmpty()) {
// add "disable OpenPGP provider" // add "disable OpenPGP provider"
providerList.add(0, new OpenPgpProviderElement(null, "Disable OpenPGP Provider", getResources() providerList.add(0, new OpenPgpProviderElement(null, "Disable OpenPGP Provider",
.getDrawable(android.R.drawable.ic_menu_close_clear_cancel))); getResources().getDrawable(android.R.drawable.ic_menu_close_clear_cancel)));
// Init ArrayAdapter with OpenPGP Providers // Init ArrayAdapter with OpenPGP Providers
ListAdapter adapter = new ArrayAdapter<OpenPgpProviderElement>(this, ListAdapter adapter = new ArrayAdapter<OpenPgpProviderElement>(this,
@ -260,7 +260,7 @@ public class OpenPgpProviderActivity extends Activity {
dialog.cancel(); dialog.cancel();
finish(); finish();
} }
// bind to service // bind to service
mCryptoServiceConnection = new OpenPgpServiceConnection( mCryptoServiceConnection = new OpenPgpServiceConnection(
OpenPgpProviderActivity.this, packageName); OpenPgpProviderActivity.this, packageName);

View File

@ -33,10 +33,13 @@ interface IOpenPgpService {
* User Ids (emails) of recipients * User Ids (emails) of recipients
* @param asciiArmor * @param asciiArmor
* Encode for ASCII (Radix-64, 33 percent overhead compared to binary) * Encode for ASCII (Radix-64, 33 percent overhead compared to binary)
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void encrypt(in byte[] inputBytes, in String[] encryptionUserIds, in boolean asciiArmor, in IOpenPgpCallback callback); oneway void encrypt(in byte[] inputBytes, in String[] encryptionUserIds,
in boolean asciiArmor, in boolean allowUserInteraction, in IOpenPgpCallback callback);
/** /**
* Sign * Sign
@ -45,10 +48,13 @@ interface IOpenPgpService {
* Byte array you want to encrypt * Byte array you want to encrypt
* @param asciiArmor * @param asciiArmor
* Encode for ASCII (Radix-64, 33 percent overhead compared to binary) * Encode for ASCII (Radix-64, 33 percent overhead compared to binary)
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void sign(in byte[] inputBytes, in boolean asciiArmor, in IOpenPgpCallback callback); oneway void sign(in byte[] inputBytes, in boolean asciiArmor, in boolean allowUserInteraction,
in IOpenPgpCallback callback);
/** /**
* Sign then encrypt * Sign then encrypt
@ -61,10 +67,13 @@ interface IOpenPgpService {
* User Ids (email) of sender * User Ids (email) of sender
* @param asciiArmor * @param asciiArmor
* Encode for ASCII (Radix-64, 33 percent overhead compared to binary) * Encode for ASCII (Radix-64, 33 percent overhead compared to binary)
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void signAndEncrypt(in byte[] inputBytes, in String[] encryptionUserIds, in boolean asciiArmor, in IOpenPgpCallback callback); oneway void signAndEncrypt(in byte[] inputBytes, in String[] encryptionUserIds,
in boolean asciiArmor, in boolean allowUserInteraction, in IOpenPgpCallback callback);
/** /**
* Decrypts and verifies given input bytes. If no signature is present this method * Decrypts and verifies given input bytes. If no signature is present this method
@ -72,9 +81,12 @@ interface IOpenPgpService {
* *
* @param inputBytes * @param inputBytes
* Byte array you want to decrypt and verify * Byte array you want to decrypt and verify
* @param allowUserInteraction
* Allows the OpenPGP Provider to handle missing keys by showing activities
* @param callback * @param callback
* Callback where to return results * Callback where to return results
*/ */
oneway void decryptAndVerify(in byte[] inputBytes, in IOpenPgpCallback callback); oneway void decryptAndVerify(in byte[] inputBytes, in boolean allowUserInteraction,
in IOpenPgpCallback callback);
} }

View File

@ -217,8 +217,8 @@ public class OpenPgpService extends RemoteService {
}; };
private synchronized void encryptAndSignSafe(byte[] inputBytes, String[] encryptionUserIds, private synchronized void encryptAndSignSafe(byte[] inputBytes, String[] encryptionUserIds,
boolean asciiArmor, IOpenPgpCallback callback, AppSettings appSettings, boolean sign) boolean asciiArmor, boolean allowUserInteraction, IOpenPgpCallback callback,
throws RemoteException { AppSettings appSettings, boolean sign) throws RemoteException {
try { try {
// build InputData and write into OutputStream // build InputData and write into OutputStream
InputStream inputStream = new ByteArrayInputStream(inputBytes); InputStream inputStream = new ByteArrayInputStream(inputBytes);
@ -269,8 +269,8 @@ public class OpenPgpService extends RemoteService {
} }
// TODO: asciiArmor?! // TODO: asciiArmor?!
private void signSafe(byte[] inputBytes, IOpenPgpCallback callback, AppSettings appSettings) private void signSafe(byte[] inputBytes, boolean allowUserInteraction,
throws RemoteException { IOpenPgpCallback callback, AppSettings appSettings) throws RemoteException {
try { try {
Log.d(Constants.TAG, "current therad id: " + Thread.currentThread().getId()); Log.d(Constants.TAG, "current therad id: " + Thread.currentThread().getId());
@ -309,8 +309,8 @@ public class OpenPgpService extends RemoteService {
} }
} }
private synchronized void decryptAndVerifySafe(byte[] inputBytes, IOpenPgpCallback callback, private synchronized void decryptAndVerifySafe(byte[] inputBytes, boolean allowUserInteraction,
AppSettings appSettings) throws RemoteException { IOpenPgpCallback callback, AppSettings appSettings) throws RemoteException {
try { try {
// TODO: this is not really needed // TODO: this is not really needed
// checked if it is text with BEGIN and END tags // checked if it is text with BEGIN and END tags
@ -459,7 +459,8 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void encrypt(final byte[] inputBytes, final String[] encryptionUserIds, public void encrypt(final byte[] inputBytes, final String[] encryptionUserIds,
final boolean asciiArmor, final IOpenPgpCallback callback) throws RemoteException { final boolean asciiArmor, final boolean allowUserInteraction,
final IOpenPgpCallback callback) throws RemoteException {
final AppSettings settings = getAppSettings(); final AppSettings settings = getAppSettings();
@ -468,8 +469,8 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void run() { public void run() {
try { try {
encryptAndSignSafe(inputBytes, encryptionUserIds, asciiArmor, callback, encryptAndSignSafe(inputBytes, encryptionUserIds, asciiArmor,
settings, false); allowUserInteraction, callback, settings, false);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "OpenPgpService", e); Log.e(Constants.TAG, "OpenPgpService", e);
} }
@ -481,7 +482,8 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void signAndEncrypt(final byte[] inputBytes, final String[] encryptionUserIds, public void signAndEncrypt(final byte[] inputBytes, final String[] encryptionUserIds,
final boolean asciiArmor, final IOpenPgpCallback callback) throws RemoteException { final boolean asciiArmor, final boolean allowUserInteraction,
final IOpenPgpCallback callback) throws RemoteException {
final AppSettings settings = getAppSettings(); final AppSettings settings = getAppSettings();
@ -490,8 +492,8 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void run() { public void run() {
try { try {
encryptAndSignSafe(inputBytes, encryptionUserIds, asciiArmor, callback, encryptAndSignSafe(inputBytes, encryptionUserIds, asciiArmor,
settings, true); allowUserInteraction, callback, settings, true);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "OpenPgpService", e); Log.e(Constants.TAG, "OpenPgpService", e);
} }
@ -503,7 +505,8 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void sign(final byte[] inputBytes, boolean asciiArmor, public void sign(final byte[] inputBytes, boolean asciiArmor,
final IOpenPgpCallback callback) throws RemoteException { final boolean allowUserInteraction, final IOpenPgpCallback callback)
throws RemoteException {
final AppSettings settings = getAppSettings(); final AppSettings settings = getAppSettings();
Runnable r = new Runnable() { Runnable r = new Runnable() {
@ -511,7 +514,7 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void run() { public void run() {
try { try {
signSafe(inputBytes, callback, settings); signSafe(inputBytes, allowUserInteraction, callback, settings);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "OpenPgpService", e); Log.e(Constants.TAG, "OpenPgpService", e);
} }
@ -523,8 +526,8 @@ public class OpenPgpService extends RemoteService {
} }
@Override @Override
public void decryptAndVerify(final byte[] inputBytes, final IOpenPgpCallback callback) public void decryptAndVerify(final byte[] inputBytes, final boolean allowUserInteraction,
throws RemoteException { final IOpenPgpCallback callback) throws RemoteException {
final AppSettings settings = getAppSettings(); final AppSettings settings = getAppSettings();
@ -533,7 +536,7 @@ public class OpenPgpService extends RemoteService {
@Override @Override
public void run() { public void run() {
try { try {
decryptAndVerifySafe(inputBytes, callback, settings); decryptAndVerifySafe(inputBytes, allowUserInteraction, callback, settings);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "OpenPgpService", e); Log.e(Constants.TAG, "OpenPgpService", e);
} }