aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThialfihar <thialfihar@gmail.com>2010-06-05 17:54:40 +0000
committerThialfihar <thialfihar@gmail.com>2010-06-05 17:54:40 +0000
commita089dbbb73b3bddb122e14db2165cb1cded269e1 (patch)
treeb457b7e8ca6c7f48c3e65e7ab6588bda201bf0e7 /src
parenta85ae5e0092057d1007ba62fada17c9f6a085c92 (diff)
downloadopen-keychain-a089dbbb73b3bddb122e14db2165cb1cded269e1.tar.gz
open-keychain-a089dbbb73b3bddb122e14db2165cb1cded269e1.tar.bz2
open-keychain-a089dbbb73b3bddb122e14db2165cb1cded269e1.zip
introduced a general application to handle certain Intents, only to hand them to other APG Activities after looking at the content of the passed data
Diffstat (limited to 'src')
-rw-r--r--src/org/thialfihar/android/apg/GeneralActivity.java141
-rw-r--r--src/org/thialfihar/android/apg/Id.java7
2 files changed, 148 insertions, 0 deletions
diff --git a/src/org/thialfihar/android/apg/GeneralActivity.java b/src/org/thialfihar/android/apg/GeneralActivity.java
new file mode 100644
index 000000000..1a80368aa
--- /dev/null
+++ b/src/org/thialfihar/android/apg/GeneralActivity.java
@@ -0,0 +1,141 @@
+package org.thialfihar.android.apg;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.Vector;
+
+import org.thialfihar.android.apg.utils.Choice;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
+
+public class GeneralActivity extends BaseActivity {
+ private Intent mIntent;
+ private ArrayAdapter<Choice> mAdapter;
+ private ListView mList;
+ private Button mCancelButton;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.general);
+
+ mIntent = getIntent();
+
+ boolean isEncrypted = false;
+ boolean containsKeys = false;
+
+ InputStream inStream = null;
+ {
+ byte[] data = mIntent.getByteArrayExtra(Intent.EXTRA_TEXT);
+ if (data != null) {
+ inStream = new ByteArrayInputStream(data);
+ }
+ }
+
+ if (inStream == null) {
+ Uri data = mIntent.getData();
+ if (data != null) {
+ try {
+ inStream = getContentResolver().openInputStream(data);
+ } catch (FileNotFoundException e) {
+ // didn't work
+ Toast.makeText(this, "failed to open stream", Toast.LENGTH_SHORT);
+ }
+ }
+ }
+
+ if (inStream == null) {
+ Toast.makeText(this, "no data found", Toast.LENGTH_SHORT);
+ finish();
+ return;
+ }
+
+ mList = (ListView) findViewById(R.id.options);
+ Vector<Choice> choices = new Vector<Choice>();
+
+ if (containsKeys) {
+ choices.add(new Choice(Id.choice.action.import_public, getString(R.string.action_import_public)));
+ choices.add(new Choice(Id.choice.action.import_secret, getString(R.string.action_import_secret)));
+ }
+
+ if (isEncrypted) {
+ choices.add(new Choice(Id.choice.action.decrypt, getString(R.string.action_decrypt)));
+ }
+
+ if (!containsKeys && !isEncrypted) {
+ choices.add(new Choice(Id.choice.action.encrypt, getString(R.string.action_encrypt)));
+ }
+
+ mAdapter = new ArrayAdapter<Choice>(this, android.R.layout.simple_list_item_1, choices);
+ mList.setAdapter(mAdapter);
+
+ mList.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
+ clicked(mAdapter.getItem(arg2).getId());
+ }
+ });
+
+ mCancelButton = (Button) findViewById(R.id.btn_cancel);
+ mCancelButton.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ GeneralActivity.this.finish();
+ }
+ });
+
+ if (choices.size() == 1) {
+ clicked(choices.get(0).getId());
+ }
+ }
+
+ private void clicked(int id) {
+ Intent intent = new Intent();
+ switch (id) {
+ case Id.choice.action.encrypt: {
+ intent.setClass(this, EncryptActivity.class);
+ if (mIntent.hasExtra(Intent.EXTRA_TEXT)) {
+ intent.putExtra(Intent.EXTRA_TEXT, mIntent.getByteArrayExtra(Intent.EXTRA_TEXT));
+ } else if (mIntent.getData() != null) {
+ intent.setData(mIntent.getData());
+ intent.setType(mIntent.getType());
+ }
+
+ break;
+ }
+
+ case Id.choice.action.decrypt: {
+ break;
+ }
+
+ case Id.choice.action.import_public: {
+ break;
+ }
+
+ case Id.choice.action.import_secret: {
+ break;
+ }
+
+ default: {
+ // shouldn't happen
+ return;
+ }
+ }
+
+ startActivity(intent);
+ finish();
+ }
+}
diff --git a/src/org/thialfihar/android/apg/Id.java b/src/org/thialfihar/android/apg/Id.java
index 4567f937d..73d4ddc85 100644
--- a/src/org/thialfihar/android/apg/Id.java
+++ b/src/org/thialfihar/android/apg/Id.java
@@ -111,6 +111,13 @@ public final class Id {
public static final int encrypt_only = 0x21070002;
public static final int sign_and_encrypt = 0x21070003;
}
+
+ public static final class action {
+ public static final int encrypt = 0x21070001;
+ public static final int decrypt = 0x21070002;
+ public static final int import_public = 0x21070003;
+ public static final int import_secret = 0x21070004;
+ }
}
public static final class return_value {