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

Commit ed2ab1cc authored by Jim Miller's avatar Jim Miller
Browse files

Don't use fingerId when creating names

Rather than using the fingerprintId, choose a unique name
to show in Settings for newly added fingerprints.

Fixes bug 22009865

Change-Id: I88a92ef95f132321a373bd88f6e1eecaf368f551
parent b5e3eba1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ public class FingerprintUtils {
    }

    public void addFingerprintForUser(Context ctx, int fingerId, int userId) {
        getStateForUser(ctx, userId).addFingerprint(fingerId);
        getStateForUser(ctx, userId).addFingerprint(fingerId, userId);
    }

    public void removeFingerprintIdForUser(Context ctx, int fingerId, int userId) {
+26 −4
Original line number Diff line number Diff line
@@ -68,9 +68,9 @@ class FingerprintsUserState {
        }
    }

    public void addFingerprint(int fingerId) {
    public void addFingerprint(int fingerId, int groupId) {
        synchronized (this) {
            mFingerprints.add(new Fingerprint(getDefaultFingerprintName(fingerId), 0, fingerId, 0));
            mFingerprints.add(new Fingerprint(getUniqueName(), groupId, fingerId, 0));
            scheduleWriteStateLocked();
        }
    }
@@ -107,8 +107,30 @@ class FingerprintsUserState {
        }
    }

    private String getDefaultFingerprintName(int fingerId) {
        return mCtx.getString(com.android.internal.R.string.fingerprint_name_template, fingerId);
    /**
     * Finds a unique name for the given fingerprint
     * @return unique name
     */
    private String getUniqueName() {
        int guess = 1;
        while (true) {
            // Not the most efficient algorithm in the world, but there shouldn't be more than 10
            String name = mCtx.getString(com.android.internal.R.string.fingerprint_name_template,
                    guess);
            if (isUnique(name)) {
                return name;
            }
            guess++;
        }
    }

    private boolean isUnique(String name) {
        for (Fingerprint fp : mFingerprints) {
            if (fp.getName().equals(name)) {
                return false;
            }
        }
        return true;
    }

    private static File getFileForUser(int userId) {