/** * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.fingerprint; import android.content.Context; import android.hardware.fingerprint.Fingerprint; import android.os.Vibrator; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import java.util.List; /** * Utility class for dealing with fingerprints and fingerprint settings. */ public class FingerprintUtils { private static final long[] FP_ERROR_VIBRATE_PATTERN = new long[] {0, 30, 100, 30}; private static final long[] FP_SUCCESS_VIBRATE_PATTERN = new long[] {0, 30}; private static final Object sInstanceLock = new Object(); private static FingerprintUtils sInstance; @GuardedBy("this") private final SparseArray mUsers = new SparseArray<>(); public static FingerprintUtils getInstance() { synchronized (sInstanceLock) { if (sInstance == null) { sInstance = new FingerprintUtils(); } } return sInstance; } private FingerprintUtils() { } public List getFingerprintsForUser(Context ctx, int userId) { return getStateForUser(ctx, userId).getFingerprints(); } public void addFingerprintForUser(Context ctx, int fingerId, int userId) { getStateForUser(ctx, userId).addFingerprint(fingerId, userId); } public void removeFingerprintIdForUser(Context ctx, int fingerId, int userId) { getStateForUser(ctx, userId).removeFingerprint(fingerId); } public void renameFingerprintForUser(Context ctx, int fingerId, int userId, CharSequence name) { getStateForUser(ctx, userId).renameFingerprint(fingerId, name); } public static void vibrateFingerprintError(Context context) { Vibrator vibrator = context.getSystemService(Vibrator.class); if (vibrator != null) { vibrator.vibrate(FP_ERROR_VIBRATE_PATTERN, -1); } } public static void vibrateFingerprintSuccess(Context context) { Vibrator vibrator = context.getSystemService(Vibrator.class); if (vibrator != null) { vibrator.vibrate(FP_SUCCESS_VIBRATE_PATTERN, -1); } } private FingerprintsUserState getStateForUser(Context ctx, int userId) { synchronized (this) { FingerprintsUserState state = mUsers.get(userId); if (state == null) { state = new FingerprintsUserState(ctx, userId); mUsers.put(userId, state); } return state; } } }