diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2013-01-16 14:31:16 +0100 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2013-01-16 14:31:16 +0100 |
commit | 1feb948acf81532f82b36456080920543004b097 (patch) | |
tree | f22e51163db4303ad72b9205a3347aea8211c15e /OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainKeyService.java | |
parent | dbbd8f6856086a9aa17b565080959fb77dc24cd9 (diff) | |
download | open-keychain-1feb948acf81532f82b36456080920543004b097.tar.gz open-keychain-1feb948acf81532f82b36456080920543004b097.tar.bz2 open-keychain-1feb948acf81532f82b36456080920543004b097.zip |
Renaming APG to OpenPGP Keychain
Diffstat (limited to 'OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainKeyService.java')
-rw-r--r-- | OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainKeyService.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainKeyService.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainKeyService.java new file mode 100644 index 000000000..c0be8040f --- /dev/null +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainKeyService.java @@ -0,0 +1,138 @@ +/* + * 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.sufficientlysecure.keychain.service; + +import java.util.ArrayList; + +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.provider.ProviderHelper; +import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.service.IKeychainKeyService; +import org.sufficientlysecure.keychain.service.handler.IKeychainGetKeyringsHandler; + +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; +import android.os.RemoteException; + +public class KeychainKeyService extends Service { + Context mContext; + + @Override + public void onCreate() { + super.onCreate(); + mContext = this; + Log.d(Constants.TAG, "ApgKeyService, onCreate()"); + } + + @Override + public void onDestroy() { + super.onDestroy(); + Log.d(Constants.TAG, "ApgKeyService, onDestroy()"); + } + + @Override + public IBinder onBind(Intent intent) { + return mBinder; + } + + /** + * Synchronized implementation of getPublicKeyRings + */ + private synchronized void getPublicKeyRingsSafe(long[] masterKeyIds, + boolean asAsciiArmoredStringArray, IKeychainGetKeyringsHandler handler) + throws RemoteException { + if (asAsciiArmoredStringArray) { + ArrayList<String> output = ProviderHelper.getPublicKeyRingsAsArmoredString(mContext, + masterKeyIds); + + handler.onSuccess(null, output); + } else { + byte[] outputBytes = ProviderHelper + .getPublicKeyRingsAsByteArray(mContext, masterKeyIds); + handler.onSuccess(outputBytes, null); + } + } + + /** + * Synchronized implementation of getSecretKeyRings + */ + private synchronized void getSecretKeyRingsSafe(long[] masterKeyIds, + boolean asAsciiArmoredStringArray, IKeychainGetKeyringsHandler handler) + throws RemoteException { + if (asAsciiArmoredStringArray) { + ArrayList<String> output = ProviderHelper.getSecretKeyRingsAsArmoredString(mContext, + masterKeyIds); + + handler.onSuccess(null, output); + } else { + byte[] outputBytes = ProviderHelper + .getSecretKeyRingsAsByteArray(mContext, masterKeyIds); + handler.onSuccess(outputBytes, null); + } + + } + + /** + * This is the implementation of the interface IApgKeyService. All methods are oneway, meaning + * asynchronous and return to the client using handlers. + * + * The real PGP code is located in PGPMain. + */ + private final IKeychainKeyService.Stub mBinder = new IKeychainKeyService.Stub() { + + @Override + public void getPublicKeyRings(long[] masterKeyIds, boolean asAsciiArmoredStringArray, + IKeychainGetKeyringsHandler handler) throws RemoteException { + getPublicKeyRingsSafe(masterKeyIds, asAsciiArmoredStringArray, handler); + } + + @Override + public void getSecretKeyRings(long[] masterKeyIds, boolean asAsciiArmoredStringArray, + IKeychainGetKeyringsHandler handler) throws RemoteException { + getSecretKeyRingsSafe(masterKeyIds, asAsciiArmoredStringArray, handler); + } + + }; + + /** + * As we can not throw an exception through Android RPC, we assign identifiers to the exception + * types. + * + * @param e + * @return + */ + // private int getExceptionId(Exception e) { + // if (e instanceof NoSuchProviderException) { + // return 0; + // } else if (e instanceof NoSuchAlgorithmException) { + // return 1; + // } else if (e instanceof SignatureException) { + // return 2; + // } else if (e instanceof IOException) { + // return 3; + // } else if (e instanceof ApgGeneralException) { + // return 4; + // } else if (e instanceof PGPException) { + // return 5; + // } else { + // return -1; + // } + // } + +} |