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"> + +