package com.goshenapps.clipboard.QRCodes;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.goshenapps.clipboard.R;
import com.goshenapps.clipboard.Siri.SiriWaveView;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Random;
public class QRDialogFragment extends BottomSheetDialogFragment {
String mString;
RelativeLayout spinner;
ImageView qrview,qrshare;
File fileQR;
Random rand = new Random();
int diceRoll;
public static int WHITE = 0xFFFFFFFF;
public static int BLACK = 0xFF000000;
public final static int WIDTH=150;
public static QRDialogFragment newInstance(String string) {
QRDialogFragment f = new QRDialogFragment();
Bundle args = new Bundle();
args.putString("string", string);
f.setArguments(args);
return f;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mString = getArguments().getString("string");
}
private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
};
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(), R.layout.qr_coder, null);
dialog.setContentView(contentView);
diceRoll = rand.nextInt(1000) + 1;
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
if( behavior != null && behavior instanceof BottomSheetBehavior ) {
((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback);
((BottomSheetBehavior) behavior).setPeekHeight(800);
contentView.requestLayout();
}
spinner = (RelativeLayout)contentView.findViewById(R.id.spinner);
qrview = (ImageView) contentView.findViewById(R.id.qrview);
qrshare = (ImageView) contentView.findViewById(R.id.qr_share);
qrshare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Shared();
}
});
try {
Bitmap bitmap = encodeAsBitmap(mString);
qrview.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
@Override
public void onResume() {
super.onResume();
}
Bitmap encodeAsBitmap(String str) throws WriterException {
BitMatrix result;
try {
result = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, WIDTH, WIDTH, null);
} catch (IllegalArgumentException iae) {
// Unsupported format
return null;
}
int w = result.getWidth();
int h = result.getHeight();
int[] pixels = new int[w * h];
for (int y = 0; y < h; y++) {
int offset = y * w;
for (int x = 0; x < w; x++) {
pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, 150, 0, 0, w, h);
Saved(bitmap);
return bitmap;
}
public void Saved(Bitmap bmp) {
String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
"/clipboard_images";
File dir = new File(file_path);
if (!dir.exists())
dir.mkdirs();
fileQR = new File(dir, "qrcode_" + diceRoll + ".png");
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(fileQR);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
bmp.compress(Bitmap.CompressFormat.PNG, 85, fOut);
scanMedia();
try {
fOut.flush();
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void Shared()
{
File files = new File(fileQR.getAbsolutePath());
Uri uri = Uri.parse("file://"+files.getAbsolutePath());
Intent share = new Intent(Intent.ACTION_SEND);
share.putExtra(Intent.EXTRA_STREAM, uri);
share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.setType("image/*");
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(share, "Share screenshot"));
}
private void scanMedia() {
File file = new File(fileQR.getAbsolutePath());
Uri uri = Uri.fromFile(file);
Intent scanFileIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
getContext().sendBroadcast(scanFileIntent);
snackTime(getString(R.string.snackTextQR));
}
public void snackTime(String string)
{
Snackbar snackbar;
snackbar = Snackbar.make(getView(), ""+string, Snackbar.LENGTH_LONG);
snackbar.getView().setBackgroundColor(Color.parseColor("#2E7D32"));
snackbar.show();
}
}