diff --git a/res/menu/edit_contact.xml b/res/menu/edit_contact.xml index 610c5fe..a8605e1 100644 --- a/res/menu/edit_contact.xml +++ b/res/menu/edit_contact.xml @@ -8,4 +8,9 @@ android:title="@string/save_contact" i2pandroid:showAsAction="ifRoom"/> + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index fa1a5cf..0db329a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -57,6 +57,7 @@ Email destination Browse Save contact + Delete contact? Network information is not available because Bote hasn\'t started connecting to the network yet. Local Destination: diff --git a/src/i2p/bote/android/addressbook/AddressBookActivity.java b/src/i2p/bote/android/addressbook/AddressBookActivity.java index dff0b29..52ac928 100644 --- a/src/i2p/bote/android/addressbook/AddressBookActivity.java +++ b/src/i2p/bote/android/addressbook/AddressBookActivity.java @@ -9,6 +9,8 @@ import android.support.v7.app.ActionBarActivity; public class AddressBookActivity extends ActionBarActivity implements AddressBookFragment.OnContactSelectedListener { + static final int ALTER_CONTACT_LIST = 1; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -34,7 +36,19 @@ public class AddressBookActivity extends ActionBarActivity implements } else { Intent i = new Intent(this, EditContactActivity.class); i.putExtra(EditContactFragment.CONTACT_DESTINATION, contact.getBase64Dest()); - startActivity(i); + startActivityForResult(i, ALTER_CONTACT_LIST); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == ALTER_CONTACT_LIST) { + if (resultCode == Activity.RESULT_OK) { + AddressBookFragment f = (AddressBookFragment) getSupportFragmentManager().findFragmentById(android.R.id.content); + f.updateContactList(); + } + } else { + super.onActivityResult(requestCode, resultCode, data); } } } diff --git a/src/i2p/bote/android/addressbook/AddressBookFragment.java b/src/i2p/bote/android/addressbook/AddressBookFragment.java index 0bd6771..78d4ca7 100644 --- a/src/i2p/bote/android/addressbook/AddressBookFragment.java +++ b/src/i2p/bote/android/addressbook/AddressBookFragment.java @@ -74,7 +74,7 @@ public class AddressBookFragment extends ListFragment implements switch (item.getItemId()) { case R.id.action_new_contact: Intent nci = new Intent(getActivity(), EditContactActivity.class); - startActivity(nci); + getActivity().startActivityForResult(nci, AddressBookActivity.ALTER_CONTACT_LIST); return true; default: @@ -87,6 +87,11 @@ public class AddressBookFragment extends ListFragment implements mCallback.onContactSelected(mAdapter.getItem(pos)); } + protected void updateContactList() { + setListShown(false); + getLoaderManager().restartLoader(0, null, this); + } + // LoaderManager.LoaderCallbacks> public Loader> onCreateLoader(int id, Bundle args) { diff --git a/src/i2p/bote/android/addressbook/EditContactFragment.java b/src/i2p/bote/android/addressbook/EditContactFragment.java index eb3a051..7a669b4 100644 --- a/src/i2p/bote/android/addressbook/EditContactFragment.java +++ b/src/i2p/bote/android/addressbook/EditContactFragment.java @@ -7,15 +7,20 @@ 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.android.util.EditPictureFragment; import i2p.bote.fileencryption.PasswordException; import i2p.bote.packet.dht.Contact; import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -123,9 +128,11 @@ public class EditContactFragment extends EditPictureFragment { try { String err = BoteHelper.saveContact(destination, name, picture, text); - if (err == null) + if (err == null) { + if (mDestination == null) // Only set if adding new contact + getActivity().setResult(Activity.RESULT_OK); getActivity().finish(); - else + } else mError.setText(err); } catch (PasswordException e) { // TODO Auto-generated catch block @@ -138,6 +145,41 @@ public class EditContactFragment extends EditPictureFragment { } return true; + case R.id.action_delete_contact: + DialogFragment df = new DialogFragment() { + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setMessage(R.string.delete_contact) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + try { + String err = BoteHelper.deleteContact(mDestination); + if (err == null) { + getActivity().setResult(Activity.RESULT_OK); + getActivity().finish(); + } else + mError.setText(err); + } catch (PasswordException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (GeneralSecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }).setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + return builder.create(); + } + }; + df.show(getActivity().getSupportFragmentManager(), "deletecontact"); + return true; + default: return super.onOptionsItemSelected(item); }