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

Commit 8987f88e authored by Jeff Pu's avatar Jeff Pu Committed by Automerger Merge Worker
Browse files

Merge "Fix the race condition between fingerprint ennrollment sync command and...

Merge "Fix the race condition between fingerprint ennrollment sync command and the internal cleanup operations" into udc-dev am: f5c29da4 am: c8fbce3f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22316962



Change-Id: I847473ef45b4ba65fdf151e60f1485edca9068db
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0a3cd1b3 c8fbce3f
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -82,7 +82,9 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.server.SystemService;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.BiometricStateCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
import com.android.server.biometrics.sensors.LockoutTracker;
@@ -97,7 +99,9 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.function.Supplier;

@@ -1138,12 +1142,28 @@ public class FingerprintService extends SystemService {
        if (Utils.isVirtualEnabled(getContext())) {
            Slog.i(TAG, "Sync virtual enrollments");
            final int userId = ActivityManager.getCurrentUser();
            final CountDownLatch latch = new CountDownLatch(mRegistry.getProviders().size());
            for (ServiceProvider provider : mRegistry.getProviders()) {
                for (FingerprintSensorPropertiesInternal props : provider.getSensorProperties()) {
                    provider.scheduleInternalCleanup(props.sensorId, userId, null /* callback */,
                            true /* favorHalEnrollments */);
                    provider.scheduleInternalCleanup(props.sensorId, userId,
                            new ClientMonitorCallback() {
                                @Override
                                public void onClientFinished(
                                        @NonNull BaseClientMonitor clientMonitor,
                                        boolean success) {
                                    latch.countDown();
                                    if (!success) {
                                        Slog.e(TAG, "Sync virtual enrollments failed");
                                    }
                                }
                            }, true /* favorHalEnrollments */);
                }
            }
            try {
                latch.await(3, TimeUnit.SECONDS);
            } catch (Exception e) {
                Slog.e(TAG, "Failed to wait for sync finishing", e);
            }
        }
    }
}