diff options
author | iNPUTmice <daniel@gultsch.de> | 2014-11-03 22:47:07 +0100 |
---|---|---|
committer | iNPUTmice <daniel@gultsch.de> | 2014-11-03 22:47:07 +0100 |
commit | d458919c8f3e9ff968ed2df3b3492a07794aa477 (patch) | |
tree | 4e3cc9d73b6ace3afe11e68c661ba11ee75328a3 | |
parent | 4614ff343eda9d15eae01493be833d6c0be05d7a (diff) |
unfinishd qr code implemenation. thanks to @emdete
Diffstat (limited to '')
-rw-r--r-- | build.gradle | 2 | ||||
-rw-r--r-- | src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java | 96 | ||||
-rw-r--r-- | src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java | 25 | ||||
-rw-r--r-- | src/main/res/menu/editaccount.xml | 8 | ||||
-rw-r--r-- | src/main/res/menu/start_conversation.xml | 16 | ||||
-rw-r--r-- | src/main/res/values/strings.xml | 3 |
6 files changed, 132 insertions, 18 deletions
diff --git a/build.gradle b/build.gradle index a37b92c4..e5edcb9a 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,8 @@ dependencies { compile 'com.android.support:support-v13:19.1.0' compile 'org.bouncycastle:bcprov-jdk15on:1.50' compile 'net.java:otr4j:0.21' + compile 'com.google.zxing:core:3.1.0' + compile 'com.google.zxing:android-integration:3.1.0' } android { diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index 58ca49cc..4942816d 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -1,23 +1,44 @@ package eu.siacs.conversations.ui; +import android.app.AlertDialog; import android.app.PendingIntent; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.Point; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.google.zxing.qrcode.QRCodeWriter; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; + +import java.util.Hashtable; + +import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate; @@ -173,13 +194,13 @@ public class EditAccountActivity extends XmppActivity { @Override public void onTextChanged(CharSequence s, int start, int before, - int count) { + int count) { updateSaveButton(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, - int after) { + int after) { } @@ -216,9 +237,45 @@ public class EditAccountActivity extends XmppActivity { } else { return (!mAccount.getJid().equals(mAccountJid.getText().toString())) || (!mAccount.getPassword().equals( - mPassword.getText().toString()) || mAccount - .isOptionSet(Account.OPTION_REGISTER) != mRegisterNew - .isChecked()); + mPassword.getText().toString()) || mAccount + .isOptionSet(Account.OPTION_REGISTER) != mRegisterNew + .isChecked()); + } + } + + protected void showQrCode() { + Point size = new Point(); + getWindowManager().getDefaultDisplay().getSize(size); + final int width = (size.x < size.y ? size.x : size.y); + String jid = mAccount.getJid(); + Bitmap bitmap = createQrCodeBitmap("xmpp:" + jid, width); + ImageView view = new ImageView(this); + view.setImageBitmap(bitmap); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setView(view); + builder.create().show(); + } + + protected Bitmap createQrCodeBitmap(String input, int size) { + try { + final QRCodeWriter QR_CODE_WRITER = new QRCodeWriter(); + final Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + final BitMatrix result = QR_CODE_WRITER.encode(input, BarcodeFormat.QR_CODE, size, size, hints); + final int width = result.getWidth(); + final int height = result.getHeight(); + final int[] pixels = new int[width * height]; + for (int y = 0; y < height; y++) { + final int offset = y * width; + for (int x = 0; x < width; x++) { + pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.TRANSPARENT; + } + } + final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, width, 0, 0, width, height); + return bitmap; + } catch (final WriterException e) { + return null; } } @@ -257,7 +314,7 @@ public class EditAccountActivity extends XmppActivity { return (!this.mAccount.getJid().equals( this.mAccountJid.getText().toString())) || (!this.mAccount.getPassword().equals( - this.mPassword.getText().toString())); + this.mPassword.getText().toString())); } @Override @@ -287,7 +344,7 @@ public class EditAccountActivity extends XmppActivity { @Override public void onCheckedChanged(CompoundButton buttonView, - boolean isChecked) { + boolean isChecked) { if (isChecked) { mPasswordConfirm.setVisibility(View.VISIBLE); } else { @@ -299,6 +356,27 @@ public class EditAccountActivity extends XmppActivity { } @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.editaccount, menu); + MenuItem showQrCode = menu.findItem(R.id.action_show_qr_code); + if (mAccount == null) { + showQrCode.setVisible(false); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_show_qr_code: + showQrCode(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override protected void onStart() { super.onStart(); if (getIntent() != null) { @@ -387,7 +465,7 @@ public class EditAccountActivity extends XmppActivity { @Override public void onClick(View v) { - if (copyTextToClipboard(fingerprint,R.string.otr_fingerprint)) { + if (copyTextToClipboard(fingerprint, R.string.otr_fingerprint)) { Toast.makeText( EditAccountActivity.this, R.string.toast_message_otr_fingerprint, diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index 416e926a..9a7d7af4 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java @@ -24,6 +24,7 @@ import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; @@ -40,6 +41,11 @@ import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; + +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; + +import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Bookmark; @@ -491,10 +497,13 @@ public class StartConversationActivity extends XmppActivity { switch (item.getItemId()) { case R.id.action_create_contact: showCreateContactDialog(null); - break; + return true; case R.id.action_join_conference: showJoinConferenceDialog(); - break; + return true; + case R.id.action_scan_qr_code: + new IntentIntegrator(this).initiateScan(); + return true; } return super.onOptionsItemSelected(item); } @@ -509,6 +518,18 @@ public class StartConversationActivity extends XmppActivity { } @Override + public void onActivityResult(int requestCode, int resultCode, Intent intent) { + if ((requestCode & 0xFFFF) == IntentIntegrator.REQUEST_CODE) { + IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); + if (scanResult != null && scanResult.getFormatName() != null) { + String data = scanResult.getContents(); + Log.d(Config.LOGTAG, data); + } + } + super.onActivityResult(requestCode,requestCode,intent); + } + + @Override protected void onBackendConnected() { xmppConnectionService.setOnRosterUpdateListener(this.onRosterUpdate); this.mActivatedAccounts.clear(); diff --git a/src/main/res/menu/editaccount.xml b/src/main/res/menu/editaccount.xml new file mode 100644 index 00000000..2301caf0 --- /dev/null +++ b/src/main/res/menu/editaccount.xml @@ -0,0 +1,8 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + + <item + android:id="@+id/action_show_qr_code" + android:title="@string/show_qr_code" + android:showAsAction="never" /> + +</menu>
\ No newline at end of file diff --git a/src/main/res/menu/start_conversation.xml b/src/main/res/menu/start_conversation.xml index f7230169..2c23af59 100644 --- a/src/main/res/menu/start_conversation.xml +++ b/src/main/res/menu/start_conversation.xml @@ -1,31 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android" > +<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:actionLayout="@layout/actionview_search" android:icon="@drawable/ic_action_search" android:showAsAction="collapseActionView|always" - android:title="@string/search"/> + android:title="@string/search" /> <item android:id="@+id/action_create_contact" android:icon="@drawable/ic_action_add_person" android:showAsAction="always" - android:title="@string/create_contact"/> + android:title="@string/create_contact" /> <item android:id="@+id/action_join_conference" android:icon="@drawable/ic_action_add_group" android:showAsAction="always" - android:title="@string/join_conference"/> + android:title="@string/join_conference" /> + <item + android:id="@+id/action_scan_qr_code" + android:showAsAction="never" + android:title="@string/scan_qr_code" /> <item android:id="@+id/action_accounts" android:orderInCategory="90" android:showAsAction="never" - android:title="@string/action_accounts"/> + android:title="@string/action_accounts" /> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" - android:title="@string/action_settings"/> + android:title="@string/action_settings" /> </menu>
\ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index e941ed6d..f8e4eef2 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -282,5 +282,6 @@ <string name="url_copied_to_clipboard">URL copied to clipboard</string> <string name="message_copied_to_clipboard">Message copied to clipboard</string> <string name="image_transmission_failed">Image transmission failed</string> - + <string name="scan_qr_code">Scan QR code</string> + <string name="show_qr_code">Show QR code</string> </resources>
\ No newline at end of file |