From 2b2fb5d5496959a43e25e8fc1839dee4df298fc2 Mon Sep 17 00:00:00 2001 From: Nathaniel McCallum Date: Tue, 10 Dec 2013 16:20:51 -0500 Subject: [PATCH] Use multiple techniques to find cameras --- src/org/fedorahosted/freeotp/MainActivity.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/org/fedorahosted/freeotp/MainActivity.java b/src/org/fedorahosted/freeotp/MainActivity.java index f72386d..efcdae3 100644 --- a/src/org/fedorahosted/freeotp/MainActivity.java +++ b/src/org/fedorahosted/freeotp/MainActivity.java @@ -42,6 +42,8 @@ import org.fedorahosted.freeotp.adapters.TokenAdapter; import android.app.Activity; import android.content.pm.PackageManager; import android.database.DataSetObserver; +import android.hardware.Camera; +import android.hardware.Camera.CameraInfo; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; @@ -94,9 +96,19 @@ public class MainActivity extends Activity implements OnMenuItemClickListener { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_add: + // Look for a back-facing camera. + boolean backCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); + + // If the above method doesn't return a camera, try to work around it. + // Some buggy implementations return false above even when there is a camera. + for (int i = Camera.getNumberOfCameras() - 1; i >= 0 && !backCamera; i--) { + CameraInfo ci = new CameraInfo(); + Camera.getCameraInfo(i, ci); + backCamera = ci.facing == CameraInfo.CAMERA_FACING_BACK; + } + // If the device has a camera available, try to scan for QR code - PackageManager pm = getPackageManager(); - if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { + if (backCamera) { new CameraDialogFragment().show(getFragmentManager(), CameraDialogFragment.FRAGMENT_TAG); } else { -- 2.43.2