Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee77cebc authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Persist fingerprint names

Bug: 20469328
Change-Id: I8f4a988687bfb78c36cc7cf187103a9d93ed4535
parent e1d0188b
Loading
Loading
Loading
Loading
+0 −6
Original line number Original line Diff line number Diff line
@@ -4362,12 +4362,6 @@ public final class Settings {
        public static final String LOCK_SCREEN_APPWIDGET_IDS =
        public static final String LOCK_SCREEN_APPWIDGET_IDS =
            "lock_screen_appwidget_ids";
            "lock_screen_appwidget_ids";


        /**
         * List of enrolled fingerprint identifiers (comma-delimited).
         * @hide
         */
        public static final String USER_FINGERPRINT_IDS = "user_fingerprint_ids";

        /**
        /**
         * Id of the appwidget shown on the lock screen when appwidgets are disabled.
         * Id of the appwidget shown on the lock screen when appwidgets are disabled.
         * @hide
         * @hide
+3 −0
Original line number Original line Diff line number Diff line
@@ -1255,6 +1255,9 @@
    <!-- Generic error message shown when the fingerprint hardware can't recognize the fingerprint -->
    <!-- Generic error message shown when the fingerprint hardware can't recognize the fingerprint -->
    <string name="fingerprint_error_unable_to_process">Try again.</string>
    <string name="fingerprint_error_unable_to_process">Try again.</string>


    <!-- Template to be used to name enrolled fingerprints by default. -->
    <string name="fingerprint_name_template">Finger <xliff:g id="fingerId" example="1">%d</xliff:g></string>

    <!-- Array containing custom error messages from vendor.  Vendor is expected to add and translate these strings -->
    <!-- Array containing custom error messages from vendor.  Vendor is expected to add and translate these strings -->
    <string-array name="fingerprint_error_vendor">
    <string-array name="fingerprint_error_vendor">
    </string-array>
    </string-array>
+1 −0
Original line number Original line Diff line number Diff line
@@ -2108,6 +2108,7 @@
  <java-symbol type="array" name="fingerprint_acquired_vendor" />
  <java-symbol type="array" name="fingerprint_acquired_vendor" />
  <java-symbol type="string" name="fingerprint_error_canceled" />
  <java-symbol type="string" name="fingerprint_error_canceled" />
  <java-symbol type="string" name="fingerprint_error_lockout" />
  <java-symbol type="string" name="fingerprint_error_lockout" />
  <java-symbol type="string" name="fingerprint_name_template" />


  <!-- From various Material changes -->
  <!-- From various Material changes -->
  <java-symbol type="attr" name="titleTextAppearance" />
  <java-symbol type="attr" name="titleTextAppearance" />
+2 −10
Original line number Original line Diff line number Diff line
@@ -24,7 +24,6 @@ import android.app.PendingIntent;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
@@ -56,7 +55,6 @@ import com.android.internal.telephony.TelephonyIntents;


import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintUtils;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
@@ -367,14 +365,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                Log.d(TAG, "Fingerprint disabled by DPM for userId: " + userId);
                Log.d(TAG, "Fingerprint disabled by DPM for userId: " + userId);
                return;
                return;
            }
            }
            final ContentResolver res = mContext.getContentResolver();
            if (groupId == userId) {
            final int ids[] = FingerprintUtils.getFingerprintIdsForUser(res, userId);
                onFingerprintAuthenticated(groupId);
            for (int i = 0; i < ids.length; i++) {
                // TODO: fix once HAL supports storing group id
                final boolean isCorrectUser = true || (groupId == userId);
                if (ids[i] == fingerId && isCorrectUser) {
                    onFingerprintAuthenticated(userId);
                }
            }
            }
        } finally {
        } finally {
            setFingerprintRunningDetectionRunning(false);
            setFingerprintRunningDetectionRunning(false);
+10 −28
Original line number Original line Diff line number Diff line
@@ -31,7 +31,6 @@ import android.util.Slog;


import com.android.server.SystemService;
import com.android.server.SystemService;


import android.hardware.fingerprint.FingerprintUtils;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.IFingerprintService;
import android.hardware.fingerprint.IFingerprintService;
@@ -93,6 +92,7 @@ public class FingerprintService extends SystemService {
    private Context mContext;
    private Context mContext;
    private int mHalDeviceId;
    private int mHalDeviceId;
    private int mFailedAttempts;
    private int mFailedAttempts;
    private final FingerprintUtils mFingerprintUtils = FingerprintUtils.getInstance();
    private final Runnable mLockoutReset = new Runnable() {
    private final Runnable mLockoutReset = new Runnable() {
        @Override
        @Override
        public void run() {
        public void run() {
@@ -172,7 +172,6 @@ public class FingerprintService extends SystemService {
     * @return true if the operation is done, i.e. authentication completed
     * @return true if the operation is done, i.e. authentication completed
     */
     */
    boolean dispatchNotify(ClientMonitor clientMonitor, int type, int arg1, int arg2, int arg3) {
    boolean dispatchNotify(ClientMonitor clientMonitor, int type, int arg1, int arg2, int arg3) {
        ContentResolver contentResolver = mContext.getContentResolver();
        boolean operationCompleted = false;
        boolean operationCompleted = false;
        int fpId;
        int fpId;
        int groupId;
        int groupId;
@@ -198,7 +197,7 @@ public class FingerprintService extends SystemService {
                remaining = arg3;
                remaining = arg3;
                operationCompleted = clientMonitor.sendEnrollResult(fpId, groupId, remaining);
                operationCompleted = clientMonitor.sendEnrollResult(fpId, groupId, remaining);
                if (remaining == 0) {
                if (remaining == 0) {
                    addTemplateForUser(clientMonitor, contentResolver, fpId);
                    addTemplateForUser(clientMonitor, fpId);
                    operationCompleted = true; // enroll completed
                    operationCompleted = true; // enroll completed
                }
                }
                break;
                break;
@@ -207,7 +206,7 @@ public class FingerprintService extends SystemService {
                groupId = arg2;
                groupId = arg2;
                operationCompleted = clientMonitor.sendRemoved(fpId, groupId);
                operationCompleted = clientMonitor.sendRemoved(fpId, groupId);
                if (fpId != 0) {
                if (fpId != 0) {
                    removeTemplateForUser(clientMonitor, contentResolver, fpId);
                    removeTemplateForUser(clientMonitor, fpId);
                }
                }
                break;
                break;
        }
        }
@@ -252,16 +251,12 @@ public class FingerprintService extends SystemService {
        return false;
        return false;
    }
    }


    private void removeTemplateForUser(ClientMonitor clientMonitor, ContentResolver contentResolver,
    private void removeTemplateForUser(ClientMonitor clientMonitor, int fingerId) {
            final int fingerId) {
        mFingerprintUtils.removeFingerprintIdForUser(mContext, fingerId, clientMonitor.userId);
        FingerprintUtils.removeFingerprintIdForUser(fingerId, contentResolver,
                clientMonitor.userId);
    }
    }


    private void addTemplateForUser(ClientMonitor clientMonitor, ContentResolver contentResolver,
    private void addTemplateForUser(ClientMonitor clientMonitor, int fingerId) {
            final int fingerId) {
        mFingerprintUtils.addFingerprintForUser(mContext, fingerId, clientMonitor.userId);
        FingerprintUtils.addFingerprintIdForUser(contentResolver, fingerId,
                clientMonitor.userId);
    }
    }


    void startEnrollment(IBinder token, byte[] cryptoToken, int groupId,
    void startEnrollment(IBinder token, byte[] cryptoToken, int groupId,
@@ -345,24 +340,11 @@ public class FingerprintService extends SystemService {
    }
    }


    public List<Fingerprint> getEnrolledFingerprints(int groupId) {
    public List<Fingerprint> getEnrolledFingerprints(int groupId) {
        ContentResolver resolver = mContext.getContentResolver();
        return mFingerprintUtils.getFingerprintsForUser(mContext, groupId);
        int[] ids = FingerprintUtils.getFingerprintIdsForUser(resolver, groupId);
        List<Fingerprint> result = new ArrayList<Fingerprint>();
        for (int i = 0; i < ids.length; i++) {
            // TODO: persist names in Settings
            CharSequence name = "Finger" + ids[i];
            final int group = 0; // TODO
            final int fingerId = ids[i];
            final long deviceId = 0; // TODO
            Fingerprint item = new Fingerprint(name, 0, ids[i], 0);
            result.add(item);
        }
        return result;
    }
    }


    public boolean hasEnrolledFingerprints(int groupId) {
    public boolean hasEnrolledFingerprints(int groupId) {
        ContentResolver resolver = mContext.getContentResolver();
        return mFingerprintUtils.getFingerprintsForUser(mContext, groupId).size() > 0;
        return FingerprintUtils.getFingerprintIdsForUser(resolver, groupId).length > 0;
    }
    }


    void checkPermission(String permission) {
    void checkPermission(String permission) {
@@ -596,7 +578,7 @@ public class FingerprintService extends SystemService {
            mHandler.post(new Runnable() {
            mHandler.post(new Runnable() {
                @Override
                @Override
                public void run() {
                public void run() {
                    Slog.w(TAG, "rename id=" + fingerId + ",gid=" + groupId + ",name=" + name);
                    mFingerprintUtils.renameFingerprintForUser(mContext, fingerId, groupId, name);
                }
                }
            });
            });
        }
        }
Loading