Merge "Limit number of fingerprint templates that can be enrolled per device user" into mnc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4bc4129..0343a15 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -695,11 +695,11 @@
     <!-- Fingerprint managment category title - configuration options for managing enrolled fingerprints [CHAR LIMIT=22] -->
     <string name="fingerprint_manage_category_title">Manage fingerprints</string>
     <!-- Fingerprint category title - configuration options for managing fingerprint enrollment [CHAR LIMIT=22] -->
-	<string name="fingerprint_usage_category_title">Use fingerprint for</string>
-	<!-- Preference to add another fingerprint -->
-	<string name="fingerprint_add_title">Add fingerprint</string>
-	<!-- switch for allowing fingerprint to be used for keyguard -->
-	<string name="fingerprint_enable_keyguard_toggle_title">screen lock</string>
+    <string name="fingerprint_usage_category_title">Use fingerprint for</string>
+    <!-- Preference to add another fingerprint -->
+    <string name="fingerprint_add_title">Add fingerprint</string>
+    <!-- switch for allowing fingerprint to be used for keyguard -->
+    <string name="fingerprint_enable_keyguard_toggle_title">screen lock</string>
     <!-- message shown for menu item that launches fingerprint settings or enrollment -->
     <plurals name="security_settings_fingerprint_preference_summary">
         <item quantity="one"><xliff:g id="count">%1$d</xliff:g> fingerprint set up</item>
@@ -772,6 +772,9 @@
     <!-- Text shown in fingerprint enroll when we didn't observe progress for a few seconds. [CHAR LIMIT=100] -->
     <string name="security_settings_fingerprint_enroll_lift_touch_again">Lift finger, then touch sensor again</string>
 
+    <!-- Text shown when "Add fingerprint" button is disabled -->
+    <string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
+
     <!-- Title of the preferences category for preference items to control encryption -->
     <string name="crypt_keeper_settings_title">Encryption</string>
 
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
index b87e029..d45f3c2 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
@@ -16,10 +16,18 @@
 
 package com.android.settings.fingerprint;
 
+import android.content.Context;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
+import android.preference.Preference;
 import android.view.View;
+import android.widget.Button;
 
 import com.android.settings.R;
+import com.android.settings.fingerprint.FingerprintSettings.FingerprintPreference;
+
+import java.util.List;
 
 /**
  * Activity which concludes fingerprint enrollment.
@@ -31,7 +39,18 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.fingerprint_enroll_finish);
         setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
-        findViewById(R.id.add_another_button).setOnClickListener(this);
+        Button addButton = (Button) findViewById(R.id.add_another_button);
+
+        FingerprintManager fpm = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
+        int enrolled = fpm.getEnrolledFingerprints().size();
+        int max = getResources().getInteger(
+                com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+        if (enrolled >= max) {
+            /* Don't show "Add" button if too many fingerprints already added */
+            addButton.setVisibility(View.INVISIBLE);
+        } else {
+            addButton.setOnClickListener(this);
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 5cbab66..fce46fa 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -179,6 +179,7 @@
                 switch (msg.what) {
                     case MSG_REFRESH_FINGERPRINT_TEMPLATES:
                         removeFingerprintPreference(msg.arg1);
+                        updateAddPreference();
                     break;
                     case MSG_FINGER_AUTH_SUCCESS:
                         mFingerprintCancel = null;
@@ -330,6 +331,19 @@
             addPreference.setIcon(R.drawable.ic_add_24dp);
             root.addPreference(addPreference);
             addPreference.setOnPreferenceChangeListener(this);
+            updateAddPreference();
+        }
+
+        private void updateAddPreference() {
+            /* Disable preference if too many fingerprints added */
+            final int max = getContext().getResources().getInteger(
+                    com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+            boolean tooMany = mFingerprintManager.getEnrolledFingerprints().size() >= max;
+            CharSequence maxSummary = tooMany ?
+                    getContext().getString(R.string.fingerprint_add_max, max) : "";
+            Preference addPreference = findPreference(KEY_FINGERPRINT_ADD);
+            addPreference.setSummary(maxSummary);
+            addPreference.setEnabled(!tooMany);
         }
 
         private static String genKey(int id) {