package com.ofa.offline3fauth;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import utils.ObjCacher;
import utils.QRCodeEncoder;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
public class RegisterFragment extends TabFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View superView = super.onCreateView(inflater, container, savedInstanceState);
qrCodeButton.setVisibility(View.GONE);
return superView;
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode == CAMREQ_CODE && resultCode == Activity.RESULT_OK) {
Bundle extras = intent.getExtras();
Bitmap picture = (Bitmap) extras.get("data");
ObjCacher.lastFaceBitmapReg = picture;
faceRecView.setImageBitmap(picture);
validateAllFactors();
}
}
@Override
protected boolean validateAllFactors() {
setLayoutColors();
if(!ObjCacher.hasLastFaceBitmapReg() || !ObjCacher.hasLastPasswordReg())
return false;
// Else process ObjCacher.lastFaceBitmap , ObjCacher.lastQRScanned and ObjCacher.lastPassword
// and do something with the result
//Generate QRCode and add button to save it
String compressed = generateQRCodeText(ObjCacher.lastFaceBitmapReg, ObjCacher.lastPasswordReg);
Bitmap qrBitmap = null;
try {
if(compressed.length()!=0)
qrBitmap = QRCodeEncoder.encodeAsBitmap(compressed, BarcodeFormat.QR_CODE, 400, 400);
if (qrBitmap != null) {
qrCodeView.setImageBitmap(qrBitmap);
ObjCacher.lastQRCreated = qrBitmap;
}
} catch (WriterException e) {
e.printStackTrace();
}
qrCodeButton.setVisibility(View.VISIBLE);
qrCodeButton.setText(getString(R.string.save));
qrCodeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss", Locale.US);
String qrName = dateFormat.format(new Date());
saveQRCode("/offline3fauth", qrName);
setLayoutColors();
}
});
return true;
}
private void saveQRCode(String directory, String fileName) {
try {
File dir = new File(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ directory);
if (!dir.exists())
dir.mkdirs();
File file = new File(dir, fileName + ".png");
FileOutputStream out = new FileOutputStream(file);
ObjCacher.lastQRCreated.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
Toast.makeText(getActivity(), "QRCode saved to " + file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void setLayoutColors() {
if(ObjCacher.hasLastPasswordReg())
codeLayout.setBackgroundResource(R.drawable.green_color);
else
codeLayout.setBackgroundResource(R.drawable.red_color);
if(ObjCacher.hasLastFaceBitmapReg())
faceRecLayout.setBackgroundResource(R.drawable.green_color);
else
faceRecLayout.setBackgroundResource(R.drawable.red_color);
if(ObjCacher.hasLastQRCreated())
qrCodeLayout.setBackgroundResource(R.drawable.green_color);
else
qrCodeLayout.setBackgroundResource(R.drawable.red_color);
}
@Override
protected void displayAcceptedInputs() {
if(ObjCacher.hasLastFaceBitmapReg()) {
faceRecView.setImageBitmap(ObjCacher.lastFaceBitmapReg);
}
if(ObjCacher.hasLastPasswordReg()) {
codeInput.setText(ObjCacher.lastPasswordReg);
codeInputValidate.setText(ObjCacher.lastPasswordReg);
}
if(ObjCacher.hasLastQRCreated()) {
qrCodeView.setImageBitmap(ObjCacher.lastQRCreated);
}
}
@Override
protected void setPassword(String codeIn) {
ObjCacher.lastPasswordReg = codeIn;
}
}