diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 27a0e6d..b8a1d55 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -32,6 +32,9 @@
+
diff --git a/res/layout/fragment_edit_contact.xml b/res/layout/fragment_edit_contact.xml
new file mode 100644
index 0000000..c550d9d
--- /dev/null
+++ b/res/layout/fragment_edit_contact.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/menu/edit_contact.xml b/res/menu/edit_contact.xml
new file mode 100644
index 0000000..610c5fe
--- /dev/null
+++ b/res/menu/edit_contact.xml
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d19e64e..4641fef 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -43,6 +43,10 @@
Address book is empty
New contact
+ Email destination
+ Browse
+ Save contact
+
General
General settings and default identity settings
Auto-check mail
diff --git a/src/i2p/bote/android/addressbook/AddressBookActivity.java b/src/i2p/bote/android/addressbook/AddressBookActivity.java
index c83dfda..f746c44 100644
--- a/src/i2p/bote/android/addressbook/AddressBookActivity.java
+++ b/src/i2p/bote/android/addressbook/AddressBookActivity.java
@@ -1,6 +1,8 @@
package i2p.bote.android.addressbook;
import i2p.bote.packet.dht.Contact;
+import android.app.Activity;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@@ -22,6 +24,15 @@ public class AddressBookActivity extends ActionBarActivity implements
@Override
public void onContactSelected(Contact contact) {
- // TODO
+ if (getIntent().getAction() == Intent.ACTION_PICK) {
+ Intent result = new Intent();
+ result.putExtra(EditContactFragment.CONTACT_DESTINATION, contact.getBase64Dest());
+ setResult(Activity.RESULT_OK, result);
+ finish();
+ } else {
+ Intent i = new Intent(this, EditContactActivity.class);
+ i.putExtra(EditContactFragment.CONTACT_DESTINATION, contact.getBase64Dest());
+ startActivity(i);
+ }
}
}
diff --git a/src/i2p/bote/android/addressbook/AddressBookFragment.java b/src/i2p/bote/android/addressbook/AddressBookFragment.java
index f73519a..0bd6771 100644
--- a/src/i2p/bote/android/addressbook/AddressBookFragment.java
+++ b/src/i2p/bote/android/addressbook/AddressBookFragment.java
@@ -10,6 +10,7 @@ import java.util.SortedSet;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
@@ -72,8 +73,10 @@ public class AddressBookFragment extends ListFragment implements
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_new_contact:
- // TODO
+ Intent nci = new Intent(getActivity(), EditContactActivity.class);
+ startActivity(nci);
return true;
+
default:
return super.onOptionsItemSelected(item);
}
diff --git a/src/i2p/bote/android/addressbook/EditContactActivity.java b/src/i2p/bote/android/addressbook/EditContactActivity.java
new file mode 100644
index 0000000..fba3f0d
--- /dev/null
+++ b/src/i2p/bote/android/addressbook/EditContactActivity.java
@@ -0,0 +1,24 @@
+package i2p.bote.android.addressbook;
+
+import android.os.Bundle;
+import android.support.v7.app.ActionBarActivity;
+
+public class EditContactActivity extends ActionBarActivity {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Enable ActionBar app icon to behave as action to go back
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ if (savedInstanceState == null) {
+ String destination = null;
+ Bundle args = getIntent().getExtras();
+ if (args != null)
+ destination = args.getString(EditContactFragment.CONTACT_DESTINATION);
+ EditContactFragment f = EditContactFragment.newInstance(destination);
+ getSupportFragmentManager().beginTransaction()
+ .add(android.R.id.content, f).commit();
+ }
+ }
+}
diff --git a/src/i2p/bote/android/addressbook/EditContactFragment.java b/src/i2p/bote/android/addressbook/EditContactFragment.java
new file mode 100644
index 0000000..f0f51dd
--- /dev/null
+++ b/src/i2p/bote/android/addressbook/EditContactFragment.java
@@ -0,0 +1,165 @@
+package i2p.bote.android.addressbook;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.security.GeneralSecurityException;
+
+import i2p.bote.android.R;
+import i2p.bote.android.util.BoteHelper;
+import i2p.bote.fileencryption.PasswordException;
+import i2p.bote.packet.dht.Contact;
+import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class EditContactFragment extends Fragment {
+ public static final String CONTACT_DESTINATION = "contact_destination";
+
+ static final int REQUEST_DESTINATION_FILE = 1;
+
+ private String mDestination;
+ EditText mNameField;
+ EditText mDestinationField;
+ EditText mTextField;
+ TextView mError;
+
+ public static EditContactFragment newInstance(String destination) {
+ EditContactFragment f = new EditContactFragment();
+ Bundle args = new Bundle();
+ args.putString(CONTACT_DESTINATION, destination);
+ f.setArguments(args);
+ return f;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_edit_contact, container, false);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ mDestination = getArguments().getString(CONTACT_DESTINATION);
+
+ mNameField = (EditText) view.findViewById(R.id.contact_name);
+ mDestinationField = (EditText) view.findViewById(R.id.destination);
+ mTextField = (EditText) view.findViewById(R.id.text);
+ mError = (TextView) view.findViewById(R.id.error);
+
+ if (mDestination != null) {
+ try {
+ Contact contact = BoteHelper.getContact(mDestination);
+ mNameField.setText(contact.getName());
+ mDestinationField.setText(mDestination);
+ mTextField.setText(contact.getText());
+ } catch (PasswordException e) {
+ // TODO Handle
+ e.printStackTrace();
+ }
+ }
+
+ Button b = (Button) view.findViewById(R.id.import_destination_from_file);
+ b.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View view) {
+ Intent i = new Intent(Intent.ACTION_GET_CONTENT);
+ i.setType("text/plain");
+ i.addCategory(Intent.CATEGORY_OPENABLE);
+ try {
+ startActivityForResult(
+ Intent.createChooser(i,"Select file containing Email Destination"),
+ REQUEST_DESTINATION_FILE);
+ } catch (android.content.ActivityNotFoundException ex) {
+ Toast.makeText(getActivity(), "Please install a File Manager.",
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.edit_contact, menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.action_save_contact:
+ String name = mNameField.getText().toString();
+ String destination = mDestinationField.getText().toString();
+ String text = mTextField.getText().toString();
+
+ mError.setText("");
+
+ try {
+ String err = BoteHelper.saveContact(destination, name, null, text);
+ if (err == null)
+ getActivity().finish();
+ else
+ mError.setText(err);
+ } catch (PasswordException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ mError.setText(e.getLocalizedMessage());
+ } catch (GeneralSecurityException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ mError.setText(e.getLocalizedMessage());
+ }
+ return true;
+
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_DESTINATION_FILE) {
+ if (resultCode == Activity.RESULT_OK) {
+ Uri result = data.getData();
+ String path = result.getPath();
+ File file = new File(path);
+ BufferedReader br;
+ try {
+ br = new BufferedReader(
+ new InputStreamReader(
+ new FileInputStream(file)));
+ try {
+ mDestinationField.setText(br.readLine());
+ } catch (IOException ioe) {
+ Toast.makeText(getActivity(), "Failed to read Email Destination file.",
+ Toast.LENGTH_SHORT).show();
+ }
+ } catch (FileNotFoundException fnfe) {
+ Toast.makeText(getActivity(), "Could not find Email Destination file.",
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+ }
+}