Skip to content

Commit

Permalink
Added camera source error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
StephenAkers committed Dec 11, 2018
1 parent 0191696 commit 3a17af3
Show file tree
Hide file tree
Showing 7 changed files with 286 additions and 266 deletions.
77 changes: 40 additions & 37 deletions voiceit2/src/main/java/com/voiceit/voiceit2/FaceEnrollmentView.java
Expand Up @@ -92,46 +92,49 @@ private void startEnrollmentFlow() {
// Try to setup camera source
mCameraSource = Utils.createCameraSource(this, new FaceTrackerFactory(this));
// Try to start camera
Utils.startCameraSource(this, mCameraSource, mPreview);
if(!Utils.startCameraSource(this, mCameraSource, mPreview)){
exitViewWithMessage("voiceit-failure","Error starting camera");
} else {
// Delete enrollments and re-enroll
mVoiceIt2.deleteAllEnrollments(mUserId, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject Response) {
mOverlay.updateDisplayText(getString(R.string.LOOK_INTO_CAM));
// Start tracking faces
FaceTracker.continueDetecting = true;
}

// Delete enrollments and re-enroll
mVoiceIt2.deleteAllEnrollments(mUserId, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject Response) {
mOverlay.updateDisplayText(getString(R.string.LOOK_INTO_CAM));
// Start tracking faces
FaceTracker.continueDetecting = true;
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, final JSONObject errorResponse) {
if (errorResponse != null) {
try {
// Report error to user
mOverlay.updateDisplayText(getString((getResources().getIdentifier(errorResponse.
getString("responseCode"), "string", getPackageName()))));
} catch (JSONException e) {
Log.d(mTAG,"JSON exception : " + e.toString());
}
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithJSON("voiceit-failure", errorResponse);
}
}, 2000);
} else {
Log.e(mTAG, "No response from server");
mOverlay.updateDisplayTextAndLock(getString(R.string.CHECK_INTERNET));
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure","No response from server");
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, final JSONObject errorResponse) {
if (errorResponse != null) {
try {
// Report error to user
mOverlay.updateDisplayText(getString((getResources().getIdentifier(errorResponse.
getString("responseCode"), "string", getPackageName()))));
} catch (JSONException e) {
Log.d(mTAG, "JSON exception : " + e.toString());
}
}, 2000);
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithJSON("voiceit-failure", errorResponse);
}
}, 2000);
} else {
Log.e(mTAG, "No response from server");
mOverlay.updateDisplayTextAndLock(getString(R.string.CHECK_INTERNET));
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "No response from server");
}
}, 2000);
}
}
}
});
});
}
}

/**
Expand Down
Expand Up @@ -101,61 +101,65 @@ private void startIdentificationFlow() {
// Try to setup camera source
mCameraSource = Utils.createCameraSource(this, new FaceTrackerFactory(this));
// Try to start camera
Utils.startCameraSource(this, mCameraSource, mPreview);
if(!Utils.startCameraSource(this, mCameraSource, mPreview)){
exitViewWithMessage("voiceit-failure","Error starting camera");
} else {

mVoiceIt2.getGroup(mGroupId, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, final JSONObject Response) {
try {
// Check If enough users, otherwise return to previous activity
if (Response.getJSONArray("users").length() < mNeededUsers) {
mOverlay.updateDisplayText(getString(R.string.MISU));
// Wait for ~2.5 seconds
mVoiceIt2.getGroup(mGroupId, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, final JSONObject Response) {
try {
// Check If enough users, otherwise return to previous activity
if (Response.getJSONArray("users").length() < mNeededUsers) {
mOverlay.updateDisplayText(getString(R.string.MISU));
// Wait for ~2.5 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "Not enough users in group");
}
}, 2500);
} else {
mOverlay.updateDisplayText(getString(R.string.LOOK_INTO_CAM));
// Start tracking faces
FaceTracker.continueDetecting = true;
}
} catch (JSONException e) {
Log.d(mTAG, "JSON exception : " + e.toString());
}
}

@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, final JSONObject errorResponse) {
if (errorResponse != null) {
try {
// Report error to user
mOverlay.updateDisplayText(getString((getResources().getIdentifier(errorResponse.
getString("responseCode"), "string", getPackageName()))));
} catch (JSONException e) {
Log.d(mTAG, "JSON exception : " + e.toString());
}
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "Not enough users in group");
exitViewWithJSON("voiceit-failure", errorResponse);
}
}, 2500);
}, 2000);
} else {
mOverlay.updateDisplayText(getString(R.string.LOOK_INTO_CAM));
// Start tracking faces
FaceTracker.continueDetecting = true;
}
} catch (JSONException e) {
Log.d(mTAG,"JSON exception : " + e.toString());
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, final JSONObject errorResponse) {
if (errorResponse != null) {
try {
// Report error to user
mOverlay.updateDisplayText(getString((getResources().getIdentifier(errorResponse.
getString("responseCode"), "string", getPackageName()))));
} catch (JSONException e) {
Log.d(mTAG,"JSON exception : " + e.toString());
Log.e(mTAG, "No response from server");
mOverlay.updateDisplayTextAndLock(getString(R.string.CHECK_INTERNET));
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "No response from server");
}
}, 2000);
}
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithJSON("voiceit-failure", errorResponse);
}
}, 2000);
} else {
Log.e(mTAG, "No response from server");
mOverlay.updateDisplayTextAndLock(getString(R.string.CHECK_INTERNET));
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure","No response from server");
}
}, 2000);
}
}
});
});
}
}

/**
Expand Down
Expand Up @@ -100,61 +100,64 @@ private void startVerificationFlow() {
// Try to setup camera source
mCameraSource = Utils.createCameraSource(this, new FaceTrackerFactory(this));
// Try to start camera
Utils.startCameraSource(this, mCameraSource, mPreview);
if(!Utils.startCameraSource(this, mCameraSource, mPreview)){
exitViewWithMessage("voiceit-failure","Error starting camera");
} else {
mVoiceIt2.getAllFaceEnrollments(mUserId, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, final JSONObject Response) {
try {
// Check If enough enrollments, otherwise return to previous activity
if (Response.getInt("count") < mNeededEnrollments) {
mOverlay.updateDisplayText(getString(R.string.NOT_ENOUGH_ENROLLMENTS));
// Wait for ~2.5 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "Not enough enrollments");
}
}, 2500);
} else {
mOverlay.updateDisplayText(getString(R.string.LOOK_INTO_CAM));
// Start tracking faces
FaceTracker.continueDetecting = true;
}
} catch (JSONException e) {
Log.d(mTAG, "JSON exception : " + e.toString());
}
}

mVoiceIt2.getAllFaceEnrollments(mUserId, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, final JSONObject Response) {
try {
// Check If enough enrollments, otherwise return to previous activity
if (Response.getInt("count") < mNeededEnrollments) {
mOverlay.updateDisplayText(getString(R.string.NOT_ENOUGH_ENROLLMENTS));
// Wait for ~2.5 seconds
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, final JSONObject errorResponse) {
if (errorResponse != null) {
try {
// Report error to user
mOverlay.updateDisplayText(getString((getResources().getIdentifier(errorResponse.
getString("responseCode"), "string", getPackageName()))));
} catch (JSONException e) {
Log.d(mTAG, "JSON exception : " + e.toString());
}
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "Not enough enrollments");
exitViewWithJSON("voiceit-failure", errorResponse);
}
}, 2500);
}, 2000);
} else {
mOverlay.updateDisplayText(getString(R.string.LOOK_INTO_CAM));
// Start tracking faces
FaceTracker.continueDetecting = true;
}
} catch (JSONException e) {
Log.d(mTAG,"JSON exception : " + e.toString());
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, final JSONObject errorResponse) {
if (errorResponse != null) {
try {
// Report error to user
mOverlay.updateDisplayText(getString((getResources().getIdentifier(errorResponse.
getString("responseCode"), "string", getPackageName()))));
} catch (JSONException e) {
Log.d(mTAG,"JSON exception : " + e.toString());
Log.e(mTAG, "No response from server");
mOverlay.updateDisplayTextAndLock(getString(R.string.CHECK_INTERNET));
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure", "No response from server");
}
}, 2000);
}
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithJSON("voiceit-failure", errorResponse);
}
}, 2000);
} else {
Log.e(mTAG, "No response from server");
mOverlay.updateDisplayTextAndLock(getString(R.string.CHECK_INTERNET));
// Wait for 2.0 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exitViewWithMessage("voiceit-failure","No response from server");
}
}, 2000);
}
}
});
});
}
}

/**
Expand Down
9 changes: 5 additions & 4 deletions voiceit2/src/main/java/com/voiceit/voiceit2/Utils.java
Expand Up @@ -54,7 +54,7 @@ static void startMediaRecorder(MediaRecorder mediaRecorder, File audioFile) {
try {
mediaRecorder.prepare();
} catch (IOException e) {
Log.e(mTAG, "mMediaRecorder prepare failed");
Log.e(mTAG, "MediaRecorder prepare failed");
}
mediaRecorder.start();
}
Expand All @@ -79,9 +79,9 @@ static int lockOrientationCode(int code) {
* (e.g., because onResume was called before the camera source was created), this will be called
* again when the camera source is created.
*/
static void startCameraSource(Activity activity, CameraSource cameraSource, CameraSourcePreview preview) {
static boolean startCameraSource(Activity activity, CameraSource cameraSource, CameraSourcePreview preview) {

// check that the device has play services available.
// Check that the device has play services available.
int code = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity);
if (code != ConnectionResult.SUCCESS) {
final int RC_HANDLE_GMS = 9001;
Expand All @@ -96,9 +96,10 @@ static void startCameraSource(Activity activity, CameraSource cameraSource, Came
} catch (IOException e) {
Log.d(mTAG, "Unable to start camera source.", e);
cameraSource.release();
cameraSource = null;
return false;
}
}
return true;
}

/**
Expand Down

0 comments on commit 3a17af3

Please sign in to comment.