package org.awesomeapp.messenger.ui.qr;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.util.Log;
import android.view.Display;
import android.widget.ImageView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.encode.Contents;
import com.google.zxing.encode.QRCodeEncoder;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import im.zom.messenger.R;
public class QrShareAsyncTask extends AsyncTask<String, Void, Bitmap> {
private static final String TAG = "QrGenAsyncTask";
private final Activity activity;
private Bitmap qrBitmap;
private String inviteLink;
private StringBuffer message;
private boolean mShareQRCode = false;
public QrShareAsyncTask(Activity activity) {
this.activity = activity;
}
public void setShareQRCode (boolean shareQRCode)
{
mShareQRCode = shareQRCode;
}
/*
* The method for getting screen dimens changed, so this uses both the
* deprecated one and the 13+ one, and supports all Android versions.
*/
@SuppressWarnings("deprecation")
@TargetApi(13)
@Override
protected Bitmap doInBackground(String... s) {
inviteLink = s[0];
message = new StringBuffer();
if (s.length > 0)
{
message.append(s[1]).append(": ");
}
message.append(inviteLink);
message.append("\n\n");
message.append(activity.getString(R.string.action_tap_invite));
if (mShareQRCode) {
Display display = activity.getWindowManager().getDefaultDisplay();
Point outSize = new Point();
int x, y, qrCodeDimension;
/* lame, got to use both the new and old APIs here */
if (Build.VERSION.SDK_INT >= 13) {
display.getSize(outSize);
x = outSize.x;
y = outSize.y;
} else {
x = display.getWidth();
y = display.getHeight();
}
if (x < y)
qrCodeDimension = x;
else
qrCodeDimension = y;
Log.i(TAG, "generating QRCode Bitmap of " + qrCodeDimension + "x" + qrCodeDimension);
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(inviteLink, null,
Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimension);
try {
qrBitmap = qrCodeEncoder.encodeAsBitmap();
return qrBitmap;
} catch (WriterException e) {
Log.e(TAG, e.getMessage());
}
}
return null;
}
@Override
protected void onPostExecute(Bitmap bmp) {
if (mShareQRCode && bmp != null) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
File file = new File(activity.getCacheDir(), "qr.png");
try {
FileOutputStream fOut = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
file.setReadable(true, false);
Intent intent = new Intent( android.content.Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.putExtra(Intent.EXTRA_TEXT,message.toString());
intent.setType("image/png");
activity.startActivity(intent);
}
catch (Exception e)
{
}
}
else
{
String subject = activity.getString(R.string.app_name_zom) + ' ' + activity.getString(R.string.header_got_invited);
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,message.toString());
intent.putExtra(Intent.EXTRA_SUBJECT,subject);
intent.setType("text/plain");
activity.startActivity(intent);
}
}
}