diff options
Diffstat (limited to 'APG-API-Demo/src/org')
3 files changed, 364 insertions, 0 deletions
| diff --git a/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java b/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java new file mode 100644 index 000000000..f066e0957 --- /dev/null +++ b/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java @@ -0,0 +1,185 @@ +package org.thialfihar.android.apg.demo; + +import org.thialfihar.android.apg.integration.ApgData; +import org.thialfihar.android.apg.integration.ApgIntentHelper; +import org.thialfihar.android.apg.service.IApgEncryptDecryptHandler; +import org.thialfihar.android.apg.service.IApgHelperHandler; +import org.thialfihar.android.apg.service.IApgService; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +public class AidlDemoActivity extends Activity { +    Activity mActivity; + +    TextView mMessageTextView; +    TextView mCiphertextTextView; +    TextView mDataTextView; + +    ApgIntentHelper mApgIntentHelper; +    ApgData mApgData; + +    private IApgService service = null; +    private ServiceConnection svcConn = new ServiceConnection() { +        public void onServiceConnected(ComponentName className, IBinder binder) { +            service = IApgService.Stub.asInterface(binder); +        } + +        public void onServiceDisconnected(ComponentName className) { +            service = null; +        } +    }; + +    @Override +    public void onCreate(Bundle icicle) { +        super.onCreate(icicle); +        setContentView(R.layout.aidl_demo); + +        mActivity = this; + +        mMessageTextView = (TextView) findViewById(R.id.aidl_demo_message); +        mCiphertextTextView = (TextView) findViewById(R.id.aidl_demo_ciphertext); +        mDataTextView = (TextView) findViewById(R.id.aidl_demo_data); + +        mApgIntentHelper = new ApgIntentHelper(mActivity); +        mApgData = new ApgData(); + +        bindService(new Intent("org.thialfihar.android.apg.service.IApgService"), svcConn, +                Context.BIND_AUTO_CREATE); +    } + +    public void encryptOnClick(View view) { +        byte[] inputBytes = mMessageTextView.getText().toString().getBytes(); + +        try { +            service.encryptAsymmetric(inputBytes, null, true, 0, mApgData.getEncryptionKeys(), 7, +                    encryptDecryptHandler); +        } catch (RemoteException e) { +            exceptionImplementation(-1, e.toString()); +        } +    } + +    public void decryptOnClick(View view) { +        byte[] inputBytes = mCiphertextTextView.getText().toString().getBytes(); + +        try { +            service.decryptAndVerifyAsymmetric(inputBytes, null, null, encryptDecryptHandler); +        } catch (RemoteException e) { +            exceptionImplementation(-1, e.toString()); +        } +    } + +    private void updateView() { +        if (mApgData.getDecryptedData() != null) { +            mMessageTextView.setText(mApgData.getDecryptedData()); +        } +        if (mApgData.getEncryptedData() != null) { +            mCiphertextTextView.setText(mApgData.getEncryptedData()); +        } +        mDataTextView.setText(mApgData.toString()); +    } + +    @Override +    public void onDestroy() { +        super.onDestroy(); + +        unbindService(svcConn); +    } + +    private void exceptionImplementation(int exceptionId, String error) { +        AlertDialog.Builder builder = new AlertDialog.Builder(this); +        builder.setTitle("Exception!").setMessage(error).setPositiveButton("OK", null).show(); +    } + +    private final IApgEncryptDecryptHandler.Stub encryptDecryptHandler = new IApgEncryptDecryptHandler.Stub() { + +        @Override +        public void onException(final int exceptionId, final String message) throws RemoteException { +            runOnUiThread(new Runnable() { +                public void run() { +                    exceptionImplementation(exceptionId, message); +                } +            }); +        } + +        @Override +        public void onSuccessEncrypt(final byte[] outputBytes, String outputUri) +                throws RemoteException { +            runOnUiThread(new Runnable() { +                public void run() { +                    mApgData.setEncryptedData(new String(outputBytes)); +                    updateView(); +                } +            }); +        } + +        @Override +        public void onSuccessDecrypt(final byte[] outputBytes, String outputUri, boolean signature, +                long signatureKeyId, String signatureUserId, boolean signatureSuccess, +                boolean signatureUnknown) throws RemoteException { +            runOnUiThread(new Runnable() { +                public void run() { +                    mApgData.setDecryptedData(new String(outputBytes)); +                    updateView(); +                } +            }); + +        } + +    }; + +    private final IApgHelperHandler.Stub helperHandler = new IApgHelperHandler.Stub() { + +        @Override +        public void onException(final int exceptionId, final String message) throws RemoteException { +            runOnUiThread(new Runnable() { +                public void run() { +                    exceptionImplementation(exceptionId, message); +                } +            }); +        } + +        @Override +        public void onSuccessGetDecryptionKey(long arg0, boolean arg1) throws RemoteException { +            // TODO Auto-generated method stub + +        } + +    }; + +    /** +     * Selection is done with Intents, not AIDL! +     *  +     * @param view +     */ +    public void selectSecretKeyOnClick(View view) { +        mApgIntentHelper.selectSecretKey(); +    } + +    public void selectEncryptionKeysOnClick(View view) { +        mApgIntentHelper.selectEncryptionKeys("user@example.com"); + +    } + +    @Override +    protected void onActivityResult(int requestCode, int resultCode, Intent data) { +        // this updates the mApgData object to the result of the methods +        boolean result = mApgIntentHelper.onActivityResult(requestCode, resultCode, data, mApgData); +        if (result) { +            updateView(); +        } + +        // continue with other activity results +        super.onActivityResult(requestCode, resultCode, data); +    } +} diff --git a/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java b/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java new file mode 100644 index 000000000..3f46b2e4d --- /dev/null +++ b/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java @@ -0,0 +1,69 @@ +/* + * 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.demo; + +import org.thialfihar.android.apg.demo.R; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; + +public class BaseActivity extends PreferenceActivity { +    private Activity mActivity; + +    private Preference mIntentDemo; +    private Preference mAidlDemo; + +    /** +     * Called when the activity is first created. +     */ +    @Override +    protected void onCreate(Bundle savedInstanceState) { +        super.onCreate(savedInstanceState); + +        mActivity = this; + +        // load preferences from xml +        addPreferencesFromResource(R.xml.base_preference); + +        // find preferences +        mIntentDemo = (Preference) findPreference("intent_demo"); +        mAidlDemo = (Preference) findPreference("aidl_demo"); + +        mIntentDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() { +            @Override +            public boolean onPreferenceClick(Preference preference) { +                startActivity(new Intent(mActivity, IntentDemoActivity.class)); + +                return false; +            } +        }); + +        mAidlDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() { +            @Override +            public boolean onPreferenceClick(Preference preference) { +                startActivity(new Intent(mActivity, AidlDemoActivity.class)); + +                return false; +            } +        }); +    } + +} diff --git a/APG-API-Demo/src/org/thialfihar/android/apg/demo/IntentDemoActivity.java b/APG-API-Demo/src/org/thialfihar/android/apg/demo/IntentDemoActivity.java new file mode 100644 index 000000000..b707e48a8 --- /dev/null +++ b/APG-API-Demo/src/org/thialfihar/android/apg/demo/IntentDemoActivity.java @@ -0,0 +1,110 @@ +/* + * 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.demo; + +import org.thialfihar.android.apg.demo.R; +import org.thialfihar.android.apg.integration.ApgData; +import org.thialfihar.android.apg.integration.ApgIntentHelper; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +public class IntentDemoActivity extends Activity { +    Activity mActivity; + +    TextView mMessageTextView; +    TextView mCiphertextTextView; +    TextView mDataTextView; + +    ApgIntentHelper mApgIntentHelper; +    ApgData mApgData; + +    /** +     * Instantiate View for this Activity +     */ +    @Override +    protected void onCreate(Bundle savedInstanceState) { +        super.onCreate(savedInstanceState); + +        setContentView(R.layout.intent_demo); + +        mActivity = this; + +        mMessageTextView = (TextView) findViewById(R.id.intent_demo_message); +        mCiphertextTextView = (TextView) findViewById(R.id.intent_demo_ciphertext); +        mDataTextView = (TextView) findViewById(R.id.intent_demo_data); + +        mApgIntentHelper = new ApgIntentHelper(mActivity); +        mApgData = new ApgData(); +    } + +    public void createNewKeyOnClick(View view) { +        // mApgIntentHelper.createNewKey(); +        mApgIntentHelper.createNewKey("test <user@example.com>", true, true); +    } + +    public void selectSecretKeyOnClick(View view) { +        mApgIntentHelper.selectSecretKey(); +    } + +    public void selectEncryptionKeysOnClick(View view) { +        mApgIntentHelper.selectEncryptionKeys("user@example.com"); +    } + +    public void encryptOnClick(View view) { +        mApgIntentHelper.encrypt(mMessageTextView.getText().toString(), +                mApgData.getEncryptionKeys(), mApgData.getSignatureKeyId(), false); +    } + +    public void encryptAndReturnOnClick(View view) { +        mApgIntentHelper.encrypt(mMessageTextView.getText().toString(), +                mApgData.getEncryptionKeys(), mApgData.getSignatureKeyId(), true); +    } + +    public void decryptOnClick(View view) { +        mApgIntentHelper.decrypt(mCiphertextTextView.getText().toString(), false); +    } + +    public void decryptAndReturnOnClick(View view) { +        mApgIntentHelper.decrypt(mCiphertextTextView.getText().toString(), true); +    } + +    @Override +    protected void onActivityResult(int requestCode, int resultCode, Intent data) { +        // this updates the mApgData object to the result of the methods +        boolean result = mApgIntentHelper.onActivityResult(requestCode, resultCode, data, mApgData); +        if (result) { +            updateView(); +        } + +        // continue with other activity results +        super.onActivityResult(requestCode, resultCode, data); +    } + +    private void updateView() { +        if (mApgData.getDecryptedData() != null) { +            mMessageTextView.setText(mApgData.getDecryptedData()); +        } +        if (mApgData.getEncryptedData() != null) { +            mCiphertextTextView.setText(mApgData.getEncryptedData()); +        } +        mDataTextView.setText(mApgData.toString()); +    } +} | 
