diff --git a/res/drawable-hdpi/ic_device_access_new_account.png b/res/drawable-hdpi/ic_device_access_new_account.png
new file mode 100644
index 0000000..593b163
Binary files /dev/null and b/res/drawable-hdpi/ic_device_access_new_account.png differ
diff --git a/res/drawable-mdpi/ic_device_access_new_account.png b/res/drawable-mdpi/ic_device_access_new_account.png
new file mode 100644
index 0000000..aae6a95
Binary files /dev/null and b/res/drawable-mdpi/ic_device_access_new_account.png differ
diff --git a/res/drawable-xhdpi/ic_device_access_new_account.png b/res/drawable-xhdpi/ic_device_access_new_account.png
new file mode 100644
index 0000000..e61a09f
Binary files /dev/null and b/res/drawable-xhdpi/ic_device_access_new_account.png differ
diff --git a/res/layout/fragment_edit_identity.xml b/res/layout/fragment_edit_identity.xml
index 1c4f56f..3b06d0a 100644
--- a/res/layout/fragment_edit_identity.xml
+++ b/res/layout/fragment_edit_identity.xml
@@ -31,12 +31,20 @@
android:hint="@string/description"
android:inputType="text" />
-
+
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9cd4710..9f3a2a3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -61,6 +61,7 @@
Password changed successfully
Identities
+ New identity
Public name
Description
Default identity
diff --git a/src/i2p/bote/config/EditIdentityActivity.java b/src/i2p/bote/config/EditIdentityActivity.java
index fa9b68a..23c7bcf 100644
--- a/src/i2p/bote/config/EditIdentityActivity.java
+++ b/src/i2p/bote/config/EditIdentityActivity.java
@@ -16,8 +16,11 @@ public class EditIdentityActivity extends ActionBarActivity implements
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState == null) {
- EditIdentityFragment f = EditIdentityFragment.newInstance(
- getIntent().getExtras().getString(EditIdentityFragment.IDENTITY_KEY));
+ String key = null;
+ Bundle args = getIntent().getExtras();
+ if (args != null)
+ key = args.getString(EditIdentityFragment.IDENTITY_KEY);
+ EditIdentityFragment f = EditIdentityFragment.newInstance(key);
getSupportFragmentManager().beginTransaction()
.add(R.id.edit_identity_frag, f).commit();
}
diff --git a/src/i2p/bote/config/EditIdentityFragment.java b/src/i2p/bote/config/EditIdentityFragment.java
index d85762a..5aef0f4 100644
--- a/src/i2p/bote/config/EditIdentityFragment.java
+++ b/src/i2p/bote/config/EditIdentityFragment.java
@@ -2,10 +2,13 @@ package i2p.bote.config;
import java.io.IOException;
import java.security.GeneralSecurityException;
+import java.util.List;
import i2p.bote.I2PBote;
import i2p.bote.R;
import i2p.bote.StatusListener;
+import i2p.bote.crypto.CryptoFactory;
+import i2p.bote.crypto.CryptoImplementation;
import i2p.bote.email.EmailIdentity;
import i2p.bote.fileencryption.PasswordException;
import i2p.bote.util.BoteHelper;
@@ -24,8 +27,10 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
+import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
+import android.widget.Spinner;
import android.widget.TextView;
public class EditIdentityFragment extends Fragment {
@@ -60,11 +65,15 @@ public class EditIdentityFragment extends Fragment {
// instance of this fragment after rotation.
static final String IDENTITY_WAITER_TAG = "identityWaiterTask";
+ static final int DEFAULT_CRYPTO_IMPL = 2;
+
private String mKey;
private FragmentManager mFM;
MenuItem mSave;
EditText mNameField;
EditText mDescField;
+ Spinner mCryptoField;
+ int mDefaultPos;
CheckBox mDefaultField;
TextView mError;
@@ -104,20 +113,30 @@ public class EditIdentityFragment extends Fragment {
mDefaultField = (CheckBox) view.findViewById(R.id.default_identity);
mError = (TextView) view.findViewById(R.id.error);
- try {
- EmailIdentity identity = BoteHelper.getIdentity(mKey);
- mNameField.setText(identity.getPublicName());
- mDescField.setText(identity.getDescription());
- mDefaultField.setChecked(identity.isDefault());
- } catch (PasswordException e) {
- // TODO Handle
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Handle
- e.printStackTrace();
- } catch (GeneralSecurityException e) {
- // TODO Handle
- e.printStackTrace();
+ if (mKey == null) {
+ // Show the encryption choice field
+ mCryptoField = (Spinner) view.findViewById(R.id.crypto_impl);
+ CryptoAdapter adapter = new CryptoAdapter(getActivity());
+ mCryptoField.setAdapter(adapter);
+ mCryptoField.setSelection(mDefaultPos);
+ mCryptoField.setVisibility(View.VISIBLE);
+ } else {
+ // Load the identity to edit
+ try {
+ EmailIdentity identity = BoteHelper.getIdentity(mKey);
+ mNameField.setText(identity.getPublicName());
+ mDescField.setText(identity.getDescription());
+ mDefaultField.setChecked(identity.isDefault());
+ } catch (PasswordException e) {
+ // TODO Handle
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Handle
+ e.printStackTrace();
+ } catch (GeneralSecurityException e) {
+ // TODO Handle
+ e.printStackTrace();
+ }
}
}
@@ -139,6 +158,10 @@ public class EditIdentityFragment extends Fragment {
String description = mDescField.getText().toString();
boolean setDefault = mDefaultField.isChecked();
+ int cryptoImplId = -1;
+ if (mKey == null)
+ cryptoImplId = ((CryptoImplementation) mCryptoField.getSelectedItem()).getId();
+
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mNameField.getWindowToken(), 0);
@@ -146,8 +169,8 @@ public class EditIdentityFragment extends Fragment {
mError.setText("");
IdentityWaiterFrag f = IdentityWaiterFrag.newInstance(
- false,
- -1,
+ (mKey == null ? true : false),
+ cryptoImplId,
mKey,
publicName,
description,
@@ -177,6 +200,40 @@ public class EditIdentityFragment extends Fragment {
}
}
+ private class CryptoAdapter extends ArrayAdapter {
+ public CryptoAdapter(Context context) {
+ super(context, android.R.layout.simple_spinner_item);
+ setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+
+ List instances = CryptoFactory.getInstances();
+ mDefaultPos = 0;
+ for (CryptoImplementation instance : instances) {
+ add(instance);
+ if (instance.getId() == DEFAULT_CRYPTO_IMPL)
+ mDefaultPos = getPosition(instance);
+ }
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View v = super.getView(position, convertView, parent);
+ setViewText(v, position);
+ return v;
+ }
+
+ @Override
+ public View getDropDownView (int position, View convertView, ViewGroup parent) {
+ View v = super.getDropDownView(position, convertView, parent);
+ setViewText(v, position);
+ return v;
+ }
+
+ private void setViewText(View v, int position) {
+ TextView text = (TextView) v.findViewById(android.R.id.text1);
+ text.setText(getItem(position).getName());
+ }
+ }
+
public static class IdentityWaiterFrag extends TaskFragment