package com.ofa.offline3fauth; import java.util.ArrayList; import utils.LocalBinaryPattern; import utils.ObjCacher; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; public class AuthFragment extends TabFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View superView = super.onCreateView(inflater, container, savedInstanceState); return superView; } public void onActivityResult(int requestCode, int resultCode, Intent intent) { if(IntentIntegrator.REQUEST_CODE == requestCode && resultCode == Activity.RESULT_OK) { IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); if (scanResult != null && scanResult.getContents()!=null) { // Use qrcode string : scanResult.getContents() ObjCacher.lastQRScanned = scanResult.getContents(); fillImageViewWithQRCode(qrCodeView, scanResult.getContents()); validateAllFactors(); } } if(requestCode == CAMREQ_CODE && resultCode == Activity.RESULT_OK) { Bundle extras = intent.getExtras(); Bitmap picture = (Bitmap) extras.get("data"); ObjCacher.lastFaceBitmapAuth = picture; faceRecView.setImageBitmap(picture); validateAllFactors(); } } @Override protected boolean validateAllFactors() { setLayoutColors(); if (!ObjCacher.hasLastFaceBitmapAuth() || !ObjCacher.hasLastPasswordAuth() || !ObjCacher.hasLastQRScanned()) return false; // Else process ObjCacher.lastFaceBitmap , ObjCacher.lastQRScanned and // ObjCacher.lastPassword System.out.println("Scanned QR Text: " + ObjCacher.lastQRScanned); ArrayList<ArrayList<Integer>> faceDes = getFaceDescriptor(ObjCacher.lastFaceBitmapAuth); ArrayList<ArrayList<Integer>> scannedFaceDes= deProcessFactors(ObjCacher.lastQRScanned, ObjCacher.lastPasswordAuth); System.out.println("Decompressed FaceDescriptor: " + scannedFaceDes); Double distance = LocalBinaryPattern.distance(LocalBinaryPattern.ArrayListToCollection(scannedFaceDes), LocalBinaryPattern.ArrayListToCollection(faceDes)); System.out.println("Distance: " + distance); // 1.0 is arbitrary for now if(distance==0.0) Toast.makeText(getActivity(), "Error in authentication. Try again", Toast.LENGTH_SHORT).show(); else if(distance<1.0) Toast.makeText(getActivity(), "User authenticated. Distance: " + distance, Toast.LENGTH_SHORT).show(); else Toast.makeText(getActivity(), "User not authenticated. Distance " + distance, Toast.LENGTH_SHORT).show(); return true; } @Override protected void setLayoutColors() { if(ObjCacher.hasLastPasswordAuth()) codeLayout.setBackgroundResource(R.drawable.green_color); else codeLayout.setBackgroundResource(R.drawable.red_color); if(ObjCacher.hasLastFaceBitmapAuth()) faceRecLayout.setBackgroundResource(R.drawable.green_color); else faceRecLayout.setBackgroundResource(R.drawable.red_color); if(ObjCacher.hasLastQRScanned()) qrCodeLayout.setBackgroundResource(R.drawable.green_color); else qrCodeLayout.setBackgroundResource(R.drawable.red_color); } @Override protected void displayAcceptedInputs() { if(ObjCacher.hasLastFaceBitmapAuth()) { faceRecView.setImageBitmap(ObjCacher.lastFaceBitmapAuth); } if(ObjCacher.hasLastPasswordAuth()) { codeInput.setText(ObjCacher.lastPasswordAuth); codeInputValidate.setText(ObjCacher.lastPasswordAuth); } if(ObjCacher.hasLastQRScanned()) { fillImageViewWithQRCode(qrCodeView, ObjCacher.lastQRScanned); } } @Override protected void setPassword(String codeIn) { ObjCacher.lastPasswordAuth = codeIn; } }