Refactored biometric libraries into common
Test: atest
Bug: 230514750
Change-Id: I47ad020004ffef9646281611a637e1a5208f5573
diff --git a/biometrics/fingerprint/aidl/default/include/Callable.h b/biometrics/fingerprint/aidl/default/include/Callable.h
deleted file mode 100644
index c629511..0000000
--- a/biometrics/fingerprint/aidl/default/include/Callable.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-#pragma once
-
-namespace aidl::android::hardware::biometrics::fingerprint {
-
-// Interface for representing parameterless functions. Unlike std::function<void()>, this can also
-// represent move-only lambdas.
-class Callable {
- public:
- virtual void operator()() = 0;
- virtual ~Callable() = default;
-
- // Creates a heap-allocated Callable instance from any function object.
- template <typename T>
- static std::unique_ptr<Callable> from(T func);
-
- private:
- template <typename T>
- class AnyFuncWrapper;
-};
-
-// Private helper class for wrapping any function object into a Callable.
-template <typename T>
-class Callable::AnyFuncWrapper : public Callable {
- public:
- explicit AnyFuncWrapper(T func) : mFunc(std::move(func)) {}
-
- void operator()() override { mFunc(); }
-
- private:
- T mFunc;
-};
-
-template <typename T>
-std::unique_ptr<Callable> Callable::from(T func) {
- return std::make_unique<AnyFuncWrapper<T>>(std::move(func));
-}
-
-} // namespace aidl::android::hardware::biometrics::fingerprint
\ No newline at end of file
diff --git a/biometrics/fingerprint/aidl/default/include/CancellationSignal.h b/biometrics/fingerprint/aidl/default/include/CancellationSignal.h
deleted file mode 100644
index 99f2fba..0000000
--- a/biometrics/fingerprint/aidl/default/include/CancellationSignal.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-#pragma once
-
-#include <aidl/android/hardware/biometrics/common/BnCancellationSignal.h>
-#include <aidl/android/hardware/biometrics/fingerprint/ISessionCallback.h>
-#include <functional>
-#include <future>
-
-#include "WorkerThread.h"
-
-namespace aidl::android::hardware::biometrics::fingerprint {
-
-class CancellationSignal : public common::BnCancellationSignal {
- public:
- explicit CancellationSignal(std::promise<void>&& cancellationPromise);
-
- ndk::ScopedAStatus cancel() override;
-
- private:
- std::promise<void> mCancellationPromise;
-};
-
-// Returns whether the given cancellation future is ready, i.e. whether the operation corresponding
-// to this future should be cancelled.
-bool shouldCancel(const std::future<void>& cancellationFuture);
-
-} // namespace aidl::android::hardware::biometrics::fingerprint
diff --git a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h
index 8659b79..eb810da 100644
--- a/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h
+++ b/biometrics/fingerprint/aidl/default/include/FakeFingerprintEngine.h
@@ -15,12 +15,13 @@
*/
#pragma once
-
+#include <aidl/android/hardware/biometrics/common/SensorStrength.h>
#include <aidl/android/hardware/biometrics/fingerprint/ISessionCallback.h>
#include <random>
-#include "CancellationSignal.h"
+#include <future>
+#include <vector>
using namespace ::aidl::android::hardware::biometrics::common;
diff --git a/biometrics/fingerprint/aidl/default/include/Fingerprint.h b/biometrics/fingerprint/aidl/default/include/Fingerprint.h
index 7bd3d6d..20def0c 100644
--- a/biometrics/fingerprint/aidl/default/include/Fingerprint.h
+++ b/biometrics/fingerprint/aidl/default/include/Fingerprint.h
@@ -20,7 +20,7 @@
#include "FakeFingerprintEngine.h"
#include "Session.h"
-#include "WorkerThread.h"
+#include "thread/WorkerThread.h"
namespace aidl::android::hardware::biometrics::fingerprint {
diff --git a/biometrics/fingerprint/aidl/default/include/Session.h b/biometrics/fingerprint/aidl/default/include/Session.h
index acd5def..104d819 100644
--- a/biometrics/fingerprint/aidl/default/include/Session.h
+++ b/biometrics/fingerprint/aidl/default/include/Session.h
@@ -20,7 +20,7 @@
#include <aidl/android/hardware/biometrics/fingerprint/ISessionCallback.h>
#include "FakeFingerprintEngine.h"
-#include "WorkerThread.h"
+#include "thread/WorkerThread.h"
namespace aidl::android::hardware::biometrics::fingerprint {
diff --git a/biometrics/fingerprint/aidl/default/include/WorkerThread.h b/biometrics/fingerprint/aidl/default/include/WorkerThread.h
deleted file mode 100644
index 6fff4f2..0000000
--- a/biometrics/fingerprint/aidl/default/include/WorkerThread.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-#pragma once
-
-#include <mutex>
-#include <optional>
-#include <queue>
-#include <thread>
-
-#include "Callable.h"
-
-namespace aidl::android::hardware::biometrics::fingerprint {
-
-// A class that encapsulates a worker thread and a task queue, and provides a convenient interface
-// for a Session to schedule its tasks for asynchronous execution.
-class WorkerThread final {
- public:
- // Internally creates a queue that cannot exceed maxQueueSize elements and a new thread that
- // polls the queue for tasks until this instance is destructed.
- explicit WorkerThread(size_t maxQueueSize);
-
- // Unblocks the internal queue and calls join on the internal thread allowing it to gracefully
- // exit.
- ~WorkerThread();
-
- // Disallow copying this class.
- WorkerThread(const WorkerThread&) = delete;
- WorkerThread& operator=(const WorkerThread&) = delete;
-
- // Also disable moving this class to simplify implementation.
- WorkerThread(WorkerThread&&) = delete;
- WorkerThread& operator=(WorkerThread&&) = delete;
-
- // If the internal queue is not full, pushes a task at the end of the queue and returns true.
- // Otherwise, returns false. If the queue is busy, blocks until it becomes available.
- // This method expects heap-allocated tasks because it's the simplest way to represent function
- // objects of any type. Stack-allocated std::function could be used instead, but it cannot
- // represent functions with move-only captures because std::function is inherently copyable.
- // Not being able to pass move-only lambdas is a major limitation for the HAL implementation,
- // so heap-allocated tasks that share a common interface (Callable) were chosen instead.
- bool schedule(std::unique_ptr<Callable> task);
-
- private:
- // The function that runs on the internal thread. Sequentially runs the available tasks from
- // the queue. If the queue is empty, waits until a new task is added. If the worker is being
- // destructed, finishes its current task and gracefully exits.
- void threadFunc();
-
- // The maximum size that the queue is allowed to expand to.
- size_t mMaxSize;
-
- // Whether the destructor was called. If true, tells threadFunc to exit as soon as possible, and
- // tells schedule to avoid doing any work.
- std::atomic<bool> mIsDestructing;
-
- // Queue that's guarded by mQueueMutex and mQueueCond.
- std::deque<std::unique_ptr<Callable>> mQueue;
- std::mutex mQueueMutex;
- std::condition_variable mQueueCond;
-
- // The internal thread that works on the tasks from the queue.
- std::thread mThread;
-};
-
-} // namespace aidl::android::hardware::biometrics::fingerprint