Merge "Require two samples to enroll an new fingerprint template"
diff --git a/fingerprint/fingerprint.c b/fingerprint/fingerprint.c
index 0c63ff8..8b54c11 100644
--- a/fingerprint/fingerprint.c
+++ b/fingerprint/fingerprint.c
@@ -68,6 +68,7 @@
 typedef struct worker_thread_t {
     pthread_t thread;
     worker_state_t state;
+    int samples_remaining;
     uint64_t secureid[MAX_NUM_FINGERS];
     uint64_t fingerid[MAX_NUM_FINGERS];
     char fp_filename[PATH_MAX];
@@ -340,6 +341,7 @@
 
     pthread_mutex_lock(&dev->lock);
     dev->listener.state = STATE_ENROLL;
+    dev->listener.samples_remaining = 2;
     pthread_mutex_unlock(&dev->lock);
 
     // fingerprint id, authenticator id, and secure_user_id
@@ -621,26 +623,26 @@
         }
     }
     if (idx >= MAX_NUM_FINGERS) {
-        qdev->listener.state = STATE_SCAN;
+        qdev->listener.state = STATE_IDLE;
         pthread_mutex_unlock(&qdev->lock);
         ALOGD("Fingerprint ID table is full");
         return;
     }
-
-    qdev->listener.secureid[idx] = qdev->secure_user_id;
-    qdev->listener.fingerid[idx] = fid;
-    saveFingerprint(&qdev->listener, idx);
-
-    qdev->listener.state = STATE_SCAN;
+    qdev->listener.samples_remaining--;
+    int samples_remaining = qdev->listener.samples_remaining;
+    if (samples_remaining <= 0) {
+        qdev->listener.secureid[idx] = qdev->secure_user_id;
+        qdev->listener.fingerid[idx] = fid;
+        saveFingerprint(&qdev->listener, idx);
+        qdev->listener.state = STATE_IDLE;
+    }
     pthread_mutex_unlock(&qdev->lock);
-
     // LOCKED notification?
     fingerprint_msg_t msg = {0, {0}};
     msg.type = FINGERPRINT_TEMPLATE_ENROLLING;
     msg.data.enroll.finger.fid = fid;
-    msg.data.enroll.samples_remaining = 0;
+    msg.data.enroll.samples_remaining = samples_remaining > 0 ? samples_remaining : 0;
     qdev->device.notify(&msg);
-
     return;
 }