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

Commit f98cfd8c 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

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



Change-Id: I9db9b5e7003b0849b9ad30b02063a120db7a95a5
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents e64433a2 f5c29da4
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);
            }
        }
    }
}