diff --git a/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java b/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java
index 9b917c9..5f0b763 100644
--- a/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java
+++ b/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java
@@ -1,5 +1,6 @@
package i2p.bote.android.addressbook;
+import i2p.bote.android.Constants;
import i2p.bote.android.InitActivities;
import i2p.bote.android.R;
import i2p.bote.packet.dht.Contact;
@@ -9,6 +10,9 @@ import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.google.zxing.integration.android.IntentResult;
+
public class AddressBookActivity extends ActionBarActivity implements
AddressBookFragment.OnContactSelectedListener {
static final int ALTER_CONTACT_LIST = 1;
@@ -39,7 +43,7 @@ public class AddressBookActivity extends ActionBarActivity implements
@Override
public void onContactSelected(Contact contact) {
- if (getIntent().getAction() == Intent.ACTION_PICK) {
+ if (Intent.ACTION_PICK.equals(getIntent().getAction())) {
Intent result = new Intent();
result.putExtra(ViewContactFragment.CONTACT_DESTINATION, contact.getBase64Dest());
setResult(Activity.RESULT_OK, result);
@@ -53,7 +57,16 @@ public class AddressBookActivity extends ActionBarActivity implements
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == ALTER_CONTACT_LIST) {
+ IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
+ if (scanResult != null) {
+ String content = scanResult.getContents();
+ if (content != null && content.startsWith(Constants.EMAILDEST_SCHEME)) {
+ String destination = content.substring(Constants.EMAILDEST_SCHEME.length() + 1);
+ Intent nci = new Intent(this, EditContactActivity.class);
+ nci.putExtra(EditContactFragment.NEW_DESTINATION, destination);
+ startActivityForResult(nci, ALTER_CONTACT_LIST);
+ }
+ } else if (requestCode == ALTER_CONTACT_LIST) {
if (resultCode == Activity.RESULT_OK) {
AddressBookFragment f = (AddressBookFragment) getSupportFragmentManager().findFragmentById(R.id.container);
f.updateContactList();
diff --git a/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java b/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java
index be3ac83..c70d769 100644
--- a/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java
+++ b/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java
@@ -15,6 +15,8 @@ import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ListView;
+import com.google.zxing.integration.android.IntentIntegrator;
+
import java.util.SortedSet;
import i2p.bote.I2PBote;
@@ -76,6 +78,14 @@ public class AddressBookFragment extends AuthenticatedListFragment implements
}
});
+ b = (ImageButton) v.findViewById(R.id.action_scan_qr_code);
+ b.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ startScanQrCode();
+ }
+ });
+
return v;
}
@@ -120,6 +130,11 @@ public class AddressBookFragment extends AuthenticatedListFragment implements
getActivity().startActivityForResult(nci, AddressBookActivity.ALTER_CONTACT_LIST);
}
+ private void startScanQrCode() {
+ IntentIntegrator integrator = new IntentIntegrator(getActivity());
+ integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES);
+ }
+
@Override
public void onListItemClick(ListView parent, View view, int pos, long id) {
mCallback.onContactSelected(mAdapter.getItem(pos));
diff --git a/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java b/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java
index 8592c3c..7202e9d 100644
--- a/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java
+++ b/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java
@@ -33,11 +33,18 @@ public class EditContactActivity extends ActionBarActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState == null) {
- String destination = null;
+ EditContactFragment f = null;
Bundle args = getIntent().getExtras();
- if (args != null)
- destination = args.getString(EditContactFragment.CONTACT_DESTINATION);
- EditContactFragment f = EditContactFragment.newInstance(destination);
+ if (args != null) {
+ String destination = args.getString(EditContactFragment.NEW_DESTINATION);
+ if (destination != null) {
+ String name = args.getString(EditContactFragment.NEW_NAME);
+ f = EditContactFragment.newInstance(name, destination);
+ } else {
+ destination = args.getString(EditContactFragment.CONTACT_DESTINATION);
+ f = EditContactFragment.newInstance(destination);
+ }
+ }
getSupportFragmentManager().beginTransaction()
.add(R.id.container, f).commit();
}
diff --git a/app/src/main/java/i2p/bote/android/addressbook/EditContactFragment.java b/app/src/main/java/i2p/bote/android/addressbook/EditContactFragment.java
index 28f44f1..1af8387 100644
--- a/app/src/main/java/i2p/bote/android/addressbook/EditContactFragment.java
+++ b/app/src/main/java/i2p/bote/android/addressbook/EditContactFragment.java
@@ -124,7 +124,7 @@ public class EditContactFragment extends EditPictureFragment {
}
private void initializeContact() {
- String newName = getArguments().getString(NEW_NAME);
+ String newDest = getArguments().getString(NEW_DESTINATION);
if (mDestination != null) {
try {
@@ -141,9 +141,9 @@ public class EditContactFragment extends EditPictureFragment {
// TODO Handle
e.printStackTrace();
}
- } else if (newName != null) {
- mNameField.setText(newName);
- mDestinationField.setText(getArguments().getString(NEW_DESTINATION));
+ } else if (newDest != null) {
+ mNameField.setText(getArguments().getString(NEW_NAME));
+ mDestinationField.setText(newDest);
}
}
diff --git a/app/src/main/java/i2p/bote/android/config/ViewIdentityFragment.java b/app/src/main/java/i2p/bote/android/config/ViewIdentityFragment.java
index e9a615c..000a7d8 100644
--- a/app/src/main/java/i2p/bote/android/config/ViewIdentityFragment.java
+++ b/app/src/main/java/i2p/bote/android/config/ViewIdentityFragment.java
@@ -69,7 +69,7 @@ public class ViewIdentityFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_view_identity, container, false);
}
@@ -105,7 +105,7 @@ public class ViewIdentityFragment extends Fragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- ActionBarActivity activity = ((ActionBarActivity)getActivity());
+ ActionBarActivity activity = ((ActionBarActivity) getActivity());
// Set the action bar
activity.setSupportActionBar(mToolbar);
@@ -148,7 +148,7 @@ public class ViewIdentityFragment extends Fragment {
@Override
public void onClick(View view) {
IntentIntegrator i = new IntentIntegrator(getActivity());
- i.shareText("bote:" + mKey);
+ i.shareText(Constants.EMAILDEST_SCHEME + ":" + mKey);
}
});
@@ -164,49 +164,49 @@ public class ViewIdentityFragment extends Fragment {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case R.id.action_edit_identity:
- Intent ei = new Intent(getActivity(), EditIdentityActivity.class);
- ei.putExtra(EditIdentityFragment.IDENTITY_KEY, mKey);
- startActivity(ei);
- return true;
+ case R.id.action_edit_identity:
+ Intent ei = new Intent(getActivity(), EditIdentityActivity.class);
+ ei.putExtra(EditIdentityFragment.IDENTITY_KEY, mKey);
+ startActivity(ei);
+ return true;
- case R.id.action_delete_identity:
- DialogFragment df = new DialogFragment() {
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(R.string.delete_identity)
- .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- try {
- BoteHelper.deleteIdentity(mKey);
- getActivity().setResult(Activity.RESULT_OK);
- getActivity().finish();
- } catch (PasswordException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (GeneralSecurityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ case R.id.action_delete_identity:
+ DialogFragment df = new DialogFragment() {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(R.string.delete_identity)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ try {
+ BoteHelper.deleteIdentity(mKey);
+ getActivity().setResult(Activity.RESULT_OK);
+ getActivity().finish();
+ } catch (PasswordException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException 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();
}
- }
- }).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;
+ });
+ return builder.create();
+ }
+ };
+ df.show(getActivity().getSupportFragmentManager(), "deletecontact");
+ return true;
- default:
- return super.onOptionsItemSelected(item);
+ default:
+ return super.onOptionsItemSelected(item);
}
}
@@ -257,11 +257,12 @@ public class ViewIdentityFragment extends Fragment {
// render with minimal size
return QrCodeUtils.getQRCodeBitmap(qrCodeContent, 0);
}
+
protected void onPostExecute(Bitmap qrCode) {
- // only change view, if fragment is attached to activity
+ // only change view, if fragment is attached to activity
if (ViewIdentityFragment.this.isAdded()) {
- // scale the image up to our actual size. we do this in code rather
- // than let the ImageView do this because we don't require filtering.
+ // scale the image up to our actual size. we do this in code rather
+ // than let the ImageView do this because we don't require filtering.
Bitmap scaled = Bitmap.createScaledBitmap(qrCode,
mKeyQrCode.getHeight(), mKeyQrCode.getHeight(),
false);
diff --git a/app/src/main/res/drawable-hdpi/ic_scan_qr_code_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_scan_qr_code_white_24dp.png
new file mode 100644
index 0000000..be7dbf8
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_scan_qr_code_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_scan_qr_code_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_scan_qr_code_white_24dp.png
new file mode 100644
index 0000000..e1cdd87
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_scan_qr_code_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_scan_qr_code_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_scan_qr_code_white_24dp.png
new file mode 100644
index 0000000..fe48c21
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_scan_qr_code_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_scan_qr_code_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_scan_qr_code_white_24dp.png
new file mode 100644
index 0000000..0a0f6ed
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_scan_qr_code_white_24dp.png differ
diff --git a/app/src/main/res/layout/fragment_list_contacts.xml b/app/src/main/res/layout/fragment_list_contacts.xml
index 745d2c6..1398f68 100644
--- a/app/src/main/res/layout/fragment_list_contacts.xml
+++ b/app/src/main/res/layout/fragment_list_contacts.xml
@@ -23,6 +23,14 @@
app:fab_addButtonColorNormal="@color/accent"
app:fab_addButtonColorPressed="@color/accent_dark">
+
+