diff --git a/app/build.gradle b/app/build.gradle index ad3297d..71ec5b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.github.sumimakito.awesomeqrsample" minSdkVersion 19 targetSdkVersion 25 - versionCode 5 - versionName "1.4" + versionCode 6 + versionName "1.5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/app/src/main/java/com/github/sumimakito/awesomeqrsample/MainActivity.java b/app/src/main/java/com/github/sumimakito/awesomeqrsample/MainActivity.java index a805898..d270663 100644 --- a/app/src/main/java/com/github/sumimakito/awesomeqrsample/MainActivity.java +++ b/app/src/main/java/com/github/sumimakito/awesomeqrsample/MainActivity.java @@ -9,9 +9,11 @@ import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; +import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.Base64; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -24,6 +26,12 @@ import com.github.sumimakito.awesomeqr.AwesomeQRCode; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + public class MainActivity extends AppCompatActivity { private final int SELECT_FILE_REQUEST_CODE = 822; @@ -43,6 +51,8 @@ public class MainActivity extends AppCompatActivity { private CheckBox ckbBinarize; private CheckBox ckbRoundedDataDots; private EditText etBinarizeThreshold; + private Bitmap qrBitmap; + private Button btOpen; @Override protected void onCreate(Bundle savedInstanceState) { @@ -62,6 +72,7 @@ protected void onCreate(Bundle savedInstanceState) { btSelectBG = (Button) findViewById(R.id.backgroundImage); btRemoveBackgroundImage = (Button) findViewById(R.id.removeBackgroundImage); btGenerate = (Button) findViewById(R.id.generate); + btOpen = (Button) findViewById(R.id.open); ckbWhiteMargin = (CheckBox) findViewById(R.id.whiteMargin); ckbAutoColor = (CheckBox) findViewById(R.id.autoColor); ckbBinarize = (CheckBox) findViewById(R.id.binarize); @@ -93,6 +104,13 @@ public void onClick(View v) { } }); + btOpen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (qrBitmap != null) saveBitmap(qrBitmap); + } + }); + btRemoveBackgroundImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -196,13 +214,13 @@ private void generate(final String contents, final int size, final int margin, f @Override public void run() { try { - final Bitmap b = AwesomeQRCode.create(contents, size, margin, dotScale, colorDark, + qrBitmap = AwesomeQRCode.create(contents, size, margin, dotScale, colorDark, colorLight, background, whiteMargin, autoColor, binarize, binarizeThreshold, roundedDD); runOnUiThread(new Runnable() { @Override public void run() { - qrCodeImageView.setImageBitmap(b); + qrCodeImageView.setImageBitmap(qrBitmap); scrollView.post(new Runnable() { @Override public void run() { @@ -226,4 +244,31 @@ public void run() { } }).start(); } + + private void saveBitmap(Bitmap bitmap) { + FileOutputStream fos = null; + try { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); + byte[] byteArray = byteArrayOutputStream.toByteArray(); + File outputFile = new File(getPublicContainer(), System.currentTimeMillis() + ".png"); + fos = new FileOutputStream(outputFile); + fos.write(byteArray); + fos.close(); + Toast.makeText(this, "Image saved to " + outputFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); + } catch (Exception e) { + e.printStackTrace(); + Toast.makeText(this, "Failed to save the image.", Toast.LENGTH_LONG).show(); + } + } + + public static File getPublicContainer() { + File musicContainer = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); + File aqr = new File(musicContainer, "AwesomeQR"); + if (aqr.exists() && !aqr.isDirectory()) { + aqr.delete(); + } + aqr.mkdirs(); + return aqr; + } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 468b0eb..049fcab 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -251,6 +251,15 @@ android:layout_centerHorizontal="true" android:text="Generate" /> + +