diff --git a/app/src/main/java/net/bierbaumer/otp_authenticator/MainActivity.java b/app/src/main/java/net/bierbaumer/otp_authenticator/MainActivity.java index 0ea4f9fc..a435ffc1 100644 --- a/app/src/main/java/net/bierbaumer/otp_authenticator/MainActivity.java +++ b/app/src/main/java/net/bierbaumer/otp_authenticator/MainActivity.java @@ -7,6 +7,8 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; @@ -16,6 +18,7 @@ import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.util.Log; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; @@ -27,10 +30,15 @@ import android.webkit.WebView; import android.widget.AdapterView; import android.widget.EditText; +import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.WriterException; import com.google.zxing.client.android.Intents; +import com.google.zxing.common.BitMatrix; import com.google.zxing.integration.android.IntentIntegrator; import java.util.ArrayList; @@ -312,6 +320,30 @@ public void onClick(DialogInterface dialog, int whichButton) { alert.show(); + return true; + } else if (id == R.id.action_qrcode) { + AlertDialog.Builder alert = new AlertDialog.Builder(this); + + try { + BitMatrix bitMatrix = new MultiFormatWriter().encode("otpauth://totp/" + adapter.getCurrentSelection().getLabel() + "?secret=" + adapter.getCurrentSelection().getSecret(), BarcodeFormat.QR_CODE, 400, 400, null); + int height = bitMatrix.getHeight(); + int width = bitMatrix.getWidth(); + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + bitmap.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE); + } + } + ImageView image = new ImageView(getApplicationContext()); + image.setImageBitmap(bitmap); + + alert.setView(image); + + alert.show(); + } catch (WriterException e) { + Log.e(MainActivity.class.getSimpleName(), e.getMessage()); + } + return true; } diff --git a/app/src/main/res/menu/menu_edit.xml b/app/src/main/res/menu/menu_edit.xml index 197e5c61..fc6611cc 100644 --- a/app/src/main/res/menu/menu_edit.xml +++ b/app/src/main/res/menu/menu_edit.xml @@ -3,6 +3,12 @@ xmlns:tools="http://schemas.android.com/tools" > + OTP Authenticator Authenticator No account has been added yet + Show QR code Delete Edit Scan QR Code